Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Animez Votre Poisson Billy Bass avec N'importe Quelle Source Audio – Guide Pas à Pas

Composants et Fournitures

Composant Description Quantité
Arduino UNO Carte microcontrôleur principale 1
Shield Moteur Adafruit v2.3 Kit Shield Moteur/Pas à Pas/Servo pour Arduino v2 1
Amazon Alexa Echo Dot Source audio (toute source audio fonctionne) 1

À Propos de ce Projet

Il y a environ un mois, l'artiste Brian Kane a publié une vidéo virale montrant un poisson chantant "Big Mouth Billy Bass" semblant parler avec la voix d'Alexa d'Amazon. Internet s'en est embrasé, et moi aussi – mais surtout, je voulais comprendre comment ça fonctionnait pour en créer un moi-même.

Après avoir vu plusieurs projets Raspberry Pi utilisant Alexa, j'ai d'abord pensé que Brian avait créé un projet Alexa sur Pi qui servait aussi à animer le matériel existant du Billy Bass. J'ai même évoqué cette idée dans mon émission YouTube hebdomadaire, Maker Update.

Mais après réflexion, j'ai réalisé que le piratage le plus simple serait d'utiliser simplement l'audio d'un Amazon Echo à 49 $ et de le traiter via un Arduino pour piloter les moteurs existants.

J'avais déjà un Arduino et un shield moteur sous la main (bien que ce fût ma première utilisation du shield). J'ai commandé un Billy Bass d'occasion sur Amazon pour environ 15 $ (on peut en trouver moins cher en vide-grenier) et un Echo Dot neuf.

Deux tutoriels m'ont guidé : un guide de 2012 de sfool sur l'utilisation d'un Arduino pour faire bouger un servo au son, et un guide de 2013 de Dotten sur la compréhension de l'animatronique du jouet Billy Bass.

Comprendre que le Billy Bass (un peu comme un Furby) est actionné par deux moteurs DC 5V bon marché – le problème devient alors : comment faire tressaillir ces moteurs en réponse au son. Après quelques essais-erreurs, j'ai trouvé une solution fonctionnelle. Le code est loin d'être parfait et il reste beaucoup de fonctionnalités à ajouter, mais je voulais le partager pour que tout le monde puisse l'améliorer.

Matériel Nécessaire

Outils Nécessaires

Étape 1 : Préparer le Poisson

Mon poisson d'occasion était mort à l'arrivée – pas d'hésitation à l'ouvrir et le pirater. Dévissez le dos, ouvrez-le, et appliquez une pression douce pour déconnecter les nappes de câbles afin de retirer complètement le dos.

Pour faire de la place pour l'électronique, dévissez et retirez le circuit imprimé et le buzzer piézo du Billy Bass.

Il reste un harnais 4 fils : deux pour la bouche (visibles à l'intérieur) et deux pour la tête ou la queue selon le sens du moteur.

Dernière étape : coupez quatre fils de même longueur, de couleurs différentes, dénudés et étamés, et insérez-les dans les quatre connecteurs du harnais. Nous les connecterons au shield moteur à l'étape suivante.

Étape 2 : Préparer le Shield Moteur

Seulement 4 connexions sont nécessaires sur le shield moteur, dont deux à souder. Vous pouvez aussi connecter deux fils supplémentaires pour expérimenter avec le moteur tête/queue.

Soudure : Prenez deux fils de même longueur, couleurs différentes, dénudés, et soudez l'un à la masse (GND) et l'autre à l'entrée Analogique 0. Coupez l'excédent.

Reliez ces fils au jack panneau pour l'entrée audio. Le jack utilisé est un jack mono à commutation avec trois connexions possibles. L'essentiel : connecter le fil de l'Analogique 0 au contact de la pointe (tip) du connecteur audio, et la masse au contact de la base (sleeve).

Connexion des moteurs : Connectez la paire de fils du moteur de la bouche (noir et orange) aux bornes du moteur 1. Optionnellement, connectez les fils du moteur tête/queue (blanc et rouge) aux bornes du moteur 2 (le code ne gère pas encore ce moteur).

Important : Vérifiez que le cavalier (jumper) est bien en place sur les broches "VIN Jumper". Sans cela, le shield ne s'alimente pas. Une fois le shield emboîté sur l'Arduino Uno et alimenté, une LED d'alimentation doit s'allumer sur le shield.

Étape 3 : Charger le Code

Le code est un "bricolage" mélangeant le sketch "DC Motor Test" (démo du shield moteur) et le sketch "Sound to Servo" de Cenk Özdemir (2012), inclus dans le tutoriel Arduino Sound to Servo cité plus haut.

Le code actuel n'anime pas encore le moteur tête/queue. J'ai eu une version qui le faisait, mais cela ralentissait la réactivité du mouvement de la bouche, ce qui est critique. L'idéal serait de garder la bouche réactive pendant que la tête et la queue font leur propre animation lente, mais c'est la limite actuelle de mes compétences en codage Arduino. Je posterai une mise à jour dès que j'aurai résolu ce point ou reçu des suggestions.

Étape 4 : Assemblage Final

Avec le code chargé et le câble audio connecté au jack, testez en connectant une source audio (ex: téléphone lisant un podcast). Si ça fonctionne, percez un petit trou sur la plaque en plastique du poisson, insérez le jack et serrez-le.

Pour faire parler Alexa (ou autre) via le poisson : connectez l'extrémité libre du câble audio au splitter en Y, le haut-parleur rechargeable sur l'autre entrée du splitter, puis la fiche mâle du splitter sur la sortie audio de l'Echo Dot.

Assurez-vous que le haut-parleur est allumé et le volume monté sur le haut-parleur et Alexa. Invoquez Alexa et posez-lui une question (météo, blagues, actualités). Vous entendrez sa voix via le haut-parleur portable tout en voyant les lèvres en caoutchouc du poisson bouger en synchronisation. Plus le haut-parleur est proche de la tête du poisson, plus l'effet est saisissant.

Si tout fonctionne, reste à ranger le haut-parleur et l'Arduino dans le boîtier du Billy Bass et le refermer. J'en suis encore à peaufiner cette partie.

Étape 5 : Prochaines Étapes

Il reste beaucoup à faire, et j'accueille toutes vos suggestions pour améliorer ce projet. J'aimerais publier une version 2.0 prochainement.

  1. Animer la tête et la queue. Les connexions sont prêtes et j'ai réussi à les faire fonctionner, mais pas sans sacrifier la réactivité de la bouche.
  2. Permettre au haut-parleur de se recharger via l'Arduino. Simple en théorie, pas encore fait.
  3. Utiliser le bouton rouge du Billy Bass (ou un substitut) pour basculer entre un mode "parole" (mouvement de la bouche pour l'effet "poisson qui parle") et un mode "musique" (poisson qui gigote en rythme).
  4. Nettoyer le code. Il y a sûrement des résidus du mélange de codes. Toute aide est bienvenue.
  5. Utiliser un Arduino plus petit. Le Uno + Shield Moteur sont surdimensionnés. Un Adafruit Feather avec leur shield 2 moteurs pour Feather serait une alternative intéressante. Peut-être un pour la bouche, un autre pour la tête/queue.

Code

SoundToDC (Arduino)

/* Make a DC Motor Move to Sound. This example code is in the public domain. Created by Donald Bell, Maker Project Lab (2016). Based on Sound to Servo by Cenk Özdemir (2012) and DCMotorTest by Adafruit */
// include the Adafruit motor shield library
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Or, create it with a different I2C address (say for stacking)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);

// Select which 'port' M1, M2, M3 or M4. In this case, M1 for mouth and M2 for tail
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);

