Building a People Counter with Raspberry Pi and Ubidots
Ubidots is a cloud service that lets you store and analyze sensor data in real-time. It allows you to create applications for the Internet of Things, without any deep knowledge of web programing, databases or APIs.
– A small battery pack, with its micro-USB cable:
UPDATE Following a suggestion by Doug Jefferies (Thanks!), Raspberry Pi’s GPIOs are designed for 3.3v but we are putting 5v there. So it’s a better idea to connect:
V+ –> Pin #1 (3.3v).
Because the sensor is very sensitive to movement, I used the jumper switch behind it to set the lowest sensibility. Also, I placed it in a dark case with a small aperture, so that the motion sensing focuses on one point instead of being so omnidirectional:
Coding
Create a new file called “peoplecounter.py”:
$ sudo nano peoplecounter.py
And write the following code into it. Make sure to replace the values of the API key and the variable ID with the ones in your personal Ubidots account.
(Note: the code is not too elegant, but hey I’m not a Python developer, just a hardware guy 🙂
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
$ python peoplecounter.py
Now that the data is in the cloud, you can add widgets in your dashboard to display the activity in real-time. You can also configure “Events” in your Ubidots account, so you get an SMS or Email notification when your variable hits a specific limit.
Conclusion
This project provides a hint of the number of people passing through a particular point. It doesn’t provide the exact number of people, given the limitations of the motion sensor, but in some applications, this might be just enough.
More elaborate people counters use cameras and image processing algorithms to detect what the moving object is (person, car, pet..), in which direction it moves (in / out, left / right) and they could even be extended, in theory, to know the age and gender of the person.
Another way to detect people would be to passively sense the radio signals from their smartphones, such as Wifi or Bluetooth (check out how this guy detected smartphones around his house). Ultimately, the iBeacon technology should also be a big enabler of these applications.
In any case, the collected data can be easily sent to Ubidots, where it can be interpreted by creating alerts, live dashboards or plugging it into other systems.
Do you have sensor project ideas?
Create a Ubidots accountan make them happen!