风筝
发表于: 2020-4-4 18:41:38 | 显示全部楼层

新冠病毒(Covid19)在世界范围内造成严重破坏。几乎每个国家都在遭受新冠病毒的折磨。世卫组织已经宣布该疾病为全球性大流行病,许多城市处于封锁状态,人们无法走出家门,成千上万人丧生。许多网站都提供有关冠状病毒病例的实时更新,例如Microsoft的TrackerEsri的Covid19 Tracker等。


在本篇文章中,我们将制作一个带有LCD显示的自动洗手液分配器,该LCD还能显示冠状病毒病例的实时计数。该项目将使用ESP32、超声波传感器、1602 LCD模块、水泵和洗手液。我们使用Esri的API资源管理器来获取Covid19感染者的实时数据。超声波传感器用于检查消毒机出口下方是否有手接近。它将连续计算消毒剂出口与其本身之间的距离,并告诉ESP每当距离小于15cm时将泵打开以将消毒剂推出。


ESP32用作主控制器,它是一个Wi-Fi模块,可以轻松连接到互联网。


所需的组件

●    ESP32开发板

●    超声波传感器

●    1602 LCD显示屏

●    继电器模块

●    微型直流水泵

●    消毒洗手液

Hand-Sanitizer.jpg


API链接,用于获取Corona实时数据

在这里,我们需要从互联网获取数据,然后将其发送到ESP32以在1602 LCD上显示。为此,将调用HTTP get请求以从Internet读取JSON文件。在这里,我们使用的是冠状病毒GIS中心(Coronavirus Disease GIS Hub)提供的API。您可以轻松地编译正确的查询URL,以获取某个国家确诊和治愈的总数。

Corona-Live-Data-Tracker.png

Corona-Data-Live-Tracker.png


现在单击“Try Now”或将查询URL粘贴到新的浏览器中,该查询的输出将如下所示:

  1. {"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部分中。

ArduinoJson-Assistant.jpg


现在向下滚动到解析程序,然后复制对您有用的代码部分。我复制了以下变量,因为我只需要在确诊和治愈的病例。

Covid19-Tracker.png

Covid19-Live-Tracker.png


电路图

该Covid19 Tracker和自动洗手液分配器机器的完整电路图如下所示:

Covid19-Tracker-Circuit-Diagram.png


水泵通过继电器模块连接到ESP32。继电器的Vcc和GND引脚连接到ESP32的Vin和GND引脚,而继电器的输入引脚连接到ESP32的D19引脚。超声波传感器的Trig和Echo引脚连接到Arduino的D5和D18引脚。


该自动传感器洗手液分配器的硬件如下所示

Hand-Sanitizer-Circuit-Setup.jpg


为Covid19 Tracker编程ESP32

在本页末尾可找到自动洗手液和CORONA19 Tracker的完整代码。这里说明了程序的重要部分。


首先在代码中包含所有必需的库文件。 HTTPClient库用于从HTTP服务器获取数据。 ArduinoJson库用于表示数据数组。此处,ArduinoJson库用于过滤从服务器获取的已确诊病例和从数据数组中治愈的病例。 LiquidCrystal库用于LCD显示模块。

  1. #include <HTTPClient.h>
  2. #include <WiFi.h>
  3. #include <ArduinoJson.h>
  4. #include <LiquidCrystal.h>
复制代码

要从服务器获取数据,NodeMCU ESP32必须连接互联网。为此,请在以下几行中输入您的Wi-Fi SSID和密码。

  1. const char* ssid = "Galaxy-M20";
  2. const char* pass = "ac312124";
复制代码

在此之后,定义连接LCD模块、超声波传感器和继电器模块的引脚。

  1. const int rs = 22, en = 4, d4 = 15, d5 = 13, d6 = 26, d7 = 21;
  2. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  3. const int trigPin = 5;
  4. const int echoPin = 18;
  5. const int pump = 19;
复制代码

现在,我们输入之前生成的API链接。使用此链接,我们将获得确诊病例和已治愈病例的总数。您可以根据需要更改URL中的国家/地区名称。

  1. 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引脚定义为输出。

  1. pinMode(trigPin, OUTPUT);
  2. pinMode(echoPin, INPUT);
  3. pinMode(pump, OUTPUT);
复制代码

要了解有关超声波传感器工作原理的更多信息,请检查其与Arduino的连接方法,在文章中我们介绍了其TRIG和ECHO引脚的功能以及如何使用它计算任何物体之间的距离。


之后,检查ESP32是否与Wi-Fi连接,如果未连接,它将通过在串口监视器上打印“…..”来等待ESP连接。

  1. WiFi.begin(ssid, pass);
  2.   while (WiFi.status() != WL_CONNECTED)
  3.   {
  4.     delay(500);
  5.     Serial.print(".");              // print ... till not connected
  6.   }
  7.   Serial.println("WiFi connected");
复制代码

void ultra()函数内部,我们将使用超声波传感器连续计算距离,如果该距离小于或等于15 cm,则它将打开泵2秒钟,以将消毒剂通过管道推向外部。显然,当有人将手放在出口管下方时,距离会减小,并会触发泵开启。

  1. void ultra(){
  2.   digitalWrite(trigPin, LOW);
  3.   delayMicroseconds(2);
  4.   digitalWrite(trigPin, HIGH);
  5.   delayMicroseconds(10);
  6.   digitalWrite(trigPin, LOW);
  7.   duration = pulseIn(echoPin, HIGH);
  8.   distance = duration * 0.0340 / 2;
  9.   Serial.println("Distance");
  10.   Serial.println(distance);
  11.   if (distance <= 15){
  12.     Serial.print("Opening Pump");
  13.     digitalWrite(pump, HIGH);
  14.     delay(2000);
  15.     digitalWrite(pump, LOW);
  16.     ESP.restart();
  17.     }
  18. }
复制代码

在void loop()函数中,通过读取ESP32来检查ESP32是否接收到JSON文件,并在串口监视器上使用以下代码打印JSON数据

  1. int httpCode = https.GET();
  2.   if (httpCode > 0) { //Check for the returning code
  3. String payload = https.getString();
复制代码

之后,使用从ArduinoJson Assistant生成的短语程序。该程序将为我们提供已确诊和治愈的病例总数。

  1. JsonArray fields = doc["fields"];
  2. JsonObject features_0_attributes = doc["features"][0]["attributes"];
  3. long features_0_attributes_Last_Update = features_0_attributes["Last_Update"];
  4. int features_0_attributes_Confirmed = features_0_attributes["Confirmed"];
  5. //int features_0_attributes_Deaths = features_0_attributes["Deaths"];
  6. int features_0_attributes_Recovered = features_0_attributes["Recovered"];
复制代码

使用Covid19 Tracker测试自动洗手液

现在,我们终于可以使用自制的电池供电的洗手液分配器了。只需按照电路图连接硬件并将程序上传到ESP32,开始时您应该在LCD上看到“ Covid19 Tracker”和“ Hand Sanitizer”消息,然后几秒钟后,它将在屏幕上显示已确认的病例和已恢复的病例。液晶屏如下图所示。

Automatic-Hand-Sanitizer-Dispenser.jpg


代码

以下是本文使用的完整代码: main.rar (1.28 KB, 下载次数: 16)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 13:10 , Processed in 0.050983 second(s), 9 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表