پروژه با ESP32, دستگاه ضدعفونی کننده دست خودکار با به روز رسانی زنده COVID19

دستگاه ضدعفونی کننده دست خودکار با به روز رسانی زنده COVID19

دستگاه ضدعفونی کننده دست خودکار با به روز رسانی زنده COVID19:

اقلام استفاده شده:

ماژول ESP32 DevKitC V4
ماژول esp32 node mcu cp2102 (AI-thinker)
ماژول esp32 node mcu cp2102
NodeMCU esp8266 ch340 ماژول
برد کمکی esp32 فیبر
ماژول فاصله سنج التراسونیک ultrasonic SRF04
ماژول فاصله سنج التراسونیک ultrasonic SRF05
ال سی دی آبی LCD Blue 2*16
شیلد ال سی دی آردوینو آبی 2x16 با کیبورد shield lcd arduino
ال سی دی سبز LCD Green 2*16
ماژول رله 5ولت 1کانال Relay module1ch
موتور پمپ شناور 6 ولت


پک اقلام مورد نیاز:
دستگاه ضدعفونی کننده خودکار دست و ردیاب زنده COVID19


در مورد این پروژه دستگاه ضدعفونی کننده دست خودکار با به روز رسانی زنده COVID19:

ویروس کرونا (کووید 19) در حال ویرانی در جهان بود. تقریباً همه کشورها از ویروس کرونا رنج می بردند. WHO قبلاً آن را یک بیماری همه گیر اعلام کرده بود و بسیاری از شهرها در شرایط قرنطینه بودند، مردم نمی توانستند از خانه های خود خارج شوند و هزاران نفر جان خود را از دست داده اند. بسیاری از وب‌سایت‌ها به‌روزرسانی‌های زنده موارد کروناویروس مانند ردیاب مایکروسافت، ردیاب کووید۱۹ Esri و غیره را ارائه شده است.

در این پروژه دستگاه ضدعفونی کننده خودکار دست و ردیاب زنده COVID19، ما یک دستگاه ضدعفونی کننده خودکار دست با ال سی دی می سازیم که شمارش زنده موارد کرونا را نیز نشان می دهد.
این پروژه از ESP32، سنسور اولتراسونیک، ماژول LCD 16×2، پمپ آب و ضدعفونی کننده دست استفاده خواهد شد.
ما از API Explorer Esri برای دریافت داده‌های زنده افراد آلوده به کووید۱۹ استفاده می‌کنیم.
یک سنسور اولتراسونیک برای بررسی وجود دست ها در زیر خروجی دستگاه ضدعفونی کننده استفاده می شود. به طور مداوم فاصله بین خروجی ضدعفونی کننده و خود را محاسبه می کند و به ESP می گوید که هر زمان که فاصله کمتر از 15 سانتی متر بود پمپ را روشن کند تا ضدعفونی کننده را بیرون براند.

ESP32 به عنوان کنترل کننده اصلی استفاده می شود، یک ماژول Wi-Fi است که می تواند به راحتی به اینترنت متصل شود. ما قبلاً از آن برای ساخت بسیاری از پروژه های مبتنی بر اینترنت اشیا با استفاده از ESP32 استفاده کردیم.

اجزای مورد نیاز:

  • ماژول توسعه دهنده ESP32
  • سنسور اولتراسونیک
  • نمایشگر LCD 16*2
  • ماژول رله
  • پمپ شناور DC مینی
  • ضدعفونیکننده دست

پیوند API برای دریافت داده زنده کرونا:
در اینجا باید داده ها را از اینترنت دریافت کرده و سپس به ESP32 بفرستیم تا روی LCD 16×2 نمایش داده شود. برای آن، یک درخواست دریافت HTTP برای خواندن فایل JSON از اینترنت فراخوانی می شود. در اینجا ما از API ارائه شده توسط Coronavirus Disease GIS Hub استفاده می کنیم. شما به راحتی می توانید 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 و دستگاه ضدعفونی کننده دست اتوماتیک در زیر آورده شده است.

پمپ آب از طریق یک ماژول رله به ESP32 متصل می شود. پایه های Vcc و GND رله به پایه های Vin و GND ESP32 وصل می شوند در حالی که پایه ورودی رله به پایه D19 ESP32 متصل می شوند. پایه های Trig و Echo سنسور اولتراسونیک به پایه های D5 و D18 آردوینو متصل می شوند.

اتصالات کامل در جدول زیر آورده شده است.

LCDESP32  
VSSGND
VDD5V
VOPotentiometer
RSD22
RWGND
ED4
D4D15
D5D13
D6D26
D7D21
A5V
KGND
Ultrasonic SensorESP32
VccVin
GNDGND
TrigD5
ECHOD18

سخت افزار این دستگاه ضدعفونی کننده دست سنسور حرکتی به این شکل خواهد بود:

برنامه نویسی ESP32 برای Covid19 Tracker:
کد کامل ضدعفونی کننده دست خودکار و ردیاب CORONA19 در انتهای صفحه موجود است. در اینجا قسمت های مهم برنامه توضیح داده شده است.

کد را با گنجاندن تمام فایل های کتابخانه مورد نیاز شروع کنید. کتابخانه HTTPClient برای دریافت داده ها از سرور HTTP استفاده می شود. کتابخانه ArduinoJson برای بیان آرایه های داده استفاده می شود. در اینجا از کتابخانه ArduinoJson برای فیلتر کردن موارد تایید شده و Recovered از آرایه داده ای که از سرور دریافت می کنیم استفاده می شود. کتابخانه LiquidCrystal برای ماژول نمایشگر LCD استفاده می شود.

#include <HTTPClient.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include <LiquidCrystal.h>

برای دریافت اطلاعات از سرور، NodeMCU ESP32 باید به اینترنت متصل شود. برای این منظور، SSID و رمز عبور Wi-Fi خود را در خطوط زیر وارد کنید.

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 مطابق با خود تغییر دهید.

const char * 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);

برای کسب اطلاعات بیشتر در مورد نحوه عملکرد سنسور اولتراسونیک، رابط آن را با آردوینو بررسی کنید، جایی که عملکرد پین TRIG و ECHO آن را به همراه نحوه استفاده از آن برای محاسبه فاصله بین هر جسم توضیح داده ایم. همچنین، سایر پروژه های مبتنی بر اولتراسونیک را بررسی کنید.

پس از آن، بررسی کنید که آیا ESP به 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 سانتی متر باشد، پمپ را به مدت 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() با خواندن آن و چاپ داده‌های JSON بر روی نمایشگر سریال با استفاده از خطوط زیر بررسی کنید که آیا فایل JSON توسط ESP32 دریافت شده است یا خیر.

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:
بنابراین در نهایت دستگاه ضدعفونی کننده دستی ما که با باتری کار می کند آماده آزمایش است. فقط سخت افزار را مطابق نمودار مدار وصل کنید و برنامه را در ESP32 آپلود کنید، در ابتدا باید پیام “Covid19 Tracker” و “Hand Sanitizer” را روی LCD ببینیدو بعد از چند ثانیه موارد تایید شده و موارد بازیابی شده را مطابق شکل زیر در صفحه LCD نمایش می دهد.

مشابه این، می‌توانید با ایجاد تغییراتی در پیوند API، این داده‌ها را برای هر کشوری دریافت کنید. یک فیلم کامل و کد کار در انتهای صفحه آورده شده است.

کد:

#include <HTTPClient.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include <LiquidCrystal.h>
const char* ssid = "Galaxy-M20";
const char* pass = "ac312124";
int count;
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;
long duration;
int distance; 
const char* url = "https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov...(Country_Region=%27India%27)&returnGeometry=false&outFields=Country_Region,Confirmed,Recovered";
void setup() {
  Serial.begin(115200);
  delay(2000);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(pump, OUTPUT);
  digitalWrite(pump, LOW); 
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Covid19 Tracker");
  lcd.setCursor(0,1);
  lcd.print("Hand Sanitizer");
  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");              // print ... till not connected
  }
  Serial.println("WiFi connected");
}
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() {
  ultra();
  HTTPClient https;
  String data;
  https.begin(url);
  int httpCode = https.GET();
  if (httpCode > 0) { //Check for the returning code
    String payload = https.getString();
    char charBuf[500];
    payload.toCharArray(charBuf, 500);   
    //Serial.println(payload);
    const size_t capacity = 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(capacity);
    deserializeJson(doc, payload);
    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"];
    if (count < 3){
    //Serial.println(features_0_attributes_Confirmed);
    lcd.setCursor(0, 0);
    lcd.print("IN Confirmed:");
    lcd.print(features_0_attributes_Confirmed);
    //Serial.println(features_0_attributes_Recovered);
    lcd.setCursor(0, 1);
    lcd.print("IN Recovered:");
    lcd.print(features_0_attributes_Recovered);
    }
    if (count > 3){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Wash Hands");
    lcd.setCursor(0, 1);
    lcd.print("Avoid Contacts");
    }
    if (count > 6){
    count = 0; 
    }
} 
  else {
    Serial.println("Error on HTTP request");
  }
  https.end();
  count++; 
}

فیلم:

فیلم

منبع این مطالب:

https://circuitdigest.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *