Arduino UNO R4 - Sensor de Som

Neste guia, vamos aprender a usar o Arduino UNO R4 e um sensor de som para detectar sons. Vamos abordar os seguintes detalhes:

Arduino UNO R4 sensor de som

Depois, você pode ajustar o código para que ele acenda um LED ou uma lâmpada (usando um relé) quando ouvir um som, ou até faça um servo motor girar.

Sobre o Sensor de Som

Você pode usar o sensor de som para detectar o som ao seu redor. Existem dois tipos de módulos de sensor de som:

  • Módulo de sensor de som digital: fornece um sinal simples de LIGADO ou DESLIGADO.
  • Módulo de som analógico usado: fornece tanto valores em uma faixa contínua quanto sinais LIGADO/DESLIGADO.

Você pode ajustar a sensibilidade da saída digital com o potenciômetro embutido.

Pinagem do Sensor de Som Digital

O sensor de som digital tem três pinos:

  • Pino VCC: Conecte ao VCC (3,3V a 5V).
  • Pino GND: Conecte ao GND (0V).
  • Pino OUT: Este é um pino de saída. Ele mostra HIGH quando está silencioso e LOW quando detecta som. Conecte este pino ao pino de entrada do Arduino UNO R4.
Pinagem do Sensor de Som
image source: diyables.io

O sensor de som inclui um potenciômetro para ajustar a sensibilidade. Ele também tem dois indicadores LED.

  • Um indicador LED de energia
  • Um indicador LED de som: aceso quando há som, apagado quando está silencioso

Pinagem do Sensor de Som Analógico

O sensor de som analógico tem quatro pinos:

  • Pino +: deve ser conectado ao 5V.
  • Pino G: deve ser conectado ao GND (0V).
  • Pino DO: é um pino de saída digital. Ele fica HIGH quando está silencioso e LOW quando o som é detectado. Conecte este pino ao pino de entrada digital do Arduino UNO R4.
  • Pino AO: é um pino de saída analógica. Ele envia o nível de som como um valor analógico. Conecte este pino ao pino de entrada analógica do Arduino UNO R4.
Pinagem do sensor de som analógico
image source: diyables.io

O sensor de som analógico inclui um útil potenciômetro embutido. Ele permite mudar facilmente a sensibilidade da saída digital. Ele também tem dois indicadores LED.

  • Uma luz LED mostra se a energia está ligada.
  • Outra luz LED mostra se há som. Ela acende quando há som e apaga quando está silencioso.

Como Funciona

O módulo inclui um potenciômetro ajustável para controlar a sensibilidade ao som.

  • Quando o sensor ouve um som, o pino de saída dele fica em LOW.
  • Quando o sensor não ouve um som, o pino de saída dele fica em HIGH.

Diagrama de Ligação

Arduino UNO R4 Diagrama de Ligação do Sensor de Som

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.

Como Programar para o Sensor de Som

  • Configura o pino do Arduino UNO R4 como entrada digital usando a função pinMode(). Por exemplo, o pino 8
pinMode(8, INPUT);
  • Usa a função digitalRead() para verificar o estado de um pino do Arduino UNO R4.
int soundState = digitalRead(8);

Código Arduino UNO R4 - Detectando o som

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-sound-sensor */ #define SENSOR_PIN 8 // The Arduino UNO R4 pin connected to OUT pin of the sound sensor int prev_sound_state = HIGH; // the previous state from the input pin int sound_state; // the current reading from the input pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the Arduino's pin as an input pinMode(SENSOR_PIN, INPUT); } void loop() { // read the state of the the input pin: sound_state = digitalRead(SENSOR_PIN); if (prev_sound_state == HIGH && sound_state == LOW) Serial.println("The sound has been detected"); else if (prev_sound_state == LOW && sound_state == HIGH) Serial.println("The sound has disappeared"); // save the the last state prev_sound_state = sound_state; }

Passos Rápidos

Siga estas instruções passo a passo:

  • Se esta é a sua primeira vez usando o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para o Arduino Uno R4 WiFi/Minima na Arduino IDE.
  • Conecte o sensor de som ao Arduino Uno R4 conforme o diagrama fornecido.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Copie o código e abra-o na Arduino IDE.
  • Clique no botão Upload na Arduino IDE para enviar o código ao Arduino UNO R4.
  • Bata palmas perto do sensor de som.
  • Confira os resultados no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
The sound has been detected The sound has disappeared The sound has been detected The sound has disappeared
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

Se você notar que a luz LED fica sempre acesa ou sempre apagada mesmo quando há som, você pode mudar o ajuste do potenciômetro para regular melhor a reação do sensor ao som.

Solução de Problemas

Se o sensor de som não estiver funcionando direito, tente estes passos:

  • Ajuste a sensibilidade: você pode regular a sensibilidade do sensor girando o potenciômetro.
  • Reduza as vibrações: O sensor de som pode captar vibrações e ruído de vento. Ajuda fixá-lo em uma superfície firme para diminuir essas vibrações.
  • Considere o alcance de detecção: Lembre-se de que este sensor de som só consegue detectar sons até 10 polegadas de distância. Para obter leituras corretas, faça os sons perto do sensor.
  • Verifique a fonte de alimentação: Certifique-se de que a alimentação está estável, porque o sensor de som, que é um circuito analógico, é afetado pelo ruído da alimentação.

