Boa noite garagistas.
Estou com um problema em um projeto para um alarme baseado em ruído.
A ideia é a seguinte. Um sensor de som fica lendo o "som ambiente" e quando o ruído do ambiente passa de determinado valor uma luz apaga e permanece apagada enquanto o ruído/som permanecer alto. Assim que o ruído cessa a luz se acende.
Adaptei um programa que faz a leitura e apaga a luz quando o sensor lê acima do valor que estabeleci. Todavia, quando o som é continuo, a luz apaga (pisca) e volta a acender, por ter lido novamente o valor que permanece acima do estabalecido. Já percebi que o problema esta no fato do programa ter um comando "delay" que faz a leitura cessar e quando a leitura recomeça a luz se acende antes de "perceber" que o som ainda esta alto e volta a apagar. Mas o que busco é que ela permaneça apagada enquanto o som permanecer acima do valor de referência.
Alguém tem alguma dica? Segue abaixo o código, para teste utilizo o led do pino 13.
int sensorPin = A0; // Conectar o sensor som na porta analógica 0
long int val = 0; // inicia o valor do sensor em 0
int rele = 13; //conecta o rele da luz no pino 13
int relestate = HIGH;
void setup() {
Serial.begin(9600); //iniciei a serial para acompanhar os valores lidos pelo sensor
pinMode (rele, OUTPUT);
}
void loop() {
val = analogRead(sensorPin)*1000; // ler o valordo sensor e multiplica por 100
if (val < 25001){ //aqui defini o valor padrão para a luz apagar/acender - se menor acesa
digitalWrite (rele, relestate);
}
else { //se maior apaga
digitalWrite (rele, LOW);
Serial.println(val);
delay (700); // acredito que esse "delay" é o problema, mas se tiro do programa a luz não apaga, na verdade apaga mas tão rápido que se torna imperceptível.
loop(); //isso me parece uma gambiarra, mas foi a solução que pensei para retornar a leitura do sensor
}
}
Tags:
Oi CL, Boa noite.
Poque razão você usou este delay de 700ms?
Rui
Que ruído é esse ?
Uma voz mais alta ou um som constante e alto?
Oi CL, bom dia.
Veja bem, qualquer sinal elétrico analógico, captado por um sensor (tipo microfone), gera ondas que
tem valor variável na mesma frequência do som gerador .
Com isto posto, o seu sinal, apesar de ser considerado ruído, segue as mesma regras físicas.
Como você pode ver, ele varia muito rápido (para a visão humana) e passa pelo zero, se tornado
negativo.
Sugiro você fazer o seguinte:
Retifique este seu sina ruído, e depois integre-o, e terá um sinal mais compatível com a sua ideia de sinal variando em uma velocidade "visível". Depois aplique-o na entrada analógica do arduino.
A retificação pode ser de meia onda ou onda completa e a integração pode ser feita com um
pequeno capacitor, de talvez uns 470nF ou 680nf, com teste você poderá ajustar este valor.
Segue anexo o seu code modificado.
Teste e depois nos de um feedback.
Rui
O salvar o cometário, apareceu um erro e não carregou o arquivo.
Seque novamente o arquivo.
oi Rui. vou tentar implementar o capacitor. O arquivo que me mandou é exatamente o code que eu já tinha, algo deveria ter sido alterado?
CL, boa noite,
é o seu code sim, mas com o delay(700) e o loop(), e Serial1.begin(9600); bloqueados.
Como eu esqueci de colocar, sugiro que você coloque um delay de 100us (microssegundos) antes da linha:
val = analogRead(sensorPin)*1000;
para permitir a carga do capacitor interno do ADC do arduino
Rui
Cristiano, se o barulho for sempre desse motor, existe um circuito bem interessante para detecta-lo.
Chama-se toner decoder - LM567
Você precisará identificar a frequencia do som do motor, para calcular o ajuste do circuito.
Use um mini amplificador e ligue-o no LM567.
E a saída do LM567, você conecta no Arduino.
http://www.ti.com.cn/cn/lit/ds/symlink/lm567.pdf
esse exemplo é para 40KHz.
http://www.4shared.com/photo/kh0EUweR/NE555_CA5160_LM567_Sonar.html
Pessoal. Obrigado pelas dicas.
Rui. Tentei retificar o sinal com o capacitor e retirei o delay e loop do code, mas o resultado continua o mesmo. O led paga, depois acende e volta a apagar após perceber que o som ainda persiste alto.
José, não testei sua sugestão porque busco uma solução apenas com arduino e o sensor de som. Mas fico grato pela dica.
Pensei em algo com "while", para enquanto o som estiver alto apagar o led.
Sugestões?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por