En este proyecto vamos a construir una pieza de entretenimiento usando Arduino. Todos tenemos el hábito de tocar Table o Pen para crear cualquier música aleatoria. Por supuesto, puede que no se considere un buen manierismo, pero a todos nos gusta hacerlo al menos una vez. Por lo tanto, pensé en llevarlo al siguiente nivel utilizando la capacidad de Arduino para reproducir tonos. Una vez que construya este proyecto, podrá generar tonos tocando con los dedos cualquier elemento conductor y crear sus propios ritmos, es como tocar el piano en la palma de su mano. Suena bien, así que vamos a construirlo.
Componentes requeridos:
Los materiales necesarios para este proyecto se enumeran a continuación, no es obligatorio ceñirse a los mismos. Una vez que aprenda el concepto, podrá utilizar su propia forma de construirlo.
- Arduini Pro Mini
- Peizo Speaker
- Sensor flexible
- Guantes de dedo
- Resistencias 10K
- Transistores BC547
- Batería de 9V
Diagrama de circuito y explicación:
El diagrama de circuito para este Arduino Palm Piano se muestra a continuación.
El proyecto utiliza un total de cuatro sensores, es decir, dos sensores flexibles y dos pares Darlington que actúan como un sensor táctil. También hemos utilizado dos resistencias pull-down R1 y R2 de valor 10k cada una, que actuarán como una resistencia pull-down para el sensor Flex. Aquí el sensor Flex se usa para generar tres tonos diferentes usando un dedo, según cuánto se haya doblado. Entonces podemos producir 6 sonidos con dos dedos. Aprenda aquí sobre el sensor flexible.
Pareja Darlington:
Antes de continuar, es importante saber qué es un Darlington y cómo funciona exactamente en nuestro proyecto. El par Darlington se puede definir como dos transistores bipolares conectados de tal manera que la corriente amplificada por el primero se amplifica aún más por el segundo transistor. Un par de Darlington se muestra en la siguiente imagen:
Como se muestra arriba, hemos usado dos transistores BC547 cuyos colectores están unidos para reunirse y el emisor del primer transistor está conectado con la base del segundo transistor. Este circuito actúa como un amplificador con ganancia, lo que significa que cualquier pequeña señal dada a la base del primer transistor es suficiente para polarizar la base del segundo transistor. Nuestro cuerpo actúa como tierra aquí, así que cada vez que tocamos la base del transistor, el segundo transistor se polariza. Utilizando esto a nuestro favor, hemos construido el sensor táctil para este proyecto.
Los pines número 2 y 3 son los pines de interrupción en el Arduino que se elevarán usando resistencias internas de pull-up y luego estos pines se mantendrán a tierra cada vez que se cierre el interruptor Darlington. De esta forma cada vez que toquemos el cable (desde la base del 1er transistor) se disparará una interrupción desde el Arduino.
El uso de dos dedos puede producir solo dos tipos de tonos, por lo que también agregué un sensor flexible que alterará el tono en función de cuánto esté doblado. He programado para producir tres tonos diferentes por dedo en función de cuánto se dobla el dedo (sensor de flexión). Puede aumentar el número si desea tener más tonos en la punta de sus dedos.
Hice la tabla completa en una tabla perforada para que encaje fácilmente en mis palmas, pero también puedes usar una tabla de pruebas. Solo asegúrese de que su cuerpo toque el suelo del circuito en algún momento. Una vez que suelde todo, debería verse así
He utilizado dos guantes para asegurar los cables del par Darlington y el sensor flexible en la posición que se muestra arriba. Puede tener su propia idea (mejor si es posible) para asegurarlos en su lugar mientras toca sus tonos.
Programación Arduino:
El programa para este Arduino Tap Tone Generator es bastante sencillo. Solo tenemos que estar atentos a las interrupciones de los cables Darlington y, si encontramos una, tenemos que reproducir el tono, que depende de cuánto se doble el sensor flexible. El código completo se proporciona al final de esta publicación, pero he explicado algunos fragmentos importantes a continuación.
Nota: Este programa funciona con la ayuda de la biblioteca "pitches.h". Así que asegúrese de haber agregado el archivo de encabezado a su programa antes de compilarlo. Puede descargar el archivo de encabezado pitches.h desde aquí.
En la función de configuración , inicializamos los pines 2 y 3 como Entrada con resistencias pull-up. También les declaramos como pines de interrupción y ejecutar el TONE1 () cuando hay una interrupción en el pin 2 y la función Tone2 () cuando hay una interrupción en el 3 rd alfiler. Estas interrupciones se activarán cada vez que estos pines se pongan BAJOS de su estado levantado.
configuración vacía () {pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); Serial.begin (9600); }
Dentro de la función de bucle , comprobamos constantemente cuánto está doblado el sensor flexible. Mi FlexSensor 1, por ejemplo, dio valores alrededor de 200 cuando se dejó plano y bajó hasta 130 cuando lo doblé al máximo, por lo que he mapeado el valor de 200 a 130 como 1 a 3 ya que tengo que jugar 3 tipos diferentes de tonos. Tienes que modificar estas dos líneas en función de los valores de tu sensor Flex y el número de tonos.
bucle vacío () {flexSensor1 = map (analogRead (A0), 200,130,1,3); // Mapee con sus propios valores basados en su sensor flexible flexSensor2 = map (analogRead (A1), 170,185,1,3); // Realice un mapa con sus propios valores basados en su sensor flexible}
Como vimos anteriormente, la función tone1 () se ejecutará cuando se detecte una interrupción en el pin 2. Lo que sucede dentro de la función tone1 () se muestra arriba. Observamos los valores de FlexSensor1 y reproducimos un tono basado en el valor de flexSesnor. Los tonos se reproducirán utilizando la función de tono de Arduino. Hemos explicado la función tone () en nuestro proyecto anterior.
void tone1 () {if (flexSensor1 == 1) tone (8, NOTE_D4,50); else if (flexSensor1 == 2) tone (8, NOTE_A3,50); else if (flexSensor1 == 3) tone (8, NOTE_G4,50); si no tono (8, NOTE_D4,50); }
La siguiente línea se utiliza para reproducir el tono. Puede reproducir cualquier tono que esté disponible en el archivo de encabezado “pitches.h”. La línea anterior, por ejemplo, reproduce el NOTE_A3 en el pin durante 50 milisegundos.
tono (8, NOTE_A3,50); // tono (PinNum, nombre de nota, duración);
Trabajando:
Una vez que su hardware esté listo, cargue el código y móntelo en sus dedos. Asegúrese de que su cuerpo toque la tierra del circuito en algún momento. Ahora simplemente toque cualquier material conductor o su cuerpo y debería poder escuchar el tono respectivo. Puede reproducir su propia melodía o música tocando en diferentes intervalos y en diferentes posiciones.
El siguiente video muestra el funcionamiento completo del proyecto. Espero que haya disfrutado construyendo el proyecto, cualquier sugerencia o pregunta se puede publicar en la sección de comentarios a continuación. Consulte también nuestro proyecto Arduino Audio Player y Arduino Tone Generator.