Ir al contenido principal
Todas las coleccionesTutoriales de proyectos IoT
Construye un contador de personas por $30 usando un ESP8266 y NodeMCU
Construye un contador de personas por $30 usando un ESP8266 y NodeMCU

Construye un contador de personas protegido por $30 utilizando un ESP8266, NodeMCU y Ubidots.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana

Un contador de personas es un dispositivo utilizado para medir el número de cuerpos que atraviesan una entrada, pasillo, esquina de calle, etc. Si necesitas saber cuántas personas existen en un espacio, esta es tu solución simple. Típicamente utilizado en tiendas minoristas, grandes eventos y edificios de oficinas inteligentes, esta tecnología de conteo ha proporcionado información tanto sobre el número de cuerpos en un entorno como sobre cómo se comportan en dicho entorno.

¿Cómo se aplica la aplicación del contador de personas a ti (además de ser una tecnología realmente genial)? Imagina que eres el dueño de la tienda; este contador puede alertarte sobre los visitantes diarios, los caminos recorridos, los puntos de parada más frecuentes y cuánto tiempo una persona permanece en un lugar. ¿No te gustaría saber qué materiales/productos ganan más atención? Con esta información, un comercializador puede reposicionar productos geográficamente para aumentar la conciencia. Esto beneficia las necesidades de tus clientes y tu línea de fondo.

En esta guía aprenderás cómo construir tu propio contador de personas casero. También se incluyen instrucciones para que tus datos recién recolectados sean utilizados a través de Ubidots, una plataforma de habilitación de aplicaciones.

Materiales requeridos

  • ESP8266 NodeMCU

  • Sensor de Movimiento PIR

  • Cables hembra - hembra

  • Caja de Protección Plástica

  • Cable MicroUSB

Cableado y Caja

Como puedes ver, el sensor de movimiento tiene tres pines: V+, Tierra y un tercero para la señal de salida ("1" = movimiento, y "0" entorno estático). Primero, conecta los cables directamente a los pines de tu NodeMCU, sigue la tabla y el diagrama a continuación:

NodeMCU -> Sensor PIR - NodeMCU -> LED

GND -> GND - GND -> GND
D6 -> OUT - D4 -> VCC
3.3V -> VCC - - - - - - - -

Debido a que el sensor de movimiento PIR es muy sensible al movimiento, utilicé un interruptor de puente detrás de él para establecer la sensibilidad más baja. También pinté sobre las esquinas de la lente para enfocarme en un espacio específico en lugar de ser omnidireccional. (Esto fue por mi gusto, pero por favor explora e innova como lo consideres adecuado) Los resultados de estos pocos minutos adicionales de trabajo resultan en un dispositivo amigable y contenido que se muestra a continuación.

Con la caja y el dispositivo ensamblados, ahora necesitamos conectarnos con Arduino IDE

Para comenzar, conecta tu NodeMCU al puerto de tu computadora usando el micro USB

Nota: Si aún no tienes el Arduino IDE, haz clic aquí para descargarlo.

1.- Abre el Arduino IDE, selecciona Archivo -> Preferencias. A continuación, ingresa la siguiente URL en el cuadro de texto URLs adicionales del Administrador de placas. Puedes agregar múltiples URLs separándolas con comas, si es necesario.
http://arduino.esp8266.com/stable/package_esp8266com_index.json

NOTA: Si eres un usuario de Mac, ten en cuenta que Arduino contiene diferentes funciones desplegables en comparación con el sistema operativo Windows. Además, necesitarás instalar el siguiente controlador para poder subir tu NodeMCU.

2.- Abre Administrador de placas desde Herramientas -> Menú de placas e instala la plataforma ESP8266. Para encontrar el dispositivo correcto, busca ESP8266 en la barra de búsqueda.

3.- Selecciona tu NodeMCU 1.0 (Módulo ESP-12) del Menú Herramientas -> Placa.

Además, necesitamos poder comunicarnos con el NodeMCU; selecciona el puerto COM correcto para tu dispositivo.

Ve a Herramientas -> Puerto -> Selecciona el PUERTO apropiado para la conexión de tu computadora/dispositivo.

Además, para mantener todo funcionando rápido y sin problemas, asegúrate de que la velocidad de carga esté optimizada a 115200.

Ve a Herramientas -> Velocidad de carga -> 115200:

4.- A continuación, necesitamos descargar la biblioteca Ubidots MQTT ESP de Github. Para hacer esto, abre la biblioteca MQTT ESP aquí, descarga la biblioteca haciendo clic en el botón verde llamado "Clonar o descargar" y selecciona "Descargar ZIP".

5.- Ahora regresa a tu Arduino IDE, haz clic en Sketch -> Incluir biblioteca -> Agregar biblioteca .ZIP

6.- Selecciona el archivo .ZIP de ubidotsMQTTESP y luego “Aceptar” o “Elegir

Si es exitoso, recibirás este mensaje a continuación en el Arduino IDE confirmando tu biblioteca:

7.- A continuación, ve a Sketch/Programa -> Incluir biblioteca -> Administrador de bibliotecas e instala la biblioteca PubSubClient. Para encontrar la biblioteca correcta, busca PubSubClient en la barra de búsqueda.

8.- Cierra el Arduino IDE y ábrelo nuevamente. Este reinicio es necesario. ¡Por favor no te saltes este paso!

Ahora es momento de comenzar a programar :)

Copia el código a continuación y pégalo en el Arduino IDE.

Una vez que hayas copiado el código, necesitarás asignar los parámetros: nombre y contraseña de Wi-Fi, además de tu TOKEN Ubidots único e individual. Si no sabes cómo localizar tu TOKEN Ubidots, por favor consulta este artículo a continuación.

CÓDIGO

// Hecho por: Maria Carlina Hernandez/**************************************** * Incluir bibliotecas ****************************************/#include "UbidotsESPMQTT.h"/**************************************** * Definir constantes ****************************************/#define TOKEN "..." // Tu TOKEN Ubidots#define WIFINAME "..." //Tu SSID#define WIFIPASS "..." // Tu contraseña Wifi#define MQTTCLIENTNAME "..." // Tu nombre de cliente MQTT, debe ser único, por lo que recomendamos elegir un nombre ASCCI aleatorio#define DEVICE "pir-sensor" // Asigna la etiqueta del dispositivo#define VARIABLE "motion" // Asigna la etiqueta de la variable#define LED 2#define SENSOR D6uint8_t contador=0;unsigned long estado = 0;Ubidots client(TOKEN, MQTTCLIENTNAME);/**************************************** * Funciones auxiliares ****************************************/void callback(char* topic, byte* payload, unsigned int length) {  	Serial.print("Mensaje recibido [");  	Serial.print(topic);      Serial.print("] ");      for (int i=0;i<length;i++) {            Serial.print((char)payload[i]);      }      Serial.println();}/**************************************** * Funciones principales ****************************************/void setup() {      // pon tu código de configuración aquí, para ejecutarse una vez:      Serial.begin(115200);      pinMode(SENSOR, INPUT);      pinMode(LED, OUTPUT);      client.wifiConnection(WIFINAME, WIFIPASS);      client.begin(callback);  }void loop() {      // pon tu código principal aquí, para ejecutarse repetidamente:      if (!client.connected()) {              digitalWrite(LED, LOW);                      client.reconnect();              digitalWrite(LED, HIGH);    } else {              digitalWrite(LED, HIGH);      }    uint8_t sensorValue = digitalRead(SENSOR);      bool flag = false;         if(sensorValue>0) {        for(uint8_t espera = 0; espera <= 4; espera++) {                  sensorValue = digitalRead(SENSOR);                  Serial.println(sensorValue);                  if(sensorValue==1) {                      contador++;                  }                  if(contador>3) {                        flag = true;            }                  delay(500);            }      }        Serial.println("enviando datos");      uint8_t value;      if(flag) {            value = 1;            client.add(VARIABLE, value);            client.ubidotsPublish(DEVICE);      } else {            value = 0;            if(estado == 10000) {                  client.add(VARIABLE, value);                  client.ubidotsPublish(DEVICE);                  estado = 0;                  }      }      estado++;      client.loop();      contador = 0;}

Una vez que pegaste el código y actualizaste los parámetros de WiFi, debes verificar esto dentro del Arduino IDE. Para hacer esto, en la esquina superior izquierda de nuestro Arduino IDE verás los íconos a continuación. Elige el ícono de marca de verificación para verificar cualquier código.

Una vez que el código esté verificado, recibirás un mensaje de "Compilación completada" en el Arduino IDE.

A continuación, debes subir el código a tu NodeMCU. Para hacer esto, elige el ícono de flecha hacia la derecha al lado del ícono de marca de verificación.

Una vez que el código esté subido, recibirás un mensaje de "Carga completada" en el Arduino IDE.

¡Ahora tu sensor está enviando los datos a la nube de Ubidots!

LED de estado

Una vez que tu código esté subido, el LED a bordo te alertará sobre la conectividad del dispositivo.

  • LED encendido -> Ok, dispositivo conectado y enviando datos.

  • LED parpadeando (1 segundo) -> Intentando reconectar. Se perdió la conexión. Sin acceso a internet.

  • LED apagado -> Dispositivo no conectado

Gestión de los datos en Ubidots

Si tu dispositivo está correctamente conectado, verás un nuevo dispositivo creado dentro de tu sección de dispositivos en tu aplicación Ubidots. El nombre del dispositivo será "sensor-pir", también dentro del dispositivo verás la variable creada llamada "motion."

Si deseas cambiar los nombres de tu dispositivo y variable a uno más amigable, por favor consulta este artículo

A continuación, para contar la cantidad de personas que tu dispositivo está detectando, necesitamos crear una nueva variable derivada para poder gestionar los datos y contar la cantidad de personas detectadas.

Haz clic en "Agregar variable" y selecciona "Ventana rodante":

Selecciona el dispositivo llamado "pir-sensor" y la variable "motion", luego, calcula la suma cada vez que lo configures como desees (1 minuto; 1 hora; 1 día) para obtener el número de personas detectadas. Presiona Guardar y asigna un nombre a la variable.

Una vez que tu variable esté creada, recibirás el número de personas detectadas en esa variable. A continuación se muestra una ilustración del resultado final:

Resultado

Este proyecto educa a administradores y tomadores de decisiones sobre la cantidad de personas que pasan por un espacio particular y cómo operan. Ten en cuenta que no todas las personas serán detectadas debido a las limitaciones del sensor de movimiento. La línea de visión es importante para nosotros los humanos y las máquinas también tienen dificultades con esto. ¡Pero estamos trabajando en ello!

Ahora es momento de crear un panel de control para controlar y gestionar las variables de tu propio contador de personas. Para aprender más sobre los widgets y eventos de Ubidots, consulta estos tutoriales en video.

Este contenido fue publicado originalmente en Ubidots Blog el 28 de abril de 2017.

¿Ha quedado contestada tu pregunta?