Vídeo

O vídeo de demonstração abaixo usa o código abaixo:

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-sound-sensor */ //===================================================== // SOUND CONTROLLED LED EFFECTS // 1 Clap -> Blink All // 2 Claps -> Water Wave // 3 Claps -> Inside Out // 4 Claps -> Random Dance //===================================================== #define SOUND_PIN 10 const byte LED_PINS[] = {2,3,4,5,6,7,8,9}; const byte NUM_LEDS = sizeof(LED_PINS); const unsigned long CLAP_DEBOUNCE = 80; const unsigned long CLAP_TIMEOUT = 700; //----------------------------------------------------- // Clap detection //----------------------------------------------------- bool lastSound = HIGH; unsigned long lastClapTime = 0; byte clapCount = 0; bool waitingSequence = false; //----------------------------------------------------- // Effect control //----------------------------------------------------- byte currentEffect = 0; //----------------------------------------------------- // Effect 1 variables //----------------------------------------------------- unsigned long blinkTimer = 0; bool blinkState = false; //----------------------------------------------------- // Effect 2 variables //----------------------------------------------------- unsigned long waveTimer = 0; int waveIndex = 0; //----------------------------------------------------- // Effect 3 variables //----------------------------------------------------- unsigned long insideTimer = 0; int insideStep = 0; //----------------------------------------------------- // Effect 4 variables //----------------------------------------------------- unsigned long danceTimer = 0; //===================================================== void setup() { Serial.begin(115200); pinMode(SOUND_PIN, INPUT); for(int i=0;i<NUM_LEDS;i++) { pinMode(LED_PINS[i], OUTPUT); digitalWrite(LED_PINS[i], HIGH); // OFF } randomSeed(analogRead(A0)); Serial.println("System Ready"); } //===================================================== void loop() { detectClaps(); runEffect(); } //===================================================== // CLAP DETECTION //===================================================== void detectClaps() { bool soundValue = digitalRead(SOUND_PIN); unsigned long now = millis(); // Falling edge detection if(lastSound == HIGH && soundValue == LOW) { if(now - lastClapTime > CLAP_DEBOUNCE) { clapCount++; lastClapTime = now; waitingSequence = true; Serial.print("Clap: "); Serial.println(clapCount); } } lastSound = soundValue; // Sequence complete if(waitingSequence && (now - lastClapTime > CLAP_TIMEOUT)) { if(clapCount >= 1 && clapCount <= 4) { currentEffect = clapCount; Serial.print("Effect = "); Serial.println(currentEffect); resetEffectState(); } clapCount = 0; waitingSequence = false; } } //===================================================== void resetEffectState() { turnOffAll(); blinkState = false; waveIndex = 0; insideStep = 0; blinkTimer = waveTimer = insideTimer = danceTimer = millis(); } //===================================================== void turnOffAll() { for(int i=0;i<NUM_LEDS;i++) { digitalWrite(LED_PINS[i], HIGH); } } //===================================================== void runEffect() { switch(currentEffect) { case 1: effectBlinkAll(); break; case 2: effectWaterWave(); break; case 3: effectInsideOut(); break; case 4: effectDance(); break; default: break; } } //===================================================== // EFFECT 1 //===================================================== void effectBlinkAll() { if(millis() - blinkTimer >= 200) { blinkTimer = millis(); blinkState = !blinkState; for(int i=0;i<NUM_LEDS;i++) { digitalWrite( LED_PINS[i], blinkState ? LOW : HIGH ); } } } //===================================================== // EFFECT 2 //===================================================== void effectWaterWave() { if(millis() - waveTimer >= 70) { waveTimer = millis(); turnOffAll(); digitalWrite( LED_PINS[waveIndex], LOW ); waveIndex++; if(waveIndex >= NUM_LEDS) { waveIndex = 0; } } } //===================================================== // EFFECT 3 //===================================================== void effectInsideOut() { if(millis() - insideTimer >= 120) { insideTimer = millis(); turnOffAll(); switch(insideStep) { case 0: digitalWrite(LED_PINS[3], LOW); digitalWrite(LED_PINS[4], LOW); break; case 1: digitalWrite(LED_PINS[2], LOW); digitalWrite(LED_PINS[5], LOW); break; case 2: digitalWrite(LED_PINS[1], LOW); digitalWrite(LED_PINS[6], LOW); break; case 3: digitalWrite(LED_PINS[0], LOW); digitalWrite(LED_PINS[7], LOW); break; } insideStep++; if(insideStep > 3) { insideStep = 0; } } } //===================================================== // EFFECT 4 //===================================================== void effectDance() { if(millis() - danceTimer >= 80) { danceTimer = millis(); turnOffAll(); int a = random(NUM_LEDS); int b = random(NUM_LEDS); int c = random(NUM_LEDS); digitalWrite(LED_PINS[a], LOW); digitalWrite(LED_PINS[b], LOW); digitalWrite(LED_PINS[c], LOW); } }

Referências de Funções

Tutoriais Relacionados

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!