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

Hino Nacional dos EUA com Luzes e Tom

Componentes e suprimentos

Arduino Nano R3
Esteja ciente de que 4 processadores diferentes eu uso o 328P (carregador de inicialização antigo)
× 1
Buzzer
Qualquer campainha antiga serve, usei uma campainha de 16 Ohms.
× 1
SparkFun Botão de pressão 12 mm
Não exatamente o que usei, mas o meu era 6x6x6mm
× 2
Rocker Switch 250V 3A
Qualquer botão liga / desliga serve. Usei uma caixa 9Volt com uma chave, mas ela está escondida na minha caixa, então adicionei uma chave do lado de fora. Basta procurar qualquer interruptor basculante.
× 1
Resistor 330 ohm
Qualquer resistor funcionará, mas faça um cálculo de LED e certifique-se de não ultrapassar a saída de LED ou 40 mA máx. Por pino no Nano. 330 ohms são praticamente o padrão em qualquer pacote inicial do Arduino.
× 3
LED (genérico)
6 LEDs ou quantos você quiser. 2 vermelhos, 2 brancos e 2 azuis. O LED vermelho que usei era de 2,2 V e o outro de 3,2 V cada LED. Resulta em 9,7 mA e 6,7 mA usando 330 ohm. (lembre-se de que estou usando 2 por saída, então ~ 13 mA e ~ 20 mA, que é metade da corrente máxima de saída do pino)
× 6
Tábua de ensaio com solda SparkFun - Mini
Qualquer placa de ensaio funcionará, solde ou sem solda, você precisa saber como ficará. Ou você pode fazer isso sem um e apenas fazer furos, madeira e cola quente nas peças no lugar.
× 1
Bateria de 9 V (genérica)
muitas opções de alimentação. Usei uma bateria de 9 volts com um case e switch. Você pode usar apenas um cabo USB ou até mesmo 4 baterias AA, desde que atenda aos requisitos de entrada Nano. Lamento ter de pagar um dinheiro extra por um que tinha um botão liga / desliga, pois usei um botão separado.
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Depende de você se deseja soldar

Sobre este projeto


Eu comecei no ano passado fazendo programação para um eventual projeto musical e luzes de Natal. Este é um projeto paralelo que alguém me pediu para fazer e pensei que seria divertido. Inicialmente, essa seria apenas uma música com luzes, mas isso é simplesmente chato.

Aqui está um link caso você tenha problemas com o vídeo:

https://youtu.be/C2jyn80Mjus

Este projeto usa um Arduino Nano. Neste projeto, utilizo dois botões diferentes para fazer duas músicas diferentes usando a função Tone (). Um é o som 'charge' e o outro é o 'US National Anthem'. Até que os botões sejam pressionados, ele ilumina apenas aleatoriamente os efeitos.

Neste esboço, faço uso pesado de funções para simplificar meu processo de escrita das funções, mas mantenho o controle total do processo de iluminação / som para que eu possa fazer pequenos ajustes se não gostar do que estou ouvindo / vendo com muito pouca dificuldade .

Meu objetivo ao postar este projeto é compartilhar algumas das coisas que aprendi em design / codificação para que, se você estiver fazendo algo semelhante, isso possa ajudar.

Aqui está a aparência do design inicial na placa de ensaio enquanto eu testava o sistema e o código.

Aqui está a configuração do sistema de energia. Eu escolho uma bateria de 9 volts para o tamanho e não dependo de uma parede USB ou energia do computador.

É assim que fica quando tudo é soldado por dentro. É altamente recomendável soldar apenas com a tampa superior e, em seguida, adicionar os lados mais tarde


Código

  • USA_ANTHEM_Updated.ino
