„Es liegt am Strand und redet unverständliches Zeug?
Eine Nuschel!“
Dieser kleine Witz hat mich am Ende dazu bewogen ein Projekt mit einem Arduino aufzubauen. Die Kinder haben jede Menge Spaß damit nur nicht meine Frau, die kann es nicht mehr sehen und hören, da ich viele Stunden damit verbracht habe der Muschel das Sprechen beizubringen.
Am Anfang stand das Audio-Shield von ELV. (Link zum Audio-Shield)
Das Audio-Shield ASA1 kann WAVE und MP3 Dateien von einer Micro SD Karte abspielen. Eine Library für die Arduino IDE gibt’s gratis dazu. Das Shield kostet 19,95€.
Eine weitere Alternative könnte das Audioshield JQ650-28P sein, welches es bei Ebay für ca. 7€ gibt. Ich habe es mitlerweile vorliegen und es scheint wesentlich weniger resourcenhungrig zu sein als das ELV Shield. Der Funktionsumfang ist ähnlich, obwohl viel weniger Arduino Pins beschaltet werden müssen. Es bleiben also mehr Möglichkeiten für das Projekt.
Konzept
Das Ganze sollte wie eine Art Jahrmarkt Attraktion ausgeführt sein, die sich mit dem Einwurf einer Münze aktivieren lässt. Die Muschel sollte dabei in einer geschlossenen Box „wohnen“ und beim Einwurf einer Münze wird der Deckel geöffnet während eine magische Melodie spielt und dann spricht die Muschel eine von momentan noch 30 lustigen Lebensweisheiten (wird noch erweitert!).
Ausführung der Mechanik
Die passende Holzkiste wurde schnell auf Ebay.de gefunden. Darin wurden alle Halterungen untergebracht, welche zur Befestigung der Baugruppen benötigt werden.
Der Aufbau des Münzeinwurfes ist recht einfach. Mir ging es nur darum dass es in etwa wie bei einem Spielautomaten ist. Eine genaue Münzerfassung findet hier nicht statt. es wird lediglich ein kleiner Hebel bewegt welcher einen Mikroschalter betätigt. Es funktioniert mit 1€, 2€ und 50Cent Stücken oder, wie die Kinder schnell herausgefunden haben, auch mit einem Löffel, Lineal oder ähnlich flachen Gegenstand.
Die für die Mechanik verwendeten Servos sind standard Modellbau Servos von Futaba. Diese haben ausreichen Drehmoment und sind auch schnell genug was vor allem beim Sprechen der Muschel wichtig ist. Ich finde aber, dass sie ziemlich laut sind. Da besteht noch Optimierungspotential. Fals jemand einen Tip hat, immer her damit solange es sich im Kostenrahmen bewegt.
Ausführung Elektronik
Beim Einwerfen der Münze schließt der Mikroschalter und überbrückt einen Transistor welcher sonst ein Relais betätigt (siehe Schaltplan!). Das Relais schließt, der Arduino wird mit Strom versorgt und liefert, wenn das Programm läuft, an einem Digitalausgang ein High Signal. Damit wird der Transistor durchgeschaltet und die Schaltung hält sich selbst nachdem der Kontakt am Münzschalter wieder öffnet und versorgt sich weiterhin mit Strom. Diese Anordnung lässt sich sehr gut über die Software wieder ausschalten. Somit geht die sprechende Muschel nach Ablauf Sequenz selbstständig und vollständig aus.
Ich habe zwei verschiedene Arduinos probiert und musste feststellen, dass das Programm auf dem originalen Arduino gefühlt sofort startet. Ein Arduino Clone verhält sich da unvorteilhafter. Der Mikroschalter zum Starten muss sehr lange betätigt werden, bevor das Programm startet. Es funktionierte nicht einfach eine Münze einzuwerfen. Kann sein, dass das mit dem Bootloader zusammenhängt, keine Ahnung.
Ein weiterer Digitalausgang steuert über einen weiteren Transistor ein zweites Relais. Dieses wird zeitverzögert eingeschaltet und versorgt die Servos mit Strom, da sich gezeigt hat, dass diese unkontrolliert verfahren solange sie kein Positionssignal vom Arduino bekommen. Somit lässt sich sehr gut das unkontrollierte Zucken der Servos verhindern.
Schaltplan
(Auf das Bild klicken um zum PDF zu kommen!)
Eingangsbeschaltung für ADC:
Der analoge Eingang kann Spannungen von 0 – 5V messen. Das Audiosignal eines Lautsprecherausgangs bewegt sich aber von -x Volt bis +x Volt abhängig von der Ausgangsspannung des Verstärkers. Um den negativen Anteil des Audiosignals zu entfernen wird die Eingangsspannung mit einem Spannungsteiler um 2,5V angehoben. Nun swingt das Eingangssignal um den Wert von 2,5V.
Im Falle der Endstufe des ELV Audio-Shield verhält es sich etwas anders. Hier ist ein symmetrischer Ausgang. Das heißt, es befindet sich auf jeder Lautsprecherleitung ein zur anderen Leitung inverses Signal. Auf dem Oszilloskop sieht das folgendermaßen aus.

Audiosignal vom Verstärkerausgang (nur eine Lautsprecherleitung!)
Hier kann man sehr schön sehen, dass das Audiosignal ca. 2V beträgt und bereits um 2,5V in den positiven Bereich verschoben ist. Somit hätte ich mir die zusätzliche Eingangsbeschaltung sparen können, naja.
Ein Versuch mit einem Operationsverstärker erbrachte folgende Signal.

zusätzlicher Operationsverstärker

Audiosignal mit zusätzlichem Operationsverstärker (nur eine Lautsprecherleitung!)
Wenn man die Verstärkung vergrößert stellt sich das ganze so dar:

höher verstärktes Audiosignal (nur eine Lautsprecherleitung!)
Hier sieht man sehr schön, dass die maximale Ausgangsspannung 5V beträgt. Das ist leicht zu erklären, da der Operationsverstärker mit 5V betrieben wird.
Einen Vorteil bei der Auswertung des Audiosignals mit dem Arduino konnte ich nicht wirklich feststellen. Daher habe ich mich entschieden den Operationsverstärker weg zu lassen.
In der Software wird der analoge Eingang 12 mal eingelesen. Ist der Wert höher als der zuletzt eingelesene Wert wird dieser Wert angenommen. Wenn die 12 Messungen beendet sind wird das Ergebnis auf die Winkelposition des Servos gemappt. Jetzt „spricht“ die Muschel.