Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Animieren Sie einen Billy Bass Mouth mit einer beliebigen Audioquelle

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Adafruit Motor/Stepper/Servo Shield für Arduino v2 Kit – v2 .3
× 1
Amazon Alexa Echo Dot
× 1

Über dieses Projekt

Vor ungefähr einem Monat veröffentlichte ein Künstler namens Brian Kane ein virales Video, das eine Big Mouth Billy Bass-Neuheit zeigt, der Fisch singt, der anscheinend von Amazons virtuellem Assistenten Alexa geäußert wurde. Das Internet war verrückt danach, und ich auch - aber hauptsächlich wollte ich nur wissen, wie es funktioniert, damit ich mein eigenes machen konnte.

Nachdem ich eine Reihe von Raspberry Pi-Projekten gesehen hatte, die Alexa nutzten, nahm ich zunächst an, dass Brian ein Alexa-betriebenes Pi-Projekt erstellt hatte, das gleichzeitig als Mittel diente, um die vorhandene Billy Bass-Hardware zu animieren – und das kann der Fall sein. Diese Idee habe ich sogar in meiner wöchentlichen YouTube-Show Maker Update vorgestellt.

Aber nachdem ich etwas mehr darüber nachgedacht hatte, dachte ich, dass der einfachste Hack eine Möglichkeit wäre, einfach das Audio eines Amazon Echo im Wert von 49 US-Dollar zu verwenden und es über einen Arduino zu verarbeiten, um vorhandene Motoren anzutreiben.

Ich hatte bereits ein Arduino und ein Motorschild zur Hand (obwohl dies mein erstes Mal war, dass ich das Schild benutzte).

Als nächstes bestellte ich den bei Amazon verwendeten Billy Bass für etwa 15 US-Dollar. Ich bin sicher, Sie können einen gebrauchten bei einem Flohmarkt oder in einem Secondhand-Laden für weniger Geld abholen, aber ich wollte schnell einen. Ich habe den Echo Dot auch neu bestellt.

Nachdem ich diese bestellt hatte, ging ich zur Recherche über. Zwei Tutorials gaben mir Hoffnung:diese Anleitung von sfool aus dem Jahr 2012 über die Verwendung eines Arduino, um einen Servoantrieb zum Klingen zu bringen, und diese Anleitung von Dotten aus dem Jahr 2013 zum Verständnis der Animatronik eines Billy Bass-Spielzeugs.

Zu verstehen, dass der Billy Bass (ähnlich wie ein Furby) im Wesentlichen von zwei billigen 5-V-DC-Spielzeugmotoren angetrieben wird - das Problem besteht dann einfach darin, wie man diese Motoren als Reaktion auf Geräusche zucken lässt. Mit ein wenig Versuch und Irrtum habe ich eine praktikable Lösung gefunden. Der Code ist alles andere als perfekt und es gibt viele andere Funktionen, die ich einbauen möchte, aber ich wollte dies auf den Weg bringen, damit jeder helfen kann, dies zu verbessern.

Erforderliche Materialien

  • Big Mouth Billy Bass Singing Fish (1)
  • Arduino Uno (1)
  • Arduino Uno Netzteil (1)
  • Adafruit Motor Shield v2 (1)
  • Minibuchse für Schalttafeleinbau (1)
  • Gestrandetes Anschlusskabel (mehrere Farben helfen)
  • Amazon Echo Dot (obwohl jede Audioquelle funktionieren sollte) (1)
  • Kleiner wiederaufladbarer Lautsprecher (1)
  • Minibuchse (⅛”) Audiokabel (1)
  • Miniklinken-Splitter-Kabeladapter (1)

Erforderliche Tools

  • Kleiner Schraubendreher
  • Lötkolben und Lot
  • Abisolierzangen
  • Schnipsel
  • Bohrer und Bits

Schritt 1:Bereiten Sie den Fisch vor

Im Guten wie im Schlechten war der gebrauchte Fisch bei der Ankunft tot. Zumindest zögerte ich nicht, es zu öffnen und zu hacken. Für meinen Hack einfach die Schrauben auf der Rückseite lösen, aufklappen und mit leichtem Druck die Kabelbäume lösen, damit die Rückseite komplett abgenommen werden kann.

Um mehr Platz für die Elektronik zu schaffen, werden die Billy Bass-Platine und der Piezo-Summer hinzugefügt, abgeschraubt und entfernt.

Was Sie übrig haben, ist ein 4-Draht-Kabelbaum, der aus dem Fisch herausragt. Dazu gehören zwei Drähte, die das Maul animieren (Sie können sehen, wie sie in den Fisch wandern) und zwei Drähte, die entweder den Kopf oder den Schwanz anheben, je nachdem, in welche Richtung Sie den Motor laufen lassen.

Der letzte Schritt bei der Zubereitung des Fisches besteht darin, vier gleich lange verschiedenfarbige Drähte abzuschneiden, die Spitzen freizulegen und zu verzinnen und die Enden in jede der vier Buchsen im Kabelbaum einzuführen. Im nächsten Schritt verbinden wir diese mit dem Arduino-Motorschild.

Schritt 2:Bereiten Sie die Motorabschirmung vor

Es gibt nur 4 Verbindungen, die Sie zum Motorschild herstellen müssen, und nur zwei davon sind gelötet. Sie können auch zwei zusätzliche Drähte anschließen, wenn Sie mit dem Heck- / Kopfmotor experimentieren möchten.

Beginnen wir mit dem Löten, um es hinter sich zu bringen. Um einen Audioeingang für Ihren Fisch zu erstellen, nehmen Sie zwei gleich lange Drähte unterschiedlicher Farbe, isolieren Sie die Enden und löten Sie einen an Masse und einen an Analog 0. Schneiden Sie alle überschüssigen Drähte ab, die durch die Platine laufen.

Lassen Sie uns nun diese Drähte zu der Minibuchse für die Panelmontage für unseren Audioeingang führen. Die Buchse, die ich hatte, war eine dieser schicken Mono-Switch-Buchsen mit drei möglichen Anschlüssen. Wichtig ist nur, dass Sie einen Mono-Eingang erstellen, indem Sie das Kabel von Analog 0 zum Kabel an der Buchse führen, das die Spitze des Audiosteckers berührt. Führen Sie dann das Erdungskabel zu einer Leitung an der Buchse, die Kontakt mit der Basis (oder Hülse) des Audioanschlusses hat.

Um als nächstes den (die) Fischmotor(e) an die Abschirmung anzuschließen, führen Sie das zum Fischmaulmotor führende Kabelpaar (schwarz und orange) in die Klemmenblöcke für Motor 1 und schrauben Sie sie fest. Optional können Sie die Heck- / Kopfmotorkabel (weiß und rot) zu den Klemmen für Motor 2 führen, obwohl der Code mit diesem Motor noch nichts macht (mehr dazu im nächsten Abschnitt). Bei meinem Fisch ist die Kabelfarbe an den Klemmenblöcken schwarz, orange (in meinem Fall gelb) für den Maulmotor (M1) und weiß, rot für den optionalen Schwanzmotor (M2).

Überprüfen Sie abschließend, ob die Überbrückungshülse der Motorabschirmung an den Pins mit der Bezeichnung VIN Jumper angebracht ist. Ich habe das anfangs übersehen und mir den Kopf gekratzt, weil ich mich gefragt habe, warum sich der Schild nicht einschalten würde. Sie sollten jetzt in der Lage sein, das Schild auf das Arduino Uno zu legen, das Arduino einzuschalten und eine LED-Anzeige der Stromversorgung auf dem Schild zu sehen. Wenn das Schild nicht aufleuchtet, würde ich den Jumper überprüfen.

Schritt 3:Laden Sie den Code

Der Code ist also ein unordentlicher Hack, der Elemente der DC-Motortest-Skizze (im Wesentlichen die Demo für das Motorschild) und der Sound-to-Servo-Skizze von Cenk Özdemir (2012) zusammenführt, die in dem Arduino Sound to Servo Tutorial enthalten sind, mit dem ich verlinkt habe Oben.

