Visualisierte Gesichtsmaske: Unterschied zwischen den Versionen
Zeile 82: | Zeile 82: | ||
* Adafruit NeoMatrix | * Adafruit NeoMatrix | ||
* gamma.h | * gamma.h | ||
Die Umsetzung erfolgt so, dass das Mikrofon ein Pegel als Analogwert aufnimmt. Dieser Pegel wird in eine Lautstärke umgewandelt. Anhand von Abzweigungen mit der Bedingung zu der Lautstärke lassen sich somit verschiedene Mundbewegungen darstellen. Die einzelnen Mundbewegungen sind in einer Matrix abgelegt, die entsprechend der Abzweigung verwendet werden. Für das lächeln auf der Matrix wird ein hoher Lautstärkepegel verwendet, der zum Beispiel mit einem schnalzen der Zunge ausgelöst wird. | |||
Nachfolgend einige Passagen des Softwarecodes: | Nachfolgend einige Passagen des Softwarecodes: |
Version vom 29. Dezember 2020, 11:49 Uhr
Autoren: Thomas Miska & Timo Schmidt
Betreuer: Prof. Göbel
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)
Einleitung
Diese Artikel entsteht im Zusammenhang des Angewandte Elektrotechnik Praktikums des Studiengangs Business and Systems Engineering. Ziel des Praktikums ist es ein Mechatronisches Projekt zu planen, entwickeln und durchzuführen. Das Praktikum beinhaltet folgende drei Disziplinen:
- Physik
- Elektrotechnik
- Systemtheorie
Aufgrund des COVID-19 Virus, sind die sozialen Kontakte eingeschränkt und die Menschen sind im öffentlichen Bereich mit Masken verdeckt. In der menschlichen Kommunikation sind gerade Gesichtszüge wichtig. Daher wird eine Gesichtsmaske mit einer LED-Matrix erweitert, die auf einer einfachen Visuellen Basis, diese Einschränkung ein wenig aufhebt. Die LED-Matrix wird ein sprechenden Mund abbilden, der über ein Mikrofon gesteuert wird.
Dieser Artikel wurde anhand der Wiki-Vorlage von Prof. Dr.-Ing. Ulrich Schneider erstellt [1].
Anforderungen
Die Maske sollte folgende wesentliche Anforderungen erfüllen:
- Standard Gesichtsmaske mit einem Fach für die Elektronik herstellen
- Ansteuerung der LED Matrix (sprechender Mund)
- Erfassung der Mikrofondaten
- Erstellung des Algorithmus zur einfachen Visuellen Darstellung der Spracheingabe.
Weitere Anforderungen:
- Echtzeitanforderung: Die Darstellung darf nicht merklich verzögert werden.
- Platzbedarf: Das System muss in die Maske passen
- Gewicht: Die Maske darf nicht zu schwer werden.
- Energiebedarf: Die Maske muss unter den Bedingungen Gewicht und Platzbedarf eine ausreichende Energieversorgung haben.
Funktionaler Systementwurf/Technischer Systementwurf
Komponentenspezifikation
Für die Umsetzung dieses Projektes ist folgende Hardware mit genannten Spezifikationen notwendig:
- 5 V Powerbank
- Die Powerbank sollte mindestens 5000 mAh haben, damit eine ausreichende Laufzeit gewährleistet werden kann.
- USB Typ A Stecker auf Mini USB
- Leitungslänge muss mindestens 1 m beträgen
- div. Leitungen min. 0,14 mm²
- Die Leitungen müssen in drei Farben vorrätig sein mit einer jeweiligen Länge von 2 m. Durch die verschiedenen Farben kann einer Verpolung vorbeugen.
- Mikrocontroller
- Arduino Nano, ohne angelötete Headerpins
- LED-Matrix
- 8x8 Pixel, WS2812B Led's
- 330 Ω Widerstand
- Mindestandforderung: Kohleschichtwiderstand, 250 mW, 5% Toleranz
- Mikrofon
- Iduino 1485297
Umsetzung Hardware
Für den Aufbau der Elektronik in der Maske ist die nachfolgende fritzing Skizze genutzt worden.
Der Arduino wird über ein Mini-USB Stecker mit Spannung versorgt.
Die Spannungsversorgung der LED-Matrix erfolgt über den Vin-Pin des Arduinos. Hier liegt die Spannung an, die über die USB-Buchse des Arduinos angeschlossen wird. Der Input der LED-Matrix wird mit dem digitalen I/O 6 des Arduino verbunden. Bei der Auswahl des I/Os ist zu beachten, dass dieser ein PWM-Pin ist. In die Signalleitung wird noch ein 330 Ω Widerstand eingelötet um den Stromfluss zu begrenzen und den Chip auf den LEDs zu schützen.
Das Mikrofon erhält seine Spannungsversorgung über den 5 V Pin des Arduinos. Die Signalleitung des Mikrofons wird am Eingang A0 abgefragt.
Um eine möglichst geringe Baugröße zu erreichen wird auf die Verwendung einer Platine verzichtet. Die LED-Matrix wird direkt an den Arduino gelötet. Auch der Widerstand wird direkt in die Leitung eingelötet. Dadurch entsteht eine kompakte Bauweise.
In der nachfolgenden Abbildung ist der Aufbau der Maske von hinten (links) und vorne (rechts) dargestellt. In dem grünen Schrumpfschlauch verbirgt sich der 330 Ω Widerstand, der Datenleitung. Die 5 V sind mit einer roten Ader vom Arduino zur Matrix geführt. Die Masse (GND) wird mit einer schwarzen Leitung verbunden.
Das Mikrofon wird über Adern angeschlossen die an einer Seite an den Arduino gelötet werden und an der andren eine Dupont-Busche auf gecrimpt haben. So kann das Mikrofon an und abgesteckt werden.
Der Akku wird mit einem USB Kabel mit der Maske verbunden, so kann dieser bequem in der Hosentasche verstaut werden.
-
Ansicht des Aufbaus von hinten
-
Ansicht des Aufbaus von vorne
Umsetzung Software
Zur Umsetzung des Projektes als Software, wurde das Programm in der Arduino IDE geschrieben.
Dazu wurden die folgenden Bibliotheken verwendet:
- Adafruit Neopixel
- Adafruit NeoMatrix
- gamma.h
Die Umsetzung erfolgt so, dass das Mikrofon ein Pegel als Analogwert aufnimmt. Dieser Pegel wird in eine Lautstärke umgewandelt. Anhand von Abzweigungen mit der Bedingung zu der Lautstärke lassen sich somit verschiedene Mundbewegungen darstellen. Die einzelnen Mundbewegungen sind in einer Matrix abgelegt, die entsprechend der Abzweigung verwendet werden. Für das lächeln auf der Matrix wird ein hoher Lautstärkepegel verwendet, der zum Beispiel mit einem schnalzen der Zunge ausgelöst wird.
Nachfolgend einige Passagen des Softwarecodes:
Header:
//////////////////////////////////////////////////////////////////////////// // // Project : Visualisierte Gesichtsmaske // File : Facemask // Description : Ansteuerung der LED Matrix (WS2812) über ein Mikrofon an // einem Arduino Nano. Ansteuerung erfolgt als sprechender // Mund in Abhängigkeit des Volumenpegels der über das Mikro // kommt // // Created On: 19/10/2020 // Source: https://create.arduino.cc/projecthub/DKARDU/how-to-make-led-face-mask-a3c897 // Edited By: Thomas Miska, Timo Schmidt ////////////////////////////////////////////////////////////////////////////
Verwendete Bibliotheken
// Libraries #include <Adafruit_NeoPixel.h> #include <Adafruit_NeoMatrix.h> #include <gamma.h>
Beispiel einer Matrix
const PROGMEM uint8_t mouth_0[8][8] = { {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {6,6,6,6,6,6,6,6}, {6,6,6,6,6,6,6,6}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0} };
Matrix ausgeben
void drawImage(short image_addr){ for(int x = 0; x<8; x++){ for(int y = 0; y<8; y++){ uint8_t index = pgm_read_byte(image_addr+x+y*8); matrix.drawPixel(x, y, palette[index]); } } // LED Matrix ausgeben matrix.show(); }
Algorithmus für die Visualisierung des sprechenden Mundes auf der LED Matrix
if(millis() > smiletimer) smiling = false; if(smiling){ drawImage(mouth_smile); } else if(vol < 180){ drawImage(mouth_0); } else if(vol < 187){ drawImage(mouth_1); } else if(vol < 193){ drawImage(mouth_2); } else if(vol < 207){ drawImage(mouth_3); } else { drawImage(mouth_4); }
Eine Umsetzung in Simulink wurde vergebens Versucht. Die Abhängigkeiten zu den Adafruit Bibliotheken haben Probleme bereitet, sodass auch eine Verwendung in einer S-Function aus zeitlichen Gründen weiter nicht möglich war. Die S-Function Umsetzung verlief auch in Kompilierfehler.
Komponententest
Ergebnis
Zusammenfassung
Lessons Learned
Projektunterlagen
Projektplan
Projektdurchführung
YouTube Video
Weblinks
Literatur
Referenzfehler: Das in <references>
definierte <ref>
-Tag mit dem Namen „Projekt Vorlage“ wird im vorausgehenden Text nicht verwendet.
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)