Датчик уровня воды. пример подключения геркона к arduino

Как подключить датчик давления к Ардуино

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

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

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

Собственно, чувствительные элементы платформы и будут рассмотрены в теле статьи, а конкретно один из них — датчик давления Ардуино.

Еще один способ изготовления датчика протечки воды

  1. Изготовление контактных рельс. Физическая основа датчика утечек воды — тонкий пластик прямоугольной формы. Главный элемент такого типа датчика — две контактные рельсы, изготовленные из зачищенной от изоляции медной проволоки. В пластике с двух узких сторон просверлим отверстия (по два на расстоянии 1-2 мм с каждой стороны). Из зачищенной проволоки делаются две скобы длиной, соответствующей расстоянию между парами противоположных отверстий. Полученные рельсы из проволоки нужно закрепить изолентой или с помощью силиконового термопистолета.
  2. Пайка. Понадобится три куска провода с изоляцией разного цвета (красный, черный и желтый) и резистор 10 КОм. На рельсу, к которой будет подаваться питание, припаиваем красный провод. На вторую припаиваем желтый провод, затем к той же точке припаиваем конец сопротивления, а ко второму концу резистора припаиваем черный провод «земля».
  3. Подключение датчика. Подключение датчика делается по обычной схеме. Питающему проводу подается напряжение +5V. Провод «земля» подключается к земляной шине. Провод передачи данных подключается на цифровой вход/выход контроллера.

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

Обработка данных зависит от желания хозяина: срабатыванием можно перекрывать запорные краны, отправлять СМС и т.д.

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

Когда может пригодиться?

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

Часто узнать количество воды в резервуаре может быть утомительной задачей. Обычно вы поднимаетесь по лестнице и проверяете уровень вручную или вы услышите что вода переполняется сверху.

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

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

Какие существуют светодиодные ленты для авто

Исходный код

irrigator.ino
// Подключаем библиотеку для работы с дисплеем
#include "QuadDisplay2.h"
// даём разумное для пина, к которому подключена помпа
#define POMP_PIN        4
// даём разумное для пина, к которому подключён датчик влажности почвы
#define HUMIDITY_PIN    A0
// минимальный порог влажности почвы
#define HUMIDITY_MIN    200
// максимальный порог влажности почвы
#define HUMIDITY_MAX    700
// интервал между проверкой на полив растения
#define INTERVAL        60000 * 3   
// переменная для хранения показания влажности почвы
unsigned int humidity = ;
 
// статическая переменная для хранения времени
unsigned long waitTime = ;
 
// создаём объект класса QuadDisplay и передаём номер пина CS
QuadDisplay qd(9);
 
void setup(void)
{
  // начало работы с дисплеем
  qd.begin();
  // пин помпы в режим выхода
  pinMode(POMP_PIN, OUTPUT);
  // выводим 0 на дисплей
  qd.displayInt();
}
 
void loop(void)
{
  // считываем текущее показания датчика влажности почвы
  int humidityNow = analogRead(HUMIDITY_PIN);
  // если показания текущей влажности почвы
  // не равняется предыдущему запросу 
  if(humidityNow != humidity) {
    // сохраняем текущие показания влажности
    humidity= humidityNow;
    // и выводим показания влажности на дисплей
    qd.displayInt(humidityNow);
  }
  // если прошёл заданный интервал времени
  // и значения датчика влажности меньше допустимой границы
  if ((waitTime ==  || millis() - waitTime > INTERVAL) && humidity < HUMIDITY_MIN ) {
    // включаем помпу
    digitalWrite(POMP_PIN, HIGH);
    // ждём 2 секунды
    delay(2000);
    // выключаем помпу
    digitalWrite(POMP_PIN, LOW);
    // приравниваем переменной waitTime
    // значение текущего времени плюс 3 минуты 
    waitTime = millis();
  }
}

Как работает датчик влажности почвы?

Работа датчика влажности почвы довольно проста.

Вилка в форме зонда с двумя открытыми проводниками действует как переменный резистор (потенциометр), сопротивление которого изменяется в зависимости от содержания воды в почве.

Рисунок 1 – Работа датчика влажности почвы

Это сопротивление обратно пропорционально влажности почвы:

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

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

Пример для Raspberry Pi

В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры Raspberry Pi, например Raspberry Pi 4.

Схема устройства

