Arduino контролирует в подвале температуру, влажность и затопление и выдает данные на веб-страницу

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

На одном из строительных объектов делали строение с бассейном, сауной, тренажёрным залом и комнатой отдыха. Все это было в приличных размерах как для одного хозяина. Чисто технически понадобилось 2 подвала: 1-й для обслуживания насосов бассейна — маленький, 2-й для обслуживания систем обогрева и накопления тепла

Закуплены были 2 напольных евро-люка разных размеров для двух подвалов. Люки зарывались 4-мя винтами и имели очень плотные резиновые уплотнения. Чтобы открыть подвал, необходимо было 4 человека (и немного здоровья). При работе всей техники в подвале поднималась температура и влажность, при этом контролировать что там происходит практически неудобно.

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

За основу взял Arduino Pro Mini плюс Ethernet ENC28J60. Для замера влажности и температуры датчик DHT11 и FC-28 (датчик влажности почвы — в роли датчика затопления).

imageТех задание:

1) Управление и информирование через Web интерфейс;2) Включение и отключение вентиляции по заданному уровню влажности;3) Включение и отключение клапана водопровода (возможно, ревун, откачивающий насос) при затоплении.

В выборе Arduino Pro Mini тоже надо подумать, так как существуют разные исполнения:

image

Лучше брать ту, в которой стабилизатор по мощнее, так как та, что по слабее, при активных реле и сетевом контроллера закипит стабилизатор, что приводит к зависанию системы (я упустил был этот нюанс –, но приобрел более ценное — опыт).Сетевые контроллеры также надо выбирать внимательно, так как есть те которые от 5В (стабилизатор на обратной стороне модуля) и на 3,3В. Нужен будет дополнительный стабилизатор на 3,3В.

Блок питания взял от обычного свитча (или роутера) TP-Link 9В 500 мА (примерно), они часто встречаются за копейки от паленых свитчей или роутеров.

Принцип работы простой: есть 2 датчика, которые сливают информацию на контроллер. В зависимости от ситуации контроллер включает и выключает реле (клапана водопровода, возможно ревун, откачивающий насос, вентилятор). Управление и мониторинг через WEB интерфейс который реализован программой на базе модуля ENC28J60.

image

image

1) Сработка датчика затопления = включение реле (клапана водопровода (ревун, откачивающий насос); + информирование на web странице крупным шрифтом;2) Повышение влажности выше установленного уровня = включение реле вентилятора;3) Вся информация о температуре влажности и затоплению выводится на web страницу;4) При понижении температуры ниже 5 градусов оповещение на web сайте о угрозе.

Наглядно можно увидеть на видео:

[embedded content]

На практике все очень удобно. Всегда можно посмотреть с Телевизора (Smart), телефона или планшета — что творится в закрытых помещениях, не открывая их.

imageimageimage

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

Надеюсь, эта статья кому-то поможет, а кого то вдохновит на создание своего проекта.

Прогамма для Arduino #include «etherShield.h» #include «ETHER_28J60.h» #include #include «DHT.h» #define DHTPIN 2 // к какому пину будет подключен вывод Data

//выбор используемого датчика #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 4 (on the right) of the sensor to GROUND // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

//инициализация датчика DHT dht (DHTPIN, DHTTYPE); int VlagInPin = 3; int RelPin = 4; int PotPin = 5; byte vlaga = 75; int temp = 55; int vent =85; int pot; // переменная датчика затопления byte vf; // переменная для значения влаги во флеше

static uint8_t mac[6] = {0×54,0×55,0×58,0×10,0×00,0×24}; static uint8_t ip[4] = {192,168,88,24}; static uint16_t port = 80;

ETHER_28J60 ethernet;

void setup () { dht.begin (); // pinMode (VlagInPin, INPUT); pinMode (RelPin, OUTPUT); digitalWrite (RelPin, HIGH); pinMode (PotPin, OUTPUT); digitalWrite (PotPin, HIGH); vf = EEPROM.read (0); //чтение из флеш значение влаги для сработки вентилятора if (vf > 110) { EEPROM.write (0, 110); // Запись нового значения в Флеш } ethernet.setup (mac, ip, port); }

void loop () { // чтение температуры и влажности займет примерно 250 миллисекунд //float h = dht.readHumidity (); //float t = dht.readTemperature (); vlaga = dht.readHumidity (); temp = dht.readTemperature (); pot = digitalRead (VlagInPin); if (pot == LOW) { // Условие включения и отключения затопления digitalWrite (PotPin, LOW); } if (pot == HIGH) { // Условие включения и отключения затопления digitalWrite (PotPin, HIGH); } if (vlaga >= vf) { // Условие включения и отключения вентиляции digitalWrite (RelPin, LOW); } if (vlaga < vf-1) { // Условие включения и отключения вентиляции digitalWrite(RelPin, HIGH); } String param; if (param = ethernet.serviceRequest()) { ethernet.print("

БОЛЬШОЙ ПОДВАЛ

»); ethernet.print (»ОБНОВИТЬ СОСТОЯНИЕ
»); if (pot == LOW) { // Условие включения и отключения затопления ethernet.print (»

Внимание Затопление!!!

»); } if (temp <= 3) { // Условие вывода сообщения Угроза разморозки системы ethernet.print("

Угроза разморозки системы

»); } if (param == «plus») { vf++; // Увеличить значение переменной влаги if (vf > 110) { vf=110; } EEPROM.write (0, vf); // Запись нового значения в Флеш } if (param == «minus») { vf--; // Уменьшить значение переменной влаги if (vf < 5) { vf=5; } EEPROM.write(0, vf); // Запись нового значения в Флеш } ethernet.print("

Температура

»); ethernet.print (»

»); ethernet.print (temp); ethernet.print (»

»); ethernet.print (»

Влага

»); ethernet.print (»

»); ethernet.print (vlaga); ethernet.print (»

»); ethernet.print (»

Сработка Вентиляции

»); ethernet.print (»

»); ethernet.print (vf); ethernet.print (»

»); ethernet.print (»Уменьшить Увеличить
»); ethernet.respond (); } }

© Habrahabr.ru