冠状病毒 (Covid19) 正在世界范围内造成严重破坏。几乎每个国家都在遭受冠状病毒的折磨。世卫组织已经宣布它为大流行病,许多城市处于封锁状态,人们无法走出家门,数千人丧生。
在这个项目中,我们将构建一个带有 LCD 的自动洗手液分配器,该 LCD 还显示冠状病毒病例的实时计数。该项目将使用 ESP32、超声波传感器、16x2 LCD 模块、水泵和洗手液。我们正在使用Esri 的 API Explorer来获取 Covid19 感染者的实时数据。超声波传感器用于检查消毒机出口下方是否存在手。它将不断计算消毒剂出口与自身之间的距离,并在距离小于 15 厘米时告诉 ESP 打开泵以将消毒剂推出。
所需组件
ESP32 开发模块
超声波传感器
16*2液晶显示器
继电器模块
迷你直流潜水泵
消毒洗手液
用于获取 Corona 实时数据的 API 链接
在这里,我们需要从互联网上获取数据,然后将其发送到 ESP32 以在 16x2 LCD 上显示。为此,将调用 HTTP 获取请求以从 Internet 读取 JSON 文件。在这里,我们使用的是冠状病毒病 GIS Hub提供的 API 。您可以轻松编译正确的查询 URL 以获取印度的确诊和康复病例总数,如果您想将其用于其他国家/地区,还可以更改国家/地区。
现在单击“立即尝试”或将查询 URL 粘贴到新浏览器中,该查询的输出将如下所示:
{“objectIdFieldName”:“OBJECTID”,“uniqueIdField”:{“name”:“OBJECTID”,“isSystemMaintained”:true},“globalIdFieldName”:“”,“geometryType”:“esriGeometryPoint”,“spatialReference”:{“ wkid”:4326,“latestWkid”:4326},“fields”:[{“name”:“Country_Region”,“type”:“esriFieldTypeString”,“alias”:“Country/Region”,“sqlType”:“sqlTypeOther ”,“length”:8000,“domain”:null,“defaultValue”:null},{“name”:“Province_State”,“type”:“esriFieldTypeString”,“alias”:“Province/State”,“sqlType ”:“sqlTypeOther”,“长度”:8000,“域”:null,“defaultValue”:null},{“name”:“Confirmed”,“type”:“esriFieldTypeInteger”,“alias”:“Confirmed”,“sqlType”:“sqlTypeOther”,“domain”:null,“defaultValue”:null },{“name”:“Recovered”,“type”:“esriFieldTypeInteger”,“alias”:“Recovered”,“sqlType”:“sqlTypeOther”,“domain”:null,“defaultValue”:null},{“ name”:“Deaths”,“type”:“esriFieldTypeInteger”,“alias”:“Deaths”,“sqlType”:“sqlTypeOther”,“domain”:null,“defaultValue”:null},{“name”:“活动”,“类型”:“esriFieldTypeInteger”,“别名”:“活动”,“sqlType”:“sqlTypeOther”,“domain”:null,“defaultValue”:null}],“features”:[{“attributes”:{“Country_Region”:“India”,“Province_State”:null,“Confirmed”:194,“Recovered ”:20,“Deaths”:4,“Active”:170}}]}
获取 JSON 数据后,现在生成代码以读取 JSON 数据并根据我们的需要对其进行短语处理。
现在向下滚动到解析程序并复制对您有用的代码部分。我复制了以下变量,因为我只需要印度确诊和康复的病例。
电路原理图
下面给出了这款Covid19 追踪器和自动洗手液分配器的完整电路图
水泵通过继电器模块连接到 ESP32。继电器的 Vcc 和 GND 引脚连接到 ESP32 的 Vin 和 GND 引脚,而继电器的输入引脚连接到 ESP32 的 D19 引脚。超声波传感器的 Trig 和 Echo 引脚连接到 Arduino 的 D5 和 D18 引脚。
下表给出了完整的连接。
这款运动传感器洗手液分配器的硬件如下所示
为 Covid19 追踪器编程 ESP32
Auto Hand Sanitizer 和 CORONA19 Tracker的完整代码可在页面末尾找到。这里解释了程序的重要部分。
通过包含所有必需的库文件来启动代码。HTTPClient库用于从 HTTP 服务器获取数据。ArduinoJson库用于短语数据数组。这里 ArduinoJson 库用于过滤已确认的案例并从我们从服务器获取的数据数组中恢复。LiquidCrystal 库用于 LCD 显示模块。
#include#include #include #include
要从服务器获取数据,NodeMCU ESP32 必须连接到互联网。为此,请在以下行中输入您的 Wi-Fi SSID 和密码。
const char* ssid = "银河-M20"; const char* pass = "ac312124";
之后定义连接 LCD 模块、超声波传感器和继电器模块的引脚。
常量 int rs = 22, en = 4, d4 = 15, d5 = 13, d6 = 26, d7 = 21; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 常量 int trigPin = 5; 常量 int echoPin = 18; 常量 int 泵 = 19;
现在我们输入之前生成的 API 链接。使用此链接,我们将获得印度的确诊病例总数和康复病例总数。您可以根据自己的需要更改 URL 中的国家/地区名称。
constchar*url="https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/1/query?f=json&where=(Country_Region=%27India%27)&returnGeometry=false&outFields=Country_Region,Confirmed , 恢复";
现在在void setup()中,将超声波传感器的 Trig 和 Echo 引脚定义为输入引脚,将 Relay 引脚定义为输出。
pinMode(trigPin,输出); pinMode(echoPin,输入); pinMode(泵,输出);
要了解有关超声波传感器如何工作的更多信息,请查看其与 Arduino 的接口,我们已经解释了其 TRIG 和 ECHO 引脚的功能以及它如何用于计算任何物体之间的距离。另外,检查其他基于超声波的项目。
之后,检查 ESP 是否与 Wi-Fi 连接,如果没有,它将通过在串行监视器上打印“……”来等待 ESP 连接。
WiFi.开始(ssid,通过); 而(WiFi.status()!= WL_CONNECTED) { 延迟(500); Serial.print("."); //打印...直到没有连接 } Serial.println("WiFi 连接");
在void ultra()函数内部,我们将使用超声波传感器不断计算距离,如果距离小于或等于 15 厘米,它将打开泵 2 秒,将消毒剂通过管道推到外面。不知不觉中,当有人将手放在出水管下方时,距离会减小,并会触发泵启动。
无效超(){ 数字写入(trigPin,低); 延迟微秒(2); digitalWrite(trigPin, HIGH); 延迟微秒(10); 数字写入(trigPin,低); 持续时间=脉冲输入(回声针,高); 距离 = 持续时间 * 0.0340 / 2; Serial.println("距离"); Serial.println(距离); 如果(距离 <= 15){ Serial.print("开泵"); 数字写入(泵,高); 延迟(2000); 数字写入(泵,低); ESP.restart(); } }
现在在void loop()函数中,通过读取 JSON 文件并使用以下行在串行监视器上打印 JSON 数据来检查 ESP32 是否接收到 JSON 文件
int httpCode = https.GET(); if (httpCode > 0) { //检查返回码 字符串有效载荷 = https.getString();
之后,使用ArduinoJson Assistant 生成的分词程序。这个措辞程序将为我们提供印度确诊和康复病例的总数。
JsonArray 字段 = doc["fields"]; JsonObject features_0_attributes = doc["features"][0]["attributes"]; 长 features_0_attributes_Last_Update = features_0_attributes["Last_Update"]; int features_0_attributes_Confirmed = features_0_attributes[“已确认”]; //int features_0_attributes_Deaths = features_0_attributes["Deaths"]; int features_0_attributes_Recovered = features_0_attributes[“恢复”];
使用 Covid19 Tracker 测试自动洗手液
所以最后我们的电池供电的洗手液分配器已经准备好进行测试了。只需按照电路图连接硬件并将程序上传到 ESP32,在开始时您应该会在 LCD 上看到“Covid19 Tracker”和“Hand Sanitizer”消息,然后几秒钟后它会在屏幕上显示确认病例和恢复病例液晶屏如下图。
#include
#include
#include
#include
const char* ssid = "Galaxy-M20";
const char* pass = "ac312124";
整数计数;
常量 int rs = 22, en = 4, d4 = 15, d5 = 13, d6 = 26, d7 = 21;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
常量 int trigPin = 5;
常量 int echoPin = 18;
常量 int 泵 = 19;
持续时间长;
整数距离;
const char* url = " https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov… ";
无效设置() {
Serial.begin(115200);
延迟(2000);
pinMode(trigPin,输出);
pinMode(echoPin,输入);
pinMode(泵,输出);
数字写入(泵,低);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Covid19 追踪器");
lcd.setCursor(0,1);
lcd.print("洗手液");
Serial.println("正在连接");
序列号.println(ssid);
WiFi.开始(ssid,通过);
而(WiFi.status()!= WL_CONNECTED)
{
延迟(500);
Serial.print("."); // 打印 ... 直到未连接
}
Serial.println("WiFi connected");
}
void ultra(){
digitalWrite(trigPin, LOW);
延迟微秒(2);
digitalWrite(trigPin, HIGH);
延迟微秒(10);
数字写入(trigPin,低);
持续时间=脉冲输入(回声针,高);
距离 = 持续时间 * 0.0340 / 2;
Serial.println("距离");
Serial.println(距离);
if (distance <= 15){
Serial.print("开泵");
数字写入(泵,高);
延迟(2000);
数字写入(泵,低);
ESP.restart();
}
}
无效循环() {
超();
HTTP客户端 https;
字符串数据;
https.开始(网址);
int httpCode = https.GET();
if (httpCode > 0) { //检查返回码
字符串有效载荷 = https.getString();
char charBuf[500];
payload.toCharArray(charBuf, 500);
//Serial.println(payload);
常量 size_t 容量 = JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(4) + JSON_OBJECT_SIZE(1) + 2 * JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + 3 * JSON_OBJECT_SIZE(6) + 2 * JSON_OBJECT_SIZE(7) + 690;
DynamicJsonDocument doc(容量);
反序列化Json(文档,有效载荷);
JsonArray 字段 = doc["fields"];
JsonObject features_0_attributes = doc["features"][0]["attributes"];
长 features_0_attributes_Last_Update = features_0_attributes["Last_Update"];
int features_0_attributes_Confirmed = features_0_attributes[“已确认”];
//int features_0_attributes_Deaths = features_0_attributes["Deaths"];
int features_0_attributes_Recovered = features_0_attributes[“恢复”];
if (count < 3){
//Serial.println(features_0_attributes_Confirmed);
lcd.setCursor(0, 0);
lcd.print("IN 确认:");
lcd.print(features_0_attributes_Confirmed);
//Serial.println(features_0_attributes_Recovered);
lcd.setCursor(0, 1);
lcd.print("IN 已恢复:");
lcd.print(features_0_attributes_Recovered);
}
if (count > 3){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("洗手");
lcd.setCursor(0, 1);
lcd.print("避免接触");
}
if (count > 6){
count = 0;
}
}
else {
Serial.println("HTTP 请求错误");
}
https.end();
计数++;
}
-
lcd
+关注
关注
34文章
4425浏览量
167415 -
分配器
+关注
关注
0文章
193浏览量
25747 -
ESP32
+关注
关注
18文章
971浏览量
17209
发布评论请先 登录
相关推荐
评论