USA_ANTHEM_Updated.ino Arduino
O Star Spangled Banner com LEDs, carga, tom, todas as funções. Basta copiar e colar.
 / * Star Spangled Banner with LEDsCreated by Ryan Aebi Junho de 2018Estrutura de código - Loop básico para fazer referência a outras funções - Botões de pressão fazem Star Spangled Banner ou carrega sons com lightsStar Spangled Banner Notas - Função tem nota atribuída por número inteiro para frequência (Hz) e duração (tempo em n) -LED é escolhido por mim de forma semi-aleatória ao escrever a função -A função é construída para aumentar a afinação a cada execução (redefine a afinação normal na inicialização / redefinição de hardware) -Pitch calculado é 1/12 de um todo ou 0,06 Design de botão / fiação - 3 conjuntos de LEDs de vermelho, azul e verde em cada canal, incluindo 2 de cada em paralelo. - Botão de reinicialização externo - botão iniciar para interromper música para carregar * /// ************************************************ *************** Inteiros declarados const int ChargeButton =3; // (Nano D3) uno pino 2 deve ser um pino de interrupção const int StartButton =5; // (Nano D5) uno pino 4 const int BuzzerPin =9; // (Nano D9) uno pino 9 const int RedLED =6; // (Nano D6) uno pino 6 const int WhiteLED =7; // (Nano D7) uno pino 7 const int BlueLED =8; // (Nano D8) uno pino 8 int n =1000; // declarando o inteiro, este valor mudará com cada música int DurationOn =n; // declamar o inteiro para mais tarde será usado nos cálculos do stacatto int DurationRest =n; // declamar o inteiro para mais tarde será usado em cálculos stacatto // soma de x e y deve ser 1 Tenho mais notas sobre isso mais tarde em float x =.66; // declarando float para tempo em float y =.34; // declarando float para tempo desligado // taxa na qual as luzes piscam aleatoriamente enquanto espera o botão input int Twinkle_Rate =250; // observe que, se aumentados drasticamente, os botões podem não responder 100% do tempo // menor taxa de cintilação melhora a resposta ao pressionar o botão // define números inteiros para os estados do botão int StartButtonState; int ChargeButtonState; // observe que o dó central é 4C (B bemol e mi bemol) int Note1 =233; // 3Bb 233Hz int Note2 =294; // 4D 294Hz int Note3 =330; // 4E 330Hz int Note4 =349; // 4F 349Hz int Note5 =392; // 4G 392Hz int Note6 =440; // 4A 440Hz int Note7 =466; // 4Bb 466Hz int Note8 =523; // 5C 523Hz int Note9 =587; // 5D 587Hz int Note10 =622; // 5Eb 622Hz int Note11 =698; // 5F 698Hz // ******************************************** ****************** Função de carga / Carga Songvoid () {n =600; // taxa em que a música progride // Formato:escrever pino (s) ligado (s), tom em frequência específica (dessa forma não está sujeito a // mudanças no final do Hino Nacional, mais sobre isso mais tarde), retardo para o mesmo tempo que tom para sincronizar música, // escreve o (s) pino (s) que estava (m) ligado (s) e atrasa para uma pausa digitalWrite (RedLED, HIGH); tom (BuzzerPin, 392, n / 3); atraso (n / 3); digitalWrite (RedLED, LOW); atraso (70); digitalWrite (WhiteLED, HIGH); tom (BuzzerPin, 523, n / 3); atraso (n / 3); digitalWrite (WhiteLED, LOW); atraso (70); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 659, n / 3); atraso (n / 3); digitalWrite (BlueLED, LOW); atraso (70); digitalWrite (RedLED, HIGH); digitalWrite (WhiteLED, HIGH); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 784, n * 3/4); atraso (n * 3/4); digitalWrite (BlueLED, LOW); digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); atraso (70); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 659, n / 4); atraso (n / 4); digitalWrite (BlueLED, LOW); atraso (70); digitalWrite (RedLED, HIGH); digitalWrite (WhiteLED, HIGH); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 784, n * 2); atraso (n * 2); digitalWrite (BlueLED, LOW); digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); delay (70);} // ****************************************** ******************** SingleDW functionvoid SingleDWwithNote (int HZ, int TurnOn, int Duration, int Staccato) {// Hertz em que a nota está (referências Note #) / / ligar =pino (LED vermelho / branco / azul) que será ajustado // a duração é por quanto tempo // Staccato 1 =sim, 0 =não resulta em nota ligeiramente encurtada ou um valor int x alto como apenas um pausa breve if (Staccato ==1) {DurationOn =Duration * x;} // por quanto tempo o tom e as luzes estão ligados é DurationShort else if (Staccato ==0) {DurationOn =Duration;} digitalWrite (TurnOn, HIGH); tom (BuzzerPin, HZ, DurationOn); atraso (DurationOn); digitalWrite (TurnOn, LOW); if (Staccato ==1) {DurationRest =Duração * y; atraso (DurationRest); }} // ********************************************* **************** Função do Hino Nacional dos EUA / Songvoid USNationalAnthem () {n =577; // taxa na qual o som é reproduzido calculado a partir de:60.000 (ms / fator BPM) / 104 BPM =577 ms / * valor de semínima é n valor de semínima em n * 2 colcheias n / 2 notas colcheias pontilhadas é n * 3 / 4 * / // x e y inteiros são para staccato / adição de pausa após uma nota // observe que x + y deve =1 ou o int. a taxa n será diminuída // diminui xe aumenta y para tornar as notas mais pronunciadas e salientes / otimistas x =0,92; // stacatio verdadeiro é cerca de 1/2 ou 2/3 do valor, então o valor de x está em torno de 0,5 a 0,7 para um staccato verdadeiro y =0,08; //1,00-,92(x value) =0,08 // barras 1-5, linhas 1 SingleDWwithNote (Nota4, RedLED, n * 3/4, 1); SingleDWwithNote (Nota2, WhiteLED, n / 4, 1); SingleDWwithNote (Nota1, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota4, RedLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n * 2, 1); SingleDWwithNote (Nota9, BlueLED, n * 3/4, 1); SingleDWwithNote (Nota8, WhiteLED, n / 4, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota3, BlueLED, n, 1); SingleDWwithNote (Nota4, RedLED, n * 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); // bar6-9 linha 2 SingleDWwithNote (Note9, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota6, BlueLED, n * 2, 1); SingleDWwithNote (Nota 5, WhiteLED, n / 2, 1); SingleDWwithNote (Nota6, BlueLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota4, BlueLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota1, BlueLED, n, 1); SingleDWwithNote (Nota4, RedLED, n * 3/4, 1); SingleDWwithNote (Nota2, WhiteLED, n / 4, 1); // barras 10-13 linha 3 SingleDWwithNote (Note1, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota4, RedLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n * 2, 1); SingleDWwithNote (Nota9, BlueLED, n * 3/4, 1); SingleDWwithNote (Nota8, WhiteLED, n / 4, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota3, BlueLED, n, 1); SingleDWwithNote (Nota4, RedLED, n * 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); // barra 14-17, linha 4, fim da página 1 SingleDWwithNote (Nota9, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota6, BlueLED, n * 2, 1); SingleDWwithNote (Nota 5, WhiteLED, n / 2, 1); SingleDWwithNote (Nota6, BlueLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota4, BlueLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota1, RedLED, n, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); // barras 18-21, linha 5, início da página 2 SingleDWwithNote (Nota9, BlueLED, n, 1); SingleDWwithNote (Nota10, RedLED, n, 1); SingleDWwithNote (Nota11, WhiteLED, n, 1); SingleDWwithNote (Nota11, WhiteLED, n * 2, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n, 1); SingleDWwithNote (Nota9, BlueLED, n, 1); SingleDWwithNote (Nota10, RedLED, n, 1); SingleDWwithNote (Nota10, RedLED, n * 2, 1); SingleDWwithNote (Nota10, RedLED, n, 1); // barras 22-25, linha 6 SingleDWwithNote (Note9, WhiteLED, n * 3/2, 1); SingleDWwithNote (Nota 8, BlueLED, n / 2, 1); SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota6, RedLED, n * 2, 1); SingleDWwithNote (Nota 5, BlueLED, n / 2, 1); SingleDWwithNote (Nota6, RedLED, n / 2, 1); SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota2, BlueLED, n, 1); SingleDWwithNote (Nota3, RedLED, n, 1); SingleDWwithNote (Nota4, WhiteLED, n * 2, 1); SingleDWwithNote (Nota4, RedLED, n, 1); n =n * 1,08; // 60.000 / 96 bpm =625 ms; apenas um ligeiro atraso // barras 26-28, linha 7 SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n / 2, 1); SingleDWwithNote (Nota6, BlueLED, n / 2, 1); SingleDWwithNote (Nota 5, RedLED, n, 1); SingleDWwithNote (Nota 5, RedLED, n, 1); SingleDWwithNote (Nota 5, RedLED, n, 1); SingleDWwithNote (Nota8, WhiteLED, n, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n / 2, 1); // barras 29-30 SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota6, BlueLED, n * 2, 1); // 2x para manter SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota7, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); n =n * 1,2; // grande retardo // compassos 31-34 no final da música SingleDWwithNote (Note11, WhiteLED, n * 2, 1); // retenção extra no SingleDWwithNote livre (Nota7, RedLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota9, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n, 1); SingleDWwithNote (Nota7, RedLED, n * 3, 1); // mantendo apenas 3 valores // rasie todas as notas em 3 etapas //1.06 derivadas da teoria musical. Faça uma nota em hertz e, em seguida, divida pela // nota abaixo dela (sustenidos e bemóis contam como uma nota) ao redor de 1,06 // Você pode deletar este próximo parágrafo para evitar mudanças de frequência ou aumentá-lo se quiser Nota1 =Nota1 * 1,06 * 1,06 * 1,06; Nota2 =Nota2 * 1,06 * 1,06 * 1,06; Nota3 =Nota3 * 1,06 * 1,06 * 1,06; Nota4 =Nota4 * 1,06 * 1,06 * 1,06; Nota5 =Nota5 * 1,06 * 1,06 * 1,06; Nota6 =Nota6 * 1,06 * 1,06 * 1,06; Nota7 =Nota7 * 1,06 * 1,06 * 1,06; Nota8 =Nota8 * 1,06 * 1,06 * 1,06; Nota9 =Nota9 * 1,06 * 1,06 * 1,06; Nota10 =Nota10 * 1,06 * 1,06 * 1,06; Note11 =Note11 * 1.06 * 1.06 * 1.06;} // ************************************** ************************* Twinkle void Twinkle (int Twinkle_Time) // Coloque um número entre () mostra por quanto tempo o brilho ocorre {// construído esta função para outro uso, portanto, tem um cálculo inicial estranho e bizarro // muda o tempo e a taxa para um número inteiro menor, observe que a extremidade da frente gira Twinkle_Time =Twinkle_Time / Twinkle_Rate; // neste caso, Tiwkle Time é =para Twinkle Rate, então o valor é 1 para (Twinkle_Time; Twinkle_Time> 0; Twinkle_Time--) // visto que o valor é 1 apenas processa uma vez {int B =random (1,4); // inteiro aleatório de 1, 2 ou 3 int C =random (1,4); // inteiro aleatório de 1, 2 ou 3 // sem problemas se os dois inteiros forem iguais, apenas um LED acende, adiciona a aleatoriedade // avalia cada número inteiro para rodar em um LED de cor específica se (B ==1) { digitalWrite (RedLED, HIGH);} if (B ==2) {digitalWrite (WhiteLED, HIGH);} if (B ==3) {digitalWrite (BlueLED, HIGH);} if (C ==1) {digitalWrite ( RedLED, HIGH);} if (C ==2) {digitalWrite (WhiteLED, HIGH);} if (C ==3) {digitalWrite (BlueLED, HIGH);} delay (Twinkle_Rate); // mantém o LED aceso por um definir o período de tempo // e então escreveremos os LEDs correspondentes baixos. frio possivelmente simplificar e apenas escrever todos os 3 baixos pode acelerar o tempo se (B ==1) {digitalWrite (RedLED, LOW);} if (B ==2) {digitalWrite (WhiteLED, LOW);} if (B ==3) {digitalWrite (BlueLED, LOW);} if (C ==1) {digitalWrite (RedLED, LOW);} if (C ==2) {digitalWrite (WhiteLED, LOW);} if (C ==3) {digitalWrite (BlueLED, LOW);}}} // ************************************** ************************* Setupvoid setup () {pinMode (ChargeButton, INPUT_PULLUP); // coloca como entrada e habilita o resistor pull up interno para o botão pinMode (StartButton, INPUT_PULLUP); // coloca como entrada e ativa o resistor pull up interno para o botão pinMode (RedLED, OUTPUT); // LED configurado como saída pinMode (WhiteLED, OUTPUT); // LED configurado como saída pinMode (BlueLED, OUTPUT); // LED configurado como saída pinMode (BuzzerPin, OUTPUT); // Buzzer configurado como saída // digitalWrite (ChargeButton, HIGH); não é necessário, pois está habilitado como pullup, é apenas redundante // digitalWrite (StartButton, HIGH); não é necessário, pois está habilitado como pullup, é apenas redundante // define todos os LEDs para BAIXO para evitar erros. Para meu deisgn HIGH =ON, LOW =OFF digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); digitalWrite (BlueLED, LOW); } // *********************************************** *************** Loopvoid loop principal () {// lê os estados do botão, os pinos foram conectados ao resistor interno configurado como alto // os pinos serão baixos quando pressionados StartButtonState =digitalRead (StartButton); // baixo =pressionado ChargeButtonState =digitalRead (ChargeButton); // baixo =pressionado // avalia contra inteiros para fazer o primeiro pino de função que foi resistered como baixa // taxa de amostragem para botões de leitura é o int twinkle_rate (0,25 segundos) if (StartButtonState ==LOW) {USNationalAnthem ();} else if (ChargeButtonState ==LOW) {Charge ();} else {Twinkle (Twinkle_Rate);} // se nenhum pino pressionado, então pisca! de novo ... e de novo ... e de novo ...} 

Esquemas

Mostra as conexões elétricas usando placa de ensaio Mostra conexões de fiação sem solda Siga os fios! Mostra o custo de cada item, custo total e onde comprou.

Processo de manufatura

  1. Circuito com interruptor
  2. Luzes de Natal
  3. Tecido com Loção
  4. Aceito:switch gigabit de 12 portas com 4 portas SFP
  5. Monitorando a temperatura com Raspberry Pi
  6. Switch / Painel de LED com Arduino para FS2020
  7. Instrução C++ Switch Case com EXEMPLO
  8. switch…case em C (Instrução Switch em C) com exemplos
  9. Instrução Java Switch-Case com Exemplo
  10. A Rede Nacional MEP ™ se conecta com fabricantes pertencentes a minorias