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

Animer une bouche de Billy Bass avec n'importe quelle source audio

Composants et fournitures

Arduino UNO
× 1
Adafruit Motor/Stepper/Servo Shield pour Arduino v2 Kit - v2 .3
× 1
Amazon Alexa Echo Dot
× 1

À propos de ce projet

Il y a environ un mois, un artiste nommé Brian Kane a publié une vidéo virale montrant une nouveauté de Big Mouth Billy Bass chantant du poisson, apparemment exprimée par l'assistant virtuel Alexa d'Amazon. Internet est devenu fou pour ça, et moi aussi, mais surtout je voulais juste savoir comment cela fonctionnait pour pouvoir créer le mien.

Après avoir vu un certain nombre de projets Raspberry Pi qui utilisaient Alexa, j'ai d'abord supposé que Brian avait créé un projet Pi alimenté par Alexa qui servait également à animer le matériel Billy Bass existant - et c'est peut-être le cas. J'ai même proposé cette idée dans mon émission hebdomadaire sur YouTube, Maker Update.

Mais après y avoir réfléchi davantage, j'ai pensé que le hack le plus simple serait un moyen 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 à portée de main (même si c'était la première fois que j'utilisais le shield).

Ensuite, j'ai commandé le Billy Bass utilisé sur Amazon pour environ 15 $. Je suis sûr que vous pouvez en acheter un d'occasion dans un vide-grenier ou dans un magasin d'aubaines pour moins d'argent, mais j'en voulais un rapidement. J'ai également commandé l'Echo Dot neuf.

Avec ceux commandés, je suis passé à la recherche. Deux tutoriels m'ont donné de l'espoir :ce guide 2012 de sfool sur l'utilisation d'un Arduino pour faire passer un servo au son et ce guide 2013 de Dotten sur la compréhension de l'animatronique d'un jouet Billy Bass.

Comprendre que le Billy Bass (un peu comme un Furby) est essentiellement entraîné par deux moteurs-jouets 5v CC bon marché - le problème devient alors simplement de savoir comment faire trembler ces moteurs en réponse au son. Avec quelques essais et erreurs, j'ai trouvé une solution viable. Le code est loin d'être parfait et il y a beaucoup d'autres fonctionnalités que je veux intégrer, mais je voulais le faire pour que tout le monde puisse aider à l'améliorer.

Matériel nécessaire

  • Poisson chantant Billy Bass à grande bouche (1)
  • Arduino Uno (1)
  • Alimentation Arduino Uno (1)
  • Adafruit Motor Shield v2 (1)
  • Mini-prise à montage sur panneau (1)
  • Câble de branchement toronné (plusieurs couleurs sont utiles)
  • Amazon Echo Dot (bien que n'importe quelle source audio devrait fonctionner) (1)
  • Petite enceinte rechargeable en quelque sorte (1)
  • Câble audio minijack (⅛") (1)
  • Adaptateur de câble séparateur minijack (1)

Outils nécessaires

  • Petit tournevis
  • Fer à souder et soudure
  • Dénudeurs de fils
  • Coupes
  • Perceuse et forets

Étape 1 :Préparez le poisson

Pour le meilleur ou pour le pire, le poisson usagé était mort à son arrivée. Au moins, je n'ai pas hésité à l'ouvrir et à le pirater. Pour mon hack, dévissez simplement les vis à l'arrière, ouvrez-le et appliquez une légère pression pour déloger les faisceaux de câbles afin que le dos puisse être complètement retiré.

Pour créer plus d'espace pour l'électronique, nous allons ajouter, dévisser et retirer le circuit imprimé Billy Bass et le buzzer piézo.

Ce qu'il vous reste, c'est un harnais à 4 fils qui dépasse du poisson. Cela comprend deux fils qui animent la bouche (vous pouvez les voir traîner dans le poisson) et deux fils qui soulèvent la tête ou la queue selon la direction dans laquelle vous faites tourner le moteur.

La dernière étape de la préparation du poisson consiste à couper quatre longueurs égales de fil de couleur différente, à exposer et étamer les pointes et à insérer les extrémités dans chacune des quatre douilles du faisceau de câbles. À l'étape suivante, nous les connecterons au blindage du moteur Arduino.

Étape 2 : préparer le blindage du moteur

Il n'y a que 4 connexions que vous devrez faire au blindage du moteur, et seulement deux d'entre elles sont soudées. Vous pouvez également brancher deux fils supplémentaires si vous souhaitez expérimenter avec le moteur queue/tête.

Commençons par la soudure pour en finir. Pour créer une entrée audio pour votre poisson, prenez deux longueurs égales de fil de couleur différente, dénudez les extrémités et soudez une à la terre et une à Analog 0. Coupez tout excès de fil qui traverse la carte.

Passons maintenant ces fils à la mini-prise à montage sur panneau pour notre entrée audio. La prise que j'avais était une de ces prises de commutation mono sophistiquées avec trois connexions possibles. Tout ce qui compte, c'est que vous créiez une entrée mono en faisant passer le fil de l'analogique 0 au fil de la prise qui entre en contact avec la pointe du connecteur audio. Acheminez ensuite le fil de terre jusqu'à un fil sur la prise qui entre en contact avec la base (ou le manchon) du connecteur audio.

Ensuite, pour connecter le ou les moteurs de poisson au blindage, faites passer la paire de fils menant au moteur de la bouche de poisson (noir et orange) dans les borniers du moteur 1 et vissez-les. En option, vous pouvez faire passer les fils du moteur de queue/tête (blanc et rouge) aux bornes du moteur 2, bien que le code ne fasse encore rien avec ce moteur (plus de détails à ce sujet dans la section suivante). Pour mes poissons, la coloration des fils sur les borniers passe au noir, orange (jaune dans mon cas) pour le moteur de la bouche (M1) et blanc, rouge à partir du moteur de queue en option (M2).

Enfin, vérifiez que le blindage du moteur a le manchon de cavalier attaché aux broches étiquetées VIN Jumper. Cela m'a manqué au début et je me grattais la tête en me demandant pourquoi le bouclier ne s'allumait pas. Vous devriez maintenant être en mesure de placer le blindage sur l'Arduino Uno, d'allumer l'Arduino et de voir également un indicateur d'alimentation LED s'allumer sur le blindage. Si le bouclier ne s'allume pas, je vérifierais le cavalier.

Étape 3 : chargez le code

Ainsi, le code est un hack désordonné qui rassemble des éléments du croquis de test du moteur à courant continu (essentiellement la démo du bouclier moteur) et du croquis Sound to Servo de Cenk Özdemir (2012), inclus dans ce didacticiel Arduino Sound to Servo auquel j'ai lié au dessus.

Le code dans son état actuel n'anime pas encore le moteur tête/queue. J'avais une version qui le faisait, mais cela ralentissait la réactivité du mouvement de la bouche. Idéalement, j'aimerais que la bouche reste réactive tandis que la tête et la queue parcourent lentement leur propre animation, mais c'est la limite actuelle de ma capacité de codage Arduino. Dès que je le comprends ou que j'obtiens des suggestions de votre part, je publierai le code mis à jour.

Étape 4 :Assembler le tout

Avec le code chargé et le câble audio connecté à la prise, vous devriez pouvoir faire bouger la bouche du poisson simplement en connectant une source audio à l'extrémité libre du câble (j'ai utilisé mon téléphone pour lire un podcast). Si cela fonctionne, percez un petit trou quelque part sur la plaque à poisson en plastique, poussez le cric à travers et serrez-le en place.

Pour faire parler Alexa (ou ce que vous voulez) à travers votre poisson, connectez l'extrémité libre du câble audio à l'adaptateur Y, le haut-parleur rechargeable à l'autre entrée de l'adaptateur, puis branchez la fiche mâle de l'adaptateur dans le sortie audio de l'Echo Dot.

Assurez-vous que votre haut-parleur est allumé et que le volume est à la fois sur le haut-parleur et sur Alexa. Ensuite, invoquez Alexa et posez-lui une question pour la faire parler (météo, blagues, actualités). Vous devriez entendre sa voix à travers le haut-parleur portable tout en voyant les lèvres en caoutchouc de votre poisson battre dans le temps. Plus le haut-parleur est proche de la tête du poisson, plus l'effet est troublant.

Si tout fonctionne, l'astuce consiste alors à emballer le haut-parleur et l'Arduino dans le boîtier Billy Bass et à le fermer. Honnêtement, je suis toujours en train de comprendre cela.

Étape 5 :Où ensuite ?

Il reste beaucoup à faire ici, et j'accueille toutes vos suggestions pour l'améliorer. J'aimerais publier une version 2.0 pour cela dans un proche avenir.

1. Je veux que la tête et la queue s'animent. Les connexions sont là et j'ai pu les faire fonctionner mais non sans sacrifier la réactivité de la bouche, qui est essentielle.

2. Je veux que le haut-parleur puisse se recharger à partir de l'Arduino. Cela semble assez simple, mais je ne l'ai pas encore fait.

3. Je veux que le bouton rouge Billy Bass (ou un substitut) bascule entre un mode « parole » (plus sur le mouvement de la bouche et l'ensemble de l'appel « poisson qui parle », et un mode « musique » qui concerne davantage le poisson qui s'agite dans le temps de la musique.

4. Code du nettoyeur. Je suis certain qu'il y a beaucoup de restes dans le code du mashup que j'ai fait. Je salue tous les efforts pour le nettoyer.

5. Utilisez un Arduino plus petit. L'Uno et le Motor Shield sont totalement exagérés pour ce pour quoi nous l'utilisons. Je pense qu'une plume Adafruit et leur bouclier à 2 moteurs pour la plume seraient une bonne alternative. Vous pouvez peut-être en avoir un qui alimente la bouche et un autre qui alimente le moteur de la tête de queue.

Code

  • SoundToDC
SoundToDCArduino
/* Faire passer un moteur à courant continu au son. Cet exemple de code est dans le domaine public. Créé par Donald Bell, Maker Project Lab (2016). Basé sur Sound to Servo de Cenk zdemir (2012) et DCMotorTest d'Adafruit*/// inclut la bibliothèque de boucliers de moteur Adafruit#include #include #include "utility/Adafruit_MS_PWMServoDriver.h"// Créez l'objet de protection du moteur avec l'adresse I2C par défautAdafruit_MotorShield AFMS =Adafruit_MotorShield(); // Ou, créez-le avec une adresse I2C différente (par exemple pour l'empilement) // Adafruit_MotorShield AFMS =Adafruit_MotorShield(0x61); // Sélectionnez quel 'port' M1, M2, M3 ou M4. Dans ce cas, M1 pour la bouche et M2 pour la queueAdafruit_DCMotor *myMotor =AFMS.getMotor(1);Adafruit_DCMotor *myOtherMotor =AFMS.getMotor(2);// Quelques autres variables dont nous avons besoinint SoundInPin =A0;int LedPin =12; //au cas où vous voudriez qu'une LED s'active pendant que la bouche bouge // la routine de configuration s'exécute une fois lorsque vous appuyez sur reset:void setup() { Serial.begin(9600); // configurer la bibliothèque série à 9600 bps AFMS.begin(); // créer avec la fréquence par défaut 1.6KHz //AFMS.begin(1000); // OU avec une fréquence différente, disons 1KHz // Réglez la vitesse de démarrage, de 0 (off) à 255 (vitesse max) myMotor->setSpeed(0); //Moteur de bouche myMotor->run(FORWARD); // allume le moteur myMotor->run(RELEASE); pinMode(SoundInPin, INPUT); pinMode (LedPin, SORTIE); myOtherMotor->setSpeed(0) ; //moteur de queue myOtherMotor->run(FORWARD); // allume le moteur myOtherMotor->run(RELEASE); pinMode(SoundInPin, INPUT); }// la routine de boucle s'exécute encore et encore pour toujours:void loop() { uint8_t i; // lire l'entrée sur la broche analogique 0:int sensorValue =analogRead(SoundInPin); // nous mappons une autre valeur de this pour LED qui peut être un entier entre 0..255 int LEDValue =map(sensorValue,0,512,0,255); // Nous le mappons ici jusqu'à la plage de mouvement possible. sensorValue =map(sensorValue,0,512,0,180); // notez que normalement le 512 est 1023 car la lecture analogique devrait aller si loin, mais j'ai changé cela pour obtenir de meilleures lectures. int MoveDelayValue =map(sensorValue,0,255,0,sensorValue); // mapper la même lecture un peu plus bas pour calculer le temps que votre moteur obtient si (sensorValue> 10) { // pour couper certaines lectures statiques delay(1); // un délai statique pour lisser les choses... // maintenant déplacez le moteur myMotor->run(FORWARD); pour (i=140; i<255; i++) { myMotor->setSpeed(i); }//pour (i=200; i!=0; i--) {// myMotor->setSpeed(i); // delay(10);// } analogWrite(LedPin, sensorValue); // et faire ce mouvement dans ce délai myMotor->run(RELEASE); monAutreMoteur->run(RELEASE); delay(1);} // Terminé. // éteint à nouveau la led. analogWrite(LedPin, 0); // et cela se répète tout le temps.}

Processus de fabrication

  1. Surveillance du CO2 avec le capteur K30
  2. Communication sourds-aveugles avec 1Sheeld/Arduino
  3. Contrôler l'accepteur de pièces avec Arduino
  4. Big Mouth Billy Bass + Alexa
  5. Détecteur de fréquence audio
  6. Arduino avec Bluetooth pour contrôler une LED !
  7. Capteur d'empreintes digitales capacitif avec un Arduino ou ESP8266
  8. Jouer avec Nextion Display
  9. Lire l'audio dans Arduino