Construire un compteur de personnes avec Raspberry Pi et Ubidots

Les compteurs de personnes sont principalement utilisés dans le commerce de détail pour mieux comprendre le comportement des clients. On les retrouve également dans les domaines de la sécurité, de l'événementiel et des villes intelligentes. Imaginez que vous gérez un grand centre commercial : ces compteurs vous indiquent le nombre de personnes qui entrent et sortent, leurs trajets, leurs points d'arrêt et, surtout, le moment précis où cela se produit.
Comme la plupart des capteurs, les compteurs de personnes existent depuis un certain temps. Cependant, leurs données ne sont pas toujours centralisées ni connectées aux systèmes d'entreprise pour éclairer la prise de décision.
Dans cet article, nous allons présenter un compteur de personnes très basique, fabriqué maison, et transmettre ses données au cloud Ubidots , où des analyses plus approfondies pourront être réalisées.
J'ai construit ça la veille d'une démonstration au [Boston New Tech Meetup](http://www.youtube.com/watch?v=cSbjFs7XOQs) la semaine dernière, donc je peux vous dire que c'était un projet DIY rapide et peu coûteux !
# **Qu'est-ce Ubidots?**

# [**Inscrivez-vous gratuitement**](ubidots)

Ubidots est un service cloud qui permet de stocker et d'analyser des données de capteurs en temps réel . Il permet de créer des applications pour l'Internet des objets, sans nécessiter de connaissances approfondies edge programmation web, bases de données ou API.

## **Ce dont vous aurez besoin**

Raspberry Pi Modèle B:

– Une petite batterie externe, avec son câble micro-USB:

– Clé USB Wi-Fi :

 Capteur de mouvement Parallax:

– 3 fils femelle-femelle
– Une petite boîte pour ranger tous les composants
## **Câblage et boîtier**
Comme vous pouvez le constater, le capteur de mouvement ne possède que trois broches : V+, la masse et une troisième qui émet un signal : « 1 » en cas de mouvement et « 0 » en l’absence de mouvement. Nul besoin de souder quoi que ce soit, ni d’écrire de fonctions I2C ou série pour détecter ce signal ; il suffit de brancher les câbles directement sur les broches GPIO de votre Raspberry Pi
 ![compteur de personnes](http://media.tumblr.com/b47fa377202358ca34ca4b883ed90e2e/tumblr_inline_mtlkq6C4oX1s0d61y.png)
Voici à quoi cela ressemblait :

MISE À JOUR Suite à une suggestion de Doug Jefferies (Merci !), les broches GPIO du Raspberry Pi sont conçues pour 3,3 V, mais nous y appliquons du 5 V. Il est donc préférable de les connecter comme suit :

V+ –> Broche n° 1 (3,3 V).

Comme le capteur est très sensible aux mouvements, j'ai utilisé le cavalier situé à l'arrière pour régler sa sensibilité au minimum. De plus, je l'ai placé dans un boîtier opaque avec une petite ouverture, afin que la détection de mouvement se concentre sur un point précis plutôt que d'être omnidirectionnelle

Codage

À ce stade, nous supposons que vous avez effectué la configuration de base de votre Raspberry Pi et que vous utilisez sa ligne de commande Linux. Si ce n'est pas le cas, nous vous recommandons de [consulter d'abord ce guide](ubidots). Vous pouvez également consulter [cet article concernant la configuration du Wi-Fi sur Raspberry Pi](/setup-wifi-on-raspberry-pi-using-wicd)
Assurons-nous d'avoir toutes les bibliothèques :
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install python-setuptools $ sudo easy_install pip $ pip install ubidots

Créez un nouveau fichier appelé « peoplecounter.py » :

$ sudo nano peoplecounter.py

Saisissez ensuite le code suivant. Veillez à remplacer les valeurs de la clé API et de l'identifiant de la variable par celles de votre compte Ubidots personnel .

(Remarque : le code n'est pas très élégant, mais bon, je ne suis pas développeur Python, juste un spécialiste du matériel 🙂)

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 "Impossible de se connecter à l'API, vérifiez votre connexion Internet" 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

Le script comporte une boucle qui vérifie l'état de la broche n° 7 (le capteur de mouvement). Si elle détecte un « 1 », indiquant un mouvement, la variable « peoplecount » est incrémentée et un délai de 1,5 seconde est respecté pour permettre au capteur de mouvement de revenir à son état normal. Cette opération est répétée 10 fois, avec un intervalle d'au moins une seconde entre chaque cycle. Le script envoie ensuite le nombre total de mouvements à Ubidots. Pour calibrer le compteur de personnes, vous pouvez modifier les valeurs de la ligne « time.sleep ».
Une fois le script terminé, vous pouvez l'exécuter depuis la console :
 

$ python peoplecounter.py

Voilà ! Voici à quoi ressemblaient les données brutes dans mon cas :
![image](http://media.tumblr.com/a3b6312a2a69679f5b9c71ce3246b141/tumblr_inline_mtlpgceZIm1s0d61y.jpg)

Maintenant que vos données sont dans le cloud, vous pouvez ajouter des widgets à votre dashboard pour afficher l'activité en temps réel. Vous pouvez également configurer des « Événements » dans votre compte Ubidots afin de recevoir une notification par SMS ou par e-mail lorsque votre variable atteint un seuil prédéfini.

Conclusion

Ce projet donne une indication du nombre de personnes passant par un point précis. Il ne fournit pas le nombre exact, compte tenu des limitations du capteur de mouvement, mais dans certaines applications, cela peut suffire.

Les compteurs de personnes plus sophistiqués utilisent des caméras et des algorithmes de traitement d'images pour détecter la nature de l'objet en mouvement (personne, voiture, animal de compagnie…), la direction dans laquelle il se déplace (vers l'intérieur/l'extérieur, à gauche/à droite) et pourraient même, en théorie, être étendus pour connaître l'âge et le sexe de la personne.

Une autre méthode de détection des personnes consiste à capter passivement les signaux radio émis par leurs smartphones, comme le Wi-Fi ou le Bluetooth ( voir comment cette personne a détecté les smartphones autour de sa maison ). À terme, la iBeacon devrait également jouer un rôle déterminant dans le développement de ces applications.

Dans tous les cas, les données collectées peuvent être facilement envoyées à Ubidots , où elles peuvent être interprétées en créant des alertes, dashboards en direct ou en les intégrant à d'autres systèmes.

Avez-vous des idées de projets de capteurs ?

Créez un compte Ubidots et concrétisez vos projets !