随着智慧城市的日益普及,每个领域都始终需要智慧解决方案。物联网通过互联网控制功能实现了智慧城市的可能性。一个人可以通过使用智能手机或任何互联网连接的设备,在世界任何地方控制在家中或办公室中安装的设备。智慧城市中有多个领域,而智能停车场是智慧城市中最受欢迎的领域之一。
智能停车行业已经看到了许多创新,例如智能停车管理系统,智能门禁控制,可以检测车辆类型的智能摄像机,ANPR(自动车牌识别),智能支付系统,智能进入系统等等。如今,将采用类似的方法,并且将建立一个智能停车解决方案,该解决方案将使用超声波传感器检测车辆的存在并触发自动打开或关闭门的闸门。ESP8266 NodeMCU在这里用作主控制器来控制与其连接的所有外围设备。
ESP8266是构建基于IoT的应用程序的最受欢迎的控制器,因为它内置了对Wi-Fi的支持以连接到互联网。我们之前使用它来构建许多物联网项目,例如:
- 基于物联网的安全系统
- 家庭自动化智能接线盒
- 基于物联网的空气污染监测系统
- 发送数据到ThingSpeak
在此处检查所有基于ESP8266的项目。
在此IoT智能停车系统中,我们会将数据发送到Web服务器,以查找可用于停车的空间。在这里,我们使用firebase作为Iot数据库来获取停车可用性数据。为此,我们需要找到Firebase主机地址和授权密钥。如果您已经知道将Firebase与NodeMCU结合使用,则可以继续进行操作,否则您应该首先学习将Google Firebase控制台与ESP8266 NodeMCU结合使用以获取主机地址和密钥。
所需组件
- ESP8266 NodeMCU
- 超声波传感器
- 直流伺服电机
- 红外传感器
- 16x2 i2c液晶显示器
- 跳线
电路原理图
该基于物联网的停车系统的电路图如下所示。它包括两个红外传感器,两个伺服电动机,一个超声传感器和一个16x2 LCD。
ESP8266在这里将控制整个过程,还将停车可用性信息发送到Google Firebase,以便可以从世界各地通过Internet对其进行监控。在入口和出口大门处使用两个红外传感器来检测轿厢的存在并自动打开或关闭大门。红外传感器用于通过发送和接收红外线来检测任何物体,请在此处了解有关红外传感器的更多信息。
两个伺服器将充当入口和出口闸门,并且它们旋转以打开或关闭闸门。最终,使用超声波传感器检测停车位是否可用或已被占用,并相应地将数据发送到ESP8266。查看本教程结尾给出的视频,以了解项目的完整工作。
这是完整的智能停车系统原型的外观:
为ESP8266 NodeMCU编程以实现智能停车解决方案
本教程的结尾给出了带有工作视频的完整代码,在这里我们将解释完整的程序以理解项目的工作。
要对NodeMCU进行编程,只需使用Micro USB电缆将NodeMCU插入计算机并打开Arduino IDE。I2C显示和伺服电机需要这些库。LCD将显示停车位的可用性,并且将使用伺服电机打开和关闭入口和出口门。该 Wire.h 库将用于连接液晶显示器在I2C协议。ESP8266 NodeMCU中的I2C引脚为D1(SCL)和D2(SDA)。这里使用的数据库将是Firebase,因此在这里我们还包括相同的库 (FirebaseArduino.h) 。
#包括
然后包括从Google Firebase获得的firebase凭据。这些将包括包含您的项目名称和密钥的主机名。要找到这些值,请遵循Firebase上的先前教程。
#define FIREBASE_HOST“ smart-parking-7f5b6.firebaseio.com” #define FIREBASE_AUTH“ suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT”
包括Wi-Fi凭据,例如WiFi SSID和密码。
#define WIFI_SSID“ CircuitDigest” #define WIFI_PASSWORD“ circuitdigest101”
使用设备地址(此处为0x27)和LCD类型初始化I2C LCD。还包括用于进出门的伺服电机。
LiquidCrystal_I2C lcd(0x27,16,2); 伺服myservo; 伺服myservo1;
启动I2C LCD的I2C通信。
Wire.begin(D2,D1);
将进出伺服电机连接到NodeMCU的D5,D6引脚。
myservo.attach(D6); myservos.attach(D5);
选择超声波传感器的触发引脚作为输出,选择回波引脚作为输入。超声波传感器将用于检测停车位的可用性。如果汽车已占据空间,则它将发光,否则它将不发光。
pinMode(TRIG,OUTPUT); pinMode(ECHO,INPUT);
NodeMCU的两个引脚D0和D4用于获取红外传感器的读数。红外传感器将充当入口和出口门传感器。这将检测汽车的存在。
pinMode(carExited,INPUT); pinMode(carEnter,INPUT);
连接到WiFi并等待一段时间直到其连接。
WiFi.begin(WIFI_SSID,WIFI_PASSWORD); Serial.print(“正在连接”); Serial.print(WIFI_SSID); while(WiFi.status()!= WL_CONNECTED){ Serial.print(“。”); 延迟(500); }
使用主机和密钥作为凭据开始与Firebase进行连接。
Firebase.begin(FIREBASE_HOST,FIREBASE_AUTH);
启动i2c 16x2 LCD并将光标位置设置在第0行第0列。
lcd.begin(); lcd.setCursor(0,0);
距超声波传感器的距离。这将用于检测特定地点的车辆。首先发送2微秒脉冲,然后读取接收到的脉冲。然后将其转换为“ cm”。在此处了解有关使用超声波传感器测量距离的更多信息。
digitalWrite(TRIG,LOW); delayMicroseconds(2); digitalWrite(TRIG,HIGH); delayMicroseconds(10); digitalWrite(TRIG,LOW); 持续时间= pulseIn(ECHO,HIGH); 距离=(持续时间/ 2)/ 29.1;
以数字方式读取IR传感器引脚作为进入传感器,并检查其是否为高电平。如果它很高,则增加条目计数并将其打印到16x2 LCD显示屏以及串行监视器。
int carEntry = digitalRead(carEnter); 如果(carEntry == HIGH){ countYes ++; Serial.print(“ Car Entered =”); Serial.println(countYes); lcd.setCursor(0,1); lcd.print(“汽车进入”);
同时移动伺服电机角度以打开入口门。根据您的用例更改角度。
对于(pos = 140; pos> = 45; pos- = 1){ myservos.write(pos); delay(5); } delay(2000); for(pos = 45; pos <= 140; pos + = 1){ //以1度为步数 myservos.write(pos); delay(5); }
并使用Firebase库的 pushString 函数将读数发送到 firebase 。
Firebase.pushString(“ / Parking Status /”,fireAvailable);
对出口红外传感器和出口伺服电机执行与上述类似的步骤。
int carExit = digitalRead(carExited); 如果(carExit == HIGH){ countYes--; Serial.print(“ Car Exited =”); Serial.println(countYes); lcd.setCursor(0,1); lcd.print(“汽车驶出”); for(pos1 = 140; pos1> = 45; pos1- = 1){ myservo.write(pos1); delay(5); } delay(2000); for(pos1 = 45; pos1 <= 140; pos1 + = 1){ //以1度为步数 myservo.write(pos1); delay(5); } Firebase.pushString(“ / Parking Status /”,fireAvailable); lcd.clear(); }
检查汽车是否已经到达停车位,如果已经到达,则发光灯发出信号,指示停车位已满。
if(距离<6){ Serial.println(“ Occupied”); digitalWrite(led,HIGH); }
其他显示该位置可用。
如果(距离> 6){ Serial.println(“ Available”); digitalWrite(led,LOW); }
计算停车场内的总空置空间,并将其保存在字符串中,以将数据发送到firebase。
空= allSpace-countYes; 可用= String(“ Available =”)+ String(Empty)+ String(“ /”)+ String(allSpace); fireAvailable = String(“ Available =”)+ String(Empty)+ String(“ /”)+ String(allSpace); 还将数据打印到i2C LCD。lcd.setCursor(0,0); lcd.print(可用);
这是在Firebase上在线跟踪停车位的方式,如以下快照所示:
使用ESP8266 NodeMCU模块和不同的外围设备,即可完成完整的智能停车系统。您也可以使用其他传感器代替超声波和红外传感器。智能停车系统的应用非常广泛,可以添加不同的产品以使其更加智能。如果您有任何疑问或访问我们的论坛以获得更多支持,请在下面发表评论。