Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Feliz aniversário Melodia no Arduino Nano com polifonia de 3 vias

Componentes e suprimentos

Arduino Nano R3
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Jogue o tema polifônico "Feliz aniversário" no Arduino Nano com três campainhas em uma única placa de ensaio.





Em primeiro lugar - demonstração


Conecte esta coisa a qualquer fonte de alimentação USB (não apenas um computador) e ela tocará a melodia de "Feliz aniversário" indefinidamente ... quase ... até você ficar realmente cansado disso =]

BTW, as luzes estão piscando intactas com cada mudança de nota em um canal / campainha correspondente.





Esquemas


A ideia era fazer um aparelho super compacto com (quase) nenhuma solda.

Por fim, consegui encaixar tudo o que era necessário em uma pequena placa de ensaio como esta:

Os orifícios são interconectados dentro da placa de ensaio desta forma:

O truque aqui é que a placa Arduino Nano se encaixa nessa placa de ensaio, permitindo-nos apenas conectar alguns componentes adicionais em ambos os lados da placa de ensaio.

Desculpe, pessoal ... Estou com preguiça de desenhar diagramas aqui, mas este caso é TÃO simples que tenho certeza que esses close-ups serão mais do que o suficiente para descobrir tudo =]

Como você pode ver, estou usando a placa Arduino Nano v3.0 da Gravitech aqui, mas qualquer analógica serve. As campainhas e os LEDs aqui são MUITO comuns. Eles não precisam corresponder a nenhum parâmetro especial, na verdade.

Os resistores aqui são de 100 Ohm ... embora o "padrão" comum para proteção de sobrecarga de LED seja de 220 Ohm ... mas quem se importa ... ¯ \ _ (ツ) _ / ¯

A única coisa que provavelmente não é tão óbvia aqui nessas fotos é que os pinos da campainha são inseridos na placa de ensaio desta forma:

Observe também que o do centro é maior do que os outros - isso porque este é usado para o canal de música "baixo" ☝🏻

... estou brincando! ^ __ ^ Todos eles guincham como um coro de camundongos maluco, sem nenhuma diferença em suas capacidades sonoras =]

Portanto, você pode usar três campainhas idênticas se desejar sem problemas; no entanto, você terá que colocá-las em posições um pouco diferentes na placa de ensaio e também alterar os números dos pinos de saída no código do programa de acordo com a sua nova localização das campainhas.

Além disso, observe outro pequeno "hack" aqui ... de qualquer maneira, estamos no hack ster aqui ou o quê? =] Estou usando várias E / S do Arduino alfinetes aqui como um solo pinos para campainhas e LEDs 😱😱. Sim está certo. Na verdade, se você definir um estado "LOW" para qualquer pino de E / S do Arduino em seu programa, poderá usar esses pinos da mesma forma que usa os pinos GND padrão nas placas Arduino. Legal certo?;)





Sobre o programa ...


A lista completa do esboço do IDE do Arduino é fornecida abaixo. No entanto, você terá que instalar uma biblioteca "Tone" adicional para poder compilar o esboço, que pode ser baixado aqui:

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

(se houver uma janela pop-up com uma "proposta" de registro, basta fechá-la com o botão "x" no canto)

A maneira mais fácil de instalar esta biblioteca é a seguinte:no menu principal do Arduino IDE, escolha Sketch - Incluir Biblioteca - Adicionar Biblioteca .ZIP ... e, em seguida, selecione o arquivo zip baixado ... еasy ¯ \ _ (ツ) _ / ¯

Esta biblioteca é necessária para realizar a geração simultânea de vários tons em um único controlador (ela usa alguns temporizadores de hardware adicionais e interrupções de hardware "sob o capô" para atingir esse objetivo). Simplificando, é algum tipo de "multitarefa caipira" em um único núcleo de processador sem nenhum sistema operacional =]

Aliás, aqui está o autor da biblioteca (obrigado mano! =]):

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

... e a página GitHub da biblioteca:

https://github.com/bhagman/Tone

AVISO LEGAL 🙂:
Falando francamente, o código do meu programa aqui é bastante volumoso e difícil de ler. Isso se deve principalmente a essa necessidade de "fazer malabarismos" com três threads de melodia "independentes" simultaneamente a partir de apenas um fluxo de comando linear. Eu estava realmente pensando em refatorar o código mais tarde para poder separar as melodias umas das outras e usá-lo no futuro para tocar músicas diferentes ... mas provavelmente não irei =]

Então boa sorte. Qualquer feedback é apreciado.

Obrigado por ler até o fim =]

Código

  • Happy_birthday
