0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

构建一个带有LCD的自动洗手液分配器

科技观察员 来源:circuitdigest 作者:Ashish Choudhary 2022-08-16 16:09 次阅读

冠状病毒 (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 以获取印度的确诊和康复病例总数,如果您想将其用于其他国家/地区,还可以更改国家/地区。

poYBAGL7UICASzd8AAJCxq1MmoM308.png

现在单击“立即尝试”或将查询 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 数据并根据我们的需要对其进行短语处理。

pYYBAGL7UHqANPYoAAUj21Q8Kug139.png

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

pYYBAGL7UHaADFqiAAKQeiYOGCc515.png

电路原理

下面给出了这款Covid19 追踪器和自动洗手液分配器的完整电路图

pYYBAGL7UHKAKj0FAAEbBldZHB8248.png

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

下表给出了完整的连接。

poYBAGL7UG-ABUlfAAAcFU3lyyQ573.png

这款运动传感器洗手液分配器的硬件如下所示

poYBAGL7UFaAU-YzAAPkH2t2LP4739.png

为 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”消息,然后几秒钟后它会在屏幕上显示确认病例和恢复病例液晶屏如下图。

poYBAGL7UEuAH4vKAARRO7onYi8254.png

#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
    lcd
    +关注

    关注

    34

    文章

    4425

    浏览量

    167425
  • 分配器
    +关注

    关注

    0

    文章

    193

    浏览量

    25747
  • ESP32
    +关注

    关注

    18

    文章

    971

    浏览量

    17212
收藏 人收藏

    评论

    相关推荐

    基于ATTiny13的自动洗手液分配器

    ,因此必须正确有效地使用它们。在洗手液分配器的第二版本中,我已经解决了之前的设计问题,并引入了种对环境光不敏感且酒精/洗手液的流量控制能
    发表于 06-20 09:10

    DIY自动洗手液分配器

    感染的手接触酒精容器或洗手液可能会将病毒传播给下一个人。在本文中,我们将构建自动
    发表于 06-21 06:04

    构建自动洗手液分配器

    感染的手接触酒精容器或洗手液可能会将病毒传播给下一个人。在本文中,我们将构建自动
    发表于 08-17 06:59

    自制洗手液分配器

    使用这个洗手液分配器之后,你就可以通过洗手和手消毒来对抗 COVID-19 的简单而有效的方法,无需接触瓶子!
    的头像 发表于 07-08 17:47 1804次阅读
    自制<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b>

    使用ATTiny13自动洗手液分配器

    电子发烧友网站提供《使用ATTiny13自动洗手液分配器.zip》资料免费下载
    发表于 07-19 11:23 1次下载
    使用ATTiny13<b class='flag-5'>自动</b><b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b>

    DIY自动洗手液分配器 无需Arduino或MCU

    电子发烧友网站提供《DIY自动洗手液分配器 无需Arduino或MCU.zip》资料免费下载
    发表于 07-18 15:57 1次下载
    DIY<b class='flag-5'>自动</b><b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b> 无需Arduino或MCU

    DIY洗手液/酒精分配器的PCB设计

    构建自动洗手液分配器,它使用 IR 传感器检测手的存在并启动泵将液体倒在手上。目的是找到最便
    发表于 07-27 11:15 1784次阅读
    DIY<b class='flag-5'>洗手液</b>/酒精<b class='flag-5'>分配器</b>的PCB设计

    无需Arduino或MCU DIY自动洗手液分配器

    电子发烧友网站提供《无需Arduino或MCU DIY自动洗手液分配器.zip》资料免费下载
    发表于 07-28 11:09 0次下载
    无需Arduino或MCU DIY<b class='flag-5'>自动</b><b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b>

    消毒洗手液分配器开源分享

    电子发烧友网站提供《消毒洗手液分配器开源分享.zip》资料免费下载
    发表于 11-09 09:38 1次下载
    消毒<b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b>开源分享

    免提洗手液分配器开源

    电子发烧友网站提供《免提洗手液分配器开源.zip》资料免费下载
    发表于 11-28 11:35 0次下载
    免提<b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b>开源

    免接触式洗手液分配器开源分享

    电子发烧友网站提供《免接触式洗手液分配器开源分享.zip》资料免费下载
    发表于 11-30 11:59 4次下载
    免接触式<b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b>开源分享

    易于构建洗手液分配器 无需Arduino或MCU

    电子发烧友网站提供《易于构建洗手液分配器 无需Arduino或MCU.zip》资料免费下载
    发表于 12-15 11:04 0次下载
    易于<b class='flag-5'>构建</b>的<b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b> 无需Arduino或MCU

    基于Arduino UNO的洗手液自动分配器

    方案介绍该设备能够检测您的手的存在并自动向您的手释放特定量的洗手液/消毒剂。自动洗手液分配器,当放置在距离测量传感器(超声波传感器)下时,可
    发表于 12-19 17:04 0次下载

    如何制作低成本但全自动洗手液分配器电路

    在本文中,我们将学习如何制作低成本但全自动洗手液分配器电路,该电路将允许在用户手上以非接触式或非接触式分配消毒液。
    的头像 发表于 05-29 17:36 1639次阅读
    如何制作低成本但全<b class='flag-5'>自动</b>的<b class='flag-5'>洗手液</b><b class='flag-5'>分配器</b>电路

    自动洗手分配器开源设计

    电子发烧友网站提供《自动洗手分配器开源设计.zip》资料免费下载
    发表于 06-30 09:33 0次下载
    <b class='flag-5'>自动</b><b class='flag-5'>洗手</b><b class='flag-5'>分配器</b>开源设计