COVID19 Canlı Güncellemeleri ile Otomatik El Dezenfektanı Dispenseri

    Birçok ülkenin karantina altında olduğu ve herkesin sağlıklı kalmaya çalıştığı bu pandemi sırasında el dezenfektanı kesinlikle olmazsa olmaz! Bu proje sadece el dezenfektanı dağıtmakla kalmıyor, aynı zamanda size Coronavirüs vakalarının canlı sayısını bile gösteriyor!

Coronavirüs (Covid19) tüm dünyayı kasıp kavuruyor. Hemen hemen her ülke Coronavirüsünden muzdarip. DSÖ bunu Pandemik bir hastalık olarak ilan etti ve birçok şehir karantina altında, insanlar evlerinden dışarı çıkamıyor ve binlerce kişi hayatını kaybetti. Birçok web sitesi, Microsoft’un Tracker’ı, Esri’nin Covid19 Tracker’ı vb. gibi coronavirüs vakalarının canlı güncellemelerini sağlıyor.

Bu projede, Coronavirüs vakalarının canlı sayısını da gösteren LCD’li bir Otomatik El Dezenfektanı Dispenseri inşa edeceğiz. Bu projede ESP32, Ultrasonik Sensör, 16×2 LCD Modül, Su pompası ve El Dezenfektanı kullanılacaktır. Covid 19 bulaşmış kişilerin canlı verilerini almak için Esri’s API Explorer’ı kullanıyoruz. Dezenfektan makinesinin çıkışının altında ellerin varlığını kontrol etmek için ultrasonik bir sensör kullanılır. Dezenfektan çıkışı ile kendisi arasındaki mesafeyi sürekli olarak hesaplar ve ESP’ye, mesafe 15 cm’den az olduğunda, dezenfektanı dışarı itmesi için pompayı açmasını söyler.

ESP32 ana kontrolör olarak kullanılmaktadır, internete kolayca bağlanabilen bir Wi-Fi modülüdür. Bu projede ESP32 kullanılarak oluşturulacaktır. Ayrıca bu projeyi Loron ve Cellron kartlarını kullanarak yapabilirsiniz.

Gerekli Bileşenler

  • ESP32 Geliştirme Modülü
  • Ultrasonik sensör
  • 16*2 LCD Ekran
  • Röle Modülü
  • Mini DC Dalgıç Pompa
  • El dezenfektanı

Corona Canlı Verilerini Almak İçin API Bağlantısı

Burada verileri internetten almamız ve ardından 16×2 LCD’de görüntülemek için ESP32’ye göndermemiz gerekiyor. Bunun için JSON dosyasını internetten okumak için bir HTTP alma isteği çağrılır. Burada Coronavirus Disease GIS Hub tarafından sağlanan API’yi kullanıyoruz. Hindistan için toplam onaylanmış ve kurtarılan vakaları almak için doğru sorgu URL’sini kolayca derleyebilir ve bunu farklı bir ülke için kullanmak isterseniz ülkeyi/bölgeyi değiştirebilirsiniz.

Şimdi “Şimdi Dene(Try Now)”yi tıklayın veya sorgu URL’sini yeni bir tarayıcıya yapıştırın, bu sorgunun çıktısı şöyle görünecektir:

# {"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 verilerini aldıktan sonra, şimdi JSON verilerini okumak için kodu oluşturun ve ihtiyaçlarımıza göre ifade edin. Bunun için  ArduinoJson Assistant ‘a gidin ve JSON verilerini Giriş bölümüne yapıştırın.

Şimdi ayrıştırma programına gidin ve sizin için yararlı olan kod bölümünü kopyalayın. Hindistan’da yalnızca onaylanmış ve kurtarılmış vakalara ihtiyaç olduğu için aşağıdaki değişkenleri kopyalamamız yeterlidir.

Devre Şeması

Bu Covid19 Tracker ve otomatik el dezenfektanı dağıtma makinesi için tam devre şeması aşağıda verilmiştir.

Su pompası, bir röle modülü aracılığıyla ESP32’ye bağlanır. Rölenin Vcc ve GND pinleri ESP32’nin Vin ve GND pinlerine, rölenin giriş pini ise ESP32’nin D19 pinine bağlanır. Ultrasonik sensörün Trig ve Echo pinleri Arduino’nun D5 ve D18 pinlerine bağlanır.

Komple bağlantılar aşağıdaki tabloda verilmiştir.

LCD

ESP32  

VSS

GND

VDD

5V

VO

Potansiyometre

(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

Bu Hareket Sensörlü El Dezenfektanı Dispenserinin donanımı şöyle görünecek:

ESP32'yi Covid19 Tracker için Programlama

Otomatik El Dezenfektanı ve CORONA19 İzleyici için tam kod sayfanın sonunda bulunur. Burada programın önemli kısımları anlatılmaktadır.

Gerekli tüm kitaplık dosyalarını ekleyerek kodu başlatın. HTTPClient  kütüphanesi, verileri HTTP sunucusundan almak için kullanılır. ArduinoJson kütüphanesi, veri dizilerini ifade etmek için kullanılır. Burada ArduinoJson kütüphanesi, sunucudan aldığımız veri dizisinden Onaylanan ve Kurtarılan durumları filtrelemek için kullanılır.

LCD ekran Modülü için LiquidCrystal kütüphanesi kullanılmaktadır.

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

Verileri sunucudan almak için NodeMCU ESP32’nin internete bağlanması gerekir. Bunun için aşağıdaki satırlara Wi-Fi SSID ve şifrenizi giriniz.

#const char* ssid = "Galaxy-M20";
#const char* pass = "ac312124";

Ardından LCD modülü, Ultrasonik sensör ve Röle modülünü bağladığınız pinleri tanımlayın.

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;

Şimdi daha önce oluşturulan API bağlantısını giriyoruz. Bu bağlantıyı kullanarak Hindistan’daki toplam teyit edilen vakaları ve İyileşen vakaları alacağız. URL’deki ülke adını kendinize göre değiştirebilirsiniz.

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";

Şimdi void setup() içinde, Ultrasonik sensörün Trig ve Echo pinini giriş pinleri ve Relay pinini çıkış olarak tanımlayın.

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(pump, OUTPUT);                     

Bundan sonra, ESP’nin Wi-Fi ile bağlı olup olmadığını kontrol edin, değilse seri monitörde “…..” yazdırarak ESP’nin bağlanmasını bekleyecektir.

WiFi.begin(ssid, pass);

#while (WiFi.status() != WL_CONNECTED)
{                      
delay(500);
Serial.print("."); // print ... till not connected 
}

Serial.println("WiFi connected");

void ultra() işlevinin içinde, bir ultrasonik sensör kullanarak sürekli olarak mesafeyi hesaplayacağız ve mesafe 15 cm’den az veya buna eşitse, dezenfektanı borudan dışarı itmek için pompayı 2 saniye boyunca çalıştıracaktır. Belli ki birisi ellerini çıkış borusunun altına koyduğunda, mesafe azalacak ve pompanın açılmasını tetikleyecektir.

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){

distance = sensor.distance_cm()
Serial.print("Opening Pump");
digitalWrite(pump, HIGH);
delay(2000);
digitalWrite(pump, LOW);
ESP.restart();
}}

Şimdi void loop() fonksiyonunun içinde, aşağıdaki satırları kullanarak seri monitörde JSON verilerini yazdırarak ve ESP32 tarafından JSON dosyasının alınıp alınmadığını kontrol edin.

int httpCode = https.GET();
if (httpCode > 0){
//Check for the returning code                      
String payload = https.getString();
}

Şimdi void loop() fonksiyonunun içinde, aşağıdaki satırları kullanarak seri monitörde JSON verilerini yazdırarak ve ESP32 tarafından JSON dosyasının alınıp alınmadığını kontrol edin.

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"];

Otomatik El Dezenfektanını Covid19 Tracker ile Test Etme

Sonunda pille çalışan el dezenfektanı dispenserimiz teste hazır. Sadece donanımı devre şemasına göre bağlayın ve programı ESP32’ye yükleyin, başlangıçta LCD’de “Covid19 Tracker” & “El Dezenfektanı” mesajını görmelisiniz ve ardından birkaç saniye sonra onaylanan vakaları ve kurtarılan vakaları ekranda gösterecektir.

Buna benzer şekilde, API bağlantısında bazı değişiklikler yaparak herhangi bir ülke için bu verileri alabilirsiniz. Tüm kod sayfanın sonunda verilmiştir.

Kod

#include 
#include 
#include 
#include 
#include 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;
// Aşağıdaki değişkende /rest/services/ncov_ kısmına kadar olan link bağlantısı=
//"https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/1/query?f=json&where=" 'dir.
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++; 
}

Teşekkür Ederiz.

BİZİ TAKİP EDİN

Güncel haberlerimiz için sosyal medya hesaplarımızdan bizi takip edin.