Самодельный ардуино контролер отопления

Тема в разделе "Силовая электроника", создана пользователем mednagolov, 25 окт 2022.

  1. mednagolov

    mednagolov Гик

    Вроде распаял, на GNDтеперь пины не звонятся, теперь когда прозванивал светодиод NET замерцал....
    Антенну к пину GPRS паять?
    да
     
  2. SergeiL

    SergeiL Оракул Модератор

    Да
     
    mednagolov нравится это.
  3. mednagolov

    mednagolov Гик

    ПОДАЛ ПИТАНИЕ! светодиод пвр засжегся, светодиод net моргает раз в секунду ...АТ командам не отвечает...
     
  4. mednagolov

    mednagolov Гик

    ура! зарабоооталооо! убрал резисторы с UART вообще! тогда сразу на АТ отвечает - ok , call ready , sms ready. Светодиод моргает раз в секунду.
     
    Airbus нравится это.
  5. mednagolov

    mednagolov Гик

    питание Lm-ка 5вольт через диод конденсатор 1000 мкф, без аумулятора тоже работает,
     
  6. parovoZZ

    parovoZZ Гуру

    На хера ты их туда ставил???
     
  7. Airbus

    Airbus Радиохулиган Модератор

    Шоб було!
     
    mednagolov нравится это.
  8. mednagolov

    mednagolov Гик

    Ващще! тема по SIM800C широка и глубока..! Ушел в неё гораздо выше колен....)))
    Счас при каждой свободной секунде мучаю модемку, соответственно мучаются родственики и их телефоны....)))
    Блин, счас думаю чета маловато в тарифе 100 СМСок . Вощем постигаю постепенно...)))
    Главное теперь понятно сколько и чих ног и как в проекте будут задействованы , блин опять плату контролера придётся в ЛАУТЕ перерисовывать (три платы попыток №1, №2, №3, готовые - травленые , сверлёные, частично распаяные уже) счас в мусорку пойдут....)))
     
  9. mednagolov

    mednagolov Гик

    К стати, GSM модулёк ведет себя прилично, несмотря на все мои Експеременты с ним и с дуинкой пока не сбоит, - походу крепкая весч !
     
  10. parovoZZ

    parovoZZ Гуру

    а что с ним должно случиться? ты наверное из тех, кто думает, что если телек чаще переключать, то он быстрее коньки отбросит?
     
  11. parovoZZ

    parovoZZ Гуру

    а если молотком?
     
  12. mednagolov

    mednagolov Гик

    вОПРОС по програмному UART
    в IDешке имеем такие строки -
    Код (C++):
    #include <SoftwareSerial.h>                     // Библиотека програмной реализации обмена по UART-протоколу
    SoftwareSerial SIM800(8, 9);                    // RX, TX
     
    Я правильно понимаю что програмный UART можно задать любые пины дуинки ?
    например так должно работать ?-
    Код (C++):
    #include <SoftwareSerial.h>                     // Библиотека програмной реализации обмена по UART-протоколу
    SoftwareSerial SIM800(4, 3);                    // RX, TX
     
  13. mednagolov

    mednagolov Гик

    То не наш метод...
     
  14. Airbus

    Airbus Радиохулиган Модератор

    Зачем? Есть же аппаратный UART ноги RX и ТХ. Он всегда будет работать лучше и код будет компактнее. Я никогда програмный не использую. Но! На время прошивки/перепрошивки надо будет их отключать от GSM модуля и вообще освобождать. Но только на момент прошивки. А так да, любые
     
    mednagolov нравится это.
  15. mednagolov

    mednagolov Гик

    Да, согласен, Для этого у меня в схеме будет впаян двойной дип переключатель и будет один * штатный UART* (ПРОГРАМ / РАБОТА).
    но пока мне нужен и монитор порта и uart на SIM800C.
     
  16. Airbus

    Airbus Радиохулиган Модератор

    Так и используйте аппаратный. Там все будет видно что идет на модуль и с него. + Вручную можно отправить АТ команду в модуль
     
  17. mednagolov

    mednagolov Гик

    ПИНЫ ДУИНКИ 3 как-Тх , 4 как Rx можно задать?
    вот так -
    Код (C++):
    #include <SoftwareSerial.h>                     // Библиотека програмной реализации обмена по UART-протоколу
    SoftwareSerial SIM800(4, 3);                    // RX, TX
     
  18. mednagolov

    mednagolov Гик

    именно в том и цель...
     
  19. mednagolov

    mednagolov Гик

    вопрос снимается! Пины (4 и 3) дуины в програмном UARTе действуют...[проверено толькочто ]
     
  20. mednagolov

    mednagolov Гик

    И так о достигнутом....
    Нашел не плохой проектик
    *Отправка температуры через SMS (GSM) и Arduino.*
    с сайта robotchip.ru
    кроме температуры управляет релюшками по СМС и шлёт отчёт состояния.
    Вникся я в него и добавил кой чаго ... Свой ОЛЕДэкранчик , пищалку.....
    Конечно проэкт ещё в работе, думаю надо на милис его перевести, и в процессинге для смарта *окошко* дорисовать , с блютусом подружить...
    вощем планов грамодьё ....)))
    Но пока то что есть и действует на данном этапе-
    Код (C++):
    /*
    Доработка скетча *Отправка температуры через SMS (GSM) и Arduino.*
    с сайта robotchip.ru

    При отправки SMS с любого телефона ON_1 (ON_2) первое или второе реле включиться
    или OFF_1 (OFF_2) отключиться, в ответ приходит сообщение о состоянии.
    Так же при отправки TEMP_1 (TEMP_2) получим сообщение с температурой.

    В String("+7xxxxxxxxxx")); вместо хххххххххх вбейте номер вашего телефона .
    SMSки и звонки с посторонних номеров телефонов игнорятся.

    Я Добавляю ОЛЕДэкранчик и спикер
    Тестировалось на Arduino IDE 1.8.5
    Дата тестирования 10.11.2022г.
    */

    #include <SoftwareSerial.h>                 // Подключаем библиотеку SoftwareSerial
    #include <OneWire.h>                        // Подключаем библиотеку OneWire
    #include <DallasTemperature.h>              // Подключаем библиотеку DallasTempature

    #include <GyverOLED.h>
    GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
    const int bip = 2 ;         // зумер подключен к D3
    SoftwareSerial mySerial(4, 3);              // Выводы SIM800L Tx & Rx подключены к выводам Arduino 3 и 2
    char incomingByte;
    String inputString;
    int relay_1 = 7;                           // Вывод управления реле 1
    int relay_2 = 8;                           // Вывод управления реле 2
    #define ONE_WIRE_BUS A2                      // Указываем, к какому выводу подключена DQ
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);
     
    void setup() {/////////

      pinMode(bip,OUTPUT);        //пин на бипер
      oled.init();                               // инициализация
     
       pinMode(relay_1, OUTPUT);                 // Установим вывод как выход
       digitalWrite(relay_1, HIGH);              // Устанавливаем высокий уровень
       pinMode(relay_2, OUTPUT);                 // Установим вывод как выход
       digitalWrite(relay_2, HIGH);              // Устанавливаем высокий уровень
       Serial.begin(9600);                  
       mySerial.begin(9600);
    while(!mySerial.available()){               // Зацикливаем и ждем инициализацию SIM800L
        mySerial.println("AT");                  // Отправка команды AT
        delay(1000);                             // Пауза
        Serial.println("Connecting…");          // Печатаем текст
        }
        Serial.println("Connected!");            // Печатаем текст
        mySerial.println("AT+CMGF=1");           // Отправка команды AT+CMGF=1
        delay(1000);                             // Пауза
        mySerial.println("AT+CNMI=1,2,0,0,0");   // Отправка команды AT+CNMI=1,2,0,0,0
        delay(1000);                             // Пауза
        mySerial.println("AT+CMGL=\"REC UNREAD\"");

    ////////////// заставка //////////////////////////////////////////////
    oled.clear();       // очистка
      oled.setScale(2);   // масштаб текста (1..4)
      oled.home();        // курсор в 0,0
      oled.print("Atmeda382");
      delay(2000);
     
      // oled.clear();
       oled.setCursor(0, 3);
       oled.print(" ТЕСТ- ОК !");
            tone(bip,1500,300);
    delay(2000);
       oled.clear();
       oled.setCursor(0, 0);
       oled.print("МОДЕМ-ОК!");
    delay(2000);
      oled.clear();
    }//////////
    void loop(){ //**
       if(mySerial.available()){                  // Проверяем, если есть доступные данные
           delay(100);                            // Пауза
          while(mySerial.available()){            // Проверяем, есть ли еще данные.  
          incomingByte = mySerial.read();         // Считываем байт и записываем в переменную incomingByte  
          inputString += incomingByte;            // Записываем считанный байт в массив inputString
         }  
           delay(10);                             // Пауза      
           Serial.println(inputString);           // Отправка в "Мониторинг порта" считанные данные
           inputString.toUpperCase();             // Меняем все буквы на заглавные  
    //---
    /*
    if (inputString.indexOf("Connected!") > -1){ // Проверяем полученные данные, если ON_1 включаем реле 1
         
           oled.clear();
    oled.setCursor(0, 3);
    oled.print("МОДЕМ - ОК !");
      tone(bip,1500,300);  
         
         
           // digitalWrite(relay_1, LOW);      
            //sms(String("Relay 1 - ON"), String("+79221824894"));
            delay(50);}
    */

    //---    


         
         
           if (inputString.indexOf("ON_1") > -1){ // Проверяем полученные данные, если ON_1 включаем реле 1
            digitalWrite(relay_1, LOW);      
            sms(String("Relay 1 - ON"), String("+7xxxxxxxxxx"));
      oled.clear();
    oled.setCursor(0, 3);
    oled.print("РЕЛЕ1- ВКЛ !");
      tone(bip,2500,300);      
           
            delay(50);}
       
           if (inputString.indexOf("OFF_1") > -1){ // Проверяем полученные данные, если OFF_1 выклюем реле 1
            digitalWrite(relay_1, HIGH);      
            sms(String("Relay 1 - OFF"), String("+7xxxxxxxxxx")); // Отправка SMS    
    oled.clear();
    oled.setCursor(0, 3);
    oled.print("РЕЛЕ1- ОТКЛ !");
      tone(bip,2500,300);        
           
            delay(50);}
         
           if (inputString.indexOf("ON_2") > -1){ // Проверяем полученные данные, если ON_2 включаем реле 2
            digitalWrite(relay_2, LOW);      
            sms(String("Relay 2 - ON"), String("+7xxxxxxxxxx"));  // Отправка SMS  
            delay(50);}
         
           if (inputString.indexOf("OFF_2") > -1){     // Проверяем  полученные  данные, если OFF_2 выключаем реле 2
            digitalWrite(relay_2, HIGH);      
            sms(String("Relay 2 - OFF"), String("+7xxxxxxxxxx")); // Отправка SMS  
            delay(50);}
         
           if (inputString.indexOf("TEMP_1") > -1){     // Проверка полученные данные, если TEMP_1 отправляем температуру
            sensors.requestTemperatures();  
            float temp = sensors.getTempCByIndex(0);
            Serial.print(sensors.getTempCByIndex(0));
            sms(String(temp), String("+7xxxxxxxxxx")); // Отправка SMS  
            delay(50);}
         
           if (inputString.indexOf("TEMP_2") > -1){     // Проверка полученные данные, если TEMP_2 отправляем температуру
            sensors.requestTemperatures();  
            float temp2 = sensors.getTempCByIndex(1);
            Serial.print(sensors.getTempCByIndex(1));    
            sms(String(temp2), String("+7xxxxxxxxxx")); // Отправка SMS  
            delay(50);}
       
           if (inputString.indexOf("OK") == -1){  
            mySerial.println("AT+CMGDA=\"DEL ALL\"");    
            delay(1000);}    
            inputString = "";}
    }
    void sms(String text, String phone)  // Процедура Отправка SMS
    {
       Serial.println("SMS send started");
       mySerial.println("AT+CMGS=\"" + phone + "\"");
       delay(500);
       mySerial.print(text);
       delay(500);
       mySerial.print((char)26);
       delay(500);
       Serial.println("SMS send complete");
       delay(2000);
    }