Tabla de contenido:

Hacer canciones con un Arduino y un motor de CC: 6 pasos
Hacer canciones con un Arduino y un motor de CC: 6 pasos

Video: Hacer canciones con un Arduino y un motor de CC: 6 pasos

Video: Hacer canciones con un Arduino y un motor de CC: 6 pasos
Video: Creando CANCIONES con ARDUINO 🔊🎼 2024, Mes de julio
Anonim
Hacer canciones con un Arduino y un motor de CC
Hacer canciones con un Arduino y un motor de CC

El otro día, mientras me desplazaba por algunos artículos sobre Arduino, vi un proyecto interesante que utilizaba motores paso a paso controlados por Arduino para crear melodías cortas. El Arduino usó un pin PWM (Modulación de ancho de pulso) para ejecutar el motor paso a paso a frecuencias específicas, correspondientes a notas musicales. Al cronometrar qué frecuencias se reproducían y cuándo, se podía escuchar una melodía clara desde el motor paso a paso.

Sin embargo, cuando lo probé yo mismo, descubrí que el motor paso a paso que tengo no puede girar lo suficientemente rápido para crear un tono. En su lugar, utilicé un motor de CC, que es relativamente sencillo de programar y conectar a un Arduino. Se puede usar un IC L293D común para manejar fácilmente el motor desde un pin Arduino PWM, y la función de tono nativo () en Arduino puede generar la frecuencia necesaria. Para mi sorpresa, no encontré ningún ejemplo o proyecto que usara un motor de CC en línea, por lo que este Instructables es mi respuesta para remediarlo. ¡Empecemos!

PD Supongo que ya tiene algo de experiencia con Arduino y está familiarizado con su lenguaje de programación y hardware. Debe saber qué son las matrices, qué es PWM y cómo usarlo, y cómo funcionan el voltaje y la corriente, solo por nombrar algunas cosas. Si aún no está allí o acaba de comenzar con Arduino, no se preocupe: pruebe esta página de inicio del sitio web oficial de Arduino y vuelva cuando esté listo.:)

