Заказ.dht22 заменить на DS18B20.

Тема в разделе "Закажу проект", создана пользователем Alba, 18 апр 2019.

  1. Alba

    Alba Нерд

    Всем привет. Есть рабочая схема,но датчики ну не как не устраивают эти dht22.Цена вопроса?
    Код (C++):
    #include <SoftwareSerial.h>
    #include "DHT.h"
    #define DHT_1_PIN 4
    #define DHT_2_PIN 5
    #define DHT_3_PIN 6
    #define DHT_4_PIN 7// pin на котором висит датчик температуры
    #define DHT_5_PIN 12 //Датчик температуры на улице
    #define DHTTYPE DHT22  // DHT 22 тип датчика
    //Отсылается смс в формате: влажность;температура;устройство1;устройство2;устройство3;устройство4;Контроль периметра;Состояние периметра;Контроль автотемпературы;Установленная температура;STEWARD;

    int powerGSM = 9; //Пин включения GSM
    int unit1 = A1; //Террасса
    int unit2 = A2; //Ванна
    int unit3 = A3;//Гостинная
    int unit4 = A4;//Комната
    int unit5 = A5; // Роутер
    int perim = A0;// Датчик периметра
    int power = 10; // Контроль внешнего питания
    int svet = 11; // Включение света на терассе и крыльце
    int redLed = 13;// Cветодиод работы всего девайса


    String statusHome;
    int t1=0;
    int t2=0;
    int t3=0;
    int t4=0;
    int us1=0;
    int us2=0;
    int us3=0;
    int us4=0;
    int u1st;
    int u2st;
    int u3st;
    int u4st;
    int svetsost=0;
    char data;//Содержит символ полученый от сим модуля.

    unsigned long currentTime;
    unsigned long loopTime;
    unsigned long currentTimeGSM;
    unsigned long loopTimeGSM;
    boolean unit1status = false; //tersost
    boolean unit2status = false; //vannasost
    boolean unit3status = false;//gostinsost
    boolean unit4status = false;//roomsost
    boolean unit5status = false;//router
    int isPerimetr = 0; //Контроль периметра
    boolean sendSMS = false; //Для проверки что смс отсылаем только один раз
    boolean sendSMSPow = false; //Для проверки что смс отсылаем только один раз для цикл контроля питания
    int isAuto = 0; //Автоматическое управление температурой
    int autoTemp = 0;
    int delta = 2;

    DHT dht1(DHT_1_PIN, DHTTYPE);
    DHT dht2(DHT_2_PIN, DHTTYPE);
    DHT dht3(DHT_3_PIN, DHTTYPE);
    DHT dht4(DHT_4_PIN, DHTTYPE);
    DHT dht5(DHT_5_PIN, DHTTYPE);
    SoftwareSerial gprsSerial(2, 3);

    String currStr = "";
    String bal = "";

    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;
    void setup()
    {
        pinMode(unit1, OUTPUT);
        pinMode(unit2, OUTPUT);
        pinMode(unit3, OUTPUT);
        pinMode(unit4, OUTPUT);
        pinMode(unit5, OUTPUT);
        pinMode(powerGSM, OUTPUT);
        pinMode(perim, INPUT);
        pinMode(svet, OUTPUT);
        pinMode(redLed, OUTPUT);
     
       
        digitalWrite(unit1, LOW);
        digitalWrite(unit2, LOW);
        digitalWrite(unit3, LOW);
        digitalWrite(unit4, LOW);
        digitalWrite(svet, LOW);
        digitalWrite(powerGSM, LOW);
        digitalWrite(redLed, LOW);
        //Включаю GSM Модуль
        digitalWrite(powerGSM, HIGH);
        delay(1000);
        digitalWrite(powerGSM, LOW);
        delay(5000);
        gprsSerial.begin(19200);
        delay(300);
        // Настраиваем приём сообщений с других устройств
        // Между командами даём время на их обработку
        gprsSerial.print("AT+CMGF=1\r");
        delay(300);
        gprsSerial.print("AT+IFC=1, 1\r");
        delay(300);
        gprsSerial.print("AT+CPBS=\"SM\"\r");
        delay(300);
        gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
        delay(500);
        gprsSerial.print("ATS0=6\r");
        delay(300);
        gprsSerial.print("AT+CLVL=100\r"); // Устанавливает громкость динамика, значения от (0-100)
        delay(300);
        gprsSerial.print("AT+CALM=1\r"); // Отключает все мелодии и звуки при входящем звонке и СМС
        delay(300);
        //Инициализация температурного датчика
        Serial.begin(9600);
        Serial.println("DHT22 test!");
        dht1.begin();
        delay(3000);
    // ParseSMS("valdai;tersost;t1;h1;vannasost;t2;h2;gostinsost;t3;h3;roomsost;t4;h4;router;perimetr");
      currentTime = millis();
      loopTime = currentTime;
      currentTimeGSM = millis();
      loopTimeGSM = currentTimeGSM;
    }
    void loop()
    {
      currentTimeGSM = millis();
      if(currentTimeGSM >= (loopTimeGSM + 600000))
      { if (testGsmOn()==1){
        gsmOn();}
             
    loopTimeGSM = currentTimeGSM;
          }
         
    int sostPerimetr; //Состояние периметра
    int sostPower; // Сосотояние внешнего питания

      if (gprsSerial.available()){
      char currSymb = gprsSerial.read();
     

    Serial.print(currSymb);
          //  return;
      //  char currSymb = gprsSerial.read();
      //  Serial.println(gprsSerial.read());
     
       
         
        if ('\r' == currSymb) {
         
            if (isStringMessage) {
                //если текущая строка - SMS-сообщение,
                //отреагируем на него соответствующим образом
                if (!currStr.compareTo("Zapros"))
                {
                 balance();
                  GetDatchik();
                }
                else if (currStr.startsWith("Ardu")) {
                  ParseSMS(currStr);
                }
           
                isStringMessage = false;
            } else {
                if (currStr.startsWith("+CMT")) {
                    //если текущая строка начинается с "+CMT",
                    //то следующая строка является сообщением
                    isStringMessage = true;
                }
            }
           
            currStr = "";
        } else if ('\n' != currSymb) {
            currStr += String(currSymb);
        }
      }
      //  Контроль периметра !!!
      //if (isPerimetr==1) { //Проверка Включен ли контроль периметра
      //digitalWrite(redLed, HIGH);
           //sostPerimetr = digitalRead(perim);
            // if (sostPerimetr==LOW) { //Проверка на разомкнутый периметри отсылаем СМС
            //  if (sendSMS==false){
            //    sendTextMessage("WARNING! Valdai door open!");
           //     sendSMS=true;
         //     }
          //    }
         //    
    // }  else {digitalWrite(redLed, LOW);
       
    //  sendSMS=false;
      //      }
             
     
    // Контроль внешнего питания
           // sostPower = digitalRead(power);
           //  if (sostPower==LOW) { //Проверка отключения внешнего питания
            //  if (sendSMSPow==false){
             //   sendTextMessage("WARNING! Valdai, MAIN POWER OFF!");
            //    sendSMSPow=true;
          //    }
           //   }
             
    //  else {
       
    //  sendSMSPow=false;
       //     }
             
     
    //  Контроль температуры!!!
      if (isAuto==1) { //Проверка Включен автоуправление батареями
      //Замер температуры можно проводить не чаще раз в 5 минут
         currentTime = millis();
      if(currentTime >= (loopTime + 10000)){
      t1 = int(dht1.readTemperature());
      t2 = int(dht2.readTemperature());
      t3 = int(dht3.readTemperature());
      t4 = int(dht4.readTemperature());
      loopTime = currentTime;
      }
     
    //
    //  Serial.print("t=");
    //  Serial.println(t);
    //  Serial.print("autoTemp+delta=");
    //  Serial.println(autoTemp+delta);
          if (unit1status==true){
          if (t1 > autoTemp-delta){
               digitalWrite(unit1, HIGH); us1=0;}
             
            else if  (t1 < autoTemp+delta)
             {digitalWrite(unit1, LOW); us1=1;}
            }
         
           if (unit2status==true){
          if (t2 < autoTemp-delta){
               digitalWrite(unit2, HIGH); us2=0;}
             
            else if  (t2 > autoTemp+delta)
             {digitalWrite(unit2, LOW); us2=1;}
            }
         
           if (unit3status==true){
          if (t3 < autoTemp-delta){
               digitalWrite(unit3, HIGH); us3=0;}
             
            else if  (t3 > autoTemp+delta)
             {digitalWrite(unit3, LOW); us3=1;}
            }
         
           if (unit4status==true){
          if (t4 < autoTemp-delta){
               digitalWrite(unit4, HIGH); us4=0; }
             
            else if  (t4 > autoTemp+delta)
             {digitalWrite(unit4, LOW); us4=1;}
            }
           
           
    }
    }
    void GetDatchik() {

     
      // Пол
      // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
      float h1 = dht1.readHumidity();
      float t1 = dht1.readTemperature();
      float h2 = dht2.readHumidity();
      float t2 = dht2.readTemperature();
      float h3 = dht3.readHumidity();
      float t3 = dht3.readTemperature();
      float h4 = dht4.readHumidity();
      float t4 = dht4.readTemperature();
      float t5 = dht5.readTemperature();
       
      u1st = unit1status - us1;
      u2st = unit2status - us2;
      u3st = unit3status - us3;
      u4st = unit4status - us4;
     
     
      Serial.print("Unit1status=");
      Serial.println(u1st);
       Serial.print("Unit2status=");
      Serial.println(u2st);
       Serial.print("Unit3status=");
      Serial.println(u3st);
       Serial.print("Unit4status=");
      Serial.println(u4st);
      Serial.print("Temperature street=");
      Serial.println(t5);
     
      // check if returns are valid, if they are NaN (not a number) then something went wrong!
      //if (isnan(t1) || isnan(h1)) {
      //  Serial.println("Failed to read from DHT");
      //} else {
        statusHome = String("Valdai")+String(";")+int(u1st)+String(";")+int(t1)+String(";")+int(h1)+String(";")+int(u2st)+String(";")+int(t2)+String(";")+int(h2)+String(";")+int(u3st)+String(";")+int(t3)+String(";")+int(h3)+String(";")+int(u4st)+String(";")+int(t4)+String(";")+int(h4)+String(";")+int(unit5status)+String(";")+int(isPerimetr)+String(";")+int(autoTemp)+String(";")+String(bal)+String(";")+int(t5)+String(";")+int(svetsost);
        sendTextMessage(statusHome);
        bal = "";
       // Serial.flush();

        //Serial.print("Message send"); //Влажность
    //  Serial.print(h);
    //  Serial.print(";");
    //  Serial.print("T"); //Температура
    //  Serial.print(t);
    //  Serial.println(";");
    //  Serial.println(statusHome);
    // }
    }


    void ParseSMS(String currStr) {
     
    us1=0;
    us2=0;
    us3=0;
    us4=0;

      int firstSemicolon;
      //Распарсиваем SMS
      firstSemicolon = 1;//находим первую ;
      //Получаем значение Автоматического режима контроля температуры

     
       
    /
     
  2. Airbus

    Airbus Радиохулиган

    В чем вопрос то?
     
  3. BAR__MEN

    BAR__MEN Иномирянин Команда форума

    Лучше самому пару строк кода заменить, чем кому-то платить..
     
  4. Alba

    Alba Нерд

    dht22 заменить на DS18B20
     
  5. Airbus

    Airbus Радиохулиган

    Хочешь я поищу за тебя на Форуме или в Гугле?
     
    BAR__MEN нравится это.
  6. Alba

    Alba Нерд

    куда копать то хоть в какую сторону?
     
  7. BAR__MEN

    BAR__MEN Иномирянин Команда форума

    В сторону Гугла
     
  8. Alba

    Alba Нерд

    На выходных займусь по ходу дела.
     
  9. sser

    sser Гик

    удали все строки с DHT
    и "подсунь" строки t1=(а здесь температура с DS-ки); t2=…..t;3=…………..

     
    Последнее редактирование: 19 апр 2019
  10. DetSimen

    DetSimen Гуру

    а влажность то, влажность откудова брать?
    мошт ты лучше DHT22 на BME280 заменишь? И переделок минимум
     
    Airbus нравится это.
  11. vvr

    vvr Инженерище

    деда, не пройдёт - у тс 4 датчика влажности....
     
    BAR__MEN нравится это.
  12. DetSimen

    DetSimen Гуру

    кабутта, ему 4 Dallas-а точнее влажность измериють, чем 4 BME каждый на своей Soft I2C
     
  13. vvr

    vvr Инженерище

    деда, а разве так просто подцепить 4 BME?
     
  14. parovoZZ

    parovoZZ Гуру

    касик
     
  15. parovoZZ

    parovoZZ Гуру

    по SPI - проще некуда.
     
  16. Airbus

    Airbus Радиохулиган

    1 килорубель?
     
  17. DetSimen

    DetSimen Гуру

    можно, как удивительно правильно говорит параБосс, по SPI прицепица, можно по SoftWire.
     
  18. parovoZZ

    parovoZZ Гуру

    и бутылка финляндии. Встречаемся у бритава.
     
    Airbus нравится это.
  19. Alba

    Alba Нерд

    MIT App Inventor 2 Вот где засада!
    Прошу у Вас помощи по проекту. В виду изменения в appinventor подскажите что мне поменять что бы с запросом приходил ответ в виде распаренного сообщения.Мозгов хватило только на отправку смс переделать,а вот на прием приходит только обычное смс.
    upload_2019-4-20_12-32-43.png