Дата публикации: 05.02.2015 10:18:00
Хочу поделиться опытом создания системы контроля и предупреждения.

На одном из строительных объектов делали строение с бассейном, сауной, тренажёрным залом и комнатой отдыха. Все это было в приличных размерах как для одного хозяина. Чисто технически понадобилось 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 сайте о угрозе.

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

image
image
image

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

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

image

Видео

#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();
  }
  
}

Источник: http://habrahabr.ru/post/249201/
Назад в раздел