К сожалению в компьютере Raspberry Pi нет встроенного аналого-цифрового преобразователя. Используйте плату расширения Troyka Cap, которое добавит малине аналоговые пины.

Подключите датчик влажности почвы к Raspberry Pi через плату расширения Troyka Cap к пину. Для коммуникации используйте трёхпроводной шлейф «мама-мама», который идёт в комплекте с датчиком.

Исходный код

Запустите скрипт на малине приведённым ниже.

sensor-soil-moisture-capacitive-raspberry-pi-read-data.py
# библиотека для работы со временем и задержками
import time
# библиотека для работы с расширителем портов GPIO Expander на плате Troyka Cap
import gpioexp
# создаём объект для работы с расширителем портов
exp = gpioexp.gpioexp()
 
# пин к которому подключен датчик влажности почвы
# любой GPIO пин платы расширения Troyka Cap
pinSensor = 3
 
while True:
    # считываем состояние датчика влажности почвы
    valueSensor = exp.analogRead(pinSensor) * 100
    # выводим показания датчика
    print('Value sensor: ', round(valueSensor), ' %')
    # ждём 100 мс
    time.sleep(0.1)

После загрузки скрипта, в консоль малины будут выводиться текущие показания сенсора в диапазоне от 0 до 100%.

  • 0–35%: сухая почва;
  • 35–70%: влажная почва;
  • 70–100%: датчик в воде.

Пример для Espruino

В качестве мозга для считывания показаний с датчика рассмотрим платформы из серии Espruino, например Iskra JS.

Схема устройства

Подключите датчик влажности почвы к аналоговому пину платформы Iskra JS. Для коммуникации понадобятся
соединительные провода «мама-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая одевается сверху на Iskra JS методом бутерброда. Для коммуникации используйте трёхпроводной шлейф «мама-мама», который идёт в комплекте с датчиком.

Исходный код

Прошейте платформу Iskra JS скриптом приведённым ниже.

sensor-soil-moisture-capacitive-espruino-read-data.js
// выводим показания датчика на пине A0 каждые 100 мс
setInterval(function() {
  var valueSensor = analogRead(A0) * 100;
  print('Value sensor: ', Math.round(valueSensor), '%');
}, 100);

После загрузки скрипта, в консоль будут выводиться текущие показания сенсора в диапазоне от 0 до 100%.

  • 0–35%: сухая почва;
  • 35–70%: влажная почва;
  • 70–100%: датчик в воде.

Проект определения уровня воды

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

Схема соединений

Мы будем использовать схему из предыдущего примера. Но на этот раз нам нужно просто добавить несколько светодиодов.

Подключите три светодиода к цифровым выводам 2, 3 и 4 через токоограничивающие резисторы 220 Ом.

Соберите схему, как показано ниже:

Рисунок 7 – Индикация уровня воды с помощью светодиодов

Код Arduino

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

В этом скетче объявлены две переменные, а именно lowerThreshold и upperThreshold. Эти переменные представляют наши пороговые уровни.

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

/* Измените эти значения, основываясь на своих значениях калибровки */ int lowerThreshold = 420; int upperThreshold = 520; // Выводы, подключенные к датчику #define sensorPower 7 #define sensorPin A0 // Переменная для хранения значения уровня воды int val = 0; // Объявляем выводы, к которым подключены светодиоды int redLED = 2; int yellowLED = 3; int greenLED = 4; void setup() { Serial.begin(9600); pinMode(sensorPower, OUTPUT); digitalWrite(sensorPower, LOW); // Настроить выводы светодиодов на выход pinMode(redLED, OUTPUT); pinMode(yellowLED, OUTPUT); pinMode(greenLED, OUTPUT); // Изначально выключить все светодиоды digitalWrite(redLED, LOW); digitalWrite(yellowLED, LOW); digitalWrite(greenLED, LOW); } void loop() { int level = readSensor(); if (level == 0) { Serial.println(«Water Level: Empty»); digitalWrite(redLED, LOW); digitalWrite(yellowLED, LOW); digitalWrite(greenLED, LOW); } else if (level > 0 && level <= lowerThreshold) { Serial.println(«Water Level: Low»); digitalWrite(redLED, HIGH); digitalWrite(yellowLED, LOW); digitalWrite(greenLED, LOW); } else if (level > lowerThreshold && level <= upperThreshold) { Serial.println(«Water Level: Medium»); digitalWrite(redLED, LOW); digitalWrite(yellowLED, HIGH); digitalWrite(greenLED, LOW); } else if (level > upperThreshold) { Serial.println(«Water Level: High»); digitalWrite(redLED, LOW); digitalWrite(yellowLED, LOW); digitalWrite(greenLED, HIGH); } delay(1000); } // Данная функция используется для получения показаний int readSensor() { digitalWrite(sensorPower, HIGH); delay(10); val = analogRead(sensorPin); digitalWrite(sensorPower, LOW); return val; }

Оригинал статьи:

How Water Level Sensor Works and Interface it with Arduino

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

#define PIN_ANALOG_RAIN_SENSOR A1  // Аналоговый вход для сигнала датчика протечки и дождя
#define PIN_DIGITAL_RAIN_SENSOR 5  // Цифровой вход для сигнала датчика протечки и дождя
 
void setup(){
   Serial.begin(9600);
}
void loop(){
   int sensorValue = analogRead(PIN_ANALOG_RAIN_SENSOR); // Считываем данные с аналогового порта
   Serial.print("Analog value: "); 
   Serial.println(sensorValue); // Выводим аналоговое значение в монитр порта

   sensorValue = digitalRead(PIN_DIGITAL_RAIN_SENSOR); // Считываем данные с цифрового порта
   Serial.print("Digital value: "); 
   Serial.println(sensorValue); // Выводим цифровое значение в монитр порта

   delay(1000); // Задержка между измерениями
}

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

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

В коде программы автоматического индикатора уровня воды нам первым делом необходимо инициализировать все контакты Arduino, которые мы будем использовать для подключения внешних устройств: реле, ЖК дисплей, буззер (звонок) и т.д.

Затем мы инициализируем все устройства, задействованные в проекте.

После этого инициализируем модуль ультразвукового датчика и считаем время между передачей и приемом ультразвуковой волны с помощью функции pulseIn(pin). Затем произведем вычисления и покажем результат на экране ЖК дисплея.

Потом запишем условия, позволяющие проверить полна или пуста цистерна с водой и в зависимости от результатов проверки этих условий произведем соответствующие действия.

Далее представлен полный текст программы.

Arduino

#include <LiquidCrystal.h>

#define trigger 10
#define echo 11
#define motor 8
#define buzzer 12

LiquidCrystal lcd(7,6,5,4,3,2);

float time=0,distance=0;
int temp=0;
void setup()
{
lcd.begin(16,2);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(motor, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.print(» Water Level «);
lcd.setCursor(0,1);
lcd.print(» Indicator «);
delay(2000);
}

void loop()
{
lcd.clear();
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH);
distance=time*340/20000;
lcd.clear();
lcd.print(«Water Space In «);
lcd.setCursor(0,1);
lcd.print(«Tank is: «);
lcd.print(distance);
lcd.print(«Cm»);
delay(2000);
if(distance<12 && temp==0)
{
digitalWrite(motor, LOW);
digitalWrite(buzzer, HIGH);
lcd.clear();
lcd.print(«Water Tank Full «);
lcd.setCursor(0,1);
lcd.print(«Motor Turned OFF»);
delay(2000);
digitalWrite(buzzer, LOW);
delay(3000);
temp=1;
}

else if(distance<12 && temp==1)
{
digitalWrite(motor, LOW);
lcd.clear();
lcd.print(«Water Tank Full «);
lcd.setCursor(0,1);
lcd.print(«Motor Turned OFF»);
delay(5000);
}

else if(distance>30)
{
digitalWrite(motor, HIGH);
lcd.clear();
lcd.print(«LOW Water Level»);
lcd.setCursor(0,1);
lcd.print(«Motor Turned ON»);
delay(5000);
temp=0;
}
}

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

#include <LiquidCrystal.h>

#define trigger 10
#define echo 11
#define motor 8
#define buzzer 12

LiquidCrystallcd(7,6,5,4,3,2);

floattime=,distance=;

inttemp=;

voidsetup()

{

lcd.begin(16,2);

pinMode(trigger,OUTPUT);

pinMode(echo,INPUT);

pinMode(motor,OUTPUT);

pinMode(buzzer,OUTPUT);

lcd.print(»  Water Level «);

lcd.setCursor(,1);

lcd.print(»   Indicator  «);

delay(2000);

}

voidloop()

{

lcd.clear();

digitalWrite(trigger,LOW);

delayMicroseconds(2);

digitalWrite(trigger,HIGH);

delayMicroseconds(10);

digitalWrite(trigger,LOW);

delayMicroseconds(2);

time=pulseIn(echo,HIGH);

distance=time*34020000;

lcd.clear();

lcd.print(«Water Space In  «);

lcd.setCursor(,1);

lcd.print(«Tank is: «);

lcd.print(distance);

lcd.print(«Cm»);

delay(2000);

if(distance<12&&temp==)

{

digitalWrite(motor,LOW);

digitalWrite(buzzer,HIGH);

lcd.clear();

lcd.print(«Water Tank Full «);

lcd.setCursor(,1);

lcd.print(«Motor Turned OFF»);

delay(2000);

digitalWrite(buzzer,LOW);

delay(3000);

temp=1;

}

elseif(distance<12&&temp==1)

{

digitalWrite(motor,LOW);

lcd.clear();

lcd.print(«Water Tank Full «);

lcd.setCursor(,1);

lcd.print(«Motor Turned OFF»);

delay(5000);

}

elseif(distance>30)

{

digitalWrite(motor,HIGH);

lcd.clear();

lcd.print(«LOW Water Level»);

lcd.setCursor(,1);

lcd.print(«Motor Turned ON»);

delay(5000);

temp=;

}

}

Калибровка датчика дождя

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

Модуль имеет встроенный потенциометр для калибровки цифрового выхода (DO).

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

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

Теперь ваш датчик откалиброван и готов к использованию.

Скетч для Ардуино

Скопируйте прилагаемый ниже скетч в Arduino IDE и найдите строку «int d = 18;» и измените «18» на глубину вашего резервуара в сантиметрах.


// Обратите внимание, что нумерация контактов arduino
// отличается от выводов микроконтроллера

int d = 18; // Введите глубину вашего резервуара в сантиметрах

int trig = 11; // Прикрепите триггер ультразвукового датчика к пину 11
int echo = 10; // Прикрепите эхо ультразвукового датчика к контакту 10
int pin1 = 2; // Высший уровень
int pin2 = 3;
int pin3 = 4;
int pin4 = 5;
int pin5 = 6;
int pin6 = 7; // Самый низкий уровень

void setup() {
pinMode (pin1, OUTPUT); // Установка контактов для управления вводом / выводом
pinMode (pin2, OUTPUT);
pinMode (pin3, OUTPUT);
pinMode (pin4, OUTPUT);
pinMode (pin5, OUTPUT);
pinMode (pin6, OUTPUT);
}

void loop()
{ digitalWrite(pin1, LOW); // Сброс светодиодов
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin5, LOW);

// Установите переменные для продолжительности пинга,
// и расстояние в дюймах и сантиметрах:

long duration, in, cm; // ‘in’ — дюймы и ‘cm’ — сантиметры

// PING запускается HIGH-импульсом в 2 или более микросекундах.
// Дайте короткий LOW импульс заранее, чтобы обеспечить чистый HIGH-импульс:

pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);

// Этот же вывод используется для считывания сигнала от PING:
// HIGH-импульс, продолжительность которого — это время (в микросекундах)
// от отправки пинга до приема его эха от объекта

pinMode(echo, INPUT);
duration = pulseIn(echo, HIGH);

// Преобразовать время в расстояние

in = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

delay(100);
if (in

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

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// Скорость звука составляет 340 м/с или 29 микросекунд на сантиметр.
// Пинг выходит и обратно, поэтому, чтобы найти расстояние от объекта,
// мы берем половину пройденного расстояния.

return microseconds / 29 / 2;
}

Загрузите код для индикатора уровня воды Arduino непосредственно на плату Arduino или в микроконтроллер ATMega328P.

Модуль ультразвукового датчика

Его внешний вид представлен на следующем рисунке.

Ультразвуковой датчик HC-SR04 используется для измерения расстояний в диапазоне 2-400 см с точностью 3 мм. Модуль датчика состоит из ультразвукового передатчика, приемника и схемы управления. Принцип действия датчика показан на следующих диаграммах. Более подробно о работе данного датчика можно прочитать в статье про измерение расстояния с помощью Arduino.

Для того чтобы датчик начал работу на него необходимо подать импульс длительностью 10 мкс. После этого датчик автоматически излучает 8 импульсов с частотой 40 кГц и затем проверяет вернулись ли они обратно (эхо). Если отраженные импульсы вернулись, то они принимаются приемником. После этого расстояние до препятствия можно рассчитать по формуле:

