Arduino контролює в підвалі температуру, вологість і затоплення і видає дані на WEB-сторінку

Всім Привіт.
Хочу поділитися досвідом створення системи контролю і попередження.
На одному з будівельних об'єктів робили будова з басейном, сауною, тренажерним залом і кімнатою відпочинку.
Все Це було в пристойних розмірах як для одного господаря.
Чисто технічно знадобилося 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 градусів оприлюднення на веб-сайті про загрозу

Наочно можна побачити на Відео:



На практиці все дуже зручно. Завжди можна подивитися з Телевізора(Smart), телефону або планшета — що діється в закритих приміщеннях не відкриваючи їх.

image
image
image

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

Прога для Arduino
#include "etherShield.h"
#include "ETHER_28J60.h"
#include <EEPROM.h>
#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 4 pin (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] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
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("<H1>ВЕЛИКИЙ ПІДВАЛ</H1>");
ethernet.print("<a href="/\">ОНОВИТИ СТАН</a><br>"); 


if (pot == LOW) { // Умова включення і відключення затоплення
ethernet.print("<H1>Увага Затоплення!!!</H1>");
}

if (temp <= 3) { // Умова виведення повідомлення Загроза розморожування системи
ethernet.print("<H1>Загроза розморожування системи</H1>");
}


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("<H1>Температура</H1>");
ethernet.print("<H2>");
ethernet.print(temp);
ethernet.print("</H2>");
ethernet.print("<H1>Волога</H1>");
ethernet.print("<H2>");
ethernet.print(vlaga);
ethernet.print("</H2>");
ethernet.print("<H1>Спрацювання Вентиляції</H1>");
ethernet.print("<H2>");
ethernet.print(vf);
ethernet.print("</H2>");

ethernet.print("<a href="/minus\">Зменшити</a>  <a href="/plus\">Збільшити</a><br>");
ethernet.respond();
}

}




Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.