ویروس کرونا (Covid19) در جهان به عنوان یک ویروس ویرانگر شناخته شده است. تقریباً تمام کشورها از ویروس کرونا رنج میبرند.
فهرست مطالب
پخش اتومات موارد ضدعفونی کننده
سازمان بهداشت جهانی این بیماری را همهگیر اعلام کرده است و بسیاری از شهرها در شرایط قرنطینه قرار دارند، مردم نمیتوانند از خانههای خود خارج شوند و هزاران نفر جان خود را از دست دادهاند. این در حالی است که بسیاری از وبسایتها بروزرسانی مستقیم از موارد ویروس کرونا مانند ردیاب مایکروسافت، ردیاب Esov’s Covid19 و غیره را ارائه میدهند. ما قصد داریم تا در این پست شما را با دستگاه ردیاب اتوماتيك پخش مواد ضدعفونیکننده کرونا آشنا سازیم.
در این پروژه، ما یک دستگاه اتومات پخشکننده ضدعفونیکننده دست را با یک LCD خواهیم ساخت. در این پروژه از ESP32، سنسور التراسونیک، ماژولLCD 16×2، پمپ آب و ضدعفونیکننده دست استفاده میشود. ما در حال استفاده از Esri’s API Explorer برای دریافت اطلاعات زنده از افراد آلوده Covid19 هستیم. از سنسور اولتراسونیک برای بررسی وجود دست ها در زیر خروجی دستگاه ضد عفونیکننده استفاده میشود. این به طور مداوم فاصله بین خروجی ضد عفونیکننده و خود را محاسبه میكند و به ESP میگوید كه هر زمان كه فاصله كمتر از 15 سانتیمتر باشد پمپ را روشن کند تا ماده ضدعفونی بهداشتی را به سمت بیرون هدایت کند.
ESP32 به عنوان کنترلر اصلی در دستگاه ردیاب اتوماتيك پخش مواد ضدعفونیکننده کرونا مورد استفاده قرار میگیرد، این یک ماژول Wi-Fi است که به راحتی میتواند به اینترنت متصل شود. ما قبلاً از آن برای ساخت بسیاری از پروژههای مبتنی بر IoT با استفاده از ESP32 استفاده کردهایم.
ابزار لازم برای ساخت دستگاه ردیاب پخش مواد ضدعفونی کننده کرونا
در این بخش ما به موارد مورد نیاز جهت ساخت دستگاه ردیاب پخش مواد ضدعفونیکننده کرونا اشاره خواهیم کرد.
- ماژول ESP32 Dev
- سنسور اولتراسونیک
- نمایشگر LCD 16 * 2
- ماژول رله
- پمپ مینی DC قابل گذاشتن در زیر آب
- ضدعفونی کننده دست
پیوند API برای دریافت اطلاعات زنده کرونا در دستگاه ردیاب اتوماتیک پخش مواد ضدعفونی کننده
در اینجا ما باید اطلاعات را از اینترنت دریافتکرده و سپس به ESP32 ارسال کنیم تا در LCD 16×2 نمایش داده شود. برای همین، درخواست HTTP دریافت برای خواندن فایل JSON از طریق اینترنت فراخوانی میشود. در اینجا ما از API ارائه شده توسط Coronavirus Disease GIS Hub استفاده میکنیم. شما میتوانید به راحتی URL درست را جستجو و تهیه کنید و همچنین میتوانید کشور/ منطقه خود را نیز تغییر دهید. پس از دریافت دادههای JSON، اکنون کدی تولید کنید تا دادههای JSON را بخواند و متناسب با نیاز ما آن را بیان کند. برای این کار و به منظور ساخت دستگاه ردیاب اتوماتیک پخش مواد ضدعفونیکننده کرونا، به ArduinoJson Assistant بروید و دادههای JSON را در بخش ورودی جایگذاری کنید.
اکنون به قسمت تجزیه و تحلیل رفته و بخشی از کد را که برای شما مفید است کپی کنید.
مدار دستگاه ردیاب اتوماتيك پخش مواد ضدعفونی کننده کرونا
نمودار مدار کامل برای این دستگاه ردیاب اتوماتيك پخش مواد ضدعفونیکننده کرونا CVid19 و دستگاه پخش خودکار ضد عفونیکننده دستی در زیر آورده شده است:
پمپ آب از طریق ماژول رله به ESP32 متصل میشود. پینهای Vcc و GND رله به پینهای Vin و GND ESP32 وصل میشوند در حالی که پین ورودی رله به پین D19 ESP32 متصل است. پینهای Trig و Echo از سنسور اولتراسونیک به D5 و D18 Pins آردوینو وصل شدهاند.
اتصالات کاملتر در جدول زیر آورده شده است:
LCD | ESP32 |
VSS | GND |
VDD | 5V |
VO | Potentiometer |
RS | D22 |
RW | GND |
E | D4 |
D4 | D15 |
D5 | D13 |
D6 | D26 |
D7 | D21 |
A | 5V |
K | GND |
Ultrasonic Sensor | ESP32 |
Vcc | Vin |
GND | GND |
Trig | D5 |
ECHO | D18 |
سختافزار دستگاه ردیاب اتوماتيك پخش مواد ضدعفونیکننده کرونا سنسور حرکتی به صورت زیر ظاهر میشود:
برنامه نویسی ESP32 برای دستگاه ردیاب اتوماتيك پخش مواد ضدعفونی کننده
کد کامل Auto Hand Sanitizer و CORONA19 Tracker را به منظور ساخت دستگاه ردیاب اتوماتيك پخش مواد ضدعفونیکننده کرونا، میتوانید در انتهای صفحه مشاهده کنید. در اینجا بخشهای مهم برنامه توضیح داده شده است. کد را با درج همه فایلهای مورد نیاز کتابخانه شروع کنید. برای دریافت اطلاعات از سرور HTTP از کتابخانه HTTPClient استفاده میشود. از کتابخانه ArduinoJson برای بیان آرایههای داده استفاده میشود. در اینجا از کتابخانه ArduinoJson برای فیلترکردن موارد تأیید شده و بازیابی از آرایه دادهای که از سرور دریافت میکنیم استفاده میشود. کتابخانه LiquidCrystal برای ماژول نمایشگر LCD استفاده میشود.
#include <HTTPClient.h> #include <WiFi.h> #include <ArduinoJson.h> #include <LiquidCrystal.h>
برای دریافت اطلاعات از سرور، NodeMCU ESP32 باید با اینترنت ارتباط برقرار کند. برای آن، 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، پین Trig و Echo سنسور اولتراسونیک را به عنوان پین ورودی و پین رله به عنوان یک خروجی تعریف کنید.
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");
در ساخت پروژه دستگاه ردیاب اتوماتيك پخش مواد ضدعفونیکننده کرونا، در داخل تابع ultimate () void ما به طور مداوم فاصله را با استفاده از سنسور اولتراسونیک محاسبه میکنیم و اگر فاصله کمتر یا مساوی 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"];
تست اتوماتیک دستگاه ردیاب پخش مواد ضدعفونی کننده
در نهایت دستگاه ردیاب اتوماتيك پخش مواد ضدعفونیکننده کرونا ما برای آزمایش آماده است. کافیست سختافزار را مطابق نمودار مدار وصل کنید و برنامه را در 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++; }