Der Code in seinem aktuellen Zustand animiert den Kopf-/Heckmotor noch nicht. Ich hatte eine Version, die das tat, aber sie verlangsamte die Reaktionsfähigkeit der Mundbewegung. Idealerweise möchte ich, dass der Mund reaktionsschnell bleibt, während Kopf und Schwanz langsam ihre eigene Animation durchlaufen, aber dies ist die derzeitige Grenze meiner Arduino-Codierungsfähigkeit. Sobald ich es herausgefunden habe oder Vorschläge von euch bekomme, poste ich den aktualisierten Code.

Schritt 4:Alles zusammenfügen

Wenn der Code geladen ist und das Audiokabel an die Buchse angeschlossen ist, sollten Sie in der Lage sein, das Fischmaul zu bewegen, indem Sie einfach eine Audioquelle an das freie Ende des Kabels anschließen (ich habe mein Telefon verwendet, um einen Podcast abzuspielen). Wenn es funktioniert, bohren Sie irgendwo ein kleines Loch in die Plastik-Fischplatte, schieben Sie den Wagenheber durch und ziehen Sie ihn fest.

Um Alexa (oder was auch immer Sie wollen) durch Ihren Fisch sprechen zu lassen, verbinden Sie das freie Ende des Audiokabels mit dem Y-Adapter, den wiederaufladbaren Lautsprecher mit dem anderen Eingang des Adapters und stecken Sie dann den Stecker des Adapters in die Audioausgabe des Echo Dot.

Stellen Sie sicher, dass Ihr Lautsprecher eingeschaltet ist und die Lautstärke sowohl am Lautsprecher als auch an Alexa hoch eingestellt ist. Rufen Sie dann Alexa und stellen Sie ihr eine Frage, um sie zum Reden zu bringen (Wetter, Witze, Nachrichten). Sie sollten ihre Stimme über den tragbaren Lautsprecher hören und gleichzeitig beobachten, wie die Gummilippen Ihres Fisches im Takt flattern. Je näher der Lautsprecher am Kopf des Fisches ist, desto unheimlicher ist die Wirkung.

Wenn alles funktioniert, besteht der Trick darin, den Lautsprecher und das Arduino in das Billy Bass-Gehäuse zu packen und es zu schließen. Ehrlich gesagt, ich bin immer noch dabei, das herauszufinden.

Schritt 5:Wohin als nächstes?

Hier gibt es noch viel zu tun, und ich freue mich über alle Ihre Vorschläge, um dies zu verbessern. Ich würde gerne in naher Zukunft eine Version 2.0 dafür veröffentlichen.

1. Ich möchte, dass Kopf und Schwanz animiert werden. Die Verbindungen sind da und ich konnte sie zum Laufen bringen, aber nicht ohne die Reaktionsfähigkeit des Mundes zu beeinträchtigen, was entscheidend ist.

2. Ich möchte, dass sich der Lautsprecher vom Arduino aufladen kann. Scheint einfach genug, aber ich habe es noch nicht gemacht.

3. Ich möchte, dass der rote Billy Bass-Knopf (oder ein Ersatz) zwischen einem „Sprachmodus“ (mehr über Mundbewegungen und dem ganzen „sprechenden Fisch“-Appeal) und einem „Musik“-Modus umschaltet, in dem es mehr darum geht, dass Fische herumflattern Zeit für Musik.

4. Cleaner-Code. Ich bin mir sicher, dass der Code aus dem Mashup, das ich erstellt habe, viele Überbleibsel enthält. Ich begrüße alle Bemühungen, es aufzuräumen.

5. Verwenden Sie ein kleineres Arduino. Die Uno und Motor Shield sind völlig übertrieben für das, wofür wir sie verwenden. Ich denke, dass eine Adafruit Feather und ihr 2-Motoren-Schild für die Feder eine schöne Alternative wären. Vielleicht können Sie einen haben, der den Mund antreibt und einen separaten, der den Schwanzkopfmotor antreibt.

Code

  • SoundToDC
