Acender a luz batendo palmas com Arduíno

Com certeza você já sonhou em acender a luz batendo palmas! Neste post vamos apresentar como é possível construir esse sistema utilizando um  Sensor de Som KY-038 e um relé de estado sólido.

O  Sensor de som KY-038 possui um microfone que é capaz de detectar a intensidade de som do ambiente. Apesar de não ser capaz de diferenciar sons, ou ainda gravá-los, é possível ter algumas aplicações para a sua funcionalidade. Com um Arduino e um relé de estado sólido, vamos medir a intensidade do som ambiente e, se for muito alto, vamos acender a lâmpada por um tempo determinado.

Produtos utilizados no teste:
Montagem Física (Hardware):
A montagem é muito simples, basta seguir as orientações da imagem abaixo:

som.fw

Funcionamento do Programa (Software):
O código tem a função de fazer a leitura do Sensor de Som e quando detectado algum ruído alto e instantâneo ele ativará o relé, caso detectar um novo ruído ele o desligará.

01
02
03
04
05
06
07
08
09
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
// Código exemplo sensor de som;
  
// Sensor de palma.
  
int microfone = 8; // pino 8 digital para o microfone
int relay1 = 13; //pino do relay
  
int contadorPalmasRelay = 0; //Contador de Palmas
int palmasRequeridaLigaRelay1 = 2; // Contagem para acionar o relay
int palmasRequeridaDesligaRelay1 =2; // Contagem para desativar o relay
  
unsigned long tempoMaximoSom = 1000; //tempo maximo entre o pulso seguinte
unsigned long tempoMinimooSom = 300; //tempo minimo entre o pulso seguinte
unsigned long comprimentoSonoro = 100; //comprimento do som esperado
unsigned long time;
unsigned long startTime = 0;
  
void setup() { //rotina ao iniciar o programa
 pinMode(microfone, INPUT); //inicia os pino do microfone como entrada
 pinMode(relay1, OUTPUT); //inicia os pino do relay como saida
 digitalWrite(relay1, HIGH); // desliga relay (o relay é invertido HIGH =desliga / LOW = liga)
}
  
void loop() { //rotina infinita
 //inicia a contagem de tempo
 time = millis();
 //verifica o tempo entre o pulso inicial e o seguinte
 unsigned long tempoAposPalma = time - startTime;
  
 if (tempoAposPalma >= comprimentoSonoro && digitalRead(microfone) == LOW) {
  
 //verifica se o pulso recebido respeita o intervalo entre 1 pulso e outro
 if (tempoAposPalma < tempoMinimooSom || tempoAposPalma > tempoMaximoSom) {
 //senao for dentro do intervalo reseta a contagem e o tempo
 contadorPalmasRelay = 0;
 startTime = millis();
 }
 else {
 //se for inicia a contagem de pulso e o tempo
 contadorPalmasRelay ++;
 startTime = millis();
 }
  
 //verifica se a contagem de palma é igual ou superior ao numro esperado e se o rele esta desarmado
 if ((contadorPalmasRelay >= palmasRequeridaLigaRelay1 - 1) &&(digitalRead(relay1) == HIGH)) {
 //liga relay e zera contagem
 digitalWrite(relay1, LOW);
 contadorPalmasRelay = 0;
 }
  
 //verifica se a contagem de palma é igual ou superior ao numro esperado e se o rele esta armado
 if ((contadorPalmasRelay >= palmasRequeridaDesligaRelay1 - 1) &&(digitalRead(relay1) ==LOW)) {
 //desliga relay e zera contagem
 digitalWrite(relay1, HIGH);
 contadorPalmasRelay = 0;
 }
 }
}

Conclusões:
Sensor de Som mostra-se um dispositivo realmente compacto e útil em diversas áreas, como na demonstração do vídeo podemos estar fazendo o controle da iluminação de sua residência, por exemplo. É um sensor de fácil aplicação, pois não são necessários componentes externos, para facilitar ainda mais, possui um trimpot para regular a intensidade da detecção.


0 Comentários