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

Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung

Benötigte Komponenten

Arduino UNO 1
Adafruit Motor/Stepper/Servo Shield v2.3 (Bausatz) 1
Amazon Echo Dot (oder beliebige Audioquelle) 1
Big Mouth Billy Bass Singing Fish (gebraucht ca. 15 €) 1
Netzteil für Arduino Uno 1
Panel-Mount-Miniklinke (3,5 mm) 1
Litzenkabel (verschiedene Farben) nach Bedarf
Kleiner wiederaufladbarer Lautsprecher 1
3,5-mm-Klinkenkabel 1
Klinken-Y-Adapter (Splitter) 1

Benötigtes Werkzeug

Projektbeschreibung

Vor etwa einem Monat veröffentlichte der Künstler Brian Kane ein virales Video, in dem ein Big Mouth Billy Bass scheinbar von Amazons Alexa „gesprochen“ wird. Das Internet war begeistert – und ich wollte wissen, wie es funktioniert, um es nachzubauen.

Zunächst dachte ich an ein Raspberry-Pi-Projekt mit Alexa-Integration. Doch nach weiterem Nachdenken erschien der einfachste Hack: Das Audio eines 49-Dollar-Echo-Dots direkt über einen Arduino zu verarbeiten, um die vorhandenen Motoren anzusteuern.

Ich hatte bereits einen Arduino und ein Motor-Shield (erste Nutzung). Der Billy Bass wurde gebraucht bei Amazon bestellt, der Echo Dot neu. Zwei Tutorials halfen weiter: Sound to Servo von Cenk Özdemir (2012) und Billy Bass Animatronics von Dotten (2013).

Der Billy Bass wird – wie ein Furby – von zwei billigen 5-V-Gleichstrommotoren angetrieben (Mund und Kopf/Schwanz). Die Herausforderung: Diese Motoren auf Sound reagieren zu lassen. Nach Trial-and-Error fand ich eine funktionierende Lösung. Der Code ist noch verbesserungsfähig, aber ich wollte ihn teilen, damit die Community ihn weiterentwickeln kann.

Schritt 1: Fisch vorbereiten

Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung
Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung

Mein gebrauchter Fisch war „tot“ – ideal zum Basteln. Schrauben an der Rückseite lösen, Gehäuse öffnen, Kabelbäume vorsichtig lösen. Die originale Platine und den Piezo-Summer entfernen, um Platz für die eigene Elektronik zu schaffen.

Es verbleibt ein 4-adriges Kabel: zwei Adern für den Mundmotor, zwei für den Kopf-/Schwanzmotor (Richtung hängt von Polung ab). Vier gleich lange, farblich unterschiedliche Drähte abisolieren, verzinnen und in die vier Buchsen des Kabelbaums stecken. Im nächsten Schritt werden diese mit dem Motor-Shield verbunden.

Schritt 2: Motor-Shield vorbereiten

Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung

Nur vier Verbindungen sind nötig, zwei davon gelötet. Für den Audioeingang zwei Drähte an GND und Analog 0 (A0) löten. Überzählige Drähte abschneiden.

Diese Drähte zum Panel-Mount-Miniklinkenanschluss führen: Der Draht von A0 an den Tipp-Kontakt (Signal), GND an den Hülsen-Kontakt (Masse).

Fischmotoren anschließen: Mundmotor (schwarz/orange) an Motor-1-Klemmen (M1). Optional: Kopf-/Schwanzmotor (weiß/rot) an M2 (Code nutzt dies noch nicht).

Wichtig: Der VIN-Jumper auf dem Shield muss gesteckt sein, sonst wird das Shield nicht mit Strom versorgt. Shield auf den Arduino aufstecken, Arduino mit Strom versorgen – Power-LED auf dem Shield muss leuchten.

Schritt 3: Code hochladen

Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung

Der Code kombiniert den DC Motor Test (Adafruit-Demo) und Sound to Servo von Cenk Özdemir. Aktuell animiert er nur den Mundmotor; der Kopf-/Schwanzmotor ist verdrahtet, aber im Code deaktiviert, da er die Mundbewegungs-Reaktionszeit verschlechterte. Ziel ist eine parallele Animation – Vorschläge willkommen.

