Revista 100% Verde

Detector de movimiento inteligente

Por Soloelectronicos @soloelectronico

En este ejemplo volveremos a usar un economico NodeMCU ,junto con un sensor de movimiento PIR y la plataforma de IoT Carriots para construir, usando el IDE de Arduino, un detector de movimiento inteligente para comerciales y hogar.

El tema gira en torno a la seguridad de un edificio o casa o una zona restringida detectando cualquier movimiento dentro de un rango específico con un sensor PIR . Gracias al IoT, además de detectar objetos en movimientos podemos hacer muchas más cosas como por ejemplo:

  • Encender un dispositivo mediante un relé (en el ejemplo es una luz durante unos 30 segundos).
  • Al mismo tiempo enviar un correo electrónico al usuario, utilizando la IOT - plataforma Carriots sobre WIFI.
  • El relé se puede conectar a cualquier luz del dispositivo, alarma, cámara, sistema de seguridad...
  • Incluso el disparo puede ser SMS, llamar a las autoridades, llamando a otros servicios...

Node MCU es una plataforma para el desarrollo de proyectos IoT que integra el famoso chip ESP8266, el cual se ha extendido enormemente debido a su facilidad para desarrollar proyectos open source a los que indudablemente se une su bajisimo precio comparado con otras opciones.
De este componente destaca integra capacidades de comunicación via WiFi , conteniendo en su interior microprocesador que puede ser programado fácilmente usando en conocido lenguaje de programación Lua o vía Arduino IDE.

¿Se pregunta cómo controlar su económico ESP8266 d e forma remota desde cualquier lugar del mundo?

En este post repasaremos precisamente el proceso, paso a paso, de cómo escribir código en el IDE de Arduino y programar s u ESP8266 permitiendo que el código escrito para el ESP8266 se comunique con la plataforma de Iot Carrriots, la cual nos va permitir monitorear y controlar el ESP8266.

Detector de movimiento inteligente

Los pasos a seguir para conectar un ESP8266 a Carriots son los siguientes:

  • Instalación del IDE de Arduino .Si aun no lo tiene instalado ,se puede hacer desde aqui
  • Instalación del paquete de la placa ESP8266 en Arduino IDE siguiendo las instrucciones del sitio : https://github.com/esp8266/Arduino
Detector de movimiento inteligente
    Instalación de los controladores USB

Es necesario instalar el controlador USB requerido en su ordenador para que pueda programar el ESP8266. Independientemente de la opción de firmware que elijamos, primero necesitamos comunicarnos con la placa de desarrollo ESP-12E utilizando la interfaz USB de la computadora.

El módulo USB a Serial UART incluido en la placa es Silicon Labs 'CP2012, para lo cual generalmente necesitamos instalar los controladores de puerto COM virtual (VCP) fácilmente disponibles para su sistema operativo específico.Una vez instalado, debemos verificar que el CP2102 sea reconocido por su ordenador

Una vez que el controlador está instalado, podemos conectar el cable USB al puerto USB de la computadora y la placa. Después de hacerlo, deberíamos ver el mensaje: software del controlador del dispositivo instalado correctamente.

Además, podemos verificar manualmente que todo funcione correctamente siguiendo estos pasos:

Abra el Administrador de dispositivos (disponible a través del P anel de control → Sistema y seguridad → Administrador de dispositivos en la sección Sistema)
Debajo de la entrada Puertos (COM & LPT), debe haber un puerto abierto llamado USB-SERIAL CP2102 (COM) donde hay un número típicamente mayor o igual a 3.

Carriots es una Plataforma como Servicio (PaaS en sus siglas en inglés) diseñada para proyectos del Internet de las Cosas (IoT) y de Máquina a Máquina (M2M)

Detector de movimiento inteligente

Carriots es una plataforma IoT creada en España que permite crear potentes productos y servicios IoT haciendo posible conectar fácilmente "sus cosas" al Internet de las Cosas.

Se pueden construya sus apps inteligentes con Carriots en pocos pasos.

  1. Conectar Dispositivos
  2. Recopilar Datos
  3. Gestionar Dispositivos y Datos
  4. Construir APPs

Principales ventajas

  • Listo para empezar a desarrollar.
  • Minimizar tiempo de desarrollo.
  • Gestión simplificada de múltiples proyectos: Arquitectura de 7 niveles
  • Amplia variedad de APIs y potente SDK: REST API y SDK
  • Escalabilidad inmediata
  • Inicio gratuito y pago por uso.
  • Alojamiento simplificado: Oferta PaaS para escalabilidad fiable.

Hardware

Ahora preparado el entorno , necesitamos el hw que lo permita , el cual como vamos a ver, es muy simple reduciendose a la placa o NodeMCU, una placa de relé, el sensor PIR y una fuente de 5V DC

Sensor PIR

El sensor PIR usado , es del tipo HC-SR501, de bajo coste el cual es ampliamente utilizado en diversos equipos eléctricos de detección automática, productos para el control automático especialmente a batería.Tiene alta sensibilidad, alta fiabilidad, bajo consumo de energía, el modo de operación de bajo voltaje.

Especificaciones:
  • Dimensiones: Cerca de 3,2 x 2,4 cm (L x W).
  • Rango de tensión: 5V-20V DC.
  • Corriente estática: < 50uA
  • Voltaje de salida: 3,3 V (alto) / 0V (bajo)
  • Modo del disparador: L (no se puede gatillo repetida), H gatillo repetida (Repetición predeterminado de disparo)
  • El Tiempo de retardo: 0,3 seg 18 seg (ajustable)
  • Temperatura De funcionamiento: -15 C a 70
Detector de movimiento inteligente
Placa de rele

Por precio es mucho mas asequible optar por una placa de 2 reles con salida de relé máxima: DC 30V / 10A, AC 250V / 10A. Es importanet que el interfaz de tarjeta de relé sea de 5v . En nuestro caso es de 2 canales y cada canal necesita 15-20mA actual controlador

Este tipo de placas es de fácil instalación por el microcontrolador como Arduino, 8051, AVR, PIC, DSP, BRAZO, MSP430, PLC, lógica TTL pues solo ha que conectar la alimentacion y dos cables de datos en caso de necesitar los dos canales

Detector de movimiento inteligente

Resumiendo , estos son los componentes necesarias:

  • Placa de desarrollo de NodeMcu Lua WIFI Internet de las cosas basado en ESP8266 - 1 (capacidad de MCU y WIFI)
  • Sensor PIR ( hemos hablado en este blog )
  • 1 módulo de relé con opto aislamiento de 5V1
  • Fuente de alimentación conmutada 220V/5v ( nos sirve cuaqluier cargador de movil con salida microusb)
  • Placa Protoboard

Diagrama del circuito:

El circuito no incluye dificultad alguna ,pues se reduce a conectar el sensor PIR a +5V y la salida binaria al pin D2, el módulo de rele a +5v y al pin D2 y por supuesto la alimentación del circuito que puede ser bien a baterías o bien por medio del propio micro-usb usado para programar el NodeMcu

Detector de movimiento inteligente

Resumiendo las conexiones con las siguientes:

  • NodeMCU (ESP8266 Dev Kit) D1-> INI del relé
  • NodeMCU (ESP8266 Dev Kit) D2-> Digital sensor PIR
  • NodeMCU (ESP8266 Dev Kit) VCC-> VCC (+) de la batería
  • NodeMCU (ESP8266 Dev Kit) GND-> GND (-) de la batería
  • Relé de VCC-> VCC (+) de la batería
  • Relé de tierra-> GND (-) de la batería
  • PIR Sensor VCC-> VCC (+) de la batería
  • PIR Sensor de tierra-> GND (-) de la batería

Software

Una vez el hardware montado nos toca escribir el código el código utilizando el IDE de Arduino para hacer que NodeMCU trabaje con un relé, sensor de movimiento PIR y utilizar IOT plataforma carriots sobre WIFI

El autor se encontró con algunos puntos problemas en el diseño del programa para ejecutar en la placa NodeMcu;

  • Compruebe que los pines de NodeMcu están dando la entrada o salida correcta como se están asumiendo, por ejemplo, asegurándose que usted no está tomando el pin 4 (GPIO) como un pin de entrada asi que por defecto que este pin debe leer...
  • Utilizar un método directo de get y post HTTP en lugar de utilizar una función de visualización por BLYNK o Thinger.io.
  • Observe que el PIR da salida permanentemenet alta durante un par de envíos pero se necesita traer retraso para evitar el envío de múltiples correos electrónicos. Con algunos servicios como BLYNK este retraso causa un problema asi que es mejro a llamar a esa función una vez despues de 6 o 7 seg.
  • Una vez satisfecha la condición de if loop, llamar a una función, en lugar de escribir todo con el bucle. Esto aporta claridad del código y ayuda en la resolución de problemas.
  • Se puede ajustar la sensibilidad del PIR para reducir el tiempo que permanece alta.

