Мониторинг загородного дома

rutto
Offline
Зарегистрирован: 22.11.2017
Всем привет.
Подскажите из чего будет оптимально сделать мониторинг загородного дома. 
Следим за температурой с двух датчиков, автономное питание на случай отключения основного, и оповещение о отключении питания.
Основной канал связи СМС. На будущее GPRS/
если есть то покажите подобный проект.
Спасибо.
m0l4un
Offline
Зарегистрирован: 07.05.2017

вот тут как я сделал, код ниже

http://www.yaplakal.com/forum46/topic1551776.html?hl=

 

#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10 //ds18b20 на пине D10
#define TEMPERATURE_PRECISION 9
int V220 = 12; //пин для проверки 220 вольт D12
SoftwareSerial mySerial(2, 3); // RX, TX на пинах D2,D3
int ch = 0;
String val = "";
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor_1, sensor_2; // Используем 2 температурных датчика
String textMessage;
char s[32];
unsigned long interval = 60000; // Интервал проверки состояния GPRS соединения; 60 секунд
unsigned long currentMillis;
unsigned long previousMillis;
boolean alarm = false;
unsigned long previousMillisTemp = 0;
unsigned long intervalTemp = 10000; // Интервал опроса датчиков; 10 секунд
int maxValue1 = 90;  //t тревоги высокой температуры датчика 1
int minValue1 = 15;  //t тревоги низкой температуры датчика 1
int maxValue2 = 45;  //t тревоги высокой температуры датчика 1
int minValue2 = 5;  //t тревоги низкой температуры датчика 2
String V220Good;
String Phone = "79000000000";  //свой телефон, без +
String Phones = "+79000000000"; //свой телефон c +7


void setup() {
  pinMode(V220, INPUT);
    previousMillis=millis();
  sensors.begin();
  if (!sensors.getAddress(sensor_1, 0)) {}; 
  if (!sensors.getAddress(sensor_2, 1)) {};
  delay(10000);  //время на инициализацию модуля
  Serial.begin(9600);  //скорость порта
  mySerial.begin(115200);
  delay(100);
  mySerial.println("AT+IPR=9600");  //меняем скорость
  delay(100);
  mySerial.begin(9600);
  delay(100);
  mySerial.println("AT+CLIP=1");  //включаем АОН
  delay(100);
  mySerial.println("AT+CMGF=1");  //режим кодировки СМС - обычный (для англ.)
  delay(100);
  mySerial.println("AT+CSCS=\"GSM\"");  //режим кодировки текста
  delay(100);
}

void loop() {
   currentMillis = millis();  // Начало отсчёта 60 сек.
  if (mySerial.available()) {  //если GSM модуль что-то послал нам, то
    while (mySerial.available()) {  //сохраняем входную строку в переменную val
      ch = mySerial.read();
      val += char(ch);
      delay(10);
    }
    if (val.indexOf("RING") > -1) {  //если звонок обнаружен, то проверяем номер
      if (val.indexOf(Phone) > -1)  //если наш телефон то: 
      { mySerial.println("ATH0");  //разрываем связь
        sensors.requestTemperatures();  //проверяем температуру
        float t0 = sensors.getTempC(sensor_1);
        float t1 = sensors.getTempC(sensor_2);
        if (digitalRead(V220) == HIGH) {   //проверяем есть ли 220В
          V220Good="220 - OK";
          alarm=false;
        }else
        {
          V220Good="220 - OFF";
          alarm=true;
        }
        sms(0, V220Good, t0, t1, Phones,false);  //отправляем СМС
        val = "";
      } else //Если телефон не наш -  просто рвем связь
      {
      mySerial.println("ATH0");  //разрываем связь
      val = "";
    
  }
    } else
     
    val = "";
  }

    // Считываем показания датчиков температуры
  if(currentMillis - previousMillisTemp > intervalTemp) {
    previousMillisTemp = currentMillis;
    if (digitalRead(V220) == HIGH) {
          V220Good="220 - OK";          
        }else
        {
          V220Good="220 - OFF";
          }
    sensors.requestTemperatures();
  float t0 = sensors.getTempC(sensor_1);
        float t1 = sensors.getTempC(sensor_2);
    if(((t0 > maxValue1)||(t1 > maxValue2)||(t0 < minValue1)||(t1 < minValue2)||((digitalRead(V220) == LOW)))&& !alarm) {
      sms(1,V220Good,t0,t1, Phones,true);
    }
    if(((t0 < maxValue1)&&(t1 < maxValue2)&&(t0 > minValue1)&&(t1 > minValue2)&&(digitalRead(V220) == HIGH)) && alarm) {
      sms(2,V220Good,t0,t1, Phones,false);
    }
}
  
  
}

