Você já imaginou conseguir visualizar a intensidade sonora de uma música que você gosta por exemplo? Hoje iremos construir um Projeto Arduino Vu Meter com Leds Endereçados.
Mas, o que é um vu-meter?
Ele é um aparelho que verifica a intensidade sonora e mostra ao usuário esta intensidade, simplesmente ligando ou desligando leds de acordo com a intensidade sonora que está recebendo, muito parecido com o que ocorre no display de alguns modelos de equalizador por meio de barras gráficas.
No nosso projeto vamos utilizar um sensor de som constituído por um microfone de eletreto, este módulo ao verificar a variação sonora do local que ele se encontra, irá enviar um sinal para o Arduino. O microcontrolador vai processar esse sinal e verificar níveis de tensão enviados pelo sensor e acionar os leds endereçados de acordo com as diferentes frequências sonoras que receber.
Materiais para o Projeto Arduino Vu Meter
- 1 x Arduino Uno;
- 1 x Potenciômetro 10k ;
- 1 x Círculo de Led WS2811 RGB com 18 Leds Endereçados;
- 1 x Sensor de som;
- Jumpers e protoboard.
Esquema de Ligação
Como podemos ver abaixo, o esquema de ligação do projeto é razoavelmente simples. Observação: o potenciômetro serve para ajuste de sensibilidade.
Código de Funcionamento
O nosso código irá simplificadamente aferir o valor que tem origem do módulo sensor de som, após isto vamos verificar o valor do pino conectado ao potenciômetro, o qual é responsável pela regulagem de sensibilidade do vu-meter, e a partir desse valor vamos definir alguns valores que ao serem atingidos vão ligar respectivo led.
Faça download do código completo.
Cabeçalho
No início do programa vamos incluir a biblioteca Adafruit NeoPixel que pode ser baixada aqui. Ela é responsável pelo controle dos leds. Logo abaixo definimos o pino que está conectado aos leds endereçáveis, número de leds, pino do potenciômetro, pino do sensor de som e também vamos iniciar um objeto leds, passando como parâmetros essas definições anteriores.
1 2 3 4 5 6 7 8 |
#include <Adafruit_NeoPixel.h> #define PIN 6 #define NUMLEDS 18 #define PIN_Potenciometro A1 #define PIN_Sensor A0 Adafruit_NeoPixel leds = Adafruit_NeoPixel(NUMLEDS,PIN,NEO_GRB+NEO_KHZ800); |
Void setup()
Aqui no void setup vamos iniciar a serial com a velocidade de baud rate de 115200, após isto definir como entrada os pinos do módulo sensor de som e do potenciômetro. Logo abaixo vamos iniciar a comunicação com os leds e vamos definir a intensidade do brilho.
1 2 3 4 5 6 7 8 9 |
void setup(){ Serial.begin(115200); pinMode(PIN_Sensor, INPUT); pinMode(PIN_Potenciometro, INPUT); leds.begin(); leds.setBrightness(100); } |
Void Loop()
No void loop vamos aferir as duas portas analógicas referentes ao sensor de som e ao potenciômetro e atribuir esses valores às variáveis intensi (referente a intensidade sonora) e a variável set, após vamos mostrar esses valores na serial.
Vamos chamar a função clear() que basicamente vai percorrer todos os leds e “apagar” a cor que estava sendo exibida pelo mesmo.
Abaixo disso temos vários IFs que são respectivos a cada led, após o valor de intensidade atingir o valor “set” + um valor adicional a cada led, iremos acender o respectivo led.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
void loop(){ int intensi = analogRead(PIN_Sensor); int set = analogRead(PIN_Potenciometro); Serial.print(intensi); Serial.print(" "); Serial.println(set); clear(); if (intensi > set + 10){ led(0,0,255,0); } if (intensi > set + 15){ led(1,0,255,0); } if (intensi > set + 20){ led(2,0,255,0); } if (intensi > set + 25){ led(3,50,255,0); } if (intensi > set + 30){ led(4,100,255,0); } if (intensi > set + 35){ led(5,120,255,0); } if (intensi > set + 40){ led(6,180,255,0); } if (intensi > set + 45){ led(7,200,200,0); } if (intensi > set + 50){ led(8,200,150,0); } if (intensi > set + 55){ led(9,255,120,0); } if (intensi > set + 60){ led(10,255,100,0); } if (intensi > set + 65){ led(11,255,80,0); } if (intensi > set + 70){ led(12,255,50,0); } if (intensi > set + 75){ led(13,255,0,0); } if (intensi > set + 80){ led(14,255,0,0); } if (intensi > set + 85){ led(15,255,0,0); } if (intensi > set + 90){ led(16,255,0,0); } if (intensi > set + 100){ led(17,255,0,0); } } |
Funções auxiliares
Temos algumas funções auxiliares também, que são a função led e a clear, a qual estão destinadas a simplificar o controle dos leds.
A função led recebe como parâmetro o número do led o qual será controlado e recebe mais 3 variáveis que definem a cor controlando as cores vermelha, verde e azul.
Já a função clear tem um laço de repetição que vai “apagando” cada um dos leds.
1 2 3 4 5 6 7 8 9 10 11 |
void led(byte nled,byte r, byte g, byte b){ leds.setPixelColor(nled, leds.Color(r, g, b)); leds.show(); delay(1); } void clear(){ for(byte x = 0; x < NUMLEDS; x++){ leds.setPixelColor(x, leds.Color(0, 0, 0)); } } |
Demonstração de Funcionamento
Conclusão
No artigo de hoje “Projeto Arduino Vu Meter com Leds Endereçados” aprendemos a fazer um vu-meter, o qual pode ser aplicado ao seu sistema de som para visualizar a intensidade sonora de forma interativa e funcional.
O código proposto pode ser ajustado a determinada necessidade, sendo possível aumentar ou diminuir a quantia de leds, por exemplo, desde que fazendo os determinados ajustes no programa. Enfim, este foi mais um projeto que você pode replicar em sua casa, obrigado por ler e até a próxima.
Olá, interessante projeto, Olha estou a procura de um projeto parecido desse que tem o detector de som, preciso só que ele detecta um sinal de som e armar um relé, só armar para desligar usaria o modo manual. Tens algo parecido? Grato!
Bom Dia Valmir! Tenho um projeto aqui no site que é bastante semelhante com o que deseja, porém não possui um desarme manual, isto deveria ser inserido junto ao código, mas como base o conteúdo que segue será bastante útil: https://www.usinainfo.com.br/blog/sensor-de-som-arduino-em-projeto-com-rele/
Matheus, muito obrigado pelo retorno. Abração!
Ola, essa mira lazer eu poderia usa para fazer medição de objetos? Exemplo uma janela, medi altura e largura? Obrigado
Bom Dia Daniel! Acredito que refere-se ao projeto de sensor de temperatura com mira laser, infelizmente a Usinainfo não possui nenhum dispositivo laser para medição de objetos até o momento.
Gostaria de saber se eu utilizar um fita de led rgb o esquema é o mesmo ou tenho que fazer algo a mais?
Boa Tarde William! Este projeto possui LED endereçáveis, o que elimina a necessidade drivers, porém caso opte pela utilização de Fitas de LED, será necessário incluir ainda um Driver controlador compatível com seu produto.
Boa Tarde , no meu esta dando um erro : ‘A3’ was not declared in this scope
Olá Jamilton! Recomendo verificar o seu código e identificar esta informação “A3”, ela está atribuída a algum comando que está dando erro e não faz parte do código original disponível no Blog.
Olá Matheus, parabéns pelo canal, gostaria de saber se fica daria certo trocar esse led aí utilizado no projeto por uma fita de led, daquelas de 5m
Olá Vagner! Infelizmente a simples troca por uma fita não resolveria o problema, o projeto para o produto que deseja é desenvolvido de uma forma diferente com módulos diferentes.
Como eu altero o código para funcionar para uma faixa de 24 leds ao invez de 18?
Bom dia Bruno!
Tente mudar a seguinte linha:
#define NUMLEDS 18
para
#define NUMLEDS 24
Os demais comandos ficarão iguais, a biblioteca deve gerenciar isto de maneira adequada.