|
新冠病毒(Covid19)在世界范围内造成严重破坏。几乎每个国家都在遭受新冠病毒的折磨。世卫组织已经宣布该疾病为全球性大流行病,许多城市处于封锁状态,人们无法走出家门,成千上万人丧生。许多网站都提供有关冠状病毒病例的实时更新,例如Microsoft的Tracker、Esri的Covid19 Tracker等。
在本篇文章中,我们将制作一个带有LCD显示的自动洗手液分配器,该LCD还能显示冠状病毒病例的实时计数。该项目将使用ESP32、超声波传感器、1602 LCD模块、水泵和洗手液。我们使用Esri的API资源管理器来获取Covid19感染者的实时数据。超声波传感器用于检查消毒机出口下方是否有手接近。它将连续计算消毒剂出口与其本身之间的距离,并告诉ESP每当距离小于15cm时将泵打开以将消毒剂推出。
ESP32用作主控制器,它是一个Wi-Fi模块,可以轻松连接到互联网。
所需的组件 ● ESP32开发板 ● 超声波传感器 ● 1602 LCD显示屏 ● 继电器模块 ● 微型直流水泵 ● 消毒洗手液
API链接,用于获取Corona实时数据 在这里,我们需要从互联网获取数据,然后将其发送到ESP32以在1602 LCD上显示。为此,将调用HTTP get请求以从Internet读取JSON文件。在这里,我们使用的是冠状病毒GIS中心(Coronavirus Disease GIS Hub)提供的API。您可以轻松地编译正确的查询URL,以获取某个国家确诊和治愈的总数。
现在单击“Try Now”或将查询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","length":8000,"domain":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":"Active","type":"esriFieldTypeInteger","alias":"Active","sqlType":"sqlTypeOther","domain":null,"defaultValue":null}],"features":[{"attributes":{"Country_Region":"India","Province_State":null,"Confirmed":194,"Recovered":20,"Deaths":4,"Active":170}}]}
复制代码
获取JSON数据后,现在生成代码以读取JSON数据并根据我们的需要对其进行短语设置。为此,转到ArduinoJson Assistant,然后将JSON数据粘贴到Input部分中。
现在向下滚动到解析程序,然后复制对您有用的代码部分。我复制了以下变量,因为我只需要在确诊和治愈的病例。
电路图 该Covid19 Tracker和自动洗手液分配器机器的完整电路图如下所示:
水泵通过继电器模块连接到ESP32。继电器的Vcc和GND引脚连接到ESP32的Vin和GND引脚,而继电器的输入引脚连接到ESP32的D19引脚。超声波传感器的Trig和Echo引脚连接到Arduino的D5和D18引脚。
该自动传感器洗手液分配器的硬件如下所示
为Covid19 Tracker编程ESP32 在本页末尾可找到自动洗手液和CORONA19 Tracker的完整代码。这里说明了程序的重要部分。
首先在代码中包含所有必需的库文件。 HTTPClient库用于从HTTP服务器获取数据。 ArduinoJson库用于表示数据数组。此处,ArduinoJson库用于过滤从服务器获取的已确诊病例和从数据数组中治愈的病例。 LiquidCrystal库用于LCD显示模块。 - #include <HTTPClient.h>
- #include <WiFi.h>
- #include <ArduinoJson.h>
- #include <LiquidCrystal.h>
复制代码要从服务器获取数据,NodeMCU ESP32必须连接互联网。为此,请在以下几行中输入您的Wi-Fi SSID和密码。 - const char* ssid = "Galaxy-M20";
- const char* pass = "ac312124";
复制代码
在此之后,定义连接LCD模块、超声波传感器和继电器模块的引脚。 - const int rs = 22, en = 4, d4 = 15, d5 = 13, d6 = 26, d7 = 21;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- const int trigPin = 5;
- const int echoPin = 18;
- const int pump = 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,Recovered";
复制代码
现在在void setup()内部,将超声波传感器的Trig和Echo引脚定义为输入引脚,并将Relay引脚定义为输出。 - pinMode(trigPin, OUTPUT);
- pinMode(echoPin, INPUT);
- pinMode(pump, OUTPUT);
复制代码
要了解有关超声波传感器工作原理的更多信息,请检查其与Arduino的连接方法,在文章中我们介绍了其TRIG和ECHO引脚的功能以及如何使用它计算任何物体之间的距离。
之后,检查ESP32是否与Wi-Fi连接,如果未连接,它将通过在串口监视器上打印“…..”来等待ESP连接。 - WiFi.begin(ssid, pass);
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print("."); // print ... till not connected
- }
- Serial.println("WiFi connected");
复制代码
在void ultra()函数内部,我们将使用超声波传感器连续计算距离,如果该距离小于或等于15 cm,则它将打开泵2秒钟,以将消毒剂通过管道推向外部。显然,当有人将手放在出口管下方时,距离会减小,并会触发泵开启。 - void ultra(){
- digitalWrite(trigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(trigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(trigPin, LOW);
- duration = pulseIn(echoPin, HIGH);
- distance = duration * 0.0340 / 2;
- Serial.println("Distance");
- Serial.println(distance);
- if (distance <= 15){
- Serial.print("Opening Pump");
- digitalWrite(pump, HIGH);
- delay(2000);
- digitalWrite(pump, LOW);
- ESP.restart();
- }
- }
复制代码
在void loop()函数中,通过读取ESP32来检查ESP32是否接收到JSON文件,并在串口监视器上使用以下代码打印JSON数据 - int httpCode = https.GET();
- if (httpCode > 0) { //Check for the returning code
- String payload = https.getString();
复制代码
之后,使用从ArduinoJson Assistant生成的短语程序。该程序将为我们提供已确诊和治愈的病例总数。 - JsonArray fields = doc["fields"];
- JsonObject features_0_attributes = doc["features"][0]["attributes"];
- long features_0_attributes_Last_Update = features_0_attributes["Last_Update"];
- int features_0_attributes_Confirmed = features_0_attributes["Confirmed"];
- //int features_0_attributes_Deaths = features_0_attributes["Deaths"];
- int features_0_attributes_Recovered = features_0_attributes["Recovered"];
复制代码
使用Covid19 Tracker测试自动洗手液 现在,我们终于可以使用自制的电池供电的洗手液分配器了。只需按照电路图连接硬件并将程序上传到ESP32,开始时您应该在LCD上看到“ Covid19 Tracker”和“ Hand Sanitizer”消息,然后几秒钟后,它将在屏幕上显示已确认的病例和已恢复的病例。液晶屏如下图所示。
代码 以下是本文使用的完整代码:
main.rar
(1.28 KB, 下载次数: 16)
|