Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Melodía de feliz cumpleaños en Arduino Nano con polifonía de 3 vías

Componentes y suministros

Arduino Nano R3
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Reproduce el tema de polifonía "Feliz cumpleaños" en Arduino Nano con tres timbres en una sola mini placa de pruebas.

En primer lugar, demostración

Conecte esta cosa a cualquier fuente de alimentación USB (no solo una computadora) y reproducirá la melodía de "Feliz cumpleaños" indefinidamente ... como casi ... hasta que se canse de ella =]

Por cierto, las luces parpadean intactas con cada cambio de nota en un canal / zumbador correspondiente.

Esquemas

La idea era hacer un dispositivo súper compacto sin (casi) soldaduras.

Finalmente logré colocar todo lo necesario en una pequeña placa como esta:

Los orificios están interconectados dentro de la placa de pruebas de esta manera:

El truco aquí es que la placa Arduino Nano encaja en una placa de este tipo, lo que nos permite conectar PERFECTAMENTE algunos componentes adicionales en ambos lados de la placa.

Lo siento, chicos ... Soy demasiado vago para dibujar un diagrama aquí, pero este caso es TAN simple que estoy seguro de que estos primeros planos serán más que suficientes para resolver todo =]

Como puede ver, estoy usando la placa Arduino Nano v3.0 de Gravitech aquí, pero cualquier análogo servirá. Los zumbadores y los LED aquí son MUY ordinarios. En realidad, no tienen que coincidir con ningún parámetro especial.

Las resistencias aquí son de 100 ohmios ... aunque el "estándar" común para la protección de sobrecarga de LED es de 220 ohmios ... pero a quién le importa ... ¯ \ _ (ツ) _ / ¯

Lo único que probablemente no sea tan obvio aquí en estas fotos es que los pines de los timbres se insertan en la placa de pruebas de esta manera:

También tenga en cuenta que el del centro es más grande que los demás, eso se debe a que este se usa para el canal de música "bajo" ☝🏻

... ¡es una broma! ^ __ ^ Todos chillan como un coro loco de ratones sin ninguna diferencia en sus capacidades de sonido =]

Por lo tanto, puede usar tres timbres idénticos si lo desea sin ningún problema, sin embargo, tendrá que colocarlos en posiciones un poco diferentes en la placa y también cambiar los números de pin de salida en el código del programa de acuerdo con la ubicación de sus nuevos timbres.

Además, tenga en cuenta otro pequeño "truco" aquí ... de todos modos, estamos en Hack ster aquí o qué? =] Entonces estoy usando varias E / S de Arduino pines aquí como suelo pines para zumbadores y LED 😱😱. Sí ... eso es correcto. En realidad, si establece un estado "BAJO" para cualquier pin de E / S de Arduino en su programa, entonces puede usar estos pines de la misma manera que usa los pines GND estándar en las placas Arduino. ¿Guay, verdad?;)

Sobre el programa ...

La lista completa del boceto IDE de Arduino se proporciona a continuación. Sin embargo, tendrá que instalar una biblioteca "Tone" adicional para poder compilar el boceto que puede descargar aquí:

https://www.dropbox.com/s/q1udxg4yi47emeo/Tone.zip?dl=0

(si hay una ventana emergente con una "propuesta" de registro, simplemente ciérrela con el botón "x" en la esquina)

La forma más fácil de instalar esta biblioteca es la siguiente:en el menú principal de Arduino IDE, elija Sketch - Incluir biblioteca - Agregar biblioteca .ZIP ... y luego seleccione su archivo zip descargado ... fácil ¯ \ _ (ツ) _ / ¯

Esta biblioteca es necesaria para realizar la generación simultánea de varios tonos en un solo controlador (utiliza algunos temporizadores de hardware adicionales e interrupciones de hardware "debajo del capó" para lograr este objetivo). En pocas palabras, es una especie de "redneck-multitasking" en un solo núcleo de procesador sin ningún sistema operativo =]

Por cierto, aquí está el autor de la biblioteca (¡gracias hermano! =]):

http://playground.arduino.cc/Profiles/Bhagman

... y la página de GitHub de la biblioteca:

https://github.com/bhagman/Tone

DESCARGO DE RESPONSABILIDAD 🙂:
Hablando con franqueza, el código de mi programa aquí es bastante voluminoso y difícil de leer. Esto se debe principalmente a esta necesidad de "hacer malabarismos" con tres hilos de melodía "independientes" simultáneamente desde un solo flujo de comando lineal. Realmente estaba pensando en refactorizar el código más tarde para poder separar las melodías entre sí y usarlo en el futuro para tocar diferentes canciones ... pero probablemente no lo haré =]

Buena suerte. Se agradece cualquier comentario.

Gracias por leer hasta el final =]

Código

  • Feliz_cumpleaños
Feliz cumpleaños Arduino
¡No olvide instalar la biblioteca de tonos!
 #include  Tone solo; Tone bass; Tone rythm; const int t =600; // duración de la nota de un cuartoconst int tt =t * 2; const int t14 =round (t * 1/4); const int t24 =round (t * 2/4); const int t34 =round (t * 3/4); const int bassLedPin =15; // pin de señal de led de graves (también conocido como A1) const int rythmLedPin =17; // pin de señal led de ritmo (también conocido como A3) const int soloLedPin =19; // pin de señal LED solo (también conocido como A5) void wait (Tone t) {while (t.isPlaying ()) {}} int bassLedState =LOW; void switchBassLed () {if (bassLedState ==LOW) bassLedState =HIGH; de lo contrario bassLedState =LOW; digitalWrite (bassLedPin, bassLedState);} int rythmLedState =LOW; void switchRythmLed () {if (rythmLedState ==LOW) rythmLedState =HIGH; más rythmLedState =LOW; digitalWrite (rythmLedPin, rythmLedState);} int soloLedState =LOW; void switchSoloLed () {if (soloLedState ==LOW) soloLedState =HIGH; else soloLedState =LOW; digitalWrite (soloLedPin, soloLedState);} configuración vacía (void) {pinMode (14, SALIDA); // pin de tierra del led (también conocido como A0) pinMode (16, SALIDA); // pin de tierra del led (también conocido como A2) pinMode (18, SALIDA); // pin de tierra del led (también conocido como A4) pinMode (bassLedPin, OUTPUT); // pin de señal de led de graves pinMode (rythmLedPin, OUTPUT); // pinMode de señal led de ritmo pinMode (soloLedPin, OUTPUT); // pin de señal LED solo pinMode (2, OUTPUT); // pin de tierra del zumbador solo pinMode (9, SALIDA); // pin de tierra del zumbador de ritmo solo.begin (6); // pin de señal de zumbador solo bass.begin (12); // pin de señal del zumbador de graves rythm.begin (0); // pin de señal de zumbador de ritmo solo.play (NOTE_D4, t34); switchSoloLed (); esperar (solo); solo.play (NOTE_D4, t14); switchSoloLed (); esperar (solo);} bucle vacío (vacío) {bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bajo reproducir (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bajo reproducir (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bajo reproducir (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_FS4, tt); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_FS4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); bajo reproducir (NOTE_A4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_D4, t34); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); solo.play (NOTE_D4, t14); switchSoloLed (); esperar (ritmo); bajo reproducir (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_FS4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_D4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_A4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_A4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, tt); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bajo reproducir (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D4, t34); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); solo.play (NOTE_D4, t14); switchSoloLed (); esperar (ritmo); bajo reproducir (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D5, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_B4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_C4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_FS4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_E5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_G5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_E4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_E5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_G5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_G4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_C5, t34); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_E5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_G5, t14); switchRythmLed (); solo.play (NOTE_C5, t14); switchSoloLed (); esperar (ritmo); bajo reproducir (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_B4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_D3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_FS3, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_A4, t); switchSoloLed (); esperar (ritmo); esperar (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, tt); switchSoloLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); bajo reproducir (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); esperar (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); solo.play (NOTE_D4, t34); switchSoloLed (); esperar (solo); solo.play (NOTE_D4, t14); switchSoloLed (); esperar (solo);} 

Proceso de manufactura

  1. Monitoreo de CO2 con sensor K30
  2. Comunicación para personas sordociegas con 1Sheeld / Arduino
  3. Controlar el aceptador de monedas con Arduino
  4. Flores - Arduino Nano, CrazyCircuits, DFRobot
  5. ¡Arduino con Bluetooth para controlar un LED!
  6. Sensor capacitivo de huellas dactilares con Arduino o ESP8266
  7. Jugando con Nextion Display
  8. Brazo robótico controlado por Nunchuk (con Arduino)
  9. Arduino Nano:Controla 2 motores paso a paso con joystick
  10. Contador Geiger de mano con Arduino Nano
  11. Medición de la radiación solar con Arduino