Система "Умный дом" для загородного дома на Arduino Mega2560, HC-05, SIM900,DHT11,3-х DS18B20,RTC-DS1302

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

MaksVV пишет:

Slavyanin55, Спасибо за ваш труд. Очень помогает в освоении дуни. Пока делаю удаленный контроль и сигнализацию аварийных температур на ds и sim 900. Всё получается. Но есть вопрос. Допустим t превысила норму. Отправляется смс. Где в вашем коде происходит сброс флага об отправленной смс в значение фальсе при возвращении параметра в норму? нашел только сброс квитирования и сброс флага при выключении умного дома. 

Привет. Выложил последнюю свою программу  https://yadi.sk/d/6-qoWLUBmQX5r от 03.01.2016г.

Там особое внимание обрати на цикл чтения температур с DS18B20. Я его переделал. И что только лень не творит с человеком. Только бы не лезть на крышу и не переделывать кабель до уличного датчика температуры. Короче сделал обработку результатов измерений с отбраковкой ошибок. Вот 4 недели работает эта программа. Теперь поганых -127гр. больше не выдает в СМС. Более того, я подключил сигнализацию предельных температур даже от DTH11. Ложных сработок не было за всё это время. Я сигнализацию температур отключал в связи с этим. А теперь вернул обратно.