Suministros

  • Arduino (usé un UNO pero puedes usar un Arduino diferente si quieres)
  • Motor estándar de 5 V CC, preferiblemente uno que pueda tener un ventilador conectado (consulte la imagen en "Montaje del circuito"
  • L293D IC
  • Tantos botones como notas en la canción que desea tocar
  • Tablero de circuitos
  • Cables de puente

Paso 1: descripción general

Así es como funciona el proyecto: el Arduino generará una onda cuadrada a una frecuencia determinada, que envía al L293D. El L293D está conectado a una fuente de alimentación externa que utiliza para alimentar el motor a la frecuencia dada por Arduino. Al evitar que el eje del motor de CC gire, se puede escuchar que el motor se apaga y enciende a la frecuencia, lo que produce un tono o nota. Podemos programar el Arduino para que reproduzca notas cuando se presionan los botones, o para que los reproduzca automáticamente.

Paso 2: Montaje del circuito

Montaje del circuito
Montaje del circuito
Montaje del circuito
Montaje del circuito

Para ensamblar el circuito, simplemente siga el diagrama de Fritzing anterior.

Consejo: La nota del motor se escucha mejor cuando el eje no está girando. Puse un ventilador en el eje de mi motor y usé un poco de cinta adhesiva para mantener el ventilador quieto mientras el motor funcionaba (ver imagen). Esto impidió que el eje girara y produjo un tono claro y audible. Es posible que tenga que hacer algunos ajustes para obtener un tono limpio de su motor.

Paso 3: cómo funciona el circuito

Cómo funciona el circuito
Cómo funciona el circuito

El L293D es un circuito integrado que se utiliza para controlar dispositivos de alta corriente y voltaje relativamente alto, como relés y motores. El Arduino no puede conducir la mayoría de los motores directamente desde su salida (y el EMF trasero del motor puede dañar los circuitos digitales sensibles del Arduino), por lo que un IC como el L293D se puede usar con una fuente de alimentación externa para impulsar fácilmente el motor de CC. Al ingresar una señal en el L293D, se emitirá la misma señal al motor de CC sin riesgo de dañar el Arduino.

Arriba hay un esquema funcional / pinout del L293D de su hoja de datos. Dado que solo estamos conduciendo 1 motor (el L293D puede conducir 2), solo necesitamos un lado del IC. El pin 8 es alimentación, los pines 4 y 5 son GND, el pin 1 es la salida PWM del Arduino y los pines 2 y 7 controlan la dirección del motor. Cuando la patilla 2 es ALTA y la patilla 7 es BAJA, el motor gira en una dirección, y cuando la patilla 2 es BAJA y la patilla 7 es ALTA, el motor gira en la otra dirección. Dado que no nos importa en qué dirección gire el motor, no importa si los pines 2 y 7 son BAJOS o ALTOS, siempre que sean diferentes entre sí. Los pines 3 y 6 se conectan al motor. Puede conectar todo al otro lado (pines 9-16) si lo desea, pero tenga en cuenta que los pines de alimentación y PWM cambian de lugar.

Nota: Si está utilizando un Arduino que no tiene suficientes pines para cada botón, puede usar una red de resistencias para conectar todos los interruptores a un pin analógico, como en este instructivo. Cómo funciona esto está fuera del alcance de este proyecto, pero si alguna vez ha utilizado un DAC R-2R, le resultará familiar. Tenga en cuenta que el uso de un pin analógico requerirá que se reescriban grandes porciones del código, ya que la biblioteca de botones no se puede utilizar con pines analógicos.

Paso 4: cómo funciona el código

Para facilitar el manejo de todos los botones, utilicé una biblioteca llamada "Botón" de madleech. Incluí la biblioteca a primera hora. A continuación, en las líneas 8-22, definí las frecuencias de las notas necesarias para tocar Twinkle, Twinkle, Little Star (la canción de ejemplo), el pin que usaré para controlar el L293D y los botones.

En la función de configuración, inicialicé el Serial, los botones y configuré el pin del controlador para el L293D en modo de salida.

Finalmente, en el bucle principal verifiqué si se había presionado un botón. Si es así, el Arduino reproduce la nota correspondiente e imprime el nombre de la nota en el Monitor serial (útil para saber qué notas son cuáles en su tablero). Si se suelta una nota, el arduino detiene cualquier sonido con noTone ().

Desafortunadamente, debido a la forma en que está estructurada la biblioteca, no pude encontrar una manera de verificar si se presionó o soltó un botón de una manera menos detallada que usando 2 condicionales por nota. Otro defecto de este código es que si presiona dos botones simultáneamente y luego suelta uno de ellos, ambas notas se detendrían, porque noTone () detiene la generación de notas independientemente de la nota que la haya activado.

Paso 5: programar una canción

En lugar de usar botones para tocar notas, también puede programar el Arduino para que reproduzca una melodía automáticamente. Aquí hay una versión modificada del primer boceto que reproduce Twinkle, Twinkle, Little Star en el motor. La primera parte del boceto es la misma: define las frecuencias de las notas y el tonePin. Llegamos a la parte nueva en bpm = "100". Establezco los latidos por minuto (bpm) y luego uso algunas matemáticas para calcular el número de milisegundos por latido al que equivalen los bpm. Para hacer esto, utilicé una técnica llamada análisis dimensional (no se preocupe, no es tan difícil como parece). Si alguna vez tomaste un curso de química en la escuela secundaria, definitivamente usaste el análisis dimensional para convertir entre unidades. Los flotadores () están ahí para garantizar que nada en la ecuación se redondee hasta el final para mayor precisión.

Después de tener el número de ms / tiempo, lo dividí o multipliqué apropiadamente para encontrar los valores de milisegundos de las diferentes duraciones de nota que se encuentran en la música. Luego hago un arreglo de cada nota en orden cronológico, y otro con la duración de cada nota. Es fundamental que el índice de cada nota coincida con el índice de su duración, de lo contrario, su melodía sonará. Pongo las notas de Twinkle, Twinkle, Little Star aquí como ejemplo, pero puedes probar cualquier canción o secuencia de notas que quieras.

La verdadera magia ocurre en la función de bucle. Para cada una de las notas, toco el tono durante un tiempo que especifiqué en la matriz beat_values. En lugar de usar el retardo aquí, lo que haría que el tono no se reprodujera, grabé el tiempo desde que el programa comenzó con la función millis () y lo reste del tiempo actual. Cuando el tiempo excede el tiempo que especifiqué la nota para que dure en la matriz beat_values, detengo la nota. El retraso después del bucle for está ahí para agregar un espacio entre las notas, asegurando que las notas posteriores con la misma frecuencia no se mezclen.

Paso 6: retroalimentación

Eso es todo para este proyecto. Si hay algo que no comprende o si tiene alguna sugerencia, no dude en ponerse en contacto conmigo. Como este es mi primer Instructables, agradecería mucho los comentarios y sugerencias sobre cómo mejorar este contenido. ¡Hasta la próxima!

Recomendado: