Visualisierte Gesichtsmaske

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

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

Abb. 1: Funktionaler Systementwurf


Komponentenspezifikation

Für die Umsetzung dieses Projektes ist folgende Hardware mit genannten Spezifikationen notwendig:

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.

Fritzing Skizze


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.

Umsetzung Software

Zur Umsetzung des Projektes als Software, wurde das Programm in der Arduino IDE geschrieben.
Dazu wurden die folgenden Bibliotheken verwendet:

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. Anschließend wird über die Library, welche den Code zur Ansteuerung der WS2812B Matrix enthält, die Matrix auf der LED-Matrix dargestellt.

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/Integrationstest

Um den Softwarecode zu testen wurde eine Komponententest durchgeführt.
Der Komponententest des Arduinos deckt den Integrationstest ab, da nur eine Komponente existiert.
Nachfolgend das Ergebnis des Komponententests:

Ergebnis

Zusammenfassung

Lessons Learned

Projektunterlagen

Projektplan

Projektdurchführung

YouTube Video

Weblinks

Literatur

  1. Ulrich Schneider (2020) Wiki-Vorlage: [1] Letzter Aufruf: 15.10.2020.

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)