Также я закинул две библиотеки Тонов и работы с ИК пультами. Может у людей теперь заработает без лишних телодвижений.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014
void izmereniya()   //  Замер температур с датчиков DS18B20 и влажности с датчика DHT11 
{  // http://arduino.ru/tutorials/BlinkWithoutDelay на основе
   unsigned long currentMillis = millis();
   if(currentMillis - previousMillis > interval) { // Замеры в интервале 

     //Датчик DHT11 иногда глючит. Вот так я борюсь с ошибочными измерениями, но такой способ увеличивает инерционность измерений
     dht.read(DHT11PIN); delay(10);       // Замеры температур с DHT11
     vlaga = dht.humidity;                // Уровень влажности % с DHT11
     Temp_Podpol = dht.temperature;       // Температура *С с DHT11
     if (Temp_Podpol < 3 || Temp_Podpol > 35){dhtschet++;} // +1 к счетчику ошибок DHT11 для статистики
     if (Temp_Podpol > TempPodpol+3){ Temp_Podpol=Temp_Podpol+3; } // Борьба с помехами. Сглаживает резкие всплески измерений
     if (Temp_Podpol < TempPodpol-3){ Temp_Podpol=Temp_Podpol-3; } // Борьба с помехами. Сглаживает резкие провалы измерений
     if(ZamerDHT==1){Zamer1DHT=Temp_Podpol;} // Запись результов по порядку в 1 замер
     if(ZamerDHT==2){Zamer2DHT=Temp_Podpol;} // Запись результов по порядку в 2 замер
     if(ZamerDHT==3){Zamer3DHT=Temp_Podpol;} // Запись результов по порядку в 3 замер 
     ZamerDHT++;  // +1 к счетчику замеров
     if(ZamerDHT >3){ZamerDHT=1;}
     TempPodpol = (Zamer1DHT+Zamer2DHT+Zamer3DHT)/3;  // Итого:Температура в подполе равна среднеарифметическому с последних 3 замеров
                        
     //Далее для датчиков DS18B20. Иногда датчик выдает -127. Борюсь с этим так...
     ds.requestTemperatures();            // Замеры температур с DS18B20
     delay(750);                          // Необязательная задержка
     Temp_ZalC    = ds.getTempC(ZalC);    // Считываем температуру в зале
     if(-55 < Temp_ZalC && Temp_ZalC < 120){TempZalC = Temp_ZalC; dsZshet=0;} delay(50);// Если нет ошибки, то обновляем температуру

     Temp_UlicaC  = ds.getTempC(UlicaC);   // Считываем температуру на улице
     if(-55 < Temp_UlicaC && Temp_UlicaC < 120){TempUlicaC = Temp_UlicaC; dsUshet=0;} delay(50);// Если нет ошибки, то обновляем температуру

     Temp_KuhnyaC = ds.getTempC(KuhnyaC);  // Считываем температуру в кухне
     if(-55 < Temp_KuhnyaC && Temp_KuhnyaC < 120){TempKuhnyaC = Temp_KuhnyaC; dsKshet=0;} delay(50);// Если нет ошибки, то обновляем температуру

     if(   Temp_ZalC < -55 && Temp_ZalC > 120)   {dsshet++; dsZshet++; } // +1 к счетчикам ошибок
     if( Temp_UlicaC < -55 && Temp_UlicaC > 120) {dsshet++; dsUshet++; } // +1 к счетчикам ошибок 
     if(Temp_KuhnyaC < -55 && Temp_KuhnyaC > 120){dsshet++; dsKshet++; } // +1 к счетчикам ошибок 

     UlicaS = analogRead(A15)/10;           // Считываем освещенность на улице
     voltmetr();                            // Считываем напряжения на выходе ИБП (норма 13,5в)
     previousMillis = currentMillis;}       // Сброс таймера
}
Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014
void otoplenie() // Цикл управления газовым котлом (Сигнал инвертированный!(Особенность подключения к котлу))
{
  if (statusotp==0){digitalWrite(53,HIGH);} // Отключить отопление

  if (dsZshet >2 && dsKshet >2) {statusotp=0;} // Если нет связи с датчиками температуры отключить отопление 

  if (statusotp==1) // Климат-контроль по датчику температуры в зале
     {  if ( TempZalC > tempDust){digitalWrite(53,HIGH);} // Отключить отопление если температура больше желаемой на 1грС
        if ( TempZalC < tempDust){digitalWrite(53,LOW);}  // Включить отопление если температура меньше желаемой
        if ( dsZshet >2){statusotp=3;}                    // если нет связи с датчиком в зале перейти на датчик в кухне
     }
  if ( statusotp==2) // Экономия по датчику температуры в зале
     {  if ( TempZalC > tempDECOust){digitalWrite(53,HIGH);} // Отключить отопление если температура больше желаемой на 1грС
        if ( TempZalC < tempDECOust){digitalWrite(53,LOW);}  // Включить отопление если температура меньше желаемой
        if ( dsZshet >2){statusotp=4;}                       // если нет связи с датчиком в зале перейти на датчик в кухне                        
     }
  if (statusotp==3) // Климат-контроль по датчику температуры в кухне
     {  if ( TempKuhnyaC > tempDust){digitalWrite(53,HIGH);} // Отключить отопление если температура больше желаемой на 1грС
        if ( TempKuhnyaC < tempDust){digitalWrite(53,LOW);}  // Включить отопление если температура меньше желаемой
        if ( dsKshet >2){statusotp=1;}                       // если нет связи с датчиком в кухне перейти на датчик в зале
     }     
  if ( statusotp==4) // Экономия по датчику температуры в кухне
     {  if ( TempKuhnyaC > tempDECOust){digitalWrite(53,HIGH);} // Отключить отопление если температура больше желаемой на 1грС
        if ( TempKuhnyaC < tempDECOust){digitalWrite(53,LOW);}  // Включить отопление если температура меньше желаемой
        if ( dsKshet >2){statusotp=2;}                          // если нет связи с датчиком в кухне перейти на датчик в зале                        
     }
}  

 

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014
void alarms()  //______________Цикл "тревожные сигналы"____// http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
{
       if (digitalRead(30)==HIGH && KvitDI30==false) { statusAlarm=1; statusPump=0; alarmsSMS();}      // Сработка датчика затопления подпола
  //else if (analogRead(14)<100    && KvitAI14==false) { statusAlarm=1; }                              // Сработка датчика уровня дренажной емкости
  else if (digitalRead(29)==HIGH && KvitDI29==false) { statusAlarm=1; }                                // Сработка датчика готовности бани
  else if (digitalRead(31)==HIGH && KvitDI31==false) { statusAlarm=1; statusbania=2; alarmsSMS();}     // Сработка датчика предельной температуры в бане
  else if ( TempZalC <= TEMPMINZ && KvitZalC==false )    {statusAlarm=1; AlarmTemp=1; alarmsSMS();}    // Сигнализация низкой  температуры в зале
  else if ( TempZalC >= TEMPMAXZ && KvitZalC==false )    {statusAlarm=1; AlarmTemp=1; alarmsSMS();}    // Сигнализация высокой температуры в зале
  else if ( TempUlicaC <= TEMPMINU && KvitUlicaC==false )  {statusAlarm=1; AlarmTemp=1; alarmsSMS();}  // Сигнализация низкой  температуры на улице
  else if ( TempUlicaC >= TEMPMAXU && KvitUlicaC==false )  {statusAlarm=1; AlarmTemp=1; alarmsSMS();}  // Сигнализация высокой температуры на улице
  else if ( TempKuhnyaC <= TEMPMINK && KvitKuhnyaC==false ){statusAlarm=1; AlarmTemp=1; alarmsSMS();}  // Сигнализация низкой  температуры в кухне
  else if ( TempKuhnyaC >= TEMPMAXK && KvitKuhnyaC==false ){statusAlarm=1; AlarmTemp=1; alarmsSMS();}  // Сигнализация высокой температуры в кухне
  else if (  TempPodpol < TEMPMINP && KvitPodpolC==false ) {statusAlarm=1; AlarmTemp=1; alarmsSMS();}  // Сигнализация низкой температуры в в подполе +3
  else if (  TempPodpol > TEMPMAXP && KvitPodpolC==false ) {statusAlarm=1; AlarmTemp=1; alarmsSMS();}  // Сигнализация высокой температуры в подполе +35

  else if (digitalRead(37)==HIGH && SMSVoltOFF==false) {homeOFF(); digitalWrite(53,HIGH);
             startOneSMS(); Serial2.print("Propalo pitanie 220V!_"); vremya2(); EndSMS();
             SMSVoltOFF=true; SMSVoltON=false; } // Отключение питания 220В от греха подальше (выключаются реле)
           
  else if (digitalRead(37)==LOW && SMSVoltON==false && (RTCMinuta==0 || RTCMinuta==15|| RTCMinuta==30 || RTCMinuta==45))
          { startOneSMS(); Serial2.print("Pitanie 220V vosstanovleno!_"); vremya2(); EndSMS();
            SMSVoltON=true; SMSVoltOFF=false; }    // Восстановление питания 220В

//  else if (Vpit<=12.0 && SMSVoltIBP==false)             { startOneSMS(); Serial2.println("Alarm! Min zaryad akkumulyatora IBP!"); EndSMS(); SMSVoltIBP=true;}             // Низкий заряд аккумулятора
//  else if (Vpit>=14.0 && SMSVoltIBP==false)             { startOneSMS(); Serial2.println("Alarm! Max zaryad akkumulyatora IBP!"); EndSMS(); SMSVoltIBP=true;}             // Перезаряд аккумулятора
  else {statusAlarm=0; AlarmTemp=0;}

   if ( TempZalC > TEMPMINZ+2 )  {KvitZalC=false;}        // Сброс квитирования при возвращении параметра в норму
   if ( TempZalC < TEMPMAXZ-2 )  {KvitZalC=false;}        // Сброс квитирования при возвращении параметра в норму
   if ( TempUlicaC > TEMPMINU+2 )  {KvitUlicaC=false;}    // Сброс квитирования при возвращении параметра в норму
   if ( TempUlicaC < TEMPMAXU-2 )  {KvitZalC=false;}      // Сброс квитирования при возвращении параметра в норму
   if ( TempKuhnyaC > TEMPMINK+2 ) {KvitKuhnyaC=false;}   // Сброс квитирования при возвращении параметра в норму
   if ( TempKuhnyaC < TEMPMAXK-2 ) {KvitKuhnyaC=false;}   // Сброс квитирования при возвращении параметра в норму
   if ( TempPodpol > TEMPMINP && (TempPodpol < TEMPMAXP)) {KvitPodpolC=false;} // Сброс квитирования при возвращении параметра в норму
}

 

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

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

Думаю сейчас система уже приобрела вид, который принципиально изменяться не будет, поэтому ответы на мои вопросы помогут тем кто еще захочет начать. Я сам из Беларуси (прошу учесть в ответах, где это играет роль). Теперь несколько вопросов:

1.  Где лучше купить схемотехнику? (скорее всего заказывать буду на алиэкспресс, потому что в Беларуси врядли найдется что-то лучшее или более дешевое, но хотелось бы отзывов о качестве).

2. Напишите, пожалуйста, полный список того, что нужно покупать, желательно с примерами конкретных моделей. (основная плата, дополнительное оборудование, модули расширения, датчики и т.д.).

3. Схемы и чертежи системы в том виде, в котором она на данный момент. (как управляющей часть, так и силовой)

3. За основу брать Arduino 2560 R.3 или лучше Arduino ADK R.3?

Если есть еще советы и полезная информация, с удовольствием выслушаю. (тему всю прочитал, поэтому не надо ругаться, данное сообщение написал, для того чтобы отсеять старые наработки от новых и для избежания ошибок в выборе элементов, т.к. на практике уже применено и понятно, что лучше брать, на что это можно заменить, чего не хватает и от чего отказаться).

Благодарен всем откликнувшимся.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Slavyanin55 пишет:

MaksVV пишет:

Slavyanin55, Спасибо за ваш труд. Очень помогает в освоении дуни. Пока делаю удаленный контроль и сигнализацию аварийных температур на ds и sim 900. Всё получается. Но есть вопрос. Допустим t превысила норму. Отправляется смс. Где в вашем коде происходит сброс флага об отправленной смс в значение фальсе при возвращении параметра в норму? нашел только сброс квитирования и сброс флага при выключении умного дома. 

Привет. Выложил последнюю свою программу  https://yadi.sk/d/6-qoWLUBmQX5r от 03.01.2016г.

Там особое внимание обрати на цикл чтения температур с DS18B20. Я его переделал. И что только лень не творит с человеком. Только бы не лезть на крышу и не переделывать кабель до уличного датчика температуры. Короче сделал обработку результатов измерений с отбраковкой ошибок. Вот 4 недели работает эта программа. Теперь поганых -127гр. больше не выдает в СМС. Более того, я подключил сигнализацию предельных температур даже от DTH11. Ложных сработок не было за всё это время. Я сигнализацию температур отключал в связи с этим. А теперь вернул обратно.

Также я закинул две библиотеки Тонов и работы с ИК пультами. Может у людей теперь заработает без лишних телодвижений.

Ну с корректностью измерений  в полевых условиях у меня пока дела не доходят. На столе пока все собираю. Меня всё же мучает вопрос про сброс флага в false после того как отправилась смс и параметр вернулся в норму. 

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

void alarms()
{
   if (TempZalC != -127 && TempZalC > 36) {AlarmTemp=1; AlarmsSMS();}
   else {SMSAlarmTemp = false;  AlarmTemp=0};
}

void AlarmsSMS()
{
  if (AlarmTemp==1 && SMSAlarmTemp == false)
  {
  startOneSMS(); 
  Serial.println("Vnimanie Temperatura!!!");
  Serial.print("Temp:"); Serial.print (TempZalC); Serial.print("*C."); 
  EndSMS (); SMSAlarmTemp = true;
  }
}

 

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

Ты всё правильно сделал. Просто я опасался, что ардуина замучает ложными смс-ками, от того и не делал пока автосброс флага. Теперь после опробования нового алгоритма ложных тревог нет, и я тоже сброс флага сделаю.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Аа, спасибо теперь понятно. И еще вопросик. С помощью какой программы на телефоне управляешь по блютуз?

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

"Bluetooth SPP" ,а по GSM "GSM Trinket"

MaksVV
Offline
Зарегистрирован: 06.08.2015

Предлагаю тебе какой нить счет открыть. А то как-то даже не удобно так просто чужими трудами пользоваться. Так глядишь будут средства для развития системы.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

abarmotovi4 пишет:

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

Думаю сейчас система уже приобрела вид, который принципиально изменяться не будет, поэтому ответы на мои вопросы помогут тем кто еще захочет начать. Я сам из Беларуси (прошу учесть в ответах, где это играет роль). Теперь несколько вопросов:

1.  Где лучше купить схемотехнику? (скорее всего заказывать буду на алиэкспресс, потому что в Беларуси врядли найдется что-то лучшее или более дешевое, но хотелось бы отзывов о качестве).

2. Напишите, пожалуйста, полный список того, что нужно покупать, желательно с примерами конкретных моделей. (основная плата, дополнительное оборудование, модули расширения, датчики и т.д.).

3. Схемы и чертежи системы в том виде, в котором она на данный момент. (как управляющей часть, так и силовой)

3. За основу брать Arduino 2560 R.3 или лучше Arduino ADK R.3?

Если есть еще советы и полезная информация, с удовольствием выслушаю. (тему всю прочитал, поэтому не надо ругаться, данное сообщение написал, для того чтобы отсеять старые наработки от новых и для избежания ошибок в выборе элементов, т.к. на практике уже применено и понятно, что лучше брать, на что это можно заменить, чего не хватает и от чего отказаться).

Благодарен всем откликнувшимся.

Здравствуй, брат Беларус!

Да система врятли уже будет вкорне переделываться. Проще новую начать, но для этого нужен новый объект автоматизации, а у меня на него денег нету :)

Так ты один в один хочешь собрать систему? или как все тут вольные художники запилишь под свой объект? Если один в один, то и приобретай всё как есть на Алиэкспресс:

Ардуино Мега 2560 (честно про ардуино АДК не вкурсе. Не пользовал)

Релейные платы  всего на 16 каналов, лучше 4 по 4 реле

Плата часов реального времени DS1302

GSM плату на модуле SIM900

Датчики температуры DS18B20 сколько температур надо знать, столько и бери.

Датчик влажности и температуры DTH11 -1шт. если надо.

Приемник ИК сигналов. Можно со сдохшего телека раздобыть. Можно на Али купить.

Остальное ручками :) в радиомагазине купил и сам собрал. Дешево, сердито.

Вот минимальный набор.

Про схемы и чертежи, проект я давно не редактировал. Но на свои 85% в нем ничего точно не поменялось.

Про опторазвязку - купи 16 оптопар PC817V, 16 резисторов на 3,9 кОм , и 16 самых слабых светодиодов.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

MaksVV пишет:
Предлагаю тебе какой нить счет открыть. А то как-то даже не удобно так просто чужими трудами пользоваться. Так глядишь будут средства для развития системы.

Да не, пока не надо. Пока развитие системы ограничивает лишь хроническое отсутствие свободного времени. Деньги у меня на ардуиновские платки всегда есть.

Я так то сам учусь ещё, сам копирую. Если бы не добрые люди, которые выкладывают свои труды в интернет, я не научился бы и сам. Всё для отечественной автоматизации. Сейчас как научимся программировать , как потом заткнем за пояс китайцев :) Как беспилотники придумаем свои...

А потом на наши Робофесты будут ездить иностранцы и учиться у нас :)

Пусть всё будет freeware типа! А я вот всё жду, кто заделает приложение на андроиде совместимое с моей системой. Вот это была бы тема.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Slavyanin55 пишет:
А я вот всё жду, кто заделает приложение на андроиде совместимое с моей системой. Вот это была бы тема.


Мне кажется для этого тебе надо систему в инет сначала вывести, приложения по каналу через инет проще сделать. Посмотрел gsm trinket клевая тема!

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

Slavyanin55 пишет:

1. Так ты один в один хочешь собрать систему? или как все тут вольные художники запилишь под свой объект?

2. Релейные платы  всего на 16 каналов, лучше 4 по 4 реле...

3. Датчик влажности и температуры DTH11 -1шт. если надо.

4. Остальное ручками 

5. Про схемы и чертежи, проект я давно не редактировал. Но на свои 85% в нем ничего точно не поменялось.

6. Про опторазвязку - купи 16 оптопар PC817V, 16 резисторов на 3,9 кОм , и 16 самых слабых светодиодов.

1.  Мне кажется, что все кто начинает делать по проекту в итоге создают свою систему, просто копировать это не интересно, тем более для русского человека, у которого всегда "руки чешуться"))).

2. Выбрал элементы, прошу проверить : Arduino MEGA 2560 Rev3, релейный модуль на 4 канала, DHT-11, датчик температуры DS18B20 и влагозащищенный, модуль опторазвязки PC817C ( в чем отличие С от V?), плата часов реального времени DS1302 ( в чем отличие от этой), резисторы (покупать буду в местных магазинах, это просто пример), светодиоды.

3.А проблем с DHT11 не будет? Может стоит заменить на DHT22.

4. Что остальное?

5. Что поменялось,хоть на словах.

6. Куда подключать светодиоды и резисторы?.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

MaksVV пишет:
Slavyanin55 пишет:
А я вот всё жду, кто заделает приложение на андроиде совместимое с моей системой. Вот это была бы тема.

Мне кажется для этого тебе надо систему в инет сначала вывести, приложения по каналу через инет проще сделать. Посмотрел gsm trinket клевая тема!

Самое классное что мне нравится в тринкете, так это то, что сохранять настройки можно в файлик, смело делать хардрезет телефону, а потом восстановить настройки.

varb
Offline
Зарегистрирован: 19.01.2015

Еще удобно сделать вывод текущих значений всех датчиков на narodmon.ru и тогда всегда под рукой есть инфа по всем датчикам с хронологией

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

Еще забыл написать: блок питания и модуль w5100.

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

Еще забыл написать: блок питания и модуль w5100.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

Всё правильно выбрал. Вот чтобы не паять плату опторазвязки, можно её купить:

http://ru.aliexpress.com/item/4-Road-Optocoupler-Isolation-Module-High-A...

А разница в платах часов может быть только в качестве кварцевого резонатора, чем качественнее, тем точнее будет время.

DHT22 можно приобрести, даже лучше.

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

Slavyanin55 пишет:

DHT22 можно приобрести, даже лучше.

1. Для датчика в программе надо будет что-нибудь менять?

2. Модуль sim900 в сборе подойдет?

3. Пульт управления для дома ик похож?

4. Зачем нужен модуль bluetouch HC05.

jiromkot
Offline
Зарегистрирован: 31.01.2016

Автору Огромнейший как говорят Респек! и Уважуха!

Проделанная работа действительно впечатляет! Я сам можно сказать тоже с Arduino тоже начинающий года 3-4 писал на ASMe для  PIC контроллеров. Теперь решил освоить Arduino. Глобального пока ничего не сделал, но в планах сделать нечто похожее на ваш проект (уж очень впечатлило), но только для управления теплицей и автоматизацией полива. Ваши наработки очень много возникающих вопросов снимают. Спрашивать даже пока нет необходимости. Как раз наоборот хотелось бы посоветовать один момент. Очень многие жалуются на некорректность хода часов RTC 1302 в том чмсле и вы, используйте лучше вот этот модуль, он намного более стабилен и библиотека полностью подходит от 1302. Собирал для ребёнка поливалку цветов с экраном 16х2 и с привязкой к времени с использованием именно такого модуля, уже больше 1.5 года ходит и разница всего секунд на 15! Очень рекомендую!

 

jiromkot
Offline
Зарегистрирован: 31.01.2016

Автору Огромнейший как говорят Респек! и Уважуха!

Проделанная работа действительно впечатляет! Я сам можно сказать тоже с Arduino тоже начинающий года 3-4 писал на ASMe для  PIC контроллеров. Теперь решил освоить Arduino. Глобального пока ничего не сделал, но в планах сделать нечто похожее на ваш проект (уж очень впечатлило), но только для управления теплицей и автоматизацией полива. Ваши наработки очень много возникающих вопросов снимают. Спрашивать даже пока нет необходимости. Как раз наоборот хотелось бы посоветовать один момент. Очень многие жалуются на некорректность хода часов RTC 1302 в том чмсле и вы, используйте лучше вот этот модуль, он намного более стабилен и библиотека полностью подходит от 1302. Собирал для ребёнка поливалку цветов с экраном 16х2 и с привязкой к времени с использованием именно такого модуля, уже больше 1.5 года ходит и разница всего секунд на 15! Очень рекомендую!

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

abarmotovi4 пишет:

Модуль sim900 в сборе подойдет

Подойдет, себе взял такой. Будут вопросы по включению, ищите по нему тему на этом форуме. Там надо одну перемычку сделать, чтобы включать программно можно было через 9 пин.

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

И к предыдущим вопросам еще один:

1. Как и куда паять светодиоды и резисторы.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

abarmotovi4 пишет:

3. Пульт управления для дома ик похож?

4. Зачем нужен модуль bluetouch HC05.

Пульт управления скромный какой-то, возьмешь нормальный потом от телека какого.

Модуль Bluetooth нужен для подключения телефона мобильного. Чтобы упрвлять и просматривать сообщения от системы и параметры.

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

jiromkot пишет:

Как раз наоборот хотелось бы посоветовать один момент. Очень многие жалуются на некорректность хода часов RTC 1302 в том чмсле и вы, используйте лучше вот этот модуль, он намного более стабилен и библиотека полностью подходит от 1302. Собирал для ребёнка поливалку цветов с экраном 16х2 и с привязкой к времени с использованием именно такого модуля, уже больше 1.5 года ходит и разница всего секунд на 15! Очень рекомендую!

Да слышал я про такие часы. Товарищ заказал недавно, придут опробуем в деле.

А меня вот какая идея посетила давно по поводу часов на 1302. А не сделать ли программную коррекцию хода? ну на сколько то там секунд в сутки. Вот в охранно-пожарном от Болид оборудовании есть такая функция. В пульте С2000 есть функция "коррекция хода" там устанавливаются секунды в сутки. Так вот может сделать такую функцию и вопрос решится немного. Может видел кто такие примеры автокоррекции времени?

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

abarmotovi4 пишет:

И к предыдущим вопросам еще один:

1. Как и куда паять светодиоды и резисторы.

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

abarmotovi4
Offline
Зарегистрирован: 07.02.2016

Спасибо. Теперь буду ждать пока все приедет. Осталось выбрать:

1. Какой датчик взять для пожарной системы, утечки балонного газа, углекислого газа (нашел только дорогие ~30 usd, есть ли дешевле).

2. Голосовая плата на схеме эта?

3. Питание датчиков происходит от меги или от внешенго блока питания (если от внешнего, то пожалуйста сслку как пример).

4. Хватит ли на контроллер 9В или лучше 12В?

lex2k
Offline
Зарегистрирован: 17.12.2015

Slavyanin55 пишет:

"Bluetooth SPP" ,а по GSM "GSM Trinket"

можно подробнее что за проги

я на андроид сам себе пишу

jiromkot
Offline
Зарегистрирован: 31.01.2016

DS3231 в своём составе имеет термодатчик как раз для термостабилизации встроенного генератра, за счёт этого и точность. Значения термодатчика  можно использовать в своих целях например для измерения темпиратуры в шкафу, только тогда нужно использовать библиотеку DS3231.h 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

abarmotovi4, газоанализатор я приобрел себе такой

Стоит 100 руб.

Serg1
Offline
Зарегистрирован: 04.12.2015

Добрый день и спасибо за проделанную работу.

Пытаюсь реализовать данную систему. Опыт программирования минимален, поэтому часто наступаю на грабли.

Путем проб и ошибок выяснил, что для начала следует запустить указанный для запуска файл.

При этом программа -компилятор предложит создать папку с одноименным названием. После чего следует переместить в эту папку остальные файлы подпрограмм. Опыт показывает, что лучше использовать библиотеки, идущие в комплекте с программой автора.

Поступив таким образом, удалось избежать части ошибок. 

Далее возникла ошибка конфликта векторов прерываний .  Решается согласно ссылке в описании программы.

В общем за 23 февраля удалось избавиться от ошибок.

Следующим этапом является переделка программы для замены модуля часов 1302 на SZ-042 на микросхеме DS3231....

 
Serg1
Offline
Зарегистрирован: 04.12.2015

