Дата публикации: 05.02.2015 10:18:00
Хочу поделиться опытом создания системы контроля и предупреждения.
На одном из строительных объектов делали строение с бассейном, сауной, тренажёрным залом и комнатой отдыха. Все это было в приличных размерах как для одного хозяина. Чисто технически понадобилось 2 подвала: 1-й для обслуживания насосов бассейна — маленький, 2-й для обслуживания систем обогрева и накопления тепла
Закуплены были 2 напольных евро-люка разных размеров для двух подвалов. Люки зарывались 4-мя винтами и имели очень плотные резиновые уплотнения. Чтобы открыть подвал, необходимо было 4 человека (и немного здоровья). При работе всей техники в подвале поднималась температура и влажность, при этом контролировать что там происходит практически неудобно.
В итоге было принято решение о создании устройства, которое бы показывало, а также управляло вентилятором, звуковым сигнализатором, электро-клапаном (воды), и контролировать его можно было с любого смарт устройства.
За основу взял Arduino Pro Mini плюс Ethernet ENC28J60. Для замера влажности и температуры датчик DHT11 и FC-28 (датчик влажности почвы – в роли датчика затопления).
Тех задание:
1) Управление и информирование через Web интерфейс;
2) Включение и отключение вентиляции по заданному уровню влажности;
3) Включение и отключение клапана водопровода (возможно, ревун, откачивающий насос) при затоплении.
В выборе Arduino Pro Mini тоже надо подумать, так как существуют разные исполнения:
Лучше брать ту, в которой стабилизатор по мощнее, так как та, что по слабее, при активных реле и сетевом контроллера закипит стабилизатор, что приводит к зависанию системы (я упустил этот нюанс и получил зависания, но приобрел более ценное – опыт).
Сетевые контроллеры также надо выбирать внимательно, так как есть те которые от 5В (стабилизатор на обратной стороне модуля) и на 3,3В. Нужен будет дополнительный стабилизатор на 3,3В.
Блок питания взял от обычного свитча (или роутера) TP-Link 9В 500мА (примерно), они часто встречаются за копейки от паленых свитчей или роутеров.
Принцип работы простой: есть 2 датчика, которые сливают информацию на контроллер. В зависимости от ситуации контроллер включает и выключает реле (клапана водопровода, возможно ревун, откачивающий насос, вентилятор). Управление и мониторинг через WEB интерфейс который реализован программой на базе модуля ENC28J60.
1) Сработка датчика затопления = включение реле (клапана водопровода(ревун, откачивающий насос ); + информирование на web странице крупным шрифтом;
2) Повышение влажности выше установленного уровня = включение реле вентилятора;
3) Вся информация о температуре влажности и затоплению выводится на web страницу;
4) При понижении температуры ниже 5 градусов оповещение на web сайте о угрозе.
На практике все очень удобно. Всегда можно посмотреть с Телевизора (Smart), телефона или планшета — что творится в закрытых помещениях, не открывая их.
Люблю создавать устройства, которые облегчают жизнь, а не просто создать игрушку поиграться и выбросить.
С дизайном странички сильно не напрягался, так как носит технический характер и должна быть практичной, а не сложной и красивой.
Надеюсь, эта статья кому-то поможет, а кого то вдохновит на создание своего проекта.
Видео
#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 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] = {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();
}
}
Название файла | Описание | Скачать |
---|---|---|
b4f376d2f7509df1d569118e04e87944.zip | Версия 1.0 | |
d3c0366bb120e3d64b3393780195a97b.zip | Версия 2.0 | |
ssssddddd | ||
sdfsdfsdfsdfsdf | ||
sfgsdfgsfgsdfgsdfgsdfxcvbcvbxc |
Источник: http://habrahabr.ru/post/249201/
Назад в раздел