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

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

По материалам руководства к набору “Умный дом на базе 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. Включение лампочки с помощью реле

#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. Система автоматического полива цветочного горшка

//определения

// пин аналогового выхода датчика уровня воды

#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), чтобы земля успела пропитаться, и система не включила повторный полив. Трубку подачи воды при этом удобно разместить рядом с датчиком влажности почвы, чтобы земля в районе датчика сразу пропитывалась.
Опубликовано

Датчик уровня жидкости

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

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

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

S6-1-уровень воды

Рис. S6.1. Датчик уровня воды (глубины)

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

Наименование Значение
Зона обнаружения, мм 16 ÷ 40
Напряжение питания, В 3,3 ÷ 5
Ток потребления, мА 20
Размеры, мм 62×20×8
Рабочая температура, °С 10 ÷ 30

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

S6-2-уровень воды

Рис. S6.2. Схема подключения датчика уровня жидкости

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

Листинг S6.1. Измерения уровня жидкости

#define aPin A0 // пин для подключения аналогового выхода датчика

int avalue=0; //переменная

int levels[3]={600,500,400}; // значение уровней

void setup(){

pinMode(aPin, INPUT); // настройка аналогового пина на вход

Serial.begin(9600); // инициализация последовательного порта

}

void loop(){

// получение значения с аналогового вывода датчика

avalue=analogRead(aPin);

// вывод значения в монитор последовательного порта Arduino

Serial.print("avalue=");

Serial.print(avalue);

if (avalue>=levels[0]) Serial.println("->MAX");

if ((avalue>levels[2])&&(avalue<levels[0])) Serial.println("->NORM");

if (avalue<=levels[2]) Serial.println("->MIN");

// пауза перед следующим получением значения 1000 мс

delay(1000);

}

Результаты измерений

Значение аналоговых сигналов на аналоговом входе Arduino вы можете определить экспериментальным путем. Они могут оказаться такими, как показано на рис. S6.3.

2-06-3-уровень воды

Рис. S6.3. Экспериментальные значения аналоговых сигналов для разных уровней погружения