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.
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
-
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);
-
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)
-
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
-
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.
Estou fazendo bolando uma forma de ligar meu pc por meio do arduino com esse sensor, não vou ter problemas né ?
Gostaria que ao sensor não detectar ninguem, ele só mantivesse o estado atual, seja ligado ou desligado… e, quando detectar, dispara o sinal para ligar o computador; como faço isso ?
Outra duvida, já q o sensor vai ficar detectando uma presença, ele vai ficar disparando o sinal pra ligar ?