Step 1: Principais componentes
- NodeMCU ESP12-E $8.89
- Motion Sensor HC-SR501 $2.57
- Resistor (1K, 2.2K and 330ohm)
- LED
- Breadboard
- Cables
Step 2: O HC-SR501 “Passive Infrared (PIR) Motion Sensor”
Este módulo de sensor de movimento utiliza-se do sensor passivo de sinal infravermelho LHI778 e o do circuito integrado BISS0001 para controlar como o “movimento deve ser detectado”.
O módulo possui sensibilidade ajustável que permite uma faixa de detecção de movimento de 3 a 7 metros.
O módulo também inclui ajustes de atraso de tempo e seleção de gatilho que permitem ajustes finos dentro de sua aplicação.
O link abaixo nos fornece mais detalhes do funcionamanto do sensor:
Arduino HC-SR501 Motion Sensor Tutorial
Step 3: O HW
O HW é muito simples. O sensor tem 3 pinos (+Power, GND e Saída).
É importante lembrar que a saída do HC-SR501 gera um sinal lógico de + 3.3V (ALTO) ou 0V (LOW), o qual É COMPATÍVEL com os níveis de entrada do NodeMCU, que também funciona com o nível 3.3V. Eu mantive a circuito com um conversor de nível para garantir caso seja utilizado algum outro sensor com saída 5V.
Assim, você precisará de um divisor de tensão para converter os níveis de sinal (veja o diagrama elétrico acima).
- Saída do HC-SR501 ==> para a entrada do divisor de tensão
- NodeMCU Pin D1 (GPIO 5) ==> para o ponto médio do Divisor de Tensão
Também incluíremos um LED no pino D7 (GPIO13), para uma visualização local.
Step 4: Testando o sensor
Primeiramente faremos um programinha simples para testar e calibrar o sensor.
Carregue o código abaixo no Arduino IDE:
/* HC-SR501 Motion Detector */ #define ledPin D7 // Red LED #define pirPin D1 // Input for HC-SR501 int pirValue; // variable to store read PIR Value void setup() { pinMode(ledPin, OUTPUT); pinMode(pirPin, INPUT); digitalWrite(ledPin, LOW); } void loop() { pirValue = digitalRead(pirPin); digitalWrite(ledPin, pirValue); }
Ao fazer um movimento na frente do sensor, você verá o LED vermelho acender. Você poderá usar o código acima para ajustes no sensor, se necessário.
Se você não sabe como preparar o IDE do arduino para trabalhar com o NodeMCU, por favor de uma olhadinha em meu tutorial:
Do “blink” ao BLYNK, uma viagem pela “Internet das coisas” nas asas do NodeMCU ESP-12E
Step 5: Incluindo o BLYNK
Siga os Passos abaixo::
- Crie um New Project.
- Defina um nome para o projeto (em meu caso: “Motion Detector“)
- Selecione NodeMCU como HW Model
- Copie o AUTH TOKEN para ser adicionado ao seu código do IDE (o melhor é enviar-lo para seu email).
- Inclua o “Widget”: Push Notification.
- Pressione “Play” (o triangulo no canto superior direito)
Naturalmante o appicativo Blynk nesse ponto irá informar que o NodeMCU está off-line. antes de rodar o aplicativo Blynk, o codigo deve ser carregado e iniciado no módulo NodeMCU. Abaixo o código a ser ingressado no Arduino IDE:
/************************************************************** * IoT Motion Detector with Blynk * Blynk library is licensed under MIT license * This example code is in public domain. * * Developed by Marcelo Rovai - 30 November 2016 **************************************************************/ #include <ESP8266WiFi.h> #define BLYNK_PRINT Serial // Comment this out to disable prints and save space #include <BlynkSimpleEsp8266.h> char auth[] = "YOUR AUTH CODE HERE"; /* WiFi credentials */ char ssid[] = "YOUR SSID"; char pass[] = "YOUR PASSWORD"; /* HC-SR501 Motion Detector */ #define ledPin D7 #define pirPin D1 // Input for HC-S501 int pirValue; // Place to store read PIR Value void setup() { Serial.begin(115200); delay(10); Blynk.begin(auth, ssid, pass); pinMode(ledPin, OUTPUT); pinMode(pirPin, INPUT); digitalWrite(ledPin, LOW); } void loop() { getPirValue(); Blynk.run(); } /*************************************************** * Get PIR data **************************************************/ void getPirValue(void) { pirValue = digitalRead(pirPin); if (pirValue) { Serial.println("==> Motion detected"); Blynk.notify("T==> Motion detected"); } digitalWrite(ledPin, pirValue); }
Assim que o código é carregado e executado, verifique a aplicação BLYNK, a qual também deverá estar funcionando.
Faça um movimento na frente do sensor, você deverá receber uma mensagem em seu celular como a mostrada abaixo:
Abaixo o código completo para ser executado no Arduino IDE (não se esqueça de entrar com seus dados):
Observação sobre o código:
Vale a pena comentar que os testes para este projeto foram executados somente em laboratório. Para projetos envolvendo sistemas caseiros de alarmes o código funcionaria sem problemas, mas se o sensor perceber muitas variações de movimento ao mesmo tempo, poderíamos chegar a ter problemas. Neste caso, uma solução envolvendo “SimpleTimer” seria o aconselhável.
O ideal quando se desenvolve projetos com o Blink é manter-se na função void loop() somente a função Blynk.run(), movendo-se a getPirValue() para dentro de uma função de timer, por exemplo: timer.setInterval(1000L, getPirValue);
Step 6: Conclusão
Como sempre, espero que este projeto ajude outras pessoas a encontrar seu caminho no apaixonante mundo da eletrônica e do IoT!
Não deixe de visitar e seguir minha página: MJRoBot.org no Facebook
Olá, gostei muito do artigo sobre o sensor de presença, você teria como me ajudar no projeto de portão automatico na qual o motor é acionado por um RFId e o sensor bloquearia o motor ao detectar movimentação liberando-a assim que não detectar mais o movimento… desde já agradeço
CurtirCurtir
Oi Helio, infelizmente não tenho experiencia com RFId. Tenho intenção de estudar o assunto no futuro, mas infelizmente no momento não posso.
Um abraço.
CurtirCurtir
obrigado pelo retorno Marcelo, você saberia me dizer como controlar um motor de passo com o sensor como na porta automática de shopping?
CurtirCurtir
Olá, gostei muito do projeto e gostaria de saber se a programação pode ser usada em Arduino Uno com módulo ESP8266
CurtirCurtir
Oi Gustavo. Legal que você gostou. Caso você queira mesmo usar os dois, Arduino + ESP, este último deveria funcionar como uma espécie de Shield e a programa deveria ser outro, onde o Arduino faria a lógica de controle e mandaria comandos AT para o ESP fazer a comunicação. Outra opção seria usar somente o ESP, sem o Arduino. Aí não teria problema, pois o programa seria exatamente esse. Você só teria que usar o Arduino de maneira especial para programar o ESP, ou programar direto via a IDE do Arduino Usando um conversor USB/Serial.
CurtirCurtir
Ah, entendi obrigado
CurtirCurtir
Gostaria também de colocar duas notificações, uma para falar quando um LED acendeu e outra quando ele apaga
CurtirCurtir
Vale a pena comentar que os testes para este projeto foram executados somente em laboratório. Para projetos envolvendo sistemas caseiros de alarmes o código funcionaria sem problemas, mas se o sensor perceber muitas variações de movimento ao mesmo tempo, poderíamos chegar a ter problemas. Neste caso, uma solução envolvendo “SimpleTimer” seria o aconselhável.
O ideal quando se desenvolve projetos com o Blink é manter-se na função void loop() somente a função Blynk.run(), movendo-se a getPirValue() para dentro de uma função de timer, por exemplo: timer.setInterval(1000L, getPirValue);
CurtirCurtir
Amigo tenho uma duvid ! Posso garegar mais de um codigo no nodemcu? Lo exemplo ja tenho carregado no meu o codigo do blynk onde cosigo acionar reles e acesso a uma porta analogica! Posso adicionar esse codigo nela para fazer o monitoramento pela porta virtual?
CurtirCurtir
Oi Edilson, não vejo porque não. Veja meu outro Post “Do blink ao Blynk”. eu faço o NodeMCU trabalhar com sensores digitais e analógico ao mesmo tempo que aciona um LED (podia ser um relé). As limitações são o número de portas apenas.
CurtirCurtir
Intao basta eu colocar esse codigo que vc posto abaixo do que ja vem na propria IDE do arduino como exemplo para o blynk e mandar copilar ! ??? Tem outra formo de entrar em contanto com vc? Zap por exemplo!
CurtirCurtir
Republicou isso em sei lá… entende?e comentado:
Exemplo muito bacana de internet das coisas!
CurtirCurtido por 1 pessoa
Na minha universidade UFSJ estudo Engenharia Mecatrônica e numa disciplina de IoT, estamos trabalhando o conceito utilizando justamente o NODEMCU, equipamento muito bacana e versátil realmente! Para programarmos nele deixamos de lado o compilador do Arduino e passamos a utilizar o eclipse adaptado para o Arduino, achamos bem mais rápido!
CurtirCurtido por 1 pessoa
Legal Freud. Eu nunca programei com o eclipse. Só usei o IDE do Arduino mesmo. Qualquer hora eu tento. O NodeMCU é realmente 10! Pretendo refazer alguns de meus projetos baseados no Arduino UNO/Nano + ESP8266-01, utlizando-se sómente do NodeMCU. Sua interação com o Blink também simplifica muito os projetos na area de IoT. Abração e boa sorte na engenharia! Ah! Também li seus posts! muito legais! Precisa contar de suas experiências em Cuba! estive por lá a uns 25 anos atrás. pretendo voltar este ano.
CurtirCurtir