随着智慧城市的日益普及,每个领域都需要智能解决方案。物联网通过互联网控制功能实现了智能城市的可能性。一个人只需使用智能手机或任何连接互联网的设备,就可以从世界任何地方控制安装在他家或办公室中的设备。智慧城市中有多个领域,智能停车是智慧城市中的热门领域之一。 智能停车行业已经看到了许多创新,如智能停车管理系统、智能门禁、可以检测车辆类型的智能摄像头、ANPR(自动车牌识别)、智能支付系统、智能进入系统等等。今天将采用类似的方法并构建智能停车解决方案,该解决方案将使用超声波传感器检测车辆的存在并触发门自动打开或关闭。ESP8266 NodeMCU 将在此处用作主控制器,以控制与其连接的所有外围设备。 在这个物联网智能停车系统中,我们会将数据发送到网络服务器,以查找车辆停车位的可用性。在这里,我们使用 firebase 作为物联网数据库来获取停车可用性数据。为此,我们需要找到 Firebase 主机地址和授权密钥。 所需组件 ESP8266 NodeMCU 超声波传感器 直流伺服电机 红外传感器 16x2 i2c 液晶显示器 跳线 电路原理图 下面给出了这个基于物联网的车辆停车系统的电路图。它包括两个红外传感器、两个伺服电机、一个超声波传感器和一个 16x2 液晶显示器。 在这里,ESP8266 将控制整个过程,并将停车可用性信息发送到 Google Firebase,以便可以通过互联网从世界任何地方对其进行监控。两个红外传感器用于入口和出口大门,以检测汽车的存在并自动打开或关闭大门。IR 传感器用于通过发送和接收红外线来检测任何物体,在此处了解有关 IR 传感器的更多信息。我们还介绍了有关Arduino IR 传感器接口的详细教程,您可以查看该教程以了解更多 IR 传感器模块的工作原理以及如何将其与 Arduino uno 连接。 两个伺服器将充当入口和出口门,它们旋转以打开或关闭门。最后,使用超声波传感器检测停车位是否可用或被占用,并将数据相应地发送到 ESP8266。查看本教程末尾提供的视频以了解该项目的完整工作。 这是这个完整的智能停车系统原型的外观: 为智能停车解决方案编程 ESP8266 NodeMCU 带有工作视频的完整代码本教程末尾 要对 NodeMCU 进行编程,只需使用 Micro USB 电缆将 NodeMCU 插入计算机并打开 Arduino IDE。I2C 显示器和伺服电机需要这些库。LCD 将显示停车位的可用性,伺服电机将用于打开和关闭出入口。Wire.h库将用于在 i2c 协议中连接 LCD 。ESP8266 NodeMCU 中的 I2C 引脚为 D1 (SCL) 和 D2 (SDA)。这里使用的数据库将是 Firebase,所以这里我们还包括相同的库(FirebaseArduino.h)。
#include
然后包含从 Google Firebase 获得的 Firebase 凭据。这些将包括包含您的项目名称和密钥的主机名。要查找这些值,请遵循Firebase 上的上一教程。
#define FIREBASE_HOST "smart-parking-7f5b6.firebaseio.com" #define FIREBASE_AUTH "suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT"
包括 WiFi SSID 和密码等 WiFi 凭据。
#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,输出); pinMode(回声,输入);
NodeMCU 的两个引脚 D0 和 D4 用于获取 IR 传感器读数。红外传感器将充当入口和出口门传感器。这将检测汽车的存在。
pinMode(carExited,输入);pinMode(carEnter,输入);
连接到 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.setCursor(0, 0);
从超声波传感器中获取距离。这将用于检测特定地点的车辆存在。首先发送 2 微秒脉冲,然后读取接收到的脉冲。然后将其转换为'cm'。在此处了解有关使用超声波传感器测量距离的更多信息。
数字写入(触发,低); 延迟微秒(2); 数字写入(触发,高); 延迟微秒(10); 数字写入(触发,低); 持续时间=脉冲输入(回声,高); 距离 = (持续时间 / 2) / 29.1;
以数字方式读取 IR 传感器引脚作为进入传感器并检查其是否为高电平。如果它很高,则增加条目计数并将其打印到16x2 LCD 显示器和串行监视器。
int carEntry = digitalRead(carEnter); if (carEntry == HIGH) { countYes++; Serial.print("汽车进入 = " ); Serial.println(countYes); lcd.setCursor(0, 1); lcd.print("汽车进入");
同时移动伺服电机角度以打开入口门。根据您的用例更改角度。
for (pos = 140; pos >= 45; pos -= 1) { myservos.write(pos); 延迟(5); } 延迟(2000); for (pos = 45; pos <= 140; pos += 1) { // 以 1 度为步长 myservos.write(pos); 延迟(5); }
并使用Firebase 库的pushString函数将读数发送到firebase。
Firebase.pushString("/停车状态/", fireAvailable );
对出口红外传感器和出口伺服电机执行与上述类似的步骤。
int carExit = digitalRead(carExited); if (carExit == HIGH) { countYes--; Serial.print("汽车退出 = " ); Serial.println(countYes); lcd.setCursor(0, 1); lcd.print("汽车退出"); for (pos1 = 140; pos1 >= 45; pos1 -= 1) { myservo.write(pos1); 延迟(5); } 延迟(2000); for (pos1 = 45; pos1 <= 140; pos1 += 1) { // 以 1 度为步长 myservo.write(pos1); 延迟(5); } Firebase.pushString("/停车状态/", fireAvailable ); lcd.clear(); }
检查汽车是否已到达停车位,如果已到达,则发光 LED 会发出停车位已满的信号。
if (distance < 6) { Serial.println("Occupied"); 数字写入(领导,高); }
否则表明该位置可用。
if (距离 > 6) { Serial.println("可用"); 数字写入(领导,低); }
计算停车场内的总空闲空间并将其保存在字符串中以将数据发送到 firebase。
Empty = allSpace - countYes; 可用 = String("可用= ") + String(Empty) + String("/") + String(allSpace); fireAvailable = String("Available=") + String(Empty) + String("/") + String(allSpace);还将数据打印到 i2C LCD。 lcd.setCursor(0, 0); lcd.print(可用);
这就是如何在 Firebase 上在线跟踪停车位的可用性,如下面的快照所示: 这样就完成了使用 ESP8266 NodeMCU 模块和不同外设的完整智能停车系统。 #include |