A continuación veamos el codigo completo del sw que habrá que subir a la placa desde el entorno de Arduino:

#include "ESP8266WiFi.h" const char * ssid = "NETGXXXXX"; //red wifi a la que se conectara const char * clave = "XXXXXXXXX"; //clave red wifi para coenctarse const char * servidor = "api.carriots.com"; const String APIKEY = XXXXXXXXXX"; //Sustituir con su apikey de Carriots const String DEVICE = "[email protected]"; //Reemplazar por el id_developer del dispositivo de carriots int ledpin = 4; pirpin INT = 12; int pirstate = LOW; int val = 0; void setup() { Serial.Begin(115200); Delay(10); pinMode(ledpin,OUTPUT); pinMode(pirpin,INPUT); Serial.println("calibrando"); for (int i = 0; i < 20; i ++) { Serial.Print("."); Delay(1000); } //iniciar wifi Serial.println(); Serial.println(); Serial.Print ("conectarse"); Serial.println(SSID); WiFi.begin (ssid, clave); while (WiFi.status()! = WL_CONNECTED) { Delay(500); Serial.Print("."); } Serial.println(""); Serial.println ("Wi-Fi conectado"); Serial.println ("dirección IP:"); Serial.println(WiFi.localIP()); } //función para hablar con la plataforma Carriot void sendStream() { String txt = ""; //Texto para enviar if (pirstate == HIGH) {/ / alarma txt = "Detecta movimiento;" } else {/ / alarma en txt = "Algo mal"; } Serial.println(txt); Serial.println(Val); / / para fines de depuración Client WiFiClient; const int httpPort = 80; if (client.connect (servidor, 80)) {/ / si hay una conexión exitosa Serial.println(F("Conectedo")); //Construir el campo de datos String json = "{\"protocol\":\"v2\",\"device\":\""+DEVICE+"\",\"at\":\"now\",\"data\":{\"light\":\""+txt+"\ "}}"; //Realizar una solicitud HTTP Client.println ("POST /streams HTTP/1.1"); Client.println ("Host: api.carriots.com"); Client.println ("Accept: aplicación/json"); Client.println ("User-Agent: Arduino-Carriots"); Client.println ("Content-Type: aplicación/json"); Client.Print ("carriots.apikey:"); Client.println(APIKEY); Client.Print ("Content-Length:"); int thisLength = json.length(); Client.println(thisLength); Client.println ("conexión: cerrar"); Client.println(); Client.println(JSON); } Else {} //Si no tiene una conexión con el servidor: Serial.println (F ("Conexión fallida")); } } void loop() {} Val = digitalRead(pirpin); Serial.println(Val); if(Val == HIGH) {} digitalWrite(ledpin,HIGH); if (pirstate == LOW) { Serial.println ("movimiento detectado"); pirstate = HIGH; Serial.println (F ("secuencia de enviar")); sendStream(); Delay(30000); } / * {while(client.available())} String linea = client.readStringUntil('\r'); Serial.Print(line); Delay(30000); } */ } Else {} digitalWrite(ledpin,LOW); if(pirstate == HIGH) {} Serial.println ("movimiento detectado correo enviado"); pirstate = LOW; } } } Programación de disparadores de Carriots enviar Email:

Una vez que tenga desplegado el sw en su placa NodeMcu ,la capacidad de activar un correo debe ser programado o configurado en la plataforma de Internet para este producto que está utilizando (la plataforma Carriots IOT) . Si no sabe como hacerlo en el siguiente video podemso ver como familiarizarse con las funciones y cómo utilizarlas:

Obviamente esto podría programarse para llamada, o un texto o una alarma a la policía o quien sea. !Como podemos adivinar las posibilidades son infinitas!.


Volver a la Portada de Logo Paperblog