Example Code for Arduino-People Counting (Based on BeeBotte)

This project uses an ultrasonic sensor installed at a mall entrance to count people and transmit periodic foot traffic statistics to BeeBotte.

Hardware Preparation

  • Arduino UNO board x 1
  • IO Expansion board x1
  • WiFi IoT module x1
  • HC-SR04 Ultrasonic Sensor x1
  • Wires

Software Preparation

Wiring Diagram

Sample Code

#include "DFRobot_WiFi_IoT_Module.h"
#include <SoftwareSerial.h>

//I2C mode 
DFRobot_WiFi_IoT_Module_I2C IOT;

#define time(x) (x*1000)

//configure WiFi
const char *WIFI_SSID              = "hitest";
const char *WIFI_PASSWORD          = "12345678";
//configure Beebotte 
const char *BEEBOTTE_ADDRESS       = "api.beebotte.com";
const char *BEEBOTTE_TOKEN         = "token_PjXx9xPsygzy5GMU";
const char *BEEBOTTE_CHANNEL       = "Data";
const char *BEEBOTTE_RESOURCE      = "Data";

const char *BEEBOTTE_SEND_MESSAGE  = "Send_Message";

int TrgPin = A0;
int EcoPin = A1;
int dist;

static long timestamp = millis();
int count;

void setup(void){
  //Use 115200 as print port 
  Serial.begin(115200);
  //Init port 
  while(IOT.begin() != 0){  
    Serial.println("init ERROR!!!!");
    delay(100);
  }
  Serial.println("init Success");
  //Connect to WiFi
  while(IOT.connectWifi(WIFI_SSID, WIFI_PASSWORD) != 0){  
    Serial.print(".");
    delay(100);
  }
  Serial.println("Wifi Connect Success");
  //Init HTPP
  while(IOT.HTTPBegin(BEEBOTTE_ADDRESS) != 0){
    Serial.println("Parameter is empty!");
    delay(100);
  }
  Serial.println("HTTP Configuration Succeeded");
  //Init beebotte 
  while(IOT.beebotteBegin(BEEBOTTE_TOKEN) != 0){
    Serial.print("Parameter is empty!");
    delay(100);
  }
  Serial.println("Beebotte Configuration Succeeded");

  //Set TrgPin to output status 
  pinMode(TrgPin, OUTPUT);
  //Set EcoPin to input status 
  pinMode(EcoPin, INPUT);
}

//ultrasonic distance measurement 
int getDist(void)
{
  digitalWrite(TrgPin, LOW);
  delayMicroseconds(8);
  digitalWrite(TrgPin, HIGH);
  //Maintian high for 10ms to generate a pulse 
  delayMicroseconds(10);
  digitalWrite(TrgPin, LOW);
  //Read the pulse width and convert to distance 
  dist = pulseIn(EcoPin, HIGH) / 58;
  return dist;
}

void loop(void){
  if(getDist()<10){
    while(1){
      Serial.print("dist:");
      Serial.println(getDist());
      if(getDist()>30){
        count++;
        Serial.println(count);
        delay(100);
        break;  
      }
    }  
  }
  //Send the counted number every 10s, time(10)
  if(millis()-timestamp > time(10)){
    String data = (String)count;
    IOT.beebotteSendMessage(BEEBOTTE_CHANNEL, BEEBOTTE_RESOURCE,data.c_str());
    Serial.println(data.c_str());
    timestamp = millis();
    count = 0;
  }
}

Result

Check the number of people in a certian period of time on BeeBotte Platform.

Result

Was this article helpful?

TOP