Alarme de Intruso com sensor PIR - Tutorial Arduino - PIR Alarm for Arduino

|


A noite é dos lobos e outras feras temerosas.
O perigo ronda.
A fresta da janela é a evidência de um mundo além dos muros.

Nada como um alarme para alertar a presença de um intruso.
Apresento o projeto de Alarme que desenvolvi.
Este dispositivo gera um sinal sonoro e luminoso e um botão desarma o alarme.
O código desenvolvido para o projeto é fexível e  permite a interação com  outros tipos de sensores de presença com nenhuma ou minimas modificações. 
Será que desse sensor você escapa?

 Para esse projeto não será exigido um conhecimento em eletrônica elevado, mas será preciso conhecer alguns
conceitos mais avançados de programação para compreender com facilidade o que o código está fazendo.

Para essa aula vamos precisar de:

1x Sensor de presença PIR (datasheet)
2x LEDs, um Verde e outro Vermelho. Ou um LED bicolor.
1x Buzzer
1x Resistor de 1k (é possivel usar valores direfentes)
1x Resistor 220R (é possível usar também valores de 100R a 10k)
1x Arduino (qualquer modelo)
1x Matriz de contatos e fios.


Prepare todo o material e monte na sua matriz de contatos como ilustrado abaixo:

Clicar na imagem para ampliar

Confira todas as conexões.
Note que os LEDs não são ligados ao GND do arduino.
Lembre-se que essa forma de controlar LEDs com arduino já foi elucidada em aulas passadas. Bem como o botão e o buzzer.

1-Agora espete o seu arduino no cabo USB e faça a gravação do código abaixo:


/*
Alarme Contra Intruso.
Programa desenvolvido por gamesh_
Dia: 04/02/2011
http://brasilrobotics.blogspot.com/

Descição:
Sensor detecta intruso e ativa sinal sonoro e luminoso. 
O alarme é desarmado pressionando um botão.
Luz Verde: Alarme está aguardando.
Luz Vermelha: Alarme detectou algo.
*/

int ledVermelho = 8;                 //Pino para o LED vermelho(RED)
int ledVerde = 7;                    //Pino para o LED verde(Green)            
int piezoPin = 6;                   // Pino para o + do PIEZO

int PIRPin = 4;                      //Pino OUT do PIR(leitura de valores)
int botaoPin = 5;                   //Pino de leitura da entrada do Botão

int PIR = 0;                     //Variável que representa o valor fornecido pelo sensor PIR
int Bot = 0;                        //Variável que representa o valor fornecido pelo Botão



void setup() {               //Declara LEDs e PIEZO como pinos de Saída. PIR e Botão como Entrada
  pinMode(piezoPin, OUTPUT);
  pinMode(ledVermelho, OUTPUT); 
  pinMode(ledVerde, OUTPUT);                                
  pinMode(PIRPin, INPUT);    
  pinMode(botaoPin, INPUT);
  }



void somAlerta() {                          //Função de nome: "somAlerta" que gera sinal sonoro
  digitalWrite(piezoPin, HIGH);
  delayMicroseconds(600);
  digitalWrite(piezoPin, LOW);
  delayMicroseconds(600);
}

void piscaLED(){                                   //Função de nome: "piscaLED" que gera sinal sonoro
 
  digitalWrite(ledVerde, LOW);                    // Pino do ledVerde será o Terra
  digitalWrite(ledVermelho, HIGH);             // Led Vermelho ON
  delay(100);
 
  digitalWrite(ledVermelho,LOW);                 // Led Vermelho OFF          
  delay(100);
}