Schritt 4: Alles zusammenbauen

Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung

Code hochladen, Audiokabel an die Buchste anschließen. Testen mit Handy (Podcast/Musik) – der Mund sollte sich bewegen. Kleines Loch in die Fisch-Plakette bohren, Klinkenbuchse einbauen und festziehen.

Für Alexa: Freies Ende des Audiokabels an Y-Adapter, Lautsprecher an anderen Adapter-Eingang, Adapter-Stecker in Echo-Dot-Audioausgang. Lautsprecher und Alexa-Lautstärke aufdrehen. Alexa befragen (Wetter, Witze, Nachrichten) – die Stimme kommt aus dem Lautsprecher, der Fischmund bewegt sich synchron. Je näher der Lautsprecher am Fischkopf, desto unheimlicher der Effekt.

Nun Lautsprecher und Arduino im Gehäuse verstauen und schließen – noch Optimierungspotenzial.

Schritt 5: Ausblick & Verbesserungsideen

Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung
  1. Kopf und Schwanz animieren: Verbindungen vorhanden, aber ohne Einbußen bei der Mundreaktion.
  2. Lautsprecher über Arduino laden: Machbar, noch nicht umgesetzt.
  3. Roter Billy-Bass-Knopf als Modus-Umschalter: „Sprach-Modus“ (Mundbewegung) vs. „Musik-Modus“ (ganzer Körper tanzt).
  4. Code bereinigen: Viele Überreste aus dem Mashup – Community-Hilfe erwünscht.
  5. Kleinerer Arduino: Uno + Shield sind Overkill. Adafruit Feather + 2-Motor-FeatherWing wäre eleganter. Evtl. zwei Feathers: einer für Mund, einer für Kopf/Schwanz.

Code

SoundToDC (Arduino)

/* Make a DC Motor Move to Sound. Public Domain. 
   Created by Donald Bell, Maker Project Lab (2016). 
   Based on Sound to Servo by Cenk Özdemir (2012) 
   and DCMotorTest by Adafruit */

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);   // Mund (M1)
Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2); // Kopf/Schwanz (M2)

const int SoundInPin = A0;
const int LedPin = 12; // Optionale LED bei Mundbewegung

void setup() {
  Serial.begin(9600);
  AFMS.begin(); // Default 1.6 kHz PWM
  myMotor->setSpeed(0);
  myMotor->run(FORWARD);
  myMotor->run(RELEASE);
  pinMode(SoundInPin, INPUT);
  pinMode(LedPin, OUTPUT);
  myOtherMotor->setSpeed(0);
  myOtherMotor->run(FORWARD);
  myOtherMotor->run(RELEASE);
}

void loop() {
  uint8_t i;
  int sensorValue = analogRead(SoundInPin);
  int LEDValue = map(sensorValue, 0, 512, 0, 255);
  sensorValue = map(sensorValue, 0, 512, 0, 180); // 512 statt 1023 für bessere Aussteuerung
  int MoveDelayValue = map(sensorValue, 0, 255, 0, sensorValue);

  if (sensorValue > 10) { // Rauschen ausblenden
    delay(1);
    myMotor->run(FORWARD);
    for (i = 140; i < 255; i++) {
      myMotor->setSpeed(i);
    }
    analogWrite(LedPin, sensorValue);
    myMotor->run(RELEASE);
    myOtherMotor->run(RELEASE);
    delay(1);
  }
  analogWrite(LedPin, 0);
}

Herstellungsprozess

  1. K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
  2. Kommunikationshilfe für Taubblinde: 1Sheeld + Arduino + Sprachausgabe & Anzeige
  3. Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
  4. Alexa-gesteuerter Big Mouth Billy Bass mit Arduino, L293D & LM386
  5. Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
  6. LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
  7. DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
  8. Interaktives Nextion HMI Projekt mit Arduino Mega und Sensoren
  9. Audio-Wiedergabe mit Arduino UNO und DFPlayer Mini – Schritt-für-Schritt-Anleitung
  10. Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung