这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
基于ESP32的单片机疫情防交叉感染洗手液分配系统
学长这里给一个题目综合评分(每项满分5分)
选题指导, 项目分享:
https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md
新冠病毒(Covid19)在世界范围内造成严重破坏。几乎每个国家都在遭受新冠病毒的折磨。世卫组织已经宣布该疾病为全球性大流行病,许多城市处于封锁状态,人们无法走出家门,成千上万人丧生。许多网站都提供有关冠状病毒病例的实时更新,例如Microsoft的Tracker、Esri的Covid19 Tracker等。
本项目,我们将制作一个带有LCD显示的自动洗手液分配器,该LCD还能显示冠状病毒病例的实时计数。该项目将使用ESP32、超声波传感器、1602 LCD模块、水泵和洗手液。我们使用Esri的API资源管理器来获取Covid19感染者的实时数据。超声波传感器用于检查消毒机出口下方是否有手接近。它将连续计算消毒剂出口与其本身之间的距离,并告诉ESP每当距离小于15cm时将泵打开以将消毒剂推出。
ESP32用作主控制器,它是一个Wi-Fi模块,可以轻松连接到互联网。
在这里,我们需要从互联网获取数据,然后将其发送到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部分中。
现在向下滚动到解析程序,然后复制对您有用的代码部分。我复制了以下变量,因为我只需要在确诊和治愈的病例。
水泵通过继电器模块连接到ESP32。继电器的Vcc和GND引脚连接到ESP32的Vin和GND引脚,而继电器的输入引脚连接到ESP32的D19引脚。超声波传感器的Trig和Echo引脚连接到Arduino的D5和D18引脚。
在本页末尾可找到自动洗手液和CORONA19 Tracker的完整代码。这里说明了程序的重要部分。
首先在代码中包含所有必需的库文件。 HTTPClient库用于从HTTP服务器获取数据。 ArduinoJson库用于表示数据数组。此处,ArduinoJson库用于过滤从服务器获取的已确诊病例和从数据数组中治愈的病例。 LiquidCrystal库用于LCD显示模块。
#include
#include
#include
#include
要从服务器获取数据,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"];
现在,我们终于可以使用自制的电池供电的洗手液分配器了。只需按照电路图连接硬件并将程序上传到ESP32,开始时您应该在LCD上看到“ Covid19 Tracker”和“ Hand Sanitizer”消息,然后几秒钟后,它将在屏幕上显示已确认的病例和已恢复的病例。液晶屏如下图所示。