void sms(int flag, String V220X, float temp1, float temp2, String phone, boolean param)  //процедура отправки СМС
{
    if(flag == 0) {
    textMessage = "Temperature:  ";
    alarm = false;
  }
  if(flag == 1) {
    textMessage = "Alarm!  ";
    alarm = true;
  }
  if(flag == 2) {
    textMessage = "Vse OK: ";
    alarm = false;
  }
  textMessage += ((char)13);
  textMessage += "Otoplenie = ";
  textMessage += dtostrf(temp1, 2, 2, s);
  textMessage += "; ";
  textMessage += ((char)13);
  textMessage += "Pomeshenie = ";
  textMessage += dtostrf(temp2, 2, 2, s);
  textMessage += ((char)13);
  textMessage +=V220X;
 alarm = param;
  
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(1000);
  mySerial.print(textMessage);
  delay(1000);
  mySerial.print((char)26);
  delay(1000);
  Serial.print("sendsms");
  mySerial.println("T+CMGD=4");
    delay(1000);
}

 

m0l4un
Offline
Зарегистрирован: 07.05.2017

У меня уже были в наличии: Китайский клон Arduino nano, пара датчиков температуры DS18B20, и DC-DC преобразователи на 1,5 ампера 

(все куплено на алиэкспресс) 

Заказал у китайцев еще sim-модуль (Sim-800) - как на фото, 

нашел старый СКАТ (это ИБП на 12 вольт, используется в видеонаблюдении или охранно-пожарных сигнализациях).

Что имеем в результате: Получаем СМС в случае если температура в доме пала ниже 5 градусов 

или температура батарей упала ниже 20 градусов или если пропало напряжение в сети.

Если все нормализовалось - тоже приходят СМС. 

Ну и можно просто сделать дозвон на это чудо техники, оно збросит вызов и вышлет СМС с текущими показаниями температуры.

Все звонки с чужих номеров он тоже сбрасывает (вот куда девать симки по которым звонят коллекторы можно:=) ).

rutto
Offline
Зарегистрирован: 22.11.2017

Премного благодарен)

Спасибо. Ты настоящий друг.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

rutto пишет:
из чего будет оптимально сделать
Ну, как из чего??? В лучших традициях нашего форума ...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Злой Вы сегодня.

yucan
Offline
Зарегистрирован: 20.04.2015

rutto пишет:

Всем привет.
Подскажите из чего будет оптимально сделать мониторинг загородного дома. 
Следим за температурой с двух датчиков, автономное питание на случай отключения основного, и оповещение о отключении питания.
Основной канал связи СМС. На будущее GPRS/
если есть то покажите подобный проект.
Спасибо.

На амперке есть подобный проект. Мониторинг, управление отоплением и охрана.

http://forum.amperka.ru/threads/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%...

toc
Offline
Зарегистрирован: 09.02.2013

m0l4un пишет:
Все звонки с чужих номеров он тоже сбрасывает (вот куда девать симки по которым звонят коллекторы можно:=) ).

Моё устройство при входящем звонке с чужого номера поднимает трубку. Пусть спаммер послушает тишину несколько минут. И заплатит за это.