segunda-feira, 27 de dezembro de 2010

Arduino sensor de som


Se preferir assista no Youtube

Um irmão me propôs montar um sistema de luz rítmica com o arduino.
Como nunca fiz nada do tipo fui pesquisar e encontrei alguma coisa que não usava microcontrolador mas um transformador ligado à saída de um amplificador como casador de impedância, uma etapa pré-amplificadora e SCRs ou TRIACs para acionar lâmpadas incandescentes para 110v ou 220v. Pensei então em usar um sensor de som no arduino e uma etapa de potência com TRIACs, SCRs ou Relés. Por conveniência escolhi usar relés que apesar de ter a limitação ser ON/OFF, não há possibilidade de controle da intensidade luminosa como nos TRIACs e SCRs e de seus contatos sofrerem desgaste com operações repetitivas, funcionaram satisfatoriamente.

O Sensor

Existe à venda o Arduino sound sensor, mas decidi adaptar um sensor simples e barato publicado pela editora Saber no livro Eletrônico Básica para Mecatrônica de Newton C. Braga. O circuito pode não ter a sensibilidade do sensor comercial, mas, atendeu muito bem ao propósito proposto. O microfone usado é de eletreto.

O Circuito

ATENÇÃO: TENHA MUITO CUIDADO AO  UTILIZAR TENSÃO DA REDE ALTERNADA 110V OU 220V. PARA ESSAS TENSÕES CHOQUES PODEM SER, NO MÍNIMO, DESAGRADAVÉIS.
                                                                                                                                                                
                                                                                                                                                                  
As lâmpadas usadas foram de um pisca-pisca comum com 100 lâmpadas e 8 funções. Ele tem quatro conjuntos de lâmpadas, cada conjunto ligado em série. A centralzinha de controle foi removida ficando cinco fios um de cada conjunto de lâmpada que foram ligados a cada um dos contatos normalmente abertos de quatro relés e, um fio comum ligado diretamente à rede 110V. O transistores usados para acionar os relés são BC548 e os resistores de 1k. 

A lógica é bem simples. O sensor é lido pelo arduino, através da entrada analógica, 0 (zero) que verifica três níveis de sinal e chama a função acende que gera um byte aleatório e usa os quatro primeiros bits para aciona as lâmpadas através dos relés isto é, bit 1 liga o relé correspondente bit 0 desliga o relé correspondente o que, por sua vez, acende ou apaga as lâmpadas respectivamente. Para cada nível de sinal é aplicado um delay, que determina quanto tempo a lâmpadas ficarão no estado atual antes de uma próxima leitura do sensor. No caso da faixa de mais alta a função acende é chamada duas vezes para causar um efeito diferenciado.

O código, que também é muito simples, pode ser visto abaixo.

 int soundPin = 0;  
 int lmpPin4 = 13;  
 int lmpPin3 = 12;  
 int lmpPin2 = 11;  
 int lmpPin1 = 10;  
 int val, val2;  
 byte Seq =0;  
 void setup()  
 {  
  pinMode(soundPin, INPUT);  
  pinMode(lmpPin4, OUTPUT);  
  pinMode(lmpPin3, OUTPUT);  
  pinMode(lmpPin2, OUTPUT);  
  pinMode(lmpPin1, OUTPUT);  
 }  
 void loop()  
 {  
   val2 = analogRead(soundPin); //le o sensor de som  
   val = map( val2, 0,1024,0,200); //muda de escala de 0-1024 para 0-200   
   if(val > 70 )  
   {  
   acende();  
   delay(100);  
   acende();  
   delay(100);  
   }  
   else if(val > 40 )  
   {  
   acende();  
   delay(200);  
   }  
   else if(val > 30 ) // nivel minimo valores menores são desprezados  
   {  
   acende();  
   delay(300);  
   }  
 }  
 void acende()  
 {  
 Seq = random(1,0xF);  // gera um byte aleatorio e armazena em Seq   
  if(bitRead(Seq,0 )==0)  
  digitalWrite(lmpPin1, LOW);  
  else  
  digitalWrite(lmpPin1, HIGH);  
  if(bitRead(Seq,1)==0)  
  digitalWrite(lmpPin2, LOW);  
  else  
  digitalWrite(lmpPin2, HIGH);  
  if(bitRead(Seq,2)==0)  
  digitalWrite(lmpPin3, LOW);  
  else  
  digitalWrite(lmpPin3, HIGH);  
  if(bitRead(Seq,3)==0)  
  digitalWrite(lmpPin4, LOW);  
  else  
  digitalWrite(lmpPin4, HIGH);   
 }  

Para baixar o código fonte  clique aqui.

Para baixar o layout da placa do sensor, feito no expressPCB clique aqui.

Para baixar o layout da placa dos relés, feito no expressPCB clique aqui.

Obs.: Os arquivos estão compactados com o 7zip.

Neste site você pode baixar gratuitamente o expressPCB.

Esta é apenas uma aplicação simples para o sensor de som. Usando a criatividade é possível implementar muita coisa com ele.

3 comentários:

  1. fala Jr. Gostaria de saber como faço pra o sensor mandar o sinal pra 9 portas pois estou usando o sensor no cubo de led, e preciso que as 9 colunas acionem... se puder me ajudar eu agradeço...

    ResponderExcluir
  2. Olá Alex! Desculpe a demora. Você pode, por exemplo, usar o sinal do sensor para gerar 2 bytes aleatórios casa vez que uma camada é acionada usando 9 bits para definir quais leds serão acesos. Outra opção seria usar o sensor para selecionar o efeito mostrado no cubo e a velocidade com que ele é executado.

    ResponderExcluir
  3. Amigo o arquivo do código fonte não está mais disponível. =/

    ResponderExcluir