Criando um sistema de alertas com Arduino e um sensor PIR

Sensores de presença no formato PIR, são comumente utilizados em uma grande quantidade de projetos, tais como: automações residenciais e sistemas de segurança. Com base nisso e levando em consideração as possibilidades de uso deste sensor, neste tutorial, aprenderemos a como utilizar um sensor PIR para construir um sistema de alerta de presença utilizando um Arduino Nano.

Arduino Nano
Arduino Nano
PIR

 

Montagem do projeto

Para o procedimento de montagem, utilizaremos um Arduino Nano, que será o cérebro do nosso projeto, ficando responsável por ler o sinal gerado pelo sensor PIR, e informar ao usuário através de um led se foi detectado um movimento ou não. Também utilizaremos um Sensor PIR que será responsável por informar ao microcontrolador possíveis movimentos dentro do seu campo de visão através do seu pino de saída OUT.

Componentes utilizados:

Todos os itens utilizados neste tutorial foram cedidos pelo nosso patrocinador www.arduinomega.com.br, eles são uma loja especializada em Arduino com mais de 100 produtos em catálogo!

Bom, agora voltando para o tutorial,  o esquema de montagem do circuito é bem simples, e pode ser visualizado na imagem logo abaixo:

Basicamente, utilizaremos o pino digital 2 do nosso Arduino Nano para detectar a presença de movimento, sendo essa um pulso gerado pelo sensor PIR. Também utilizaremos o pino digital 3 do nosso Arduino Nano para informar ao usuário que uma presença foi detectada acendendo o LED conectado a porta 3. A tabela a seguir mostra onde cada um dos pinos deve ser conectado.

A imagem abaixo mostra como fica a montagem final do protótipo:

Desenvolvimento do código

Agora que temos o nosso circuito montado, partiremos para a parte de desenvolver a lógica responsável por ler o sensor e notificar o usuário através do led. O código a seguir, é capaz de ler o sensor, e acender o nosso led no momento em que for detectado um movimento pelo sensor PIR.

#define PINOSENSOR 2 // Pino utilizado pelo sensor PIR
#define PINOLED 3 // Pino utilizado pelo led

int valorAnterior = 0; // Variável para armazenar o último esado do sensor de presença
void setup() {
Serial.begin(9600); // Inicialização da comunicação serial
pinMode(PINOSENSOR,INPUT); // Inicializando pino do sensor como entrada no Arduino
pinMode(PINOLED,OUTPUT); // Inicializando pino do led como saída no Arduino
// put your setup code here, to run once:

}

void loop() {
int valorAtual = digitalRead(PINOSENSOR); // Leitura do estado do sensor PIR: 1 - Presença detectada 0 - Presença não detectada
if (valorAnterior != valorAtual){ // Verifica se o estado atual é diferente do estado anterior, para só assim tomar alguma decisão
if (valorAtual == HIGH){ // Se o sensor identificar uma presença
Serial.println("Presença Detectada"); // Mensagem é escrita na serial do Arduino
digitalWrite(PINOLED,HIGH); // Led será aceso
}
else{ // Caso uma presença não tenha sido detectada
digitalWrite(PINOLED,LOW); // Led será apagado
}
}
valorAnterior = valorAtual; // Copiamos o estado atual como estado anterior, para assim realizarmos a próxima leitura

}

Mergulhando no projeto

Agora que temos montado o nosso protótipo, e o código base de funcionamento, entenderemos o funcionamento de ambas as partes.

Software:

Defines

Inicialmente, criamos dois defines responsáveis por armazenar os pinos utilizados. Este tipo de abordagem é bastante interessante, pois qualquer mudança de pinos podem ser feitas diretamente nos defines. Isso reduz significativamente a quantidade de modificações que seriam necessárias caso você utilize estes mesmos pinos em outras partes do código.

Variáveis Globais

Neste código em questão, utilizaremos apenas uma variável global, de nome valorAtual, ela será responsável por armazenar último pulso lido do sensor PIR antes de uma próxima leitura.

Função Setup

Dentro da função setup, inicializaremo18/08/1s todos os pinos utilizados pelo nosso projeto. Além disso, iremos também inicializar a comunicação serial para enviar uma mensagem via serial quando uma presença for detectada. Inicializaremos os pinos 2 e 3 como entrada e saída respectivamente, além de inicializar a comunicação serial com uma taxa de 9600 bauds.

Função loop

Dentro da função loop, desenvolveremos a lógica responsável por acionar o led em caso de movimentos dentro do raio de alcance do sensor. Para isso utilizaremos a seguinte estrutura lógica

  1. Realizamos a leitura do sensor

// Leitura do estado do sensor PIR:
// 1 - Presença detectada 0 - Presença não detectada
int valorAtual = digitalRead(PINOSENSOR); 
  1. Caso o valorAtual seja diferente da última leitura, houve uma mudança de estados, logo entramos no if

// Verifica se o estado atual é diferente do estado anterior, 
//para só assim tomar alguma decisão
if (valorAnterior!=valorAtual)
  1. Caso o valorAtual seja HIGH, significa que o sensor detectou uma presença, logo podemos acender o nosso led e enviar a mensagem “Presença Detectada” via serial

// Mensagem é escrita na serial do Arduino
Serial.println("Presença Detectada");
digitalWrite(PINOLED,HIGH); // Led será aceso
  1. Caso o valorAtual seja LOW, significa que o sensor não detectou, ou deixou de detectar a presença de movimento, sabendo disso, o led pode ser então apagado.

digitalWrite(PINOLED,LOW); // Led será apagado

Hardware:

Os sensores PIR, ou Piroelétricos, são sensores capazes de detectar a presença de movimento através da radiação infravermelha gerada pelo calor de um corpo. Desta forma, sua estrutura, que é composta por um material cristalino gera uma diferença de potencial, que é detectada através de um circuito elétrico de alta sensibilidade. Seu funcionamento consiste em um pulso, gerado no momento da detecção do movimento através do pino OUT. Tanto o pulso quanto a precisão na detecção podem ser configurados através de dois potenciômetros posicionados na parte de baixo da placa. A figura abaixo, mostra os dois potenciômetros onde podemos configurar tanto a distância quanto o tempo.

Conclusão:

Neste tutorial, aprendemos a como utilizar um sensor PIR em conjunto com um Arduino Nano, criando um sistema básico de notificação de presença via led’s. Espero que tenham gostado do conteúdo apresentado, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Referências:

Blog Nova Eletrônica.

Sobre Danilo Almeida 5 artigos
Bacharel em Ciência da computação, pela Universidade Federal de Viçosa - Campus Florestal, e atualmente mestrando em Ciência da computação na área de arquitetura de computadores, é um entusiasta na área de sistemas embarcados e robótica, buscando sempre aprimorar e compartilhar o conhecimento obtido através de bastante estudo e noites sem dormir :) .

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*