void loop(){
 
  PIR = digitalRead(PIRPin);     // Faz leitura do OUT do senso PIR e joga o valor lido na variável: "PIR"
 

 
if (PIR == HIGH) {             // Testa se a variável "PIR" é alta(5v), caso SIM: executa uma tarefa Caso NÃO pular para else{

  do{                                     //Faça essa tarefa e testar em while
    digitalWrite(ledVermelho, HIGH);     // Liga led Vermelho
    digitalWrite(ledVerde, LOW);         // Pino do led Verde torna-se o GND(terra) do led Vermelho
     somAlerta();                        //chama função que emite um som de alerta
 
    Bot = digitalRead(botaoPin);      //Faz leiturado do Botão e joga o valor na variálvel "Bot"  
   
    }while(Bot==0);  //Enquanto a variável Bot for zero(Botão não pressionado) continuar  executando           

}     
else{                                // PIR não está HIGH então executa as tarefas que estão no else{
           if(Bot==1){                        // caso o botão for pressionado após o alarme disparar fazer uma tarefa
               for(int i=0; i<5 ;i++){            // Temporiza(alguns segundo) a função que será chamada "piscaLED()"
                 piscaLED();                   //chama função que pisca o LED vermelho
                 }
                
                 digitalWrite(ledVermelho, LOW);    
                 digitalWrite(ledVerde, HIGH);     // Liga Led verde para
                 delay(10000);                      // Aguarda 10s (impede um novo alarme de imediato)
                
               Bot=0;         //Após o temporizador chamar e executar a função pescaLED declara que a variável "BOT" é zero
           }
     
     
          digitalWrite(ledVermelho, LOW);     // Mantem o pino Vermelho como GND(terra) para o lede VERDE
          digitalWrite(ledVerde, HIGH);       // Led Verde ON
       
     
    }
   
   
}



Entendendo o código:

Temos dois blocos básicos: if e um else, que testam o estado do sensor PIR. Caso for ativado(HIGH) uma tarefa é executada indeterminadamente. Nesta execução uma função é chamada: somAlerta();   que ativa o sinal sonoro. E também o LED vermelho é ativado.
Caso o sensor PIR não detectar(LOW) nenhum intruso o else é executado. Tornando o Led Verde e aguardando a presença de um intruso.
Entretanto é feito um teste para saber se o alarme foi desativado a poucos instantes. Se isso for verdade uma função: piscaLED(); é chamada dentro de um temporizador para piscar o LED Vermelho por alguns segundos. Este comportamento informa que o alarme está sendo desativado pelo botão.
Passado esse tempo o LED fica Verde indicando que o sensor está monitorando a área.
Há também um "timer" que estabelece um tempo minimo de 10s para disparo do alarme após este ser desativado pelo botão.
É importante notar que o botão funciona corretamente quando pressionado.
O botão só é habilitado para desarmar o alarme após alguns segundos obrigando um aviso de alerta.
O sensor pode detectar uma pessoa até 7m de distância.


Vejam o vídeo do seu funcionamento:








Gostou do tutorial? Incentive mais tutoriais visitando:

20 comentários:

Danilo disse...

Olá, estou fazendo um projeto de uma central de alarme com arduino. No momento estou fazendo apenas o firmware. Mais p frente comprarei o hardware... Poderias me fornecer tutoriais p realizar esse projeto? sou iniciante no arduino...
O segundo passo seria fazer um software em Processing que configurasse e controlasse a central de alarme via PC(Habilitar-desabilitar canais;Visualizar a situação dos canais;Ligar/Desligar central;Ligar/Desligar sirene). Se puder me ajudar com dicas ou tutoriais com essas duas situações...
Muito obrigado...

Gamesh_ disse...

opa

no link: http://brasilrobotics.blogspot.com/2010/09/start-no-arduino-iniciar.html

Tem material para estudo.
Estarei incrementando esse projeto futuramente.
Assim que fizer posto mais sobre o tema.
Se possivel envie o que desenvolver ou melhorar para contribuir coletivamente.

D. Rates disse...

Amigo gostei muito desse projeto, estava pensando em fazer... Porém eu não tenho um PIR, gostaria de saber se posso substituir por um sensor de sonar... desde já grato

Brasil Robotics disse...

olá

O sensor sonar é direcional. Então só funciona numa área restrita.
O sensor Pir pega uma área maior.
Outro detalhe é que deve configurar a leitura do sonar para que ao encontrar um obstáculo mandar um valor alto ou baixo.
Fazendo isso funciona prefeitamente.
ok?