SoundToDCArduino
/* Einen Gleichstrommotor zum Ton bewegen. Dieser Beispielcode ist gemeinfrei. Erstellt von Donald Bell, Maker Project Lab (2016). Basierend auf Sound to Servo von Cenk zdemir (2012) und DCMotorTest von Adafruit*/// include the Adafruit Motor Shield Library#include #include #include "utility/Adafruit_MS_PWMServoDriver.h"// Erstellen Sie das Motorschildobjekt mit der Standard-I2C-AdresseAdafruit_MotorShield AFMS =Adafruit_MotorShield(); // Oder erstellen Sie es mit einer anderen I2C-Adresse (z. B. zum Stapeln) // Adafruit_MotorShield AFMS =Adafruit_MotorShield (0x61); // Wählen Sie aus, welcher 'Port' M1, M2, M3 oder M4 ist. In diesem Fall M1 für Mund und M2 für SchwanzAdafruit_DCMotor *myMotor =AFMS.getMotor(1);Adafruit_DCMotor *myOtherMotor =AFMS.getMotor(2); // Einige andere Variablen brauchen wirint SoundInPin =A0;int LedPin =12; // Falls Sie möchten, dass eine LED aktiviert wird, während sich der Mund bewegt // die Setup-Routine wird einmal ausgeführt, wenn Sie Reset drücken:void setup () { Serial.begin (9600); // serielle Bibliothek mit 9600 bps einrichten AFMS.begin (); // mit der Standardfrequenz 1.6KHz erstellen //AFMS.begin(1000); // ODER mit einer anderen Frequenz, sagen wir 1KHz // Stellen Sie die Geschwindigkeit zum Starten ein, von 0 (aus) bis 255 (maximale Geschwindigkeit) myMotor->setSpeed ​​(0); // Mundmotor myMotor-> Run (FORWARD); // Motor einschalten myMotor->run (RELEASE); pinMode (SoundInPin, EINGANG); pinMode (LedPin, AUSGANG); myOtherMotor->setSpeed(0); // Heckmotor myOtherMotor-> Run (FORWARD); // Motor einschalten myOtherMotor->run (RELEASE); pinMode (SoundInPin, EINGANG); } // die Schleifenroutine läuft immer und immer wieder:void loop() { uint8_t i; // Lesen Sie den Eingang am analogen Pin 0:int sensorValue =analogRead (SoundInPin); // Wir ordnen einen anderen Wert davon für LED zu, der eine ganze Zahl zwischen 0..255 sein kann int LEDValue =map (sensorValue,0,512,0,255); // Wir bilden es hier auf den möglichen Bewegungsumfang ab. sensorValue =map(sensorValue,0,512,0,180); // Beachten Sie, dass 512 normalerweise 1023 ist, da das analoge Lesen so weit gehen sollte, aber ich habe das geändert, um bessere Messwerte zu erhalten. int MoveDelayValue =map(sensorValue,0,255,0,sensorValue); // Den gleichen Messwert etwas weiter nach unten abbilden, um die Zeit zu berechnen, die Ihr Motor bekommtif (sensorValue> 10) {// um einige statische Messwerte zu unterbrechen Verzögerung (1); // eine statische Verzögerung, um die Dinge zu glätten... // Jetzt den Motor bewegen myMotor->run(FORWARD); für (i=140; i<255; i++) { myMotor->setSpeed ​​(i); } // für (i =200; i! =0; i--) {// myMotor-> setSpeed ​​(i); // Verzögerung (10); //} analogWrite (LedPin, sensorValue); // und mach das in dieser Verzögerungszeit myMotor->run (RELEASE); myOtherMotor->run(RELEASE); delay(1);} // Fertig. // schalte die LED wieder aus. analogWrite (LedPin, 0); // und das wiederholt sich die ganze Zeit.}

Herstellungsprozess

  1. CO2-Überwachung mit K30-Sensor
  2. taubblinde Kommunikation mit 1Sheeld/Arduino
  3. Münzprüfer mit Arduino steuern
  4. Big Mouth Billy Bass + Alexa
  5. Audiofrequenzdetektor
  6. Arduino mit Bluetooth zur Steuerung einer LED!
  7. Kapazitiver Fingerabdrucksensor mit einem Arduino oder ESP8266
  8. Mit Nextion Display spielen
  9. Audio in Arduino abspielen
  10. Nunchuk-gesteuerter Roboterarm (mit Arduino)