Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Een Billy Bass-mond animeren met elke audiobron

Componenten en benodigdheden

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

Over dit project

Ongeveer een maand geleden publiceerde een artiest genaamd Brian Kane een virale video met een Big Mouth Billy Bass-nieuwtje zingende vis, schijnbaar ingesproken door Amazon's virtuele assistent Alexa. Het internet werd er gek van, en ik ook -- maar ik wilde vooral weten hoe het werkte, zodat ik het zelf kon maken.

Na het zien van een aantal Raspberry Pi-projecten die gebruik maakten van Alexa, ging ik er aanvankelijk van uit dat Brian een door Alexa aangedreven Pi-project had gemaakt dat ook dienst deed als een middel om de bestaande Billy Bass-hardware te animeren -- en dat kan het geval zijn. Ik heb dit idee zelfs gepost op mijn wekelijkse YouTube-show, Maker Update.

Maar nadat ik er nog even over had nagedacht, bedacht ik dat de gemakkelijkste hack een manier zou zijn om gewoon de audio van een Amazon Echo van $ 49 te gebruiken en deze via een Arduino te verwerken om bestaande motoren aan te drijven.

Ik had al een Arduino en een motorschild bij de hand (hoewel dit de eerste keer was dat ik het schild gebruikte).

Vervolgens bestelde ik de Billy Bass die op Amazon werd gebruikt voor ongeveer $ 15. Ik weet zeker dat je voor minder geld een gebruikte kunt kopen bij een rommelmarkt of kringloopwinkel, maar ik wilde er snel een. Ik heb de Echo Dot ook nieuw besteld.

Met die besteld, ging ik verder met onderzoek. Twee tutorials gaven me hoop:deze 2012-gids van sfool over het gebruik van een Arduino om een ​​servo naar geluid te laten bewegen en deze 2013-gids van Dotten over het begrijpen van de animatronics van een Billy Bass-speelgoed.

Begrijpend dat de Billy Bass (net als een Furby) in wezen wordt aangedreven door twee goedkope 5v DC-speelgoedmotoren - het probleem wordt dan eenvoudig hoe deze motoren te laten trillen als reactie op geluid. Met wat vallen en opstaan ​​vond ik een werkbare oplossing. De code is verre van perfect en er zijn veel andere functies die ik wil inbouwen, maar ik wilde dit opzetten zodat iedereen kan helpen dit te verbeteren.

Benodigde materialen

  • Big Mouth Billy Bass Singing Fish (1)
  • Arduino Uno (1)
  • Arduino Uno-voeding (1)
  • Adafruit Motor Shield v2 (1)
  • Mini-aansluiting voor paneelmontage (1)
  • Gestrande aansluitdraad (meerdere kleuren helpt)
  • Amazon Echo Dot (hoewel elke audiobron zou moeten werken) (1)
  • Kleine oplaadbare luidspreker van een soort (1)
  • Minijack (⅛”) audiokabel (1)
  • Minijack-splitterkabeladapter (1)

Benodigde hulpmiddelen

  • Kleine schroevendraaier
  • Soldeerbout en soldeer
  • Draadstrippers
  • Knipt
  • Boor en bits

Stap 1:Bereid de vis voor

Voor beter of slechter, door gebruikte vis was dood bij aankomst. Ik aarzelde tenminste niet om het te openen en te hacken. Voor mijn hack, maak gewoon de schroeven aan de achterkant los, open hem en oefen lichte druk uit om de kabelbomen los te maken, zodat de achterkant volledig kan worden verwijderd.

Om meer ruimte voor de elektronica te creëren, gaan we de Billy Bass-printplaat en piëzozoemer toevoegen, losschroeven en verwijderen.

Wat je nog over hebt, is een 4-draads harnas dat uit de vis steekt. Dit omvat twee draden die de mond bezielen (je kunt ze in de vis zien slepen) en twee draden die ofwel de kop of de staart optillen, afhankelijk van in welke richting je de motor draait.

De laatste stap bij het voorbereiden van de vis is om vier gelijke stukken draad met verschillende kleuren af ​​te knippen, de uiteinden bloot te leggen en te vertinnen, en de uiteinden in elk van de vier aansluitingen in de kabelboom te steken. In de volgende stap verbinden we deze met het Arduino-motorschild.

Stap 2:Bereid het motorscherm voor

Er zijn slechts 4 verbindingen die u met het motorscherm hoeft te maken, en slechts twee daarvan zijn gesoldeerd. Je kunt ook twee extra draden aansluiten als je wilt experimenteren met de staart-/kopmotor.

Laten we beginnen met het solderen om het voor elkaar te krijgen. Om een ​​audio-ingang voor uw vissen te maken, neemt u twee gelijke lengtes draad met verschillende kleuren, stript u de uiteinden en soldeert u er een op aarde en een op analoog 0. Knip alle overtollige draad die door het bord loopt weg.

Laten we nu deze draden naar de op het paneel gemonteerde mini-aansluiting voor onze audio-invoer leiden. De jack die ik had was een van die mooie mono-switch jacks met drie mogelijke aansluitingen. Het enige dat telt, is dat je een mono-ingang creëert door de draad van Analoog 0 naar de kabel op de jack te leiden die contact maakt met de punt van de audioconnector. Leid vervolgens de aardingsdraad naar een draad op de aansluiting die contact maakt met de basis (of huls) van de audioconnector.

Om vervolgens de vismotor(en) op het schild aan te sluiten, voert u het paar draden dat naar de visbekmotor (zwart en oranje) leidt in de aansluitblokken voor motor 1 en schroeft u ze vast. Optioneel kunt u de staart-/kopmotordraden (wit en rood) naar de klemmen voor motor 2 leiden, hoewel de code nog niets met deze motor doet (meer hierover in de volgende sectie). Voor mijn vissen wordt de draadkleuring op de aansluitblokken zwart, oranje (geel in mijn geval) voor de mondmotor (M1) en wit, rood van voor de optionele staartmotor (M2).

Controleer ten slotte of het motorscherm de jumperhuls heeft bevestigd aan de pinnen met het label VIN Jumper. Ik miste dit aanvankelijk en krabde me op mijn hoofd terwijl ik me afvroeg waarom het schild niet aanging. Je zou nu in staat moeten zijn om het schild op de Arduino Uno te klemmen, de Arduino aan te zetten en ook een voedingsindicator-LED op het schild te zien oplichten. Als het schild niet oplicht, zou ik de jumper controleren.

Stap 3:Laad de code

De code is dus een rommelige hack die elementen van de DC Motor Test-schets (in wezen de demo voor het motorschild) en de Sound to Servo-schets van Cenk Özdemir (2012) samenbrengt, opgenomen in die Arduino Sound to Servo-zelfstudie waarnaar ik heb gelinkt boven.

De code in zijn huidige staat animeert de kop/staartmotor nog niet. Ik had één versie die dat wel deed, maar het vertraagde het reactievermogen van de mondbeweging. In het ideale geval zou ik willen dat de mond responsief blijft terwijl het hoofd en de staart langzaam door hun eigen animatie fietsen, maar dit is de huidige limiet van mijn Arduino-coderingsvermogen. Zodra ik erachter ben of suggesties van jullie krijg, zal ik de bijgewerkte code posten.

Stap 4:Alles samenvoegen

Met de code geladen en de audiokabel aangesloten op de aansluiting, zou je de bek van de vis moeten kunnen laten bewegen door een audiobron aan te sluiten op het vrije uiteinde van de kabel (ik gebruikte mijn telefoon om een ​​podcast af te spelen). Als het werkt, boor dan ergens een klein gaatje in de plastic visplaat, duw de krik erdoor en draai hem vast.

Om Alexa (of wat je maar wilt) door je vissen te laten praten, sluit je het vrije uiteinde van de audiokabel aan op de Y-adapter, de oplaadbare luidspreker op de andere ingang van de adapter en steek je de mannelijke stekker van de adapter in de audio-uitgang van de Echo Dot.

Zorg ervoor dat je speaker aanstaat en het volume op zowel de speaker als Alexa hoog staat. Roep vervolgens Alexa op en stel haar een vraag om haar aan het praten te krijgen (weer, grappen, nieuws). Je zou haar stem door de draagbare luidspreker moeten horen terwijl je tegelijkertijd getuige bent van de rubberen lippen van je vis die op tijd klapperen. Hoe dichter de luidspreker bij de kop van de vis is, hoe griezeliger het effect is.

Als het allemaal werkt, wordt de truc dan om de luidspreker en Arduino in de Billy Bass-behuizing te stoppen en deze te sluiten. Eerlijk gezegd ben ik dit nog steeds aan het uitzoeken.

Stap 5:Waar nu?

Er is hier nog veel te doen en ik verwelkom al uw suggesties om dit te verbeteren. Ik zou hier in de nabije toekomst graag een versie 2.0 voor posten.

1. Ik wil dat het hoofd en de staart animeren. De verbindingen zijn er en ik heb ze kunnen laten werken, maar niet zonder het reactievermogen van de mond op te offeren, wat van cruciaal belang is.

2. Ik wil dat de luidspreker kan opladen via de Arduino. Het lijkt eenvoudig genoeg, maar ik heb het nog niet gedaan.

3. Ik wil dat de rode Billy Bass-knop (of een vervanging) schakelt tussen een "spraak" -modus (meer over mondbeweging en de hele "pratende vis" -aantrekkingskracht, en een "muziek" -modus die meer gaat over de vis die in het rond flopt tijd voor muziek.

4. Schonere code. Ik weet zeker dat er veel restjes in de code zitten van de mashup die ik deed. Ik verwelkom alle pogingen om het op te ruimen.

5. Gebruik een kleinere Arduino. De Uno en Motor Shield zijn totaal overkill voor waar we het voor gebruiken. Ik denk dat een Adafruit Feather en hun 2-motorige schild voor de veer een mooi alternatief zou zijn. Misschien kun je er een hebben die de mond aandrijft en een aparte die de staartkopmotor aandrijft.

Code

  • SoundToDC
SoundToDCArduino
/* Laat een gelijkstroommotor naar geluid bewegen. Deze voorbeeldcode bevindt zich in het publieke domein. Gemaakt door Donald Bell, Maker Project Lab (2016). Gebaseerd op Sound to Servo van Cenk zdemir (2012) en DCMotorTest van Adafruit*/// inclusief de Adafruit motor shield-bibliotheek#include #include #include "utility/Adafruit_MS_PWMServoDriver.h"// Maak het motor shield-object met het standaard I2C-adresAdafruit_MotorShield AFMS =Adafruit_MotorShield(); // Of maak het met een ander I2C-adres (bijvoorbeeld voor stapelen)// Adafruit_MotorShield AFMS =Adafruit_MotorShield (0x61); // Selecteer welke 'poort' M1, M2, M3 of M4. In dit geval M1 voor mond en M2 voor staartAdafruit_DCMotor *myMotor =AFMS.getMotor(1);Adafruit_DCMotor *myOtherMotor =AFMS.getMotor(2);// Enkele andere variabelen die we nodig hebbenint SoundInPin =A0;int LedPin =12; // voor het geval u wilt dat een LED wordt geactiveerd terwijl de mond beweegt // de setup-routine wordt één keer uitgevoerd wanneer u op reset:void setup() {Serial.begin(9600); // stel seriële bibliotheek in op 9600 bps AFMS.begin(); // maken met de standaardfrequentie 1.6KHz //AFMS.begin(1000); // OF met een andere frequentie, zeg 1KHz // Stel de startsnelheid in, van 0 (uit) tot 255 (max. snelheid) myMotor->setSpeed(0); // mondmotor myMotor-> rennen (VOORUIT); // zet motor myMotor->run (RELEASE) aan; pinMode (SoundInPin, INPUT); pinMode (LedPin, UITGANG); myOtherMotor->setSpeed(0); //staartmotor myOtherMotor->run (VOORUIT); // zet motor myOtherMotor->run (RELEASE) aan; pinMode (SoundInPin, INPUT); }// de loop-routine wordt voor altijd herhaald:void loop() { uint8_t i; // lees de invoer op analoge pin 0:int sensorValue =analogRead (SoundInPin);// we brengen een andere waarde hiervan in kaart voor LED die een geheel getal kan zijn tussen 0..255 int LEDValue =map (sensorValue,0,512,0,255); // We brengen het hier in kaart naar het mogelijke bewegingsbereik. sensorValue =kaart (sensorValue,0,512,0,180); // merk op dat normaal gesproken de 512 1023 is omdat analoog lezen zo ver zou moeten gaan, maar ik heb dat veranderd om betere metingen te krijgen. int MoveDelayValue =map(sensorValue,0,255,0,sensorValue); // dezelfde meting een beetje meer naar beneden in kaart brengen om de tijd te berekenen die uw motor krijgtif (sensorValue> 10) { // om een ​​aantal statische meetvertragingen af ​​te sluiten (1); // een statische vertraging om de zaken glad te strijken...// verplaats nu de motor myMotor->run(FORWARD); voor (i=140; i<255; i++) { myMotor->setSpeed(i); }//for (i=200; i!=0; i--) {// myMotor->setSpeed(i); // vertraging (10);//} analogWrite (LedPin, sensorValue); // en doe die beweging in deze vertragingstijd myMotor->run (RELEASE); mijnOtherMotor->run(RELEASE); vertraging(1);} // Klaar. // zet de led weer uit. analoogWrite(LedPin, 0); // en dit herhaalt zich de hele tijd.}

Productieproces

  1. CO2-monitoring met K30-sensor
  2. Doofblinde communicatie met 1Sheeld/Arduino
  3. Bedien muntvangers met Arduino
  4. Big Mouth Billy Bass + Alexa
  5. Audiofrequentiedetector
  6. Arduino met Bluetooth om een ​​LED te bedienen!
  7. Capacitieve vingerafdruksensor met een Arduino of ESP8266
  8. Spelen met Nextion Display
  9. Audio afspelen in Arduino
  10. Nunchuk-gestuurde robotarm (met Arduino)
  11. Zonnestraling meten met Arduino