Happy_birthday Arduino
Não se esqueça de instalar a biblioteca de tons !!
 #include  Tone solo; Tone bass; Tone rythm; const int t =600; // duração da nota quaterconst 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; // pino de sinal de baixo led (também conhecido como A1) const int rythmLedPin =17; // pino de sinal de led de ritmo (também conhecido como A3) const int soloLedPin =19; // pino de sinal de led solo (também conhecido como A5) void wait (Tone t) {while (t.isPlaying ()) {}} int bassLedState =LOW; void switchBassLed () {if (bassLedState ==LOW) bassLedState =HIGH; senão bassLedState =LOW; digitalWrite (bassLedPin, bassLedState);} int rythmLedState =LOW; void switchRythmLed () {if (rythmLedState ==LOW) rythmLedState =HIGH; senão rythmLedState =LOW; digitalWrite (rythmLedPin, rythmLedState);} int soloLedState =LOW; void switchSoloLed () {if (soloLedState ==LOW) soloLedState =HIGH; senão soloLedState =LOW; digitalWrite (soloLedPin, soloLedState);} configuração de void (void) {pinMode (14, OUTPUT); // pino de aterramento do led (também conhecido como A0) pinMode (16, OUTPUT); // pino de aterramento do led (também conhecido como A2) pinMode (18, OUTPUT); // pino de aterramento do led (também conhecido como A4) pinMode (bassLedPin, OUTPUT); // pino do sinal led baixo pinMode (rythmLedPin, OUTPUT); // pino de sinal de led de ritmo pinMode (soloLedPin, OUTPUT); // pino de sinal de led solo pinMode (2, OUTPUT); // pino de aterramento da campainha solo pinMode (9, OUTPUT); // pino de aterramento da campainha do ritmo solo.begin (6); // pino de sinal de campainha solo bass.begin (12); // pino do sinal da campainha de graves rythm.begin (0); // pino de sinal da campainha de ritmo solo.play (NOTE_D4, t34); switchSoloLed (); espera (solo); solo.play (NOTE_D4, t14); switchSoloLed (); esperar (solo);} void loop (void) {bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); tocar baixo (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); tocar baixo.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); tocar baixo.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_FS4, tt); switchSoloLed (); espera (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); bass.play (NOTE_FS4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); espera (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); esperar (ritmo); tocar baixo (NOTE_A4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_D4, t34); switchSoloLed (); espera (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); solo.play (NOTE_D4, t14); switchSoloLed (); esperar (ritmo); tocar baixo.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_FS4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_D4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_A4, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_A4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, tt); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); tocar baixo (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D4, t34); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); solo.play (NOTE_D4, t14); switchSoloLed (); aguarde (ritmo); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_D5, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_B4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_D4, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_C4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_FS4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_E5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_G5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_E4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_E4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_E5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_G5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_G4, t); switchBassLed (); rythm.play (NOTE_C5, t24); switchRythmLed (); solo.play (NOTE_C5, t34); switchSoloLed (); espera (ritmo); rythm.play (NOTE_E5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_G5, t14); switchRythmLed (); solo.play (NOTE_C5, t14); switchSoloLed (); aguarde (ritmo); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_B4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_D3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, t); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_FS3, t); switchBassLed (); rythm.play (NOTE_D5, t24); switchRythmLed (); solo.play (NOTE_A4, t); switchSoloLed (); espera (ritmo); espera (ritmo); rythm.play (NOTE_FS5, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_A5, t14); switchRythmLed (); espera (ritmo); bass.play (NOTE_G3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); solo.play (NOTE_G4, tt); switchSoloLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); esperar (ritmo); tocar baixo (NOTE_B3, t); switchBassLed (); rythm.play (NOTE_G4, t24); switchRythmLed (); espera (ritmo); rythm.play (NOTE_B4, t14); switchRythmLed (); espera (ritmo); rythm.play (NOTE_D5, t14); switchRythmLed (); espera (ritmo); solo.play (NOTE_D4, t34); switchSoloLed (); espera (solo); solo.play (NOTE_D4, t14); switchSoloLed (); esperar (solo);} 

Processo de manufatura

  1. Monitoramento de CO2 com Sensor K30
  2. Comunicação para surdos-cegos com 1Sheeld / Arduino
  3. Aceitar moeda de controle com Arduino
  4. Flores - Arduino Nano, CrazyCircuits, DFRobot
  5. Arduino com Bluetooth para controlar um LED!
  6. Sensor capacitivo de impressão digital com um Arduino ou ESP8266
  7. Brincando com Nextion Display
  8. Braço robótico controlado por Nunchuk (com Arduino)
  9. Arduino Nano:Controle 2 motores de passo com joystick
  10. Contador Geiger portátil com Arduino Nano