Рубрики
Схемы на Arduino

Автоматический дозатор дезинфицирующего средства с трекером коронавируса на ESP32

В настоящее время, как вы уже, наверно, наслышаны, коронавирус (Corona Virus — Covid19) совершает свой «опустошительный вояж» по всему миру. Практически уже все страны мира пострадали от действия этого ужасного вируса. Объявлена пандемия по поводу данного вируса, многие люди боятся выходить из дома чтобы не заразиться коронавирусом, тысячи людей по всему миру уже умерли от его действия. На многих сайтах транслируется актуальная информация о распространении коронавируса и последствиях его действия.

В данной статье мы рассмотрим создание автоматического дозатора дезинфицирующего средства на основе платы Arduino, который кроме выполнения своей основной функции на экране ЖК дисплея будет высвечивать информацию о распространении коронавируса (Covid19) – числе заболевших/умерших (или излечившихся) от его действия. Наш дозатор будет включать ESP32, ультразвуковой датчик, ЖК дисплей 16х2, водяной насос и дезинфицирующее средство для рук. Также мы будем использовать Esri’s API Explorer чтобы получать актуальную информацию о числе зараженных коронавирусом людей.

Ультразвуковой датчик будет использоваться для обнаружения присутствия рук рядом с выходом дезинфицирующего средства нашего дозатора. Он будет выдавать управляющий сигнал (с помощью ESP32) на включение водяного насоса для подачи дезинфицирующего средства когда расстояние до рук будет меньше 15 см.

ESP32 в нашем устройстве используется в качестве основного контроллера, он представляет собой Wi-Fi, который может подключаться к интернету.

Необходимые компоненты

  1. ESP32.
  2. Ультразвуковой датчик (купить).
  3. ЖК дисплей 16х2 (купить на AliExpress).
  4. Реле.
  5. Погружной насос с мини электродвигателем постоянного тока (купить на AliExpress).
  6. Дезинфицирующее средство для рук.

Получение данных о распространении коронавируса в реальном времени

Нам необходимо будет получать данные из интернета и передавать их на ESP32, который будет затем отображать их на ЖК дисплее. Для этого мы будем формировать специальный HTTP запрос чтобы считать JSON файл из интернета. Мы будем использовать инструментарий (API) обеспечиваемый сервисом Coronavirus Disease GIS Hub. В данном случае нам будет достаточно просто скомпилировать правильный URL-запрос (query URL) для этого сервиса и получить от него число подтвержденных случаев заражения коронавирусом, к примеру, для Индии. При необходимости в настройках сервиса можно сменить регион/страну, для которого вы хотите отображать статистику о распространении коронавируса (Covid19).

На следующем рисунке показана основная форма для работы с этим сервисом.

В этой форме нажмите на кнопку “Попробовать” или вставьте этот query 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 section (секцию ввода данных).

Теперь пролистайте окно вниз к программе парсинга и скопируйте ту часть кода, которая нужна вам. В нашем примере мы скопировали только те переменные, которые нужны для статистики распространения коронавируса в Индии.

Работа схемы

Схема устройства представлена на следующем рисунке.

Водяной насос подсоединен к ESP32 с помощью реле. Контакты Vcc и GND реле подсоединены к контактам Vin и GND ESP32, а входной контакт реле подсоединен к контакту D19 ESP32. Контакты Trig и Echo ультразвукового датчика подключены к контактам D5 и D18 ESP32.

Полная схема соединений представлена в следующей таблице.

LCD ESP32
VSS GND
VDD 5V
VO Потенциометр
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 для отслеживания распространения коронавируса (Covid19)

Полный код программы находится в конце статьи, здесь же объяснены наиболее важные его части.

Программирование необходимо начать с подключения необходимых библиотек. Библиотека HTTPClient используется для получения данных от HTTP сервера. Библиотека ArduinoJson используется для формирования необходимых массивов данных — с ее помощью осуществляется фильтрация необходимых нам данных из всего массива данных о распространении коронавируса, которые мы получаем с сервера. Библиотека LiquidCrystal используется для взаимодействия с ЖК дисплеем.

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

Чтобы получать данные от сервера модуль ESP32 должен иметь соединение с интернетом. Для этого введите свой Wi-Fi SSID и пароль (Password) в следующих строках:

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

После этого необходимо инициализировать контакты модуля ESP32, к которым мы подключили ЖК дисплей, ультразвуковой датчик и реле.

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 (API link), которую мы сгенерировали ранее. Используя данную строку, мы сможем получить информацию об общем числе подтвержденных случаев заражения коронавирусом и количестве умерших от него для Индии. Вы можете сменить название страны в 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() необходимо задать режимы работы (на ввод или вывод данных) для контактов, к которым мы подключили ультразвуковой датчик и реле.

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

Для более подробного изучения принципов работы с ультразвуковым датчиком вы на нашем сайте можете прочитать серию статей о работе с ним:

После этого необходимо проверить подключен ли ESP к Wi-Fi, если нет, то необходимо ждать когда подключится печатая строку “…..” в окне последовательного монитора (serial monitor).

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 файл модулем ESP32 при помощи считывания и печатания 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. После подачи питания на ЖК дисплее должна загореться надпись “Covid19 Tracker” & “Hand Sanitizer” и после этого через несколько секунд на ЖК дисплее должна начать отображаться статистика о количестве зараженных и умерших от коронавируса как показано на рисунке ниже.

Как и описывалось ранее вы с помощью внесения изменений в API link можете выводить статистику по коронавирусу в любой интересующей вас стране.

Исходный код программы

Если у вас возникнут вопросы по тексту данной программы, то вы можете задать их в комментариях к данной статье.

Видео, демонстрирующее работу схемы

11 ответов к “Автоматический дозатор дезинфицирующего средства с трекером коронавируса на ESP32”

Количество перекаченной жидкости будет зависеть от уровня воды в банке, ибо от этого и уровень воды в трубке будет выше. Поэтому кол-во полученной жидкости будет сильно отличаться. Что с этим можно сделать?

Не совсем понял что вы имеете ввиду. Как только вы подносите руки к ультразвуковому датчику будет включаться насос, перекачивающий воду, а как будете убирать, насос будет выключаться. Как на это влияет уровень воды в баке?

Но суть же в том, что он работает определённое время, как и показано в данной статье.

А что вас в этом не устраивает? Что вы хотите изменить?

Нужен фрагмент работы ультразвукового датчика с помпой, я не особо разбираюсь, помогите пожалуйста
Даже не фрагмент, а именно программа

То есть вам нужно удалить из представленного кода программы все лишнее для вас и оставить в ней только те строки, которые отвечают за работу ультразвукового датчика и помпы?

да, именно так, я пытаюсь самостоятельно, но что-то не особо получается

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *