Arduino Audio Reactive Desk Light
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Ferramentas e máquinas necessárias
|
Aplicativos e serviços online
|
Sobre este projeto
OLÁ, MUNDO !!
Oi! Nesta compilação, faremos uma luz de boa aparência que dança ao som de todos os sons e músicas, usando componentes simples e alguns Arduino básicos programação. Faz um efeito incrível quando você está em cima da mesa ao jogar, tocar música e qualquer outra coisa que realmente produza som. Vamos indo!
Este é um projeto que sigo baseado no "Nerd Natural" do youtuber que eles fizeram. Esta é minha versão do projeto. Todo o crédito vai para eles e um grande grito para eles por me fornecerem os detalhes de como fazer o projeto.
Link do Youtube
ETAPA 1:SUPRIMENTOS PRINCIPAIS
Comecemos pelo princípio:de que tipo de suprimentos precisamos e quanto custam? Bem, eles são amplamente opcionais e podem ser feitos com muita improvisação. Mesmo assim, alguns itens principais são necessários se você quiser seguir este guia:
- Arduino Nano (ou qualquer tipo de Arduino igualmente pequeno) (RM 12,50 link de compra)
- Módulo detector de som (Link de compra de 5,90 RM)
- fonte de alimentação de 5 volts (ou 12 volts com Módulo Stepdown)
- Individualmente LED endereçável tiras de 60 leds por. medidor (link de compra)
Dependendo da aparência desejada, você pode querer organizar as tiras de maneira diferente ou difundir a luz de outra maneira. É aqui que você pode ser criativo. Se você gostou da minha abordagem, usei os seguintes itens:
- O jarro IKEA Droppar mais alto (IKEA Link)
- Um pequeno pedaço de tubo de PVC.
- Placa de espuma
- Pistola de cola quente
Levando tudo em consideração, gastei em torno de RM 83,30 dependendo da loja em que você vai e compra os itens, onde as tiras de LED foram de longe a parte mais cara que me custou RM 40 por apenas 1 metro.
ETAPA 2:LIGANDO OS COMPONENTES
A alimentação do componente será um método direto. Acabei de usar o cabo USB do Arduino Nano e plugar diretamente no pc. Se você estiver usando uma fonte de alimentação externa, como uma fonte de alimentação CA para CC, será necessário um módulo redutor para ajudá-lo a reduzir a quantidade de fluxo de corrente para o seu circuito. Caso contrário, se você não o usar, poderá ter uma chance muito alta de gravar o Arduino, incluindo os componentes que o conectaram.
A estrela do show é o módulo detector de som. Isso fornecerá um sinal analógico para o Arduino, que podemos usar para (esperamos) acender as luzes RGB de maneira inteligente. Para fazer isso, precisamos ligar os dois dispositivos. Felizmente, ambos requerem uma entrada de 5 volts. Estou usando um módulo redutor para diminuir de 12 volts para 5 volts, mas seria mais fácil usar uma fonte de alimentação de 5 volts diretamente. Conecte o VIN no Arduino e na placa do detector de som à entrada positiva. Em seguida, conecte o GND do Arduino e o detector ao negativo. Observe os fios preto e vermelho no esquema em anexo. Também precisamos conectar a entrada positiva e negativa na faixa de LED à fonte de alimentação.
ETAPA 3:DETECTOR E TIRAS
Depois de conectar todas as três partes à energia, precisamos conectá-las entre si.
O módulo detector de som se comunicará com o Arduino pelos pinos de entrada analógica. Usarei o pino número 0 neste caso.
As tiras de LED precisam de um pulso digital para poder entender qual LED queremos endereçar. Portanto, precisamos conectar um pino de saída digital ao Arduino nano. Vou usar o pino número 6.
Use o tubo de encolhimento na área de escolha para que os cabos não colidam um com o outro em um espaço apertado posteriormente.
Basta seguir o diagrama esquemático que forneci aqui e você ficará bem!
Incrível, agora já terminamos quase tudo com a parte eletrônica!
ETAPA 4:CARREGANDO O CÓDIGO
A parte mais importante desta construção será, sem dúvida, o código. Isso pode mudar essa compilação de muito legal para incrivelmente incrível. Você pode usar o código que forneci junto com este projeto. O princípio principal é mapear o valor analógico que obtemos do sensor, para uma quantidade de LEDs para mostrar.
ETAPA 5:PREPARANDO O REVESTIMENTO
Primeiro pensei que a tampa era de acrílico, depois comprei o frasco e percebi que não era de acrílico e sim de vidro. Portanto, preciso reajustar meu plano fazendo uma tampa tão fácil de cutucar e montar o Arduino e o led. Então eu escolho a placa de espuma.
Primeira etapa , preciso cortar a placa de espuma, tendo-a exatamente circular e com o mesmo diâmetro da tampa de vidro do frasco. Não tenho as ferramentas de medição de diâmetro adequadas, então improviso o método usando um marcador úmido e marco o diâmetro do vidro e estampo em um pedaço de papel. Depois disso, eu colo o papel na placa de espuma e apenas na placa seguindo a borda do círculo no papel. Não é perfeito, mas deve ser bom o suficiente para conter todos os componentes do Arduino e led.
Segunda etapa , preciso quebrar o vidro da tampa do frasco. CUIDADO! cubra o frasco com um saco plástico grosso para evitar que o vidro se espalhe pela sala e faça-o no espaço aberto. Consciente com o seu entorno. Depois de quebrar o vidro, certifique-se de que todo o vidro que ficou preso na lateral da tampa da jarra seja removido. Isso evita que você ou outra pessoa se machuque ao se cortar contra o vidro emperrado.
Terceira etapa , coloque a placa de espuma em forma de círculo no centro da tampa do frasco. Certifique-se de que a espuma está apertada e não muito frouxa para que caiba perfeitamente no frasco.
Quarto passo, Acabei de perceber que preciso mudar o layout deste projeto. Gostaria de fazer com que o usuário tenha fácil acesso aos componentes do Arduino em caso de defeito. Então, decidi usar o mini breadboard e coloquei no centro da tampa. Além disso, cortei dois orifícios para o cabo do Módulo de Som que irei colocar na parte inferior da tampa do pote para entrar no pote e na placa de ensaio e mais um orifício para o Arduino se conectar com o cabo USB para atuar como fonte de alimentação para o circuito.
Quinto passo , Marco o tubo de pvc com fita adesiva e desenho a linha no centro da fita. Então, eu colo no tubo de pvc. A marcação é o indicador de que devo cortar o tubo de pvc de maneira uniforme e tentar fazer um corte limpo.
Depois de medir a quantidade de comprimento de pvc que preciso usar, cortei com cuidado seguindo a marca que forneci. O comprimento do tubo de pvc depende da altura do frasco. Você pode usar qualquer comprimento que desejar.
Sexto passo , entorto o tubo de PVC que cortei com a faixa de LED ao redor e o torno levemente inclinado e em espiral até o topo do PVC. Certifico-me de criar um pequeno orifício para esconder o excesso do comprimento do cabo dentro da jarra de PVC para gerenciamento do cabo. Em seguida, preciso encontrar uma maneira de colocar o PVC na placa de ensaio. Usando uma pistola de cola quente ou fita dupla-face, consigo prender o tubo de PVC na placa de espuma extra e depois colá-lo na área não utilizada da placa de ensaio. Durante esta etapa, consigo conectar alguns dos componentes à placa de ensaio.
Use o diagrama esquemático fornecido para conectar todos os componentes.
(A área esquerda do breadboard será positiva e a área direita do breadboard será negativa. `
Sétimo passo, coloquei o módulo de som do lado de fora da tampa do pote. Isso é feito propositalmente para facilitar o módulo de selecionar o som fora do jar mais tarde. Depois de colocar o módulo, conecte-o com um cabo e combine-o conforme indicado no diagrama esquemático fornecido. Em seguida, conecte todo o cabo com o sensor e o Arduino à placa de ensaio. O Arduino sendo configurado verticalmente de forma que o cabo para ligar o curcuito seja capaz de se conectar com a placa Arduino facilmente através da placa de espuma.
E assim, concluo o projeto. Demoro um pouco mais com a tentativa e erro, mas consegui concluí-lo.
Código
- Codificação para o Arduino
Codificação para o Arduino Arduino
Este código permitirá que o LED reaja ao som que está sendo detectado pelo módulo de som.#include/ ** CONFIGURAÇÃO BÁSICA ** /// A quantidade de LEDs na configuração # define NUM_LEDS 60 // O pino que controla os LEDs # define LED_PIN 6 // O pino que lemos os valores do sensor de # define ANALOG_READ 0 // Valor baixo do microfone confirmado e valor máximo # define MIC_LOW 0.0 # define MIC_HIGH 200.0 / ** Outras macros * /// Quantos valores de sensor anteriores afetam a média operacional? #Define AVGLEN 5 // Quantos valores de sensor anteriores decidem se estamos em um pico / HIGH (por exemplo, em uma música) #define LONG_SECTOR 20 // Mneumonics # define HIGH 3 #define NORMAL 2 // Por quanto tempo mantemos o som da "média atual", antes de reiniciar a medição # define MSECS 30 * 1000 # define CICLOS MSECS / DELAY / * Às vezes as leituras estão erradas ou estranhas. Quanto uma leitura permite desviar da média para não ser descartada? ** / # define DEV_THRESH 0.8 // Atraso do loop Arduino # define DELAY 1float fscale (float originalMin, float originalMax, float newBegin, float newEnd, float inputValue, float curve); void insert (int val, int * avgs, int len); int compute_average (int * avgs, int len); void visualize_music (); // Quantos LEDs devemos exibirint curshow =NUM_LEDS; / * Ainda não usado. Acredita-se que seja capaz de alternar entre o modo reativo de som e gradiente geral pulsante / cor estática * / modo int =0; // Mostrando cores diferentes com base no modo.int songmode =NORMAL; // Medição de som médio no último CICLOSunsigned long song_avg; // A quantidade de iterações desde que song_avg foi redefinidoint iter =0; // A velocidade em que os LEDs escurecem, se não relitfloat fade_scale =1.2; // Led arrayCRGB leds [NUM_LEDS]; / * Média de som curta usada para "normalizar" os valores de entrada. Usamos a média curta em vez de usar a entrada do sensor diretamente * / int avgs [AVGLEN] ={-1}; // Som mais longo avgint long_avg [LONG_SECTOR] ={-1}; // Manter o controle da frequência , e por quanto tempo atingimos um determinado modestruct time_keeping {unsigned long times_start; short times;}; // Quanto aumentar ou diminuir cada cor em cada cor de estrutura de ciclagem {int r; int g; int b;}; struct time_keeping high; struct color Color; void setup () {Serial.begin (9600); // Configure todas as luzes para ter certeza de que todas estão funcionando conforme o esperado FastLED.addLeds (leds, NUM_LEDS); para (int i =0; i (song_avg / iter * 1.1)) {if (high.times! =0) {if (millis () - high.times_start> 200,0) {high.times =0; songmode =NORMAL; } mais {início_de_alta.times =millis (); high.times ++; }} else {high.times ++; início_das_máquinas =milis (); }} if (high.times> 30 &&millis () - high.times_start <50.0) songmode =HIGH; senão if (millis () - início.máximo.máximo> 200) {tempos_máximo =0; songmode =NORMAL; }} // Função principal para visualizar os sons no lampvoid visualize_music () {int sensor_value, mapped, avg, longavg; // Valor real do sensor sensor_value =analogRead (ANALOG_READ); // Se for 0, descarte imediatamente. Provavelmente não está certo e economiza CPU. if (sensor_value ==0) return; // Descarte as leituras que se desviam muito da média anterior. mapeado =(flutuante) fscale (MIC_LOW, MIC_HIGH, MIC_LOW, (flutuante) MIC_HIGH, (flutuante) sensor_value, 2.0); avg =compute_average (avgs, AVGLEN); if (((média - mapeada)> média * DEV_THRESH)) // || ((avg - mapeado) <-avg * DEV_THRESH)) return; // Inserir nova média inserir valores (mapeado, avgs, AVGLEN); inserir (média, long_avg, LONG_SECTOR); // Calcula o valor do sensor de "média da música" song_avg + =avg; iter ++; if (iter> CYCLES) {song_avg =song_avg / iter; iter =1; } longavg =compute_average (long_avg, LONG_SECTOR); // Verifique se entramos no modo HIGH check_high (longavg); if (songmode ==HIGH) {fade_scale =3; Color.r =5; Color.g =3; Color.b =-1; } else if (songmode ==NORMAL) {fade_scale =2; Color.r =-1; Color.b =2; Color.g =1; } // Decide quantos LEDs serão acesos curshow =fscale (MIC_LOW, MIC_HIGH, 0.0, (float) NUM_LEDS, (float) avg, -1); / * Defina os diferentes leds. Controle para valores muito altos e muito baixos. Coisa divertida para tentar:não leve em conta o estouro em uma direção, alguns efeitos de luz interessantes aparecem! * / for (int i =0; i 255) leds [i]. r =255; else if (leds [i] .r + Color.r <0) leds [i] .r =0; else leds [i] .r =leds [i] .r + Color.r; if (leds [i] .g + Cor.g> 255) leds [i] .g =255; else if (leds [i] .g + Color.g <0) leds [i] .g =0; else leds [i] .g =leds [i] .g + Color.g; if (leds [i] .b + Color.b> 255) leds [i] .b =255; else if (leds [i] .b + Color.b <0) leds [i] .b =0; else leds [i] .b =leds [i] .b + Color.b; // Todos os outros LEDs começam sua jornada de desvanecimento para eventual escuridão total} else {leds [i] =CRGB (leds [i] .r / fade_scale, leds [i] .g / fade_scale, leds [i] .b / fade_scale ); } FastLED.show (); } // Calcula a média de um array int, dado o ponteiro inicial e o comprimento compute_average (int * avgs, int len) {int sum =0; para (int i =0; i 10) curve =10; se (curva <-10) curva =-10; curva =(curva * -1,1); // - inverter e escalar - parece mais intuitivo - números positivos dão mais peso ao limite superior na curva de saída =pow (10, curva); // converte a escala linear em expoente lograthimic para outra função pow // Verifique se há valores fora do intervalo inputValues if (inputValue originalMax) {inputValue =originalMax; } // Zero faz referência aos valores OriginalRange =originalMax - originalMin; if (newEnd> newBegin) {NewRange =newEnd - newBegin; } else {NewRange =newBegin - newEnd; invFlag =1; } zeroRefCurVal =inputValue - originalMin; normalizedCurVal =zeroRefCurVal / OriginalRange; // normaliza para 0 - 1 float // Check for originalMin> originalMax - a matemática para todos os outros casos, ou seja, os números negativos parecem funcionar bem se (originalMin> originalMax) {return 0; } if (invFlag ==0) {rangedValue =(pow (normalizedCurVal, curve) * NewRange) + newBegin; } else // inverter os intervalos {rangedValue =newBegin - (pow (normalizedCurVal, curve) * NewRange); } return rangedValue;}
Esquemas
Processo de manufatura
- Detector de linguagem TinyML baseado em Edge Impulse e Arduino
- Jogo Arduino Gyroscope com MPU-6050
- Dados digitais Arduino
- Homem de Ferro
- Encontre-me
- Tocar áudio no Arduino
- Controle do umidificador Arduino
- Sonar usando arduino e exibição no IDE de processamento
- MobBob:DIY Arduino Robot Controlado por Smartphone Android
- NeoMatrix Arduino Pong