D. Rates disse...

Amigo não entendi muito bem essa parte de configurar a leitura do sonar... como ficaria o código?

Gamesh_ disse...

olá

O sonar não funciona como um botão: 0 ou 5V
Ele gera valores analógicos proporcional a distância que o objeto está.
Logo deve informar que faixa de distância o sensor deve pegar.
Não é difícil fazer isso mas será preciso fazer essa adaptação ao código que eu fiz.
Se não tem conhecimento de programação recomendo compra um sensor PIR.
Veja o tutorial sobre o sensor IR sharp que tem um funcionamento parecido com o sonar. Pode ajuda-lo a entender como tudo ocorre. ok?

Brasilrobotics

Vinicius disse...

Bom na verdade, sou iniciante no curso de Ciências da Computação, e temos uma matéria de Circuitos Digitais usando o Arduino, bom peguei seu projeto e estou tentando fazer umas modificações nele, para ele ficar assim;

Um sensor de temperatura. ou de luminosidade.
que dispara o buzzer e leds,
so que para desarmar o buzzer e o led, tem 4 botoes com uma "sequencia" lógica pré definida
.. Estou com uma grande dificuldade nessa parte de desenvolver a parte dos botões sera que alguem pode me ajudar???
Obrigado
ViniciuS

Brasilrobotics disse...

Visite a comunidade no facebook

Robson Tenório disse...

Olá,

O sensor que eu comprei tem 2 ajustes: Tempo e Distancia. Li em alguns lugares que durante 60 segundos ele tenta estabilizar. Entretanto ele continua disparando... Sabe o que pode ser?

Brasilrobotics disse...

Ola

Os ajustem sao para modificar esse tempo.
Faça alguns testes alterando eles.

Anônimo disse...

Saved as a fаvorіte, І reallу liκe yοur
blog!

Also visіt my pagе: simply click the following web site

Unknown disse...

como ficaria se eu quisesse colocar o alarme pra desligar pelo teclado tbm ?
pode me ajudar ? to precisando colocar isso no meu projeto urgente!! Obrigado !

Anônimo disse...

I gοt this ωeb pаge from mу friend
who informed me regardіng this site аnd now thіs time I am visiting this web page and rеaԁing vеry infoгmаtive аrticleѕ or геvіеwѕ at this
place.

Here is my web blog http://www.prweb.com/releases/silkn/sensepilreview/prweb10193901.htm

Anônimo disse...

I am trulу gratеful tο the
oωner of this web ρage whо has shared thіѕ imprеssive piece
of wгiting at here.

Feel fгеe to surf to my web-sitе: Www.Sfgate.Com

Unknown disse...

Onde, dentro do código, eu posso modificar o tempo mínimo de espera pra que quando eu aperte o botão ele desarme o alarme? Obrigado e parabéns pelo blog! Muito bom..

Brasilrobotics disse...

Esse tempo mínimo é ajustado no sensor PIR.
Alguns modelos possuem um potenciometro basta ajustar ele.
Outros você precisa trocar o resistor que é a referencia de tempo

Unknown disse...

Fera qual a distancia máxima do fio, entre sensor e arduino posso utilizar, sabe me dizer???

Brasilrobotics disse...

Não sei dizer o limite você tem que testar para verificar.
É possível usar equações para determinar. A relação entre a resistência do fio, o comprimento dele e a queda de tensão.
Mas certamente passa de 1m
se precisar de um fio muito longo basta da um ganho de tensão e transistores devem resolver.

Unknown disse...

Gostaria de trocar o sensor por um contado magnético, como ficaria.

Luciana Cardoso disse...

Olá

Onde no código tiver pinMode(ledVerde, OUTPUT); onde está "ledverde" eu tenho que escrever em qual pino está? Por exemplo: pinMode(pin4, OUTPUT);

ou o código está pronto e é só copiar no programa do Arduino?

 

©2010 Brasilrobotics | by Gamesh_