Mall Counter is a project that aims to count the number of people that entered a room using an analog sensor and the approximated time between sending wave and returning wave of some frequency. This provides valuable information that can be used to measure the degree of agglomeration, optimize the staff at peak hours, assess which offers were attractive. In order to do that, a counter for the people entering and a counter for the people leaving can be used to find the number of people in the room at a certain moment. I came with this idea after seeing at Parndorf Outlet that some shops have a guard that limits the number of people in a shop to improve the customers experience. The project uses I2C, ADC and GPIO.
Hardware Schema:
- Battery/Charger: powers the system with a certain voltage
- HW-131: regulator for the ESP8266, and also a test for the components functionalities
- ESP8266: microcontroller where the code goes
- Voltage Divider: the analog sensor is not necessarily designed for this kit, thus the voltage should be normalized for A0
- Distance sensor: measures the distance by calculating time between sending and receiving wave
- OLED: the display where the number of people will be showed
- SD Card: used for storing information (extension of current features)
Flow: the system is charged, a person passes near the sensor, ADC generates an interruption, a voltage is recorded by A0,
the value is converted to a distance, and if the distance is in some interval, then increase the counter and display the number on the OLED.
Software Schema:
- Display: module that has functions related to the OLED
- Sensor: module that implements a basic interface between the microcontroller and the sensor (functions for interruption, reading, converting)
- ADC: module that implements an interface for the ADC circuit
- Counter: module that implements functions for updating count global variable, and also reset
- SPI: module that implements an interface with SPI for this project components
- Main: module that controls logic and combines functions from the above modules
Flow: the same as in the pseudocode that is presented below; data is taken from hardware (voltages, pressed buttons), and processed in the software layer
Components list:
- DBGOLD 6F22 battery
- HW-131 power supply platform
- ESP8266 Wi-Fi microcontroller
- Breadboard
- Distance sensor GP2Y0A21YK0F
- OLED GME12864-14
- SD card
- wires
- resistors
- USB/USB-C cable
Electrical Schema (KiCAD):
Notes:
- The values of the resistors in the voltage divider can differ, the only condition is to limit sensor_out interval to A_in voltage interval
- On the schema, a green dot means an intersection of wires, otherwise wires that cross other wires do not interact
Signals (Canva):
Digital: SCK, SDA, CS, DC, RES, USB UART TX/RX, VIN
Analog: sensor_VO, A0
Notes:
- In the above graph, there is a plot of the expected voltages for V_O and A_in when a person passes at some distances
IDE:
- PlatformIO and Arduino on Visual Studio Code
- Board platform: Espressif 8266
- Program upload: USB or by Wi-Fi
Libraries:
- adafruit/Adafruit GFX Library
- adafruit/Adafruit SSD1306
- Adafruit_GFX.h, Adafruit_SSD1306.h, Arduino.h
Algorithms and Data Structures:
- threshold distance for the counter
- basic interfaces for SPI, GPIO, ADC
- OLED number display
Pseudocode:
count = 0 while True: d = ADC_detect_with_low_delay() if d <= threshold: count++ clear_display() SPI_display(count)
- A device that counts the people passing at a threshold distance from the sensor
1) Before starting implementation, all components should be verified for correct functioning
Repository link: https://github.com/TomaDumitrescu/MallCounter