ESP32 — это плата для разработки, производимая Espressif systems, которую можно использовать одновременно как плату микроконтроллера, а также плату Интернета вещей (IoT). Он содержит необходимые функции, такие как PWM, I2C, SPI и т. д., а также встроенные возможности подключения Bluetooth и WIFI. Подробнее об особенностях ESP32 и его настройке в Arduino IDE читайте в статьях здесь и здесь.
Оборудование
- ESP32 РАЗРАБОТКА V1
- Датчик уровня воды
- Емкость с водой
- Перемычки
Полная установка будет выглядеть примерно так
Датчик уровня воды
Датчик уровня воды — это модуль, предназначенный для обнаружения воды, даже небольшого количества влаги. Такая функция может быть полезна для обнаружения утечек, дождя и даже других функций определения влажности, кроме уровня воды. Глядя на датчик уровня воды, он имеет ряд параллельных медных полос по всей длине модуля. Пять из них — разветвители питания, а остальные пять — сенсорные разветвители. Когда модуль не погружен в воду, между полосками возникает высокое сопротивление. Когда полоски вступают в контакт с водой, сопротивление снижается, а проводимость увеличивается. Датчик имеет три контакта: один — контакт VCC, другой — контакт GND, а третий — контакт SIGNAL, который нужно присоединить к контакту, на котором мы будем снимать показания. На модуле контакты обозначены как «+», «-» и «S» соответственно.
Следует иметь в виду, что эти датчики имеют небольшой срок службы из-за того, что поверхность медных полос подвергается коррозии, когда мы подаем питание к датчику и позволяем ему контактировать с водой. Чтобы избежать этого, мы можем подавать питание на датчик только тогда, когда нам нужно снимать показания, а не постоянно. Для этого мы можем установить вывод, который мы устанавливаем высоким только при подаче питания на плату.
Код
Мы будем использовать следующий код в Arduino IDE
#define POWER 33 #define SIGNAL 32 int value=0; int level=0; void setup() { Serial.begin(115200); pinMode(POWER,OUTPUT); digitalWrite(POWER,LOW); } void loop() { level=waterSensor(); Serial.print("Water Level:"); Serial.println(level); delay(1000); } int waterSensor() { digitalWrite(POWER,HIGH); delay(10); value=analogRead(SIGNAL); delay(10); digitalWrite(POWER,LOW); return value; }
Для построчного объяснения
Во-первых, мы определяем выводы, которые мы собираемся использовать для питания модуля и считывания с него аналоговых данных.
#define POWER 33 #define SIGNAL 32
Затем мы определяем две целочисленные переменные, которые будем использовать для хранения показаний датчика.
int value=0; int level=0;
В блоке void setup() мы определяем последовательную связь, а также настраиваем вывод питания как ВЫХОД и НИЗКИЙ уровень.
void setup() { Serial.begin(115200); pinMode(POWER,OUTPUT); digitalWrite(POWER,LOW); }
В блоке void loop() мы используем определяемую пользователем функцию waterSensor() для проверки уровня воды, а затем отображаем вывод на последовательном мониторе.
void loop() { level=waterSensor(); Serial.print("Water Level:"); Serial.println(level); delay(1000); }
Мы определяем функцию waterSensor(), установив вывод питания как ВЫСОКИЙ, используя функцию AnalogRead() для проверки уровня воды, а затем снова установив вывод питания как НИЗКИЙ. Таким образом, мы избегаем чрезмерной коррозии поверхности нашего модуля.
int waterSensor() { digitalWrite(POWER,HIGH); delay(10); value=analogRead(SIGNAL); delay(10); digitalWrite(POWER,LOW); return value; }
Заключение
После загрузки кода на нашу плату ESP32 мы открываем последовательный монитор со скоростью 115200 бод. Мы будем видеть показания, отображаемые через каждую секунду. Когда модуль не погружен в воду, аналоговое показание равно нулю.
в то время как полное погружение его в воду дает нам аналоговое значение более 1300.
Мы можем использовать это изменение значения аналоговой проводимости в качестве триггера для запуска любого события, например, включения светодиода или зуммера.
Если вам нужны какие-либо платные задания по написанию контента или любые рекомендации, связанные с ESP32 или электричеством, обращайтесь по адресу [email protected]