В рамках данного проекта мы реализуем простой счетчик посетителей, который сможет считать количество входящих в помещение и выходящих из него посетителей. Он основан на беспроводной микроконтроллерной плате Node MCU с ESP8266 и двух ИК-датчиках, которые активируются при обнаружении объекта в своем поле видимости.
Основная логика этого проекта заключается в том, что датчики размещаются в точках входа и выхода и срабатывают всякий раз, когда человек совершает движение в их области действия, затем ИК-датчик переходит в низкое логическое состояние, а счетчик увеличивается, и данные последовательно отправляются в облако сервиса ThingSpeak.
Схема подключения компонентов счетчика посетителей на основе ESP8266 следующая.
Далее приведен код программы ESP8266.
#define SECRET_SSID " " //Учетные данные Wi-Fi для подключения к сети
#define SECRET_PASS " "
#define CHANNEL_ID //ID вашего канала
#define WRITE_APIKEY " " //Ключ Api
#include <WiFiClient.h>
WiFiClient wifiClient;
#include <ESP8266HTTPClient.h>
#include "ThingSpeak.h"
int irPin=2;
int irPin1=13;
int led = 4;
int count=0;
int count1=0,lft=0;
int val1=0,val2=0;
int mag = 0;
//Tweet credential declarations
String host = "api.thingspeak.com";
int httpPort = 80;
String url = "/apps/thingtweet/1/statuses/update";
HTTPClient http;
unsigned long myChannelNumber = CHANNEL_ID;
const char * myWriteAPIKey = WRITE_APIKEY;
#include <ESP8266WiFi.h>
char ssid[] = SECRET_SSID; // SSID вашей сети (имя)
char pass[] = SECRET_PASS; // пароль вашей сети
int keyIndex = 0; // порядковый номер вашего сетевого ключа (необходим только для WEP)
WiFiClient client;
void setup() {
pinMode(irPin, INPUT);
pinMode(irPin1, INPUT);
pinMode(led,OUTPUT);
Serial.begin(115200);
delay(100);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
// Подключиться или переподключиться к WiFi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(SECRET_SSID);
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass); // Подключитесь к сети WPA/WPA2. Измените эту строку, если используете открытую сеть или сеть WEP
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
val1=digitalRead(irPin);
// Счетчик входящих посетителей
if(val1 == LOW)
{
count++;
Serial.print("People Entering: ");
Serial.println(count);
lft=count-count1;
Serial.print("People in room: ");
Serial.println(lft);
ThingSpeak.writeField(myChannelNumber, 1, count, myWriteAPIKey);
delay(500);
// digitalWrite(led,LOW);
}
//Счетчик выходящих посетителей
val2=digitalRead(irPin1);
if(val2 == LOW)
{
count1++;
Serial.print("People Leaving: ");
Serial.println(count1);
lft=count-count1;
Serial.print("People in room: ");
Serial.println(lft);
ThingSpeak.writeField(myChannelNumber, 2, count1, myWriteAPIKey);
delay(500);
// digitalWrite(led,LOW);
}
//digitalWrite(led,LOW);
delay(50);
ThingSpeak.writeField(myChannelNumber, 3, lft, myWriteAPIKey);
delay(100);
//Включаем светодиод и выводим данные в последовательный монитор, если вошло более 20 человек.
if(lft > 20)
{
digitalWrite(led,HIGH);
}
else
{
digitalWrite(led,LOW);
}
delay(500);
}
Вот так это может выглядеть в ThingSpeak.
© digitrode.ru