Duck

From BlinkenArea Wiki
Revision as of 17:45, 7 August 2016 by ArneRossius (talk | contribs)
Jump to: navigation, search
zur Projektübersicht
English Version of this Page
Duck.jpg
Jahr 2015
Anzahl Pixel 34
Graustufen / Farben 8 Graustufen
Leuchtmittel 5-mm-LEDs
Leistungsaufnahme
Kontaktperson Arne Rossius
Projekt-Website

Die Duck (Ente) wurde von der "Ente" der French Embassy auf dem Camp Observe. Hack. Make. 2013 inspiriert. Dort gab es einen großen, mit "Do not press here" beschrifteten Taster, welcher ein Enten-Quaken erzeugte, wenn man ihn drückte.

Diese Version besteht aus 34 LEDs auf einer Platine, welche in Entenform angeordnet sind und verschiedene Animationen abspielen. Der Taster befindet sich in einer Ecke der Platine, das Quaken wird über einen Mini-Lautsprecher auf der Platine wiedergegeben.

Hardware

Die Schaltung wird von einem ATmega8 gesteuert, welcher die LEDs multiplext und bei Bedarf das Quaken abspielt. Der Lautsprecher wird per PWM angesteuert, so dass kein Digital-Analog-Wandler benötigt wird. Die Daten für das Quak-Geräusch belegen ca. drei viertel des Programmspeichers, der Rest wird für den Programmcode und den Animationen verwendet.

Die LEDs sind zu einer herkömmlichen 6x6-Matrix verschaltet, wobei allerdings die letzten zwei LEDs fehlen. Die Spalten sind direkt ohne Vorwiderstände mit den Ausgängen des AVR verbunden, so dass nur der interne Widerstand der AVR-Ausgänge von ca. 25 Ohm den Strom durch die LEDs begrenzt. Die Ausgänge für die Zeilen werden von NPN-Transistoren verstärkt, um Helligkeitsschwankungen zu vermeiden.

Für den Lautsprecher werden zwei PWM-Ausgänge verwendet, wobei der zweite Ausgang das inverse PWM-Verhältnis des ersten ausgibt. Auf diese Weise ist die mittlere Spannung zwischen den Ausgängen doppelt so hoch als wenn nur ein Ausgang verwendet würde, die Lautstärke erhöht sich entsprechend. Um noch mehr Lautstärke zu erreichen werden die beiden PWM-Signale von Gegentaktstufen aus je zwei Transistoren verstärkt, da sonst der Innenwiderstand der AVR-Pins den Strom durch den Lautsprecher sehr begrenzen würde.

Software

Animationen

Die Animationen werden in einer eigenen Pseudo-Sprache aus Assemblermakros geschrieben. Die Datei "animations/ani_list.asm" enthält die Reihenfolge und Wiederholhäufigkeit der Animationen, in den Kommentaren am Anfang der Datei sind zudem die zur Verfügung stehenden Pseudo-Befehle erklärt. Die restlichen Dateien im "animations"-Verzeichnis sind Beispielanimationen. Um ein eigenes Animationsprogramm zu erstellen kann entweder die gesamte Animations-Abfolge in die Datei "ani_list.asm" geschrieben werden, oder mehrere Animationen können als asm-Dateien gespeichert und dann mit der ".include"-Direktive in "ani_list.asm" eingebunden werden.

Audio

Das auf Tastendruck abzuspielende Geräusch wird als Liste aus nicht vorzeichenbehafteten 8-Bit-Werten gespeichert, d.h. der Wert 128 (0x80) entspricht der Nulllinie (Stille). Der Wert 0 darf nicht in den Daten vorkommen, da er zur Erkennung des Endes verwendet wird. Der nutzbare Datenbereich ist daher 1 bis 255 (128±127). Der AVR wird mit 8 MHz getaktet und verwendet eine 8-Bit-PWM zur Erzeugung des Audiosignals, woraus sich eine Abtastrate von 31.25 kHz ergibt.

Um das Quaken der Ente durch eine anderes Geräusch zu ersetzen muss dieses zunächst in das beschriene Format gebracht werden (8 Bit, kein Vorzeichen, 31.25 kHz Abtastrate), was z.B. mit dem Programm Audacity möglich ist. Mit dem selben Programm kann man auch eventuelle Stille vor und nach der Aufnahme entfernen, da nur sehr begrenzt Speicher für die Audiodaten bereitsteht. Das Programm belegt zusammen mit den Beispiel-Animationen gut 1 KiB im Programmspeicher des ATmega8. Für die Audiodaten verbleiben also knapp 7 KiB, das entspricht einer Länge von ca. 227 ms. Nachdem die Audiodaten mit Audacity export wurden, können Sie mit dem Perlscript im Verzeichnis "audio" in eine Assemblerdatei konvertiert werden, die dann nur noch in das Hauptprogramm "duck.asm" eingebunden werden muss (Zeile unter der Sprungmarke "audio:").

Fotos

Mehr Fotos unter http://arne.blinkenarea.org/Duck/gallery.htm.