Nube IoT

Construir un contador de personas con Raspberry Pi y Ubidots

Agustín Peláez
- 5 min read
Enviar por correo electrónico
Los contadores de personas se utilizan sobre todo en el sector minorista para conocer mejor el comportamiento de los compradores. También se utilizan en aplicaciones de seguridad, gestión de eventos y ciudades inteligentes. Imagina que gestionas un gran centro comercial: estos contadores te permiten saber cuántas personas entran y salen, qué caminos toman, dónde se detienen y, lo más importante, cuándo ocurre todo.
Como la mayoría de los sensores, los contadores de personas existen desde hace tiempo. Sin embargo, sus datos no siempre están centralizados y conectados a los sistemas de la empresa para fundamentar la toma de decisiones.
En este artículo, presentaremos un contador de personas casero muy básico y transmitiremos sus datos a la nube de Ubidots, donde se pueden crear mejores perspectivas.
Lo construí un día antes de una demostración en el [Boston New Tech Meetup](http://www.youtube.com/watch?v=cSbjFs7XOQs) la semana pasada, así que puedo decir que fue un proyecto de bricolaje rápido y de bajo coste.
# **¿Qué es Ubidots?

característicasTrigger2

# [**Inscríbete gratis**](https://industrial.ubidots.com/accounts/signup_industrial/)

Ubidots es un servicio en la nube que te permite almacenar y analizar datos de sensores en tiempo real. Permite crear aplicaciones para el Internet de las Cosas, sin necesidad de conocimientos profundos de programación web, bases de datos o API.

## **Lo que necesitas

- Raspberry Pi Modelo B:

imagen

- Un pequeño pack de baterías, con su cable micro-USB:

imagen

- Dongle USB Wifi:

imagen

- Sensor de movimiento de Parallax:

imagen

- 3 hilos hembra-hembra
- Una caja pequeña para guardar todos los componentes
## **Cableado y revestimiento
Como puedes ver, el sensor de movimiento sólo tiene tres pines: V+, Tierra y un tercero que emite la señal: "1" cuando hay movimiento, y "0" cuando no lo hay. No hace falta soldar nada, ni escribir funciones I2C o serie para detectar esta señal; basta con conectar los cables directamente a los pines GPIO de tu Raspberry Pi:
 ![contador de personas](http://media.tumblr.com/b47fa377202358ca34ca4b883ed90e2e/tumblr_inline_mtlkq6C4oX1s0d61y.png)
Esto es lo que parecía:

imagen

ACTUALIZACIÓN Siguiendo una sugerencia de Doug Jefferies (¡Gracias!), los GPIOs de Raspberry Pi están diseñados para 3.3v pero estamos poniendo 5v allí. Así que es una mejor idea para conectar:

V+ -> Pin #1 (3.3v).

Como el sensor es muy sensible al movimiento, utilicé el interruptor puente que tiene detrás para ajustar la sensibilidad más baja. Además, lo coloqué en una caja oscura con una apertura pequeña, para que la detección de movimiento se centre en un punto en lugar de ser tan omnidireccional:

imagen

imagen

Codificación

En este punto, vamos a suponer que has hecho una configuración básica de tu Raspberry Pi y estás viendo su línea de comandos Linux. Si no es así, te recomendamos [revisar esta guía primero](http://ubidots.com/docs/devices/raspberrypi.html#setup-your-raspberry-pi). También puedes consultar [este post sobre la configuración WiFi de Raspberry Pi](/setup-wifi-on-raspberry-pi-using-wicd)
Asegurémonos de que tenemos todas las bibliotecas:
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install python-setuptools $ sudo easy_install pip $ pip install ubidots

Crea un nuevo archivo llamado "peoplecounter.py":

$ sudo nano peoplecounter.py

Y escribe el siguiente código en él. Asegúrate de sustituir los valores de la clave API y la variable ID por los de tu cuenta personal de Ubidots.

(Nota: el código no es demasiado elegante, pero oye no soy un desarrollador de Python, sólo un chico de hardware 🙂 .

from ubidots import ApiClient import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(7, GPIO.IN) try: api = ApiClient("a21ebaf64e14d195c0044fcc3b9f6dab9d653af3") people = api.get_variable("5238cec3f91b282c7357a140") except: print "Couldn't connect to the API, check your Internet connection" counter = 0 peoplecount = 0 while(1): presence = GPIO.input(7) if(presence): peoplecount += 1 presence = 0 time.sleep(1.5)   time.sleep(1) counter += 1 if(counter==10): print peoplecount people.save_value({'value':peoplecount}) counter = 0 peoplecount = 0

El script consiste en un bucle que comprueba el estado del pin #7 (el sensor de movimiento). Si lee un "1", lo que significa que hubo movimiento, entonces incrementa la variable "peoplecount" y espera 1,5 segundos para que el sensor de movimiento vuelva a la normalidad. Esto se hace 10 veces, asegurándose de que hay al menos 1 segundo entre cada ciclo, luego envía la suma total de "movimientos" a Ubidots. Si necesitas calibrar el contador de personas, entonces deberías jugar con las líneas "time.sleep" con otros valores.
Cuando el script esté terminado, estarás listo para ejecutarlo desde la consola:
 

$ python peoplecounter.py

Ya está. Así es como se veían los datos en bruto en mi caso:
![image](http://media.tumblr.com/a3b6312a2a69679f5b9c71ce3246b141/tumblr_inline_mtlpgceZIm1s0d61y.jpg)

Ahora que los datos están en la nube, puedes añadir widgets en tu dashboard para mostrar la actividad en tiempo real. También puedes configurar "Eventos" en tu cuenta de Ubidots, para recibir una notificación por SMS o correo electrónico cuando tu variable alcance un límite específico.

Conclusión

imagen

Este proyecto proporciona una pista del número de personas que pasan por un punto determinado. No proporciona el número exacto de personas, dadas las limitaciones del sensor de movimiento, pero en algunas aplicaciones puede ser suficiente.

Los contadores de personas más elaborados utilizan cámaras y algoritmos de procesamiento de imágenes para detectar cuál es el objeto en movimiento (persona, coche, mascota..), en qué dirección se mueve (dentro/fuera, izquierda/derecha) e incluso podrían ampliarse, en teoría, para conocer la edad y el sexo de la persona.

Otra forma de detectar personas sería detectar pasivamente las señales de radio de sus teléfonos inteligentes, como Wifi o Bluetooth (mira cómo este tipo detectó smartphones en su casa). En última instancia, la tecnología iBeacon también debería ser un gran facilitador de estas aplicaciones.

En cualquier caso, los datos recopilados pueden enviarse fácilmente a Ubidots, donde pueden interpretarse creando alertas, cuadros de mando en directo o conectándolos a otros sistemas.

¿Tiene ideas para proyectos de sensores?

Crear una cuenta Ubidotsy ¡hazlos realidad!