domingo, maio 08, 2016

SENSOR DE SOM EM ARDUINO

Este sketch, apresentado aos alunos do projeto ROBÓTICA NA ESCOLA, utiliza um sensor de som para comandar o acender e apagar de led’s e o efeito sonoro de um buzzer. O controle da sensibilidade do sensor é feito a partir do ajuste do potenciômetro inserido na placa (trimpot). Sem o bater de duas palmas, ou dois estalos de dedos, o led aceso será o verde, caso contrário, se acenderá o vermelho e o buzzer soará um alerta.



HARDWARE: SENSOR DE SOM/BUZZER/LED’S/RESISTORES 22OΩ
/*
***********************************************************************
*                PROJETO ROBÓTICA NA ESCOLA 2016                  *
*         SENSOR DE SOM ACIONANDO LED E BUZZER           *
*                         EE DR PEDRO VELHO – RN/BR                       *
***********************************************************************
*/
int microfone = A2;
int buzzer = 3;
int ledVed = 10;
int ledVem = 11;
//Contador de estalos
int contEstalo = 0;
// número de estalos para ligar o led vermelho
int estaloLiga = 2;
// número de estalos para desligar o led vermelho
int  estaloDesliga = 2;
//tempo máximo entre dois estalos
unsigned long tempoMaximo = 1000;
//tempo mínimo entre estalos
unsigned long tempoMinimo = 300;
//tempo de duração do estalo
unsigned long duracaoEstalo = 100;
unsigned long tempo;
unsigned long inicioTempo = 0;
void setup()
{               
  pinMode(microfone, INPUT);
  pinMode(ledVed, OUTPUT);
  pinMode(ledVem, OUTPUT);
  pinMode(buzzer, OUTPUT);
  digitalWrite(ledVem, LOW);
  digitalWrite(ledVed, HIGH);
}
 void loop()
{
  //inicia a contagem de tempo
  tempo = millis();
  //verifica o tempo entre dois estalos
  unsigned long tempoApos1 = tempo - inicioTempo;
   if (tempoApos1 >= duracaoEstalo && digitalRead(microfone) == LOW)
  {
    //verifica se o tempo decorrido respeita o intervalo entre dois estalos
    if (tempoApos1 < tempoMinimo || tempoApos1 > tempoMaximo)
    {
      //fora do intervalo zera contagem e tempo
      contEstalo = 0;
      inicioTempo = millis();
    }
    else
    {
      //dentro do intervalo faz a contagem do tempo e estalos
      contEstalo ++;
      inicioTempo = millis();
    }
    //verifica se a contagem de estalos é igual ou superior ao número
    //esperado e se o led vermelho está ligado
    if ((contEstalo >= estaloLiga - 1) &&(digitalRead(ledVem) == HIGH) ) {
      //liga led verde, apaga vermelho e zera contagem
      noTone(buzzer);
      digitalWrite(ledVem, LOW);
      digitalWrite(ledVed, HIGH);
      contEstalo = 0;
    }
    //verifica se a contagem de estalos é igual ou superior ao número
    //esperado e se o led vermelho está desligado
    if ((contEstalo >= estaloDesliga - 1) &&(digitalRead(ledVem) == LOW))
    {
      digitalWrite(ledVem, HIGH);
      digitalWrite(ledVed, LOW);
      tone (buzzer,110,250);
      contEstalo = 0;
    }
  }
}

Nenhum comentário:

Postar um comentário