Duck
zur Projektübersicht | |
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 abspielte, 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.
- Schaltplan (PNG)
- Schaltplan (EAGLE 4.x)
- Platinenlayout (EAGLE 4.x)
- Bausatz-Anleitung Rev. 1.0 für Platine Rev 1.0 (englisch)
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.