? как подключить к arduino bmp180 (gy-68)

Датчик уровня жидкости (Water Sensor Arduino)

Рабочее напряжение аналогового сенсора — 5v. Выходное напряжение (показания датчика) зависит от степени погружения датчика в жидкость и от параметров, влияющих на коэффициент передачи напряжения, например, проводимость жидкости. Это простой в использование и недорогой датчик уровня жидкости, который широко применяется в системах автоматизации и при разработке Умного дома.

Как вы уже заметили на фото к этому занятию, датчик уровня жидкости имеет три контакта. Правый контакт (-) подключается к Земле (GND), средний к питанию 5v, а левый к аналоговому входу, например, A0. При полностью сухом датчике выходное напряжение и показания на аналоговом входе будут равны нулю, чем больше датчик будет погружен в воду, тем больше будут его показания (от 0 до 1023).

Схема на датчике DHT11

Выбор этого средства измерения температуры/влажности обусловлен его популярностью, дешевизной и надежностью — такой набор характеристик делает датчик отличным вариантом для домашнего проекта. DHT11 состоит из:

  • определяющего влажность резистора;
  • измеряющего температуру термистора.

Информация с выходов датчика идет на контроллер, в нашем случае это Ардуино.

Сенсор имеет следующие характеристики:

  • рабочее напряжение — 3–5 В;
  • питание — от источника в 2.5 мА;
  • диапазон измерения влажности окружающей среды — 20–80% с погрешностью в 5%;
  • диапазон измеряемых температур — 0–50 °С с погрешностью в 2%;
  • частота измерений — раз в секунду;
  • габариты — 15 на 15.15 на 5.5 мм.

На корпусе имеются четыре выхода, благодаря чему можно подключать сенсор к различным измерительным приборам. В домашней схеме будут использоваться лишь три:

  • DATA;
  • VCC;
  • GND.

В продаже встречаются и датчики DHT11 по отдельности, и в составе готового модуля. Рекомендуется найти последний вариант — он удобнее

В разных модулях внешний вид и конфигурация выходов могут различаться, но принцип везде одинаков, следует лишь обращать внимание на распиновку

Методика взаимодействия

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

Связь происходит по следующему принципу:

  • микроконтроллер отправляет сенсору запрос проверки состояния;
  • DHT11 меняет битовую кодировку и отдает на Arduino результат;
  • если формат запроса-ответа согласован с обеих сторон, на управляющую плату поступает пятибайтовый отчет о влажности и температуре.

Состав отчета:

  • первые два байта — уровень температуры;
  • вторые два — влажность;
  • пятый байт — нужная для предотвращения ошибки измерений и передачи контрольная сумма.

Программная часть

Чтобы собранная метеостанция на базе Ардуино заработала, понадобится подходящий скетч.

Скетч можно скачать здесь: https://cloud.mail.ru/public/JDX7/HJ94PKwoe

Принципиальная схема

Так будет выглядеть схема сборки станции:

После сборки, прошивки и запуска на экране станет отображаться влажность и температура. Дисплей покажет:

  • тепловой индекс — HiX;
  • температуру воздуха — Т (temperature, в градусах);
  • влажность — H (Humidity, в процентах).

Используется I2C-дисплей 1602.

Недостатки

Приведенная конструкция имеет один минус — при взаимодействии с экраном цифры округляются до целых. Для домашних вычислений это некритично, но при необходимости получить более точные величины придется заменить датчик на более продвинутый DHT22. Его поддержка в скетче есть по умолчанию.

Теперь рассмотрим образец метеостанции под Ардуино на основе DHT22 и с дополнительной функцией — измерением давления.

Описание библиотеки для работы с датчиком. Пример скетча

Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080.  Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.

Первый пробный скетч будет заставлять датчик считывать показания давления и температуры. Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль. В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.

    status = pressure.startTemperature();// Считываются данные с датчика о температуре    if(status!=0){    delay(status); // Ожидание    status = pressure.getTemperature(T); // Сохранение полученных данных о температуре    if(status!=0){    Serial.print("Temperature: "); // Выведение на экран слова «Температура»    Serial.print(T,2); // Вывод на экран значения температуры.    Serial.println("deg C, "); //Печать символа градуса Цельсия.    

Затем нужно получить информацию об атмосферном давлении.

    status = pressure.startPressure(3); // происходит считывание давления    if(status!=0){    delay(status); // Ожидание    status = pressure.getPressure(P,T); // получение давления, сохранение    if(status!=0){    Serial.print("Absolute pressure: "); // Вывод на экран слов «Атмосферное давление»    Serial.print(P,2); // Вывод на экран значения переменной mBar    Serial.print(" mbar, "); // Вывод на экран текста "mBar"    Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.)    Serial.println(" mmHg");} // вывод на экран единицы измерения давления "mmHg" (мм. Рт.ст.).    

После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.

Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.

Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.

    void printValues() {    Serial.print("Temperature = ");    Serial.print(bme.readTemperature());    Serial.println(" C"); //определение температуры, вывод ее на экран в градусах Цельсия.    Serial.print("Pressure = ");    Serial.print(bme.readPressure() / 100.0F);    Serial.println(" hPa"); //определение давления, вывод его на экран    Serial.print("Humidity = ");    Serial.print(bme.readHumidity());    Serial.println(" %"); //определение влажности в процентах, вывод измеренного значения на экран.    Serial.println();    }    

Тестирование работы автоматического дозатора воды

Сделайте все соединения, показанные на выше приведенной схеме, и загрузите программу в плату Arduino. Закрепите провода, идущие к ультразвуковому датчику и соленоидному клапану чтобы они не мешали наливу воды в стакан. Убедитесь в том, что встроенный в плату Arduino светодиод не горит – это будет свидетельствовать о том, что соленоидный клапан закрыт. Вид собранной нами конструкции для тестирования работы проекта показан на следующем рисунке.

Когда мы будем подносить сигнал под кран ультразвуковой датчик будет определять это, соответственно плата Arduino будет давать сигнал на открытие клапана и вода будет поступать в стакан. Как только мы будем убирать стакан плата Arduino будет закрывать клапан и подача воды будет прекращаться. Более подробно все эти процессы показаны на видео, приведенном в конце статьи.

Предупреждение: различные соленоидные клапаны имеют различное рабочее напряжение и потребляемый ток, поэтому для реализации данного проекта убедитесь в том, что вы выбрали соленоид работающий от 12V и с потребляемым током не более 1.5A.

Принцип работы

Рассмотрим датчик напора РМ, установленный в индивидуальный водопровод, он функционирует следующим образом:

Создаваемое насосом колодца или скважины давление способствует наполнению магистрали водой, которая давит на резиновую мембрану, расположенную за штуцером реле давления.

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

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

При бытовом использовании воды давление в трубопроводе падает, мембрана реле возвращается в исходное положение, ослабляя нажим на пластину, и контакты внутри прибора замыкаются – электронасос начинает функционировать и закачивать воду в магистраль.

Рис. 4 Датчик давления воды РМ в разобранном виде

Код

Вот простой пример кода для нашего проекта.

/******************************************************************************
Force_Sensitive_Resistor_Example.ino
Example sketch for SparkFun's force sensitive resistors
  (https://www.sparkfun.com/products/9375)
Jim Lindblom @ SparkFun Electronics
April 28, 2016


Create a voltage divider circuit combining an FSR with a 3.3k resistor.
- The resistor should connect from A0 to GND.
- The FSR should connect from A0 to 3.3V
As the resistance of the FSR decreases (meaning an increase in pressure), the
voltage at A0 should increase.


Development environment specifics:
Arduino 1.6.7
******************************************************************************/
const int FSR_PIN = A0; // Pin connected to FSR/resistor divider


// Measure the voltage at 5V and resistance of your 3.3k resistor, and enter
// their value's below:
const float VCC = 4.98; // Measured voltage of Ardunio 5V line
const float R_DIV = 3230.0; // Measured resistance of 3.3k resistor


void setup() 
{
  Serial.begin(9600);
  pinMode(FSR_PIN, INPUT);
}


void loop() 
{
  int fsrADC = analogRead(FSR_PIN);
  // If the FSR has no pressure, the resistance will be
  // near infinite. So the voltage should be near 0.
  if (fsrADC != 0) // If the analog reading is non-zero
  {
    // Use ADC reading to calculate voltage:
    float fsrV = fsrADC * VCC / 1023.0;
    // Use voltage and static resistor value to 
    // calculate FSR resistance:
    float fsrR = R_DIV * (VCC / fsrV - 1.0);
    Serial.println("Resistance: " + String(fsrR) + " ohms");
    // Guesstimate force based on slopes in figure 3 of
    // FSR datasheet:
    float force;
    float fsrG = 1.0 / fsrR; // Calculate conductance
    // Break parabolic curve down into two linear slopes:
    if (fsrR <= 600) 
      force = (fsrG - 0.00075) / 0.00000032639;
    else
      force =  fsrG / 0.000000642857;
    Serial.println("Force: " + String(force) + " g");
    Serial.println();


    delay(500);
  }
  else
  {
    // No pressure detected
  }
}

После загрузки необходимо установить скорость передачи 9600 бит/с.

Теперь при нажатии на датчик будут появляться расчеты давления.

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

На этом все. Проект полностью готов.

Статья является авторским переводом с сайта sparkfun.com.

Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.

3Получение дистанции до объекта с датчика HC-SR04

Теперь напишем скетч, определяющий расстояние до препятствия и выводящий его в последовательный порт. Сначала задаём номера выводов TRIG и ECHO – это 12 и 11 пины. Затем объявляем триггер как выход, а эхо – как вход. Инициализируем последовательный порт на скорости 9600 бод. В каждом повторении цикла loop() считываем дистанцию и выводим в порт.

const int trigPin = 12; const int echoPin = 11;void setup() { pinMode(trigPin, OUTPUT); // триггер — выходной пин pinMode(echoPin, INPUT); // эхо — входной digitalWrite(trigPin, LOW); Serial.begin(9600); // инициализация послед. порта}void loop() { long distance = getDistance(); // получаем дистанцию с датчика Serial.println(distance); // выводим в последовательный порт delay(100);} // Определение дистанции до объекта в смlong getDistance() { long distacne_cm = getEchoTiming() * 1.7 * 0.01; return distacne_cm;} // Определение времени задержкиlong getEchoTiming() { digitalWrite(trigPin, HIGH); // генерируем 10 мкс импульс запуска delayMicroseconds(10); digitalWrite(trigPin, LOW); // определение на пине echoPin длительности уровня HIGH, мкс: long duration = pulseIn(echoPin, HIGH); return duration;} Функция getEchoTiming() генерирует импульс запуска. Она как раз создаёт тот 10-микросекундный импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.

Функция getDistance() рассчитывает дистанцию до объекта. Из школьного курса физики мы помним, что расстояние равно скорость умножить на время: S = V×t Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем (переменная duration). Чтобы получить время duration в секундах, нужно разделить его на 1 000 000. Так как звук проходит двойное расстояние – до объекта и обратно – нужно ещё разделить результат пополам. Вот и получается, что расстояние до объекта S = 34000 см/сек × duration / 1 000 000 сек / 2 = 1,7 см/сек / 100, что мы и написали в скетче.

Операцию умножения микроконтроллер выполняет быстрее, чем операцию деления, поэтому :100 я заменил на эквивалентное ×0,01.

Принципиальная схема датчика давления

Документация датчика spd005g и его технические характеристики.

Схема подключения датчика давления к Arduino

Датчик подключается к Arduino через специальный каскад собранным на операционном усилителе LM324. Выходной вывод каскада 12 подключается к выводу A0 arduino. Вывод измеренного значения с датчика давления выводится на символьный LCD дисплей 16×2. Светодиод L2 можно исключить из схемы, он необхоим только лишь для сигнализации наличия напряжения. Переменое сопротивление R4 предназначено для регилировки контрасности дисплея. Передачи данных осуществляется по 4-м проводам подключенным к выводам DB4-DB7.

Питание LCD дисплея 16×2 осуществляется от источника в 5 Вольт.

Какие модели датчиков бывают

Различают механические и электронные модификации датчиков, для бытового водоснабжения c использованием погружных электронасосов и насосных станций бюджетной и средней ценовой категории в основном применяют механические модели этого прибора. Они отличаются высокой надежностью, простотой конструктивного исполнения, удобством монтажа и регулировки.

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

Рис. 6 Приборы автоматического управления со встроенными датчиками

Электронные датчики воды

Электронные датчики гидравлического давления применяется в автоматике управления насосным оборудованием 3-го поколения с частотным преобразователем, они входят в состав электронных контроллеров, состоящих из одного малогабаритного блока.

Электронное устройство заменяет все дискретные элементы системы автоматики – реле сухого хода и давления, манометр, гидроаккумулятор большого объема, обеспечивает плавный запуск электродвигателя и электронную регулировку скорости вращения вала насосного электродвигателя. В данном устройстве с электронного датчика снимается аналоговый сигнал, величина напряжения которого зависит от напора, далее он преобразуется в электронной управляющей схеме в широтно-импульсное модулированное напряжение, подаваемое на обмотку электродвигателя насоса.

В быту широко известны и используются специальные блоки частотного управления SU 301 от Grundfos, работающие в паре с погружными электронасосами серии SQ, другие известные модели и производители – Active Driver (DAB), Sirio Entry (Italtecnica).

Рис. 7 Подключение датчика к водопроводу и электрической сети

Зачем все это необходимо

Упомянутая связка позволяет создать на основе микроконтроллера систему определяющую давление или вес на поверхности чувствительного элемента. Практическое применение аналогичная конструкция имеет на птичниках, когда происходит поштучное взвешивание проходящих живых куриц или уток. Для процедуры в Агро секторе предусмотрен узкий коридор движения особей с датчиком прохождения единицы и платформой определения массы. Кроме названой ниши, точность устройства вполне позволяет его использовать в торговле, связывая разработанные на основе тензометрических сенсоров весы с кассовым аппаратом или компьютером-посредником, ведущим бухгалтерию.

Пригодится аппарат и пасечникам — объединив весы с передатчиком Bluetooth или GSM-модемом можно контролировать «налет» веса пчел в различные периоды года. Достаточно знать чистую массу улья. Все что выше, как раз и будет воск, пчелы и мед.

https://youtube.com/watch?v=g7ratUiaEt8

https://youtube.com/watch?v=QBiQ0zEzAuk

https://youtube.com/watch?v=KdqXECSI-EU

Схемы подключения датчика давления воздуха

Следующая конструкция построена на сенсоре-анероиде BMP180. Экран, в нее входящий, будет отображать текущее давление атмосферного воздуха и температуру окружающей среды. Для изготовления понадобятся:

Элемент Наименование/характеристика Количество
Микроконтроллер Arduino UNO/Nano 1
Датчик BMP180 1
Экран HD447080LCD-1602 1
Резистор 100 Ом 1
Регулируемый резистор До 10 кОм 1

Ну и конечно провода для связки всего названого в единую систему.

Библиотека, управляющая сенсором берется тут: https://github.com/adafruit/Adafruit-BMP085-Library

Принципиальная схема

Фотография итогового устройства:

Плата-шилд самодельная, для желающих повторить, она вблизи:

Датчик питается от 3.3V, соответственно и подключаются его контакты получения энергии (VCC и GND) к плате Arduino. Для передачи данных используются входы A5 (SCL) и A4(SDA). Дисплей с микроконтроллером соединяется согласно следующей таблицы:

Arduino Экран
D6 E и D4 вместе
D4 D5
D3 D6
D2 D7
GND GND
D7 RS

Скетч

Приведенная программа — всего лишь базис операций. Ее можно модифицировать по собственному разумению, добавляя функции отслеживания давления или температуры. Можно даже использовать конечное устройство, после необходимой модификации кода, в качестве своеобразного барометра, предупреждающего об идущей буре. Показания давления, в названом случае сильно упадут.

#define mPAUSE 2500 #include #include #includeAdafruit_BMP085 SENS; LiquidCrystal DISPLAY(7, 6, 5, 4, 3, 2); void setup() DISPLAY.clear(); >void loop() float p = SENS.readSealevelPressure()/101.325 * 0.76; DISPLAY.setCursor(1, 0); DISPLAY.print(«T.= «); if ( SENS.readTemperature()

Подключение BMP280 к Arduino по I2C/TWI

Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами. При подключении по I2C нужно соединить контакты SDA и SCL.

Схема подключения BMP280 к Arduino

Для подключения понадобятся сам датчик BMP280, плата Ардуино, соединительные провода. Схема подключения показана на рисунке ниже.

Землю с Ардуино нужно соединить с землей на датчике, напряжение 3.3 В — на 3.3 В, SDA — к пину А4, SCL — к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C.

Существуют несколько модулей с этим датчиком. Первый вариант — это модуль для работы в 3.3 В логике, данные модули будут подешевле; второй вариант — для работы в 5.0 В логике, на нём присутствуют: линейный стабилизатор напряжения на 3.3 В и преобразователи уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA. Первый подойдёт для ардуин работающих от 3.3 В и Raspberry Pi / Orange Pi / Banana Pi и т.д., а второй — для обычных ардуин на 5.0 В.

Подключение BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA к Arduino.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V Vin Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Подключение BMP280 без встроенного стабилизатора напряжения на 3.3 В к Arduino. В данном случае нужно использовать внешний преобразователь уровней на линиях SCK/SCL и SDI(MOSI)/SDA.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
3.3V 3.3V VCC/3.3V Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Примеры скетча

После запуска вы можете инициализировать датчик с помощью:

if (!bmp.begin()) {
Serial.println(«Could not find a valid BMP280 sensor, check wiring!»);
while (1);
}

1
2
3
4

if(!bmp.begin()){

Serial.println(«Could not find a valid BMP280 sensor, check wiring!»);

while(1);

}

вернет True, если датчик был найден, и False, если нет. В случае с False, проверьте соединение датчика с платой Arduino!

Считать температуру и давление легко, просто вызовите функции:

bmp.readTemperature(); // Температура в градусах Цельсия.
bmp.readPressure(); // Атмосферное давление в гПа

1
2

bmp.readTemperature();// Температура в градусах Цельсия.

bmp.readPressure();// Атмосферное давление в гПа

Копируйте и скомпилируйте нижеприведённый скетч в Arduino IDE.

#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp280;

void setup() {
Serial.begin(9600);
Serial.println(F(«BMP280»));

while (!bmp280.begin(BMP280_ADDRESS — 1)) {
Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));
delay(2000);
}
}

void loop() {
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure();
float altitude = bmp280.readAltitude(1013.25);

Serial.print(F(«Temperature = «));
Serial.print(temperature);
Serial.println(» *C»);

Serial.print(F(«Pressure = «));
Serial.print(pressure);
Serial.println(» Pa»);

Serial.print(F(«Altitude = «));
Serial.print(altitude);
Serial.println(» m»);

Serial.println();
delay(2000);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

#include <Adafruit_BMP280.h>
 

Adafruit_BMP280bmp280;

voidsetup(){

Serial.begin(9600);

Serial.println(F(«BMP280»));

while(!bmp280.begin(BMP280_ADDRESS-1)){

Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));

delay(2000);

}

}
 

voidloop(){

floattemperature=bmp280.readTemperature();

floatpressure=bmp280.readPressure();

floataltitude=bmp280.readAltitude(1013.25);

Serial.print(F(«Temperature = «));

Serial.print(temperature);

Serial.println(» *C»);

Serial.print(F(«Pressure = «));

Serial.print(pressure);

Serial.println(» Pa»);

Serial.print(F(«Altitude = «));

Serial.print(altitude);

Serial.println(» m»);

Serial.println();

delay(2000);

}

Результат

Температура рассчитывается в градусах Цельсия, вы можете преобразовать ее в градусы Фаренгейта, используя классическое уравнение F = C * 9/5 + 32.

Давление возвращается в единицах СИ Паскалей. 100 Паскалей = 1 гПа = 1 миллибар. Часто барометрическое давление сообщается в миллибарах или миллиметрах ртутного столба. Для дальнейшего использования 1 паскаль = 0,00750062 миллиметров ртутного столба или 1 миллиметр ртутного столба = 133,322 Паскаля. Таким образом, если вы возьмете значение паскаля, скажем, 100734 и разделите на 133,322, вы получите 755,57 миллиметров ртутного столба.

Также возможно превратить BMP280 в альтиметр. Если вы знаете давление на уровне моря, библиотека может рассчитать текущее атмосферное давление в высоту.

Базовый пример определения уровня воды

После того, как схема будет собрана, загрузите в Arduino следующий скетч.

Как только скетч будет загружен, откройте окно монитора последовательного порта, чтобы увидеть вывод Arduino. Вы должны увидеть значение 0, когда датчик ничего не касается. Чтобы увидеть, как определяется вода, вы можете взять стакан воды и медленно погрузить в него датчик.

Рисунок 5 – Вывод показаний датчика уровня воды

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

Объяснение

Скетч начинается с объявления выводов Arduino, к которым подключены выводы датчика + (VCC) и S (сигнал).

Далее мы определяем переменную , в которой хранится текущее значение уровня воды.

Теперь в функции мы сначала настраиваем вывод для питания датчика как выход, а затем устанавливаем на нем низкий логический уровень, чтобы изначально питание на датчик не подавалось. А также настраиваем последовательную связь с компьютером.

В функции мы периодически вызываем функцию с интервалом в одну секунду и выводим возвращаемое значение.

Функция используется для получения текущего уровня воды. Она включает датчик, ждет 10 миллисекунд, считывает аналоговое значение с датчика, выключает датчик и затем возвращает аналоговое значение.