Опубликовано

Модуль реле в системе автополива

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

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

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

Внешний вид, назначение контактов

Для удобства управления и подключения к Arduino реле устанавливаются на платы, где, кроме самого реле, расположены контакты для подключения нагрузки и другие элементы (рис. M3.1). На одной плате могут размещаться несколько реле.

3-03-1-relay

Рис. M3.1. Назначение контактов одноканальных модулей реле

Основные характеристики

Наименование Значение
Рабочее напряжение, В 5
Потребляемый ток при переключении контактов, мА 5
Потребляемый ток в состоянии ожидания, мА 10 ÷ 13
Рабочая частота, МГц 13,56
Размеры (L×W×H), мм 50×26×18,5
Максимальная нагрузка AC 250 В/10 A
DC 30 В/10 A

 


Предупреждение

Модуль реле, входящий в набор, рассчитан на коммутирование небольших нагрузок. Вы можете подключать к нему бытовые приборы с рабочим напряжением 220 В, но нагрузка не должна превышать 3-х ампер (мощность до 660 Вт).
Имейте в виду, что мощность утюга составляет 1000÷1500 Вт, и поэтому такое реле не годится для создания устройства для включения/выключения утюга. Cуществуют специальные модули реле, рассчитанные на большие мощности.


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

3-03-2-relay

Рис. M3.2. Схема подключения реле

Программный код

Тестовая программа для включения и выключения лампочки через каждые 2 секунды приведена в листинге M3.1.

Листинг M3.1. Включение лампочки с помощью реле

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define relayPin 2 //номер пина для управления реле
 
void setup() {
 
pinMode(relayPin, OUTPUT); //настройка пина реле на выход
 
}
 
void loop() {
 
digitalWrite(relayPin, HIGH);// замыкаем реле
 
delay(3000); // ждем 3 секунды
 
digitalWrite(relayPin, LOW); // размыкаем реле
 
delay(3000); // ждем 3 секунды
 
}

«Умный горшок»

С помощь модуля реле можно создать систему автоматического полива растений в цветочном горшке. Для этого, кроме модуля реле, мы задействуем микронасос, помещенный в банку с водой, и датчик влажности почвы (рис. M3.3). Как только влажность почвы опускается ниже заданных значений, Arduino включает микронасос и выключает его, когда почва становится снова достаточно влажной.

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

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

3-03-3-relay

Рис. M3.3. Система автоматического полива цветочного горшка

Программный код

Листинг M3.2. Система автоматического полива цветочного горшка

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//определения
 
// пин аналогового выхода датчика уровня воды
 
#define pinWaterLevel A0
 
//пин аналогового выхода датчик влажности почвы
 
#define pinSoilMoisture A1
 
//пин реле для управление насосом
 
#define pinRelayPump 12
 
 
 
//константы
 
const int delayPumpBefore=2; //время полива (в секундах)
 
const int delayPumpAfter=30; //время после полива, чтобы
 
//земля пропиталась (в секундах)
 
const int minMoisture=600; //минимальный порог влажности почвы
 
 
 
// переменные
 
int aLevel = 0; // значение датчика уровня воды
 
int aMoisture = 0; // состояние датчика влажности почвы
 
int levels[3]={600,500,400}; //массив значений уровней воды
 
 
 
//установки
 
void setup() {
 
//объявляем пин реле для включения насоса как выход:
 
pinMode(pinRelayPump, OUTPUT);
 
//объявляем пины датчиков глубины и влажности почвы как входы:
 
pinMode(pinWaterLevel, INPUT);
 
pinMode(pinSoilMoisture, INPUT);
 
Serial.begin(9600);
 
}
 
 
 
void loop() {
 
// считываем значение датчика уровня воды
 
aLevel=analogRead(pinWaterLevel);
 
// считываем состояния датчика влажности почвы
 
aMoisture = analogRead (pinSoilMoisture);
 
Serial.println(aMoisture); //выводим для тестирования
 
delay(100);
 
// если почва сухая, и вода в банке есть, то включаем полив
 
if ((aMoisture >minMoisture)&&(aLevel>levels[2])) {
 
digitalWrite(pinRelayPump, HIGH); //включаем насос
 
delay(delayPumpBefore*1000); //задержка на полив
 
digitalWrite(pinRelayPump, LOW); //выключаем насос
 
delay(delayPumpAfter*1000); //задержка на слив воды из
 
//шланга после выключения насоса
 
}
 
else {
 
digitalWrite(pinRelayPump, LOW);
 
}
 
}

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

  • во-первых, следует правильно установить время полива (delayPumpBefore), которое определяется паузой между включением и выключением насоса. Чем больше горшок, тем больше должна быть пауза и, как следствие, время полива;
  • во-вторых, надо установить правильное время после полива (delayPumpAfter), чтобы земля успела пропитаться, и система не включила повторный полив. Трубку подачи воды при этом удобно разместить рядом с датчиком влажности почвы, чтобы земля в районе датчика сразу пропитывалась.
Опубликовано

Датчик влажности почвы YL-38

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

Модуль датчика состоит из двух частей: контактного щупа и датчика YL-38 (рис. S5.1), в комплекте также идут провода для подключения. Между двумя электродами щупа создается небольшое напряжение. Если почва сухая, то сопротивление большое, а ток небольшой. Если земля увлажняется (например, поливом), то сопротивление уменьшается, а ток немного увеличивается (рис. S5.2).

Внешний вид, назначение контактов

2-05-1-влажность почвы

Рис. S5.1. Датчик влажности почвы YL-38

5-02-влажность почвы

Рис. S5.2. Принцип работы датчика влажности почвы

В качестве датчика влажности почвы можно использовать два оцинкованных гвоздя и проволоку, как показано на рис. S5.3. Когда почва увлажнится сопротивление между гвоздями уменьшится.

2-05-4-влажность почвы

Рис. S5.3. Использование гвоздей в качестве датчика влажности почвы

Основные характеристики

Наименование Значение
Рабочее напряжение, В 3 ÷ 5
Ток потребления, мА 15
Напряжение цифрового выхода, В 3 ÷ 5
Напряжение аналогового выхода, В 0 ÷ 5

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

2-05-2-влажность почвы

Рис. S5.4. Подключение датчика измерения влажности почвы

Программный код

Листинг S5.1. Подключение датчика влажности почвы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define sensorPin A0 //номер пина влажности почвы
 
int sensorValue = 0; //переменная значения влажности
 
void setup() {
 
Serial.begin(9600);
 
}
 
void loop() {
 
sensorValue = analogRead(sensorPin);
 
Serial.println(sensorValue);
 
delay(100);
 
}

В процессе эксплуатации контактный щуп окисляется, и это происходит достаточно быстро. Чтобы окисление проходило медленнее, можно подключить питание датчика на цифровой вход Arduino и подавать напряжение только на время измерения (см. https://mxjournal.ru/blog/1319). В нашем примере контакт питания от модуля влажности (VCC) следует соединить на плате Arduino Uno не с пином 5V, а с цифровым пином — например, D8 (на рис. S5.4 показано пунктиром). В этом случае код может быть переписан следующим образом (листинг S5.2) — мы вводим переменную timing, в которой будет храниться количество миллисекунд. По умолчанию значение переменной равно 0. В основной части программы проверяем условие: если количество миллисекунд с запуска микроконтроллера минус число, записанное в переменную timing, больше, чем записано в переменную interval (в минутах), то выполняется функция get_sensor().

Листинг S5.2. Измерение влажности почвы с интервалом

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
#define sensorPin A0 //номер аналогового пина влажности почвы
 
#define powerPin 8 //номер пина питания датчика влажности почвы
 
int sensorValue = 0; //переменная значения влажности
 
unsigned long timing = 0; //переменная для хранения точки отсчета
 
int interval=60; //интервал измерений в минутах
 
void setup() {
 
Serial.begin(9600);
 
pinMode (powerPin, OUTPUT); // питание датчика влажности
 
digitalWrite (powerPin, LOW);
 
digitalWrite (13, LOW);
 
}
 
void loop() {
 
if (abs(millis() - timing)/1000 > interval*60) { //один раз в час
 
get_sensor(); // снимаем показания датчика влажности почвы
 
timing = millis();
 
}
 
}
 
void get_sensor() {
 
digitalWrite (powerPin, HIGH); //включаем датчик влажности
 
digitalWrite (13, HIGH); //включаем датчик влажности
 
delay (3000);
 
sensorValue = analogRead(A0); //получение значения влажности с
 
//аналогового вывода датчика
 
Serial.println(sensorValue); //конролируем влажность на
 
//Мониторе порта
 
delay(100);
 
digitalWrite (powerPin, LOW); //выключаем датчик влажности
 
}