Distance= (time x speed)/2.

Произведение времени и скорости в этой формуле делится на 2 потому что общее время распространения звуковой волны в нашем случае состоит из времени когда она распространялась до препятствия и возвращалась обратно.

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

Ёмкостный датчик выполнен в виде штыря, которым погружается в грунт на расстояние до 80 мм. На штыре в виде дорожек расположены два электрода,
но в отличии от резистивной модели, электроды ёмкостного сенсора защищены токоизолирующей маской и неподвержены коррозии.

Внутри ёмкостного датчика находится RC-генератор на таймере 555, частота которого зависит от ёмкости между двумя электродами, которые выполняю роль конденсатора.
Изменение влажности грунта сказывается на его диэлектрических свойствах и меняет ёмкость, что приводит к повышению или понижению выходного сигнала датчика.
Итоговое напряжение пропорционально степени влажности почвы.

Что измеряет сенсор

Давление — некая физическая величина численно равная перпендикулярно направленной силе действующей на единицу площади поверхности. Сам датчик можно представить своеобразными очень чувствительными весами. Последнее замечание сделано по причине того, что и вода, и газы тоже имеют свою массу, которая влияет на поверхность под ними. На практике, за счет указанного фактора, можно определить глубину погружения (чем ниже, тем больше вес слоя воды) или высоту подъема в атмосферу (чем выше — тем меньше плотность, а значит и слабее воздействие). Кроме того, в отношении давления воздуха не стоит забывать о погодных колебаниях. Резкое падение названой характеристики атмосферы — к дождю или буре.

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

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

Как работает датчик дождя?

Принцип действия датчика дождя довольно прост.

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

Рисунок 1 – Принцип действия датчика дождя

Это сопротивление обратно пропорционально количеству воды:

  • Чем больше воды на поверхности, тем лучше проводимость и ниже сопротивление.
  • Меньшее количество воды на поверхности означает плохую проводимость и приводит к более высокому сопротивлению.

Датчик выдает выходное напряжение в соответствии с сопротивлением сенсорной панели; и, измеряя это напряжение, мы можем определить, идет ли дождь или нет.

Шаг 3. Подключение ЖК-дисплея

16×2 ЖК-дисплей Arduino сначала припаян к I2C. Я использую драйвер I2C просто для устранения беспорядочного и большого количества перемычек, что делает возможным подключение большего количества датчиков и устройств вывода. I2c хватает 4 выводов, чтобы получить функцию ЖК-дисплея, когда традиционный ЖК-дисплей имеет 12 контактов. Краткое описание контактов I2C ниже.

  • Линия данных (SDA): эта линия или линия передачи I2C используется для передачи данных от передатчика к приемнику. Символ, который должен отображаться на ЖК-дисплее, передается по этой линии.
  • Линия синхронизации (SCL): это контрольная линия I2C, которая определяет скорость передачи символов, как импульс синхронизации в традиционных триггерах.

I2C подключаются следующим образом:

  • Штырь SDA подключен к аналоговому выводу A5
  • Контакт SCL подключается к аналоговому выводу A4
  • Вывод VCC подключается к положительному макетной платы
  • GND-контакт подключен к отрицательному макетной платы

Мы закончили с оборудованием, давайте теперь перейдем к коду.

Что такое датчик уровня расхода воды?

Мы используем датчик расхода воды для измерения расхода воды. Расход воды — это объем жидкости, который
проходит в единицу времени. Люди часто используют датчик расхода воды для автоматического управления
водонагревателем, самодельных кофемашин, торговых автоматов и т.д. Существует множество датчиков потока с
разными принципами действия, но для производителей, использующих Arduino или Raspberry Pi, наиболее
распространенный датчик потока основан на устройстве Холла. Например, самые классические датчики расхода
воды YF-S402 и YF-S201 полагаются на датчики Холла.

Итак, как работает датчик расхода воды Холла?

