IoT: Sensor de movimento com o NodeMCU e BLYNK

 

Step 1: Principais componentes

  • 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.

fkscpzbivo85exc-large

f19wasdivo85ey1-large

 

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)

fyieb1nivo85k5p-large

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

“Saludos desde el sur del mundo!” 😉

Um abraço e até o próximo post!

Obrigado

Marcelo

Anúncios

LaserCat – IoT com NodeMCU e Blynk

Exploraremos como controlar servos via internet, utilizando-se o NodeMCU ESP12-E e o Blynk.

Este é um projeto muito simples, onde a idéia principal é explorar como controlar servos via internet. Para isso, usaremos uma grande dupla de componentes, o NodeMCU ESP12-E e um aplicativo Blynk.
O projeto foi baseado em um grande tutorial: Smartphone Controlled Cat Laser, desenvolvido usando-se um Arduino Uno conectado a um PC via Serial. Aqui porém, usaremos o NodeMCU, em um formato mais “portátil” utilizando-se WiFi e bateria.

IMPORTANTE: O apontador laser pode ser perigoso se apontado diretamente para os olhos. Proteja os seus olhos, o de animais e outras pessoas. Use com cuidado.

Abaixo, você poderá ver minha gatinha Cleo brincando com o laser:

Step 1: Os componentes principais:

Step 2: O mecanismo “Pan/Tilt” de posicionamento

Vamos construir um mecanismo de “Pan / Tilt” muito simples, montando os servos “um em cima do outro” como mostrado nas fotos abaixo:

  • O “Pan” Servo  é usado “como base”. Mantenha-o na vertical.

  • Fixe o “Tilt” Servo sobre a parte de movimento do “Pan” Servo  (na posição horizontal)
  • Fixe o ponteiro laser na parte movel do “Tilt” Servo como mostrado.

Note que usei algumas peças metálicas, aproveitadas de um brinquedo desmontado, como estrutura de base para o mecanismo “Pan / Tilt”. Você poderá utilizar outros tipos de estrutura, O importante é manter os movimentos horizontal e vertical.

Step 3: O HW

O circuito elétrico é bem simples:

Antes de iniciar as conexões, leve em consideração que apesar do nodeMCU ser alimentado com 5V, ele funciona internamente com 3.3V (assim como seus pinos de I/O). Assim, os Servos não poderão ser alimentados a partir de uma das 3 saídas de 3.3V do NodeMCU. A exceção é o pino “Vin”, que pode tanto fornecer 5V para o breadboard “+ VCC rail”quanto alimentar o NodeMCU quando uma fonte externa é utilizada (como mostrado no diagrama elétrico abaixo).

O módulo laser deve ser alimentado com 5V, porém ele também funciona com 3.3V o  que faz com que a potência do laser seja menor e consequentemente, seu uso mais seguro.

IMPORTANTE: O apontador laser pode ser perigoso se apontado diretamente para os olhos. Proteja os seus olhos, o de animais e outras pessoas. Use com cuidado.

Observando atentamente o diagrama elétrico acima, execute as seguintes ligações:

  • Ligue o cabo de dados do servo Pan (eixo X) ao NodeMCU Pin D1 (note que todos os pinos digitais do NodeMCU são PWM)
  • Ligue os dados do servo Tilt (eixo “Y”) ao NodeMCU Pin D2
  • Ligue o pino “S” do ponteiro laser ao NodeMCU Pin D3
  • Ligue o pino “Vin” de NodeMCU ao “+ 5V Rail” do Breadboard
  • Conecte os pinos GND (comum ou terra) do NodeMCU, Servos e Ponteiro Laser ao “GND Rail” do Breadboard
  • Conecte os cabos de alimentação dos Servos ao  “+ 5V Rail” do Breadboard

 

Step 4: O codigo

Para o controle dos servos, usaremos a biblioteca do IDE: Servo.h, a qual gerará sinais PWM posicionando-os facilmente com entradas angulares.

Uma vez que a base do projeto é usar o aplicativo BLYNK, o código torna-se muito simples. Devemos definir 4 variáveis virtuais:

V0: “X position”

V1: “Y position”

V2: “Random or manual” operation

V3: Laser ON/OFF command

BLYNK_WRITE(V0) 
{
  xPotReading = param.asInt();
}
BLYNK_WRITE(V1) 
{
  yPotReading = param.asInt();
}
BLYNK_WRITE(V2) 
{
  randState = param.asInt();
}
BLYNK_WRITE(V4) 
{
  laserState = param.asInt();
}

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

Abaixo, o código completo. de uma passada de olhos nele. É muito fácil de entender.

Step 5: O “Blynk”

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

Um abraço e até o próximo post!

“Saludos desde el sur del mundo!” 😉

Obrigado

Marcelo