У кого нибудь  есть опыт по замене модуля часов в этой программе?

Подскажите, как правильно?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Serg1, конкретизируйте вопрос.

Serg1
Offline
Зарегистрирован: 04.12.2015

Чем хороши некоторые ветки форума, так это неспешностью ответов :) , что дает время на загрузку собственных мозгов.

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

Arduino: 1.6.5 (Windows 7), Плата"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)
RTCtimer.ino: In function 'void MinusChas()':
RTCtimer:62: error: 'class DS1307' has no member named 'writeProtect'
......
Решилось удалением строк, оперирующих с Writе protect.
 
 Заказал в Китае GSM модуль на Неовей М590. Как придет, продолжу изменение программы под него.
 
Сейчас есть более общий вопрос- в сети есть много примеров программ, где управление происходит посредством СМС. Но все эти модули поддерживают GPRS. Примеров программ с управлением по GPRS я не нашёл. По идее дешевле 100 руб в мес заплатить за интернет, чем 2 руб за каждую смс. Или тут какие то сложности в реализации?
 
varb
Offline
Зарегистрирован: 19.01.2015

GPRS сложнее в реализации, больше требует ресурсов, стабильность сигнала более критична

Для смс можно купить пакет смс и не париться.

Я реализовал так: управление через смс, а текущие параметры с периодичностью 5-10минут ардуина отправляет на narodmon.ru. Таким образом, смс от Ардуины почти не нужны, всегда есть все данные с хронологией (через narodmon.ru), траффик на мегафоне бесплатный на тарифе "Онлайн". Реализация почти такая же как "просто через смс"

MaksVV
Offline
Зарегистрирован: 06.08.2015

Slavyanin55 пишет:

Опторазвязки я стараюсь делать где только можно. Оптопары, "убивают двух зайцев" 1. происходит согласование разных напряжений, 2-е гальваническая развязка и помеха защищенность. Мало ли чего бывает. Грозовые разряды, статика...  мне нужна надежность. + я не парюсь проводить кабели в близи с "помехами"

Опторазвязки у меня для гальванической изоляции входных и выходных дискретных сигналов. 

Вот интересно аналоги развязать возможно?

я вот тут подумал может вторую дуню для этого использовать? например нано. 

Вариант 1. Аналоговые сигналы поступают на ардуино нано. С неё через SPI на цифровой потенциометр и уже потом на аналоговый вход меги. Всё как в уроке по ардуино  Джереми Блюма  № 8. Конечно в таком случае, наверное, гальванической развязки не получится, но гальваническая развязка для шины SPI существует, её проще сделать. Например http://electronics.stackexchange.com/questions/42367/optoisolate-2mhz-spi-communication Сложности данного варианта в гальванической развязке шины SPI. 

Вариант 2. Аналоговые сигналы поступают на ардуино нано с Эксбее шилдом.  На меге тоже эксби шилд. Сигналы идут через беспроводной сериал. Всё как в уроке по ардуино  Джереми Блюма  № 9.  Сложности данного варианта в программировании и распознаванании данных из сериала. или блюпуп использовать для данного метода. 

А вообще у тебя система больше года работает. как со стабильностью? Зависал ли скетч? Не сгорала ли мега, оптопары? Были ли какиенибудь внештатные ситуации ? И как у тебя подключена шина One Wire датчиков DS напрямую к меге?  Вот ещё нашел  про развязку DS18B20 http://radiokot.ru/articles/58/

spa-sam
Offline
Зарегистрирован: 14.12.2012

Serg1 пишет:

Чем хороши некоторые ветки форума, так это неспешностью ответов :) , что дает время на загрузку собственных мозгов.

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

Arduino: 1.6.5 (Windows 7), Плата"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)
RTCtimer.ino: In function 'void MinusChas()':
RTCtimer:62: error: 'class DS1307' has no member named 'writeProtect'
......
Решилось удалением строк, оперирующих с Writе protect.
 
 Заказал в Китае GSM модуль на Неовей М590. Как придет, продолжу изменение программы под него.
 
Сейчас есть более общий вопрос- в сети есть много примеров программ, где управление происходит посредством СМС. Но все эти модули поддерживают GPRS. Примеров программ с управлением по GPRS я не нашёл. По идее дешевле 100 руб в мес заплатить за интернет, чем 2 руб за каждую смс. Или тут какие то сложности в реализации?
 

Нужно было брать sim800L, под этот модуль есть отличная библиотека Adafruit FONA 

https://github.com/adafruit/Adafruit_FONA

https://github.com/adafruit/Adafruit_MQTT_Library

В этой библиотеке реализованы  gprs, sms, звонки и многое другое, но   особено радует mqtt.

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Интересно, куда пропадают написанные сообщения?.. То смотришь - по два дубля, то сообщение вообще пропало.

Соглашусь насчет модуля SIM800L (себе как раз купил такой). Насчет библиотек, тут кто на что горазд. Я использую SIM900. Удобно и просто. Есть работа с GPRS, СМС, GSM. Для примера, здесь рабочий скетч с этой бибилиотекой.

Anton_Kos87
Offline
Зарегистрирован: 07.03.2014

собрал, подключил GSM m590, как бы команды управления те же самые, но работает как то не понятно... то нормально, то не шлет смс, причину так и не понял..... :(

MaksVV
Offline
Зарегистрирован: 06.08.2015

Anton_Kos87 пишет:

собрал, подключил GSM m590, как бы команды управления те же самые, но работает как то не понятно... то нормально, то не шлет смс, причину так и не понял..... :(

если подключил к хардварному сериал соединению, попробуй подключить библу софтсериала и попробовать на нём, у меня стало стабильно работать. 

Serg1
Offline
Зарегистрирован: 04.12.2015

GSM модуль 900-й стоит в разы дороже, чем М590  -3$. А по описанию функционал тот-же.

В эти выходные пытался прикрутить  цветной TFT экран от Нокии 3100. Что то не получилось. Первая сложность припаяться к контактам.

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

UTFT библиотеку установил. По описанию там контроллер Филипс PHF8833 стоит. В описании бибилиотеки он есть. Но не пашет. Иногда были мерцания экрана и пробегали полоски разноцветные по экрану. Как быть?

MaksVV
Offline
Зарегистрирован: 06.08.2015

AndryLeon пишет:

Хотел бы задать вопрос, почему все завязано на одной плате? Ведь все возможности завязаны на кол-во пинов, и они в какойто момент закончаться? 

...

...

минусом считаю несколько ардуино... 

плюсом - МЕНЬШЕ проводов! и всегда можно протянуть новый провод от нового датчика к одной из ардуино, чем тянуть его через всю квартиру по готовому ремонту... 

кто что думает? ну и Автор конечноже - как самый опытный в данном вопросе! 

Slavyanin55 пишет:

Про заканчивающиеся пины на меге, это да. Мне уже не хватает :) Хочу больше! Буду баять еще платы гальванической развязки и заводить на аналоговые входа. Можно конечно же приобрести еще одну Мегу присоседить и получить еще тьму свободных пинов. Короче буду решать проблемы по мере их поступления. 

Я конечно, согласен, что с проводами я переборщил, но зато удобно всё. Я вот только против соединения ардуин по радиоканалу, ну не доверяю я как то ему. Есть же маленькие ардуино мини. Вот их можно раскидать по дому, соединить витой парой. Я думаю будут работать хорошо.

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

http://homes-smart.ru/index.php/oborudovanie/prochee/rasshiryaem-porty

Serg1
Offline
Зарегистрирован: 04.12.2015

Антон,

Какой у тебя блок питания стоит на М590?  Там токи до 2А !

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Serg1 пишет:

GSM модуль 900-й стоит в разы дороже, чем М590  -3$. А по описанию функционал тот-же.

функционал у них у всех одинаковый, а вот стабильность разная. Ну тут на вкус и цвет, как говорится.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Anton_Kos87 пишет:

собрал, подключил GSM m590, как бы команды управления те же самые, но работает как то не понятно... то нормально, то не шлет смс, причину так и не понял..... :(

В первую очередь обрати внимание на мощность БП. У меня тоже с этим были проблемы, пока мощный болк питания не поставил. При получении сигнала GSM модуль отключался и уходил в перезагрузку. Теперь проблемы нет.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Slavyanin55 пишет:

Управление освещением;

Плата реле:

Вячеслав, вопрос по управлению освещением. На чем реализовано управление - вижу в шкафу только 8 реле? Или есть еще отдельно реле?

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Slavyanin55 пишет:

void izmereniya()   //  Замер температур с датчиков DS18B20 и влажности с датчика DHT11 
{  // http://arduino.ru/tutorials/BlinkWithoutDelay на основе
   unsigned long currentMillis = millis();
   if(currentMillis - previousMillis > interval) { // Замеры в интервале 

     //Датчик DHT11 иногда глючит. Вот так я борюсь с ошибочными измерениями, но такой способ увеличивает инерционность измерений
     dht.read(DHT11PIN); delay(10);       // Замеры температур с DHT11
     vlaga = dht.humidity;                // Уровень влажности % с DHT11
     Temp_Podpol = dht.temperature;       // Температура *С с DHT11
     if (Temp_Podpol < 3 || Temp_Podpol > 35){dhtschet++;} // +1 к счетчику ошибок DHT11 для статистики
     if (Temp_Podpol > TempPodpol+3){ Temp_Podpol=Temp_Podpol+3; } // Борьба с помехами. Сглаживает резкие всплески измерений
     if (Temp_Podpol < TempPodpol-3){ Temp_Podpol=Temp_Podpol-3; } // Борьба с помехами. Сглаживает резкие провалы измерений
     if(ZamerDHT==1){Zamer1DHT=Temp_Podpol;} // Запись результов по порядку в 1 замер
     if(ZamerDHT==2){Zamer2DHT=Temp_Podpol;} // Запись результов по порядку в 2 замер
     if(ZamerDHT==3){Zamer3DHT=Temp_Podpol;} // Запись результов по порядку в 3 замер 
     ZamerDHT++;  // +1 к счетчику замеров
     if(ZamerDHT >3){ZamerDHT=1;}
     TempPodpol = (Zamer1DHT+Zamer2DHT+Zamer3DHT)/3;  // Итого:Температура в подполе равна среднеарифметическому с последних 3 замеров
                        
     //Далее для датчиков DS18B20. Иногда датчик выдает -127. Борюсь с этим так...
     ds.requestTemperatures();            // Замеры температур с DS18B20
     delay(750);                          // Необязательная задержка
     Temp_ZalC    = ds.getTempC(ZalC);    // Считываем температуру в зале
     if(-55 < Temp_ZalC && Temp_ZalC < 120){TempZalC = Temp_ZalC; dsZshet=0;} delay(50);// Если нет ошибки, то обновляем температуру

     Temp_UlicaC  = ds.getTempC(UlicaC);   // Считываем температуру на улице
     if(-55 < Temp_UlicaC && Temp_UlicaC < 120){TempUlicaC = Temp_UlicaC; dsUshet=0;} delay(50);// Если нет ошибки, то обновляем температуру

     Temp_KuhnyaC = ds.getTempC(KuhnyaC);  // Считываем температуру в кухне
     if(-55 < Temp_KuhnyaC && Temp_KuhnyaC < 120){TempKuhnyaC = Temp_KuhnyaC; dsKshet=0;} delay(50);// Если нет ошибки, то обновляем температуру

     if(   Temp_ZalC < -55 && Temp_ZalC > 120)   {dsshet++; dsZshet++; } // +1 к счетчикам ошибок
     if( Temp_UlicaC < -55 && Temp_UlicaC > 120) {dsshet++; dsUshet++; } // +1 к счетчикам ошибок 
     if(Temp_KuhnyaC < -55 && Temp_KuhnyaC > 120){dsshet++; dsKshet++; } // +1 к счетчикам ошибок 

     UlicaS = analogRead(A15)/10;           // Считываем освещенность на улице
     voltmetr();                            // Считываем напряжения на выходе ИБП (норма 13,5в)
     previousMillis = currentMillis;}       // Сброс таймера
}

Может я не прав, но вроде бы в данном коде неправильно сделан счетчик ошибок на датчиках DS18B20. 

в строках 32,33 и 34   "&&" нужно заменить на "||" иначе в счетчик ошибки никогда не будут добавляться. 

вот в строке 10 правильно сделано

MaksVV
Offline
Зарегистрирован: 06.08.2015

MaksVV пишет:

Slavyanin55 пишет:

Опторазвязки я стараюсь делать где только можно. Оптопары, "убивают двух зайцев" 1. происходит согласование разных напряжений, 2-е гальваническая развязка и помеха защищенность. Мало ли чего бывает. Грозовые разряды, статика...  мне нужна надежность. + я не парюсь проводить кабели в близи с "помехами"

Опторазвязки у меня для гальванической изоляции входных и выходных дискретных сигналов. 

Вот интересно аналоги развязать возможно?

я вот тут подумал может вторую дуню для этого использовать? например нано. 

Вариант 1. Аналоговые сигналы поступают на ардуино нано. С неё через SPI на цифровой потенциометр и уже потом на аналоговый вход меги. Всё как в уроке по ардуино  Джереми Блюма  № 8. Конечно в таком случае, наверное, гальванической развязки не получится, но гальваническая развязка для шины SPI существует, её проще сделать. Например http://electronics.stackexchange.com/questions/42367/optoisolate-2mhz-spi-communication Сложности данного варианта в гальванической развязке шины SPI. 

Вариант 2. Аналоговые сигналы поступают на ардуино нано с Эксбее шилдом.  На меге тоже эксби шилд. Сигналы идут через беспроводной сериал. Всё как в уроке по ардуино  Джереми Блюма  № 9.  Сложности данного варианта в программировании и распознаванании данных из сериала. или блюпуп использовать для данного метода. 

А вообще у тебя система больше года работает. как со стабильностью? Зависал ли скетч? Не сгорала ли мега, оптопары? Были ли какиенибудь внештатные ситуации ? И как у тебя подключена шина One Wire датчиков DS напрямую к меге?  Вот ещё нашел  про развязку DS18B20 http://radiokot.ru/articles/58/

Оба представленных мною варианта это мутно. Почитал про 1-wire устройства - вообще тема! Разновидностей устройств куча. Проводов тянуть не надо! - уже все протянуто, т.к. тянули датчики ds18b20. Просто подкупает что любой датчик или испольнительное устройство к этой шине можно подключить. Никаких ардуин по дому разбрасывать и тем более писать на них скетч не надо. Код на основной (и, собственно, единственной) ардуине для устройств 1-wire довольно простой, есть и библиотеки. (Почитал про rs485, всякие сериалы, spi всё для меня мутно в плане кода и железа.) Вот бы ещё всё так радужно было на деле, я имею ввиду надёжность и отсутствие помех на шине. Но думаю если испольновать витуху типа STP с двойной экранировкой и заземлением экрана то должно быть гуд. Можно ещё попробовать гальванически развязать 1-wire от дуни по ссылке выше от радиокота, но хз как будет работать. А ещё если, будут помехи, поставить драйвер 1-wire с автоматической подтяжкой к питанию вместо постоянного резюка на 4,7 кОм, типа должно стабильнее работать. 

Вот популярные устройства кроме DS18B20 

DS2406P -  двухканальный дискретный ввод-вывод.

DS2408 -       восьмиканальный дискретный ввод-вывод.

DS2438 -       трёхканальная микросхема: температура и два аналог. входа. (удобно для помещений с инж коммуникациями -  мереем T и тут же подключаем аналоговый датчик протечки воды, или на улице -  мереем T и аналоговую освещённость )

DS2450 -       четырёхканальная микросхема аналогового ввода.

DS2890 -       регулируемое сопротивление (аналоговый вывод - потенциометр).

PS: тут захотелось считыватель домофонных ключей (i-Button) подключить, для снятия дома с охраны. А, вот он рядом DS18B20 висит, на него два провода кинул (ну всмысле на шину 1-wire), 10 строчек кода добавил и делов то. Дом с охраны снимается ставиться теперь и по i-Button. 

Anton_Kos87
Offline
Зарегистрирован: 07.03.2014

блок питания 12в 5Ампер подключен модуль через стабилизатор LM2596 с другими скетчами с работой GSM проблем нет, а сдесь как то не понятно то работает то нет, при включении то присылает смс SmartHome vkluchen - 6 ; 25 ну типа время включения и т.д. кстати у меня почемуто на запрос REPORT приходило HOME=OFFer'banyaodpole!|:0*C,0%:0*C и все!!!! ну то что градусы и проценты по нулям понято не был подключен DHT и 18B20 но все же на репорт вроде должен был приходить другой ответ, предпологаю что M590 не может отправить смс с началом новой строки и печатал мне все подряд что в сериале творилось....