Как это собрать?

  1. Установите Troyka Shield на Arduino Uno

  2. Подключите датчик влажности почвы через Troyka Shield к аналоговому пину

  3. Подключите дисплей к управляющей плате через Troyka Shiled:
    1. Пин к пину Toyka Shield.
    2. Пины дисплея к разъёму на Troyka Shiled

  4. Подключите силовой ключ к контакту

  5. Подведите коммутирующее напряжение к силовому ключу в разъём и

  6. Подключите помпу к силовому ключу через клеммник с разъёмами и . В итоге должна получится схема.

  7. Воткните сенсор влажности почвы в землю.
  8. Другой конец шланга вставьте с водой в землю. Если горшок с землёй весит менее 2 кг, рекомендуется отдельно закрепить трубку, чтобы она не перевернула растение.
  9. Опустите помпу в ёмкость с водой.

  10. Подключите питание.

Работа схемы

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

Как показано на приведенной схеме контакты “trigger” и “echo” модуля ультразвукового датчика напрямую подсоединены к контактам 10 и 11 платы Arduino. ЖК дисплей подключен к Arduino в 4-битном режиме. Его управляющие контакты RS, RW и En напрямую подключены к контактам Arduino 7, GND и 6. Контакты данных ЖК дисплея D4-D7 подключены к контактам 5, 4, 3 и 2 Arduino. Буззер (звонок) подключен к контакту 12. Реле на 6 Вольт подключено к контакту 8 Arduino через микросхему ULN2003. Реле используется для включения и выключения водяного электронасоса. Регулятор напряжения 7806 (7805) используется для обеспечения реле и части схемы напряжением питания 5 В.

Модуль ультразвукового датчика устанавливается на верх водяной цистерны. Датчик будет измерять расстояние до поверхности воды и затем на ЖК дисплее будет высвечиваться сообщение “Water Space in Tank is:”. Фактически в этом случае мы будем показывать пустой объем цистерны (не занятый водой) вместо уровня воды. Но благодаря этому мы сможем применять наше устройство в любой водяной цистерне. В нашем случае когда пустой уровень воды достигает дистанции приблизительно 30 см плата Arduino с помощью реле осуществляет включение водяного электронасоса. При этом на ЖК дисплее будут показываться сообщения “LOW Water Level” (низкий уровень воды), “Motor turned ON” (двигатель включен).

Что такое датчик протечки воды Arduino

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

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

На базе этой платформы можно изготовить также систему «умный дом». С помощью сервера Node.js можно управлять своим домом. Если нет возможности иметь под рукой интернет, можно получать данные при помощи SMS и MMS сообщений. Контроль за включением какого-либо прибора дома может быть необязательным, а без информации о протечках воды хозяину дома не обойтись. Для возможности отправки SMS и MMS сообщений платформу Arduino можно дополнить платой Edison производства компании Intel.

Пример работы для Arduino и XOD

В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии Arduino, например, Uno.

  • Как начать работу с Arduino?

  • Как начать работу с XOD?

Схема устройства

  1. Подключите измерительный щуп к датчику солей.
  2. Скоммуницируйте датчик солей с подключённым щупом к аналоговому пину платформы Arduino. Для коммуникации понадобятся соединительные провода «мама-папа».Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда. Для коммуникации используйте трёхпроводной шлейф «мама-мама», который идёт в комплекте с датчиком.С Troyka Slot Shield провода не понадобятся вовсе.

  3. Опустите измерительный щуп в воду.

Код для Arduino IDE

Прошейте платформу Arduino скетчем, приведённым ниже.

troyka-tds-sensor-example-arduino-read-data.ino
// любой GPIO пин с поддержкой АЦП
constexpr auto pinSensor = A0;
 
void setup() {
  // открываем Serial-порт
  Serial.begin(9600);
}
 
void loop() {
  // считываем данные с датчика влажности почвы
  int valueSensor = analogRead(pinSensor);
  // переводим данные с датчика в напряжение
  float voltageSensor = valueSensor * 5  1024.0;
  // конвертируем напряжение в концентрацию
  float tdsSensor = (133.42 * pow(voltageSensor, 3) - 255.86 * pow(voltageSensor, 2) + 857.39 * voltageSensor) * 0.5;
  // выводим данные в Serial-порт
  Serial.print("TDS Value = "); 
  Serial.print(tdsSensor);
  Serial.println(" ppm");
  // ждём 100 мс
  delay(1000);
}

После загрузки скетча, в Serial-порт будут выводиться текущие показания примиссей воды в .

Патч для XOD

  1. Создайте новый патч
  2. Добавьте в патч ноду и установите ей в инспекторе PORT значение .
  3. Добавьте ноду и подключите её к ноде к пину .
  4. Прошейте платформу Arduino с режимом отладки.

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

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий