Animar una boca de Billy Bass con cualquier fuente de audio
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Acerca de este proyecto
Hace aproximadamente un mes, un artista llamado Brian Kane publicó un video viral que mostraba un pez cantando novedad de Big Mouth Billy Bass, aparentemente con la voz del asistente virtual Alexa de Amazon. Internet se volvió loco, y yo también, pero sobre todo quería saber cómo funcionaba para poder hacer el mío.
Después de ver una serie de proyectos de Raspberry Pi que utilizaban Alexa, inicialmente asumí que Brian había creado un proyecto de Pi con tecnología de Alexa que se duplicaba como un medio para animar el hardware Billy Bass existente, y ese puede ser el caso. Incluso planteé esta idea en mi programa semanal de YouTube, Maker Update.
Pero después de pensarlo un poco más, pensé que el truco más fácil sería una forma de simplemente usar el audio de un Amazon Echo de $ 49 y procesarlo a través de un Arduino para impulsar los motores existentes.
Ya tenía un Arduino y un protector de motor a mano (aunque esta era la primera vez que usaba el protector).
Luego, ordené el Billy Bass usado en Amazon por alrededor de $ 15. Estoy seguro de que puede comprar uno usado en una venta de garaje o en una tienda de segunda mano por menos dinero, pero quería uno rápidamente. También ordené el Echo Dot nuevo.
Con los ordenados, pasé a la investigación. Dos tutoriales me proporcionaron esperanza:esta guía de 2012 de sfool sobre el uso de un Arduino para hacer que un servo se mueva al sonido y esta guía de 2013 de Dotten sobre la comprensión de los animatronics de un juguete Billy Bass.
Entender que el Billy Bass (muy parecido a un Furby) es impulsado esencialmente por dos motores de juguete baratos de 5v DC, el problema se convierte simplemente en cómo hacer que estos motores se muevan en respuesta al sonido. Con un poco de prueba y error, encontré una solución viable. El código está lejos de ser perfecto y hay muchas otras características que quiero incorporar, pero quería mejorar esto para que todos puedan ayudar a mejorarlo.
Materiales necesarios
- Big Mouth Billy Bass Singing Fish (1)
- Arduino Uno (1)
- Fuente de alimentación Arduino Uno (1)
- Adafruit Motor Shield v2 (1)
- Miniconector para montaje en panel (1)
- Cable de conexión trenzado (varios colores ayudan)
- Amazon Echo Dot (aunque cualquier fuente de audio debería funcionar) (1)
- Pequeño altavoz recargable de algún tipo (1)
- Cable de audio con miniconector (⅛ ”) (1)
- Adaptador de cable divisor de miniconector (1)
Herramientas necesarias
- Destornillador pequeño
- Soldador y soldadura
- Pelacables
- Recortes
- Taladros y brocas
Paso 1:prepara el pescado
Para bien o para mal, el pescado usado estaba muerto a su llegada. Al menos no dudé en abrirlo y piratearlo. Para mi truco, simplemente afloje los tornillos en la parte posterior, ábralo y aplique una presión suave para desmontar los mazos de cables de modo que la parte posterior se pueda quitar por completo.
Para crear más espacio para los componentes electrónicos, agregaremos, desenroscaremos y quitaremos la placa de circuito Billy Bass y el zumbador piezoeléctrico.
Lo que queda es un mazo de cables de 4 cables que sobresale del pez. Esto incluye dos cables que animan la boca (puede verlos arrastrarse hacia el pez) y dos cables que levantan la cabeza o la cola según la dirección en la que haga funcionar el motor.
El último paso para preparar el pescado es cortar cuatro longitudes iguales de alambre de diferentes colores, exponer y estañar las puntas e insertar los extremos en cada uno de los cuatro enchufes del mazo de cables. En el siguiente paso, los conectaremos al protector del motor Arduino.
Paso 2:Prepare el protector del motor
Solo hay 4 conexiones que deberá realizar al blindaje del motor, y solo dos de ellas están soldadas. También puede conectar dos cables adicionales si desea experimentar con el motor de cola / cabeza.
Comencemos con la soldadura para terminar de una vez. Para crear una entrada de audio para su pez, tome dos longitudes iguales de cable de diferente color, pele los extremos y suelde uno a tierra y otro a Analógico 0. Recorte cualquier cable sobrante que atraviese la placa.
Ahora, pasemos estos cables al miniconector de montaje en panel para nuestra entrada de audio. La toma que tenía era una de esas elegantes tomas de interruptor mono con tres posibles conexiones. Todo lo que importa es que cree una entrada mono pasando el cable desde Analog 0 hasta el cable del conector que hace contacto con la punta del conector de audio. Luego, pase el cable de tierra a un cable en el conector que hace contacto con la base (o manga) del conector de audio.
A continuación, para conectar los motores de pescado al blindaje, pase el par de cables que van al motor de boca de pescado (negro y naranja) en los bloques de terminales del motor 1 y atorníllelos. Opcionalmente, puede pasar los cables del motor de cola / cabeza (blanco y rojo) a los terminales del motor 2, aunque el código aún no hace nada con este motor (más sobre esto en la siguiente sección). Para mi pez, el color del cable en los bloques de terminales se vuelve negro, naranja (amarillo en mi caso) para el motor de boca (M1) y blanco, rojo para el motor de cola opcional (M2).
Finalmente, verifique que el protector del motor tenga la manga del puente unida a los pines etiquetados como Puente VIN. Inicialmente me perdí esto y me estaba rascando la cabeza preguntándome por qué el escudo no se encendía. Ahora debería poder colocar el escudo en el Arduino Uno, encender el Arduino y ver un LED indicador de encendido iluminado en el escudo también. Si el escudo no se enciende, revisaría el jersey.
Paso 3:carga el código
Entonces, el código es un truco desordenado que reúne elementos del boceto de prueba de motor de CC (esencialmente la demostración para el escudo del motor) y el boceto de Sonido a Servo de Cenk Özdemir (2012), incluido en ese Arduino Sonido a Servo Tutorial al que vinculé sobre.
El código en su estado actual aún no anima el motor de cabeza / cola. Tenía una versión que lo hizo, pero ralentizó la capacidad de respuesta del movimiento de la boca. Idealmente, me gustaría que la boca permaneciera receptiva mientras la cabeza y la cola recorren lentamente su propia animación, pero este es el límite actual de mi capacidad de codificación Arduino. Tan pronto como lo averigüe o reciba sugerencias de ustedes, publicaré el código actualizado.
Paso 4:ponerlo todo junto
Con el código cargado y el cable de audio conectado al conector, debería poder hacer que la boca del pez se mueva simplemente conectando una fuente de audio al extremo libre del cable (usé mi teléfono para reproducir un podcast). Si está funcionando, taladre un pequeño agujero en algún lugar de la placa plástica de pescado, empuje el gato y apriételo en su lugar.
Para que Alexa (o lo que quieras) hable a través de tu pez, conecta el extremo libre del cable de audio al adaptador en Y, el altavoz recargable a la otra entrada del adaptador y luego conecta el enchufe macho del adaptador al salida de audio del Echo Dot.
Asegúrese de que su altavoz esté encendido y que el volumen esté alto tanto en el altavoz como en Alexa. Luego, llame a Alexa y hágale una pregunta para que hable (clima, bromas, noticias). Debería escuchar su voz a través del altavoz portátil y al mismo tiempo presenciar cómo los labios de goma de su pez se agitan en el tiempo. Cuanto más cerca esté el hablante de la cabeza del pez, más asombroso será el efecto.
Si todo está funcionando, el truco consiste en empaquetar el altavoz y Arduino en la caja de Billy Bass y cerrarlo. Honestamente, todavía estoy averiguando esto.
Paso 5:¿Dónde sigue?
Queda mucho por hacer aquí y agradezco todas sus sugerencias para mejorarlo. Me encantaría publicar una versión 2.0 para esto en un futuro próximo.
1. Quiero que la cabeza y la cola se animen. Las conexiones están ahí y he podido hacer que funcionen, pero no sin sacrificar la capacidad de respuesta de la boca, que es fundamental.
2. Quiero que el altavoz se pueda recargar desde el Arduino. Parece bastante simple, pero todavía no lo he hecho.
3. Quiero que el botón rojo de Billy Bass (o un sustituto) cambie entre un modo de "habla" (más sobre el movimiento de la boca y todo el atractivo del "pez que habla", y un modo de "música" que se trata más de los peces que flotan en tiempo para la música.
4. Código de limpiador. Estoy seguro de que hay muchas sobras en el código del mashup que hice. Agradezco cualquier esfuerzo por limpiarlo.
5. Utilice un Arduino más pequeño. El Uno y Motor Shield son totalmente exagerados para lo que lo estamos usando. Creo que una Adafruit Feather y su escudo de 2 motores para la pluma serían una buena alternativa. Quizás pueda tener uno que accione la boca y otro separado que accione el motor de la cabeza de la cola.
Código
- SoundToDC
SoundToDC Arduino
/ * Hacer que un motor de CC se mueva a sonido. Este código de ejemplo es de dominio público. Creado por Donald Bell, Maker Project Lab (2016). Basado en Sound to Servo de Cenk zdemir (2012) y DCMotorTest de Adafruit * /// incluir la biblioteca de protectores de motor Adafruit # incluir#include #include "utility / Adafruit_MS_PWMServoDriver.h" // Cree el objeto de protección del motor con la dirección I2C predeterminada Adafruit_MotorShield AFMS =Adafruit_MotorShield (); // O créelo con una dirección I2C diferente (digamos para apilar) // Adafruit_MotorShield AFMS =Adafruit_MotorShield (0x61); // Seleccione qué 'puerto' M1, M2, M3 o M4. En este caso, M1 para boca y M2 para tailAdafruit_DCMotor * myMotor =AFMS.getMotor (1); Adafruit_DCMotor * myOtherMotor =AFMS.getMotor (2); // Necesitamos otras variables en SoundInPin =A0; int LedPin =12; // en caso de que desee que se active un LED mientras la boca se mueve // la rutina de configuración se ejecuta una vez cuando presiona reiniciar:void setup () {Serial.begin (9600); // configurar la biblioteca serial a 9600 bps AFMS.begin (); // crear con la frecuencia predeterminada 1.6KHz //AFMS.begin(1000); // O con una frecuencia diferente, digamos 1KHz // Establecer la velocidad de inicio, de 0 (apagado) a 255 (velocidad máxima) myMotor-> setSpeed (0); // motor de boca myMotor-> run (FORWARD); // enciende el motor myMotor-> run (RELEASE); pinMode (SoundInPin, INPUT); pinMode (LedPin, SALIDA); myOtherMotor-> setSpeed (0); // motor de cola myOtherMotor-> run (FORWARD); // enciende el motor myOtherMotor-> run (RELEASE); pinMode (SoundInPin, INPUT); } // la rutina del ciclo se repite una y otra vez para siempre:void loop () {uint8_t i; // leemos la entrada en el pin analógico 0:int sensorValue =analogRead (SoundInPin); // asignamos otro valor de este para LED que puede ser un número entero entre 0..255 int LEDValue =map (sensorValue, 0,512,0,255); // Lo asignamos aquí hasta el rango de movimiento posible. sensorValue =map (sensorValue, 0,512,0,180); // tenga en cuenta que normalmente el 512 es 1023 debido a que la lectura analógica debería llegar tan lejos, pero lo cambié para obtener mejores lecturas. int MoveDelayValue =map (sensorValue, 0,255,0, sensorValue); // mapeando la misma lectura un poco más hacia abajo para calcular el tiempo que tarda el motor si (sensorValue> 10) {// para cortar algunas lecturas estáticas delay (1); // un retardo estático para suavizar las cosas ... // ahora mueva el motor myMotor-> run (FORWARD); para (i =140; i <255; i ++) {myMotor-> setSpeed (i); } // para (i =200; i! =0; i--) {// myMotor-> setSpeed (i); // retardo (10); //} analogWrite (LedPin, sensorValue); // y haz ese movimiento en este tiempo de retardo myMotor-> run (RELEASE); myOtherMotor-> ejecutar (LIBERAR); delay (1);} // Hecho. // apaga el led de nuevo. analogWrite (LedPin, 0); // y esto se repite todo el tiempo.}
Proceso de manufactura
- Monitoreo de CO2 con sensor K30
- Comunicación para personas sordociegas con 1Sheeld / Arduino
- Controlar el aceptador de monedas con Arduino
- Big Mouth Billy Bass + Alexa
- Detector de frecuencia de audio
- ¡Arduino con Bluetooth para controlar un LED!
- Sensor capacitivo de huellas dactilares con Arduino o ESP8266
- Jugando con Nextion Display
- Reproducir audio en Arduino
- Brazo robótico controlado por Nunchuk (con Arduino)
- Medición de la radiación solar con Arduino