// Some other Variables we need
int SoundInPin = A0;
int LedPin = 12; //in case you want an LED to activate while mouth moves

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(9600); // set up Serial library at 9600 bps
  AFMS.begin(); // create with the default frequency 1.6KHz
  //AFMS.begin(1000); // OR with a different frequency, say 1KHz
  
  // Set the speed to start, from 0 (off) to 255 (max speed)
  myMotor->setSpeed(0); //mouth motor
  myMotor->run(FORWARD); // turn on motor
  myMotor->run(RELEASE);
  pinMode(SoundInPin, INPUT);
  pinMode(LedPin, OUTPUT);
  
  myOtherMotor->setSpeed(0); //tail motor
  myOtherMotor->run(FORWARD); // turn on motor
  myOtherMotor->run(RELEASE);
  pinMode(SoundInPin, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  uint8_t i;
  // read the input on analog pin 0:
  int sensorValue = analogRead(SoundInPin);
  // we Map another value of this for LED that can be a integer betwen 0..255
  int LEDValue = map(sensorValue,0,512,0,255);
  // We Map it here down to the possible range of movement.
  sensorValue = map(sensorValue,0,512,0,180);
  // note normally the 512 is 1023 because of analog reading should go so far, but I changed that to get better readings.
  int MoveDelayValue = map(sensorValue,0,255,0,sensorValue); // maping the same reading a little bit more down to calculate the time your motor gets
  
  if (sensorValue > 10) { // to cut off some static readings
    delay(1); // a static delay to smooth things out...
    // now move the motor
    myMotor->run(FORWARD);
    for (i=140; i<255; i++) {
      myMotor->setSpeed(i);
    }
    //for (i=200; i!=0; i--) {
    // myMotor->setSpeed(i);
    // delay(10);
    // }
    analogWrite(LedPin, sensorValue);
    // and do that move in this delay time
    myMotor->run(RELEASE);
    myOtherMotor->run(RELEASE);
    delay(1);
  }
  // Done.
  // turn off the led again.
  analogWrite(LedPin, 0);
  // and this repeats all the time.
}

Processus de fabrication

  1. Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
  2. Faciliter la communication sourd-aveugle avec 1Sheeld et Arduino
  3. Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
  4. Transformez un Big Mouth Billy Bass en assistant Alexa avec Arduino, shield L293D et amplificateur LM386
  5. Détecteur de fréquence audio Arduino — Mesurer le pic sonore avec module haute sensibilité
  6. Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
  7. Intégrer un capteur d'empreintes capacitif DFRobot (ID809) avec Arduino ou ESP8266
  8. Station météo interactive Nextion HMI avec Arduino Mega et capteurs
  9. Comment lire de l'audio avec Arduino UNO et DFPlayer Mini – Guide étape par étape