(Решено)Как сделать терморегулятор на базе Arduino MAX6675 c выводом данных на Nextion

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Grommedia, 2 авг 2018.

  1. Grommedia

    Grommedia Нуб

    Просто делюсь как сделать терморегулятор.
    Понадобиться
    Arduino.
    Max 6675 c термопарами.
    И дисплей Nextion
    Вот скетч.


    Код (C++):
    #include <Nextion.h>
    #include <SoftwareSerial.h>                                                    // Переведено www.iarduino.ru
    #include <max6675.h>
    // Подключаем библиотеку max6675 для работы с датчиком температуры

    const uint8_t thermoDO  = 2;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод DO  ( SO, MISO ) модуля на чипе MAX6675
    const uint8_t thermoCS  = 3;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод CS  ( SS )       модуля на чипе MAX6675
    const uint8_t thermoCLK = 4;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод CLK ( SCK )      модуля на чипе MAX6675
    MAX6675       thermo(thermoCLK, thermoCS, thermoDO); // Объявляем объект thermo для работы с функциями и методами библиотеки MAX6675, указывая выводы ( CLK , CS , DO )                         // Подключаем библиотеку max6675 для работы с датчиком температуры
    const uint8_t thermoDO1  = 5;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод DO  ( SO, MISO ) модуля на чипе MAX6675
    const uint8_t thermoCS1  = 6;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод CS  ( SS )       модуля на чипе MAX6675
    const uint8_t thermoCLK1 = 7;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод CLK ( SCK )      модуля на чипе MAX6675
    MAX6675       thermo1(thermoCLK1, thermoCS1, thermoDO1); // Объявляем объект thermo для работы с функциями и методами библиотеки MAX6675, указывая выводы ( CLK , CS , DO )                                                    //

    const uint8_t thermoDO4  = 11;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод DO  ( SO, MISO ) модуля на чипе MAX6675
    const uint8_t thermoCS4  = 12;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод CS  ( SS )       модуля на чипе MAX6675
    const uint8_t thermoCLK4 = 13;                         // Определяем константу с указанием № вывода Arduino к которому подключён вывод CLK ( SCK )      модуля на чипе MAX6675
    MAX6675       thermo3(thermoCLK4, thermoCS4, thermoDO4); // Объявляем объект thermo для работы с функциями и методами библиотеки MAX6675, указывая выводы ( CLK , CS , DO )                                                    //
    int Relay = 8;
    int Relay1 = 9;
    int Relay2 = 10;
    int a = 50;
    int b = 200;
    int c = 45;

    SoftwareSerial nextion(A0, A1);// Nextion TX to pin 2 and RX to pin 3 of Arduino

    Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

    void setup(){                                        //
        Serial.begin(9600);
        // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/сек
        //Serial.println("Тест MAX6675");
      myNextion.init();
        //delay(500);
      pinMode(Relay, OUTPUT);
      pinMode(Relay1, OUTPUT);
      pinMode(Relay2, OUTPUT); // Ждём завершения переходных процессов датчика температуры после подачи питания
    }                                                    //
                                                         //
    void loop(){

      float h = thermo.readCelsius();
      float t = thermo1.readCelsius();
      float y = thermo3.readCelsius();
      myNextion.setComponentText("t0", String(t));
      delay(300);

      myNextion.setComponentText("t1", String(h));
      delay(300);

       myNextion.setComponentText("t2", String(y));
      delay(300);



      if  (thermo.readCelsius()  < a)
      {digitalWrite(Relay, LOW);
      myNextion.setComponentText("t5", String( "NAGREV" ));
      delay(300);
      }
      else if(thermo.readCelsius ()> a)
      {digitalWrite(Relay, HIGH);
      myNextion.setComponentText("t5", String( "NORMA" ));
      delay(300);
      }
      if  (thermo1.readCelsius()  < b)
      {digitalWrite(Relay1, LOW);
      myNextion.setComponentText("t3", String( "NAGREV" ));
      }
      else if(thermo1.readCelsius ()> b)
      {digitalWrite(Relay1, HIGH);
      myNextion.setComponentText("t3", String( "NORMA" ));
      }
     
      if  (thermo3.readCelsius()  < c)
      {digitalWrite(Relay2, LOW);
      myNextion.setComponentText("t6", String( "NAGREV" ));
      }
      else if(thermo3.readCelsius ()> c)
      {digitalWrite(Relay2, HIGH);
      myNextion.setComponentText("t6", String( "NORMA" ));
      }



      // Serial.print  ( "Pervuy kontur = "                  );    //
      // Serial.print  ( thermo.readCelsius()      ) ;    // Выводим температуру в °C
      // Serial.print  ( "        Vtoroy kontur = "                     );
       //Serial.print  ( thermo1.readCelsius()       );
       //Serial.print  ( "        Tretiy kontur = "                     );
       //Serial.print  ( thermo3.readCelsius()       );
        //Serial.println( "."                        );    //
        //delay(100);
        String message = myNextion.listen(); //check for message
      if(message != ""){ // if a message is received...
        Serial.println(message); //...print it out
      }
     
     
        //digitalWrite(Relay, LOW);   // реле включено

       // Serial.print  ( "C1 = "                     );    //
       // Serial.print  ( thermo1.readCelsius()       );    // Выводим температуру в °C
       // Serial.print  ( ", F1 = "                   );    //
        //Serial.print  ( thermo1.readFahrenheit()    );    // Выводим температуру в °F
        //Serial.println( "."                        );    //
       // delay(1000);                                     // Ждём 1 секунду
    }                                                    //
     
    Последнее редактирование: 2 янв 2019
  2. ИгорьК

    ИгорьК Гуру

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

    Grommedia Нуб

    Я даю иформацию которая работает. И вы не ищите это в хламе.
    Что не понятно в коде?
    Пины указаны, всё доступно ,что надо добавть????
     
  4. ИгорьК

    ИгорьК Гуру

    [​IMG]
     
    b707, Daniil, Igor68 и ещё 1-му нравится это.
  5. b707

    b707 Гуру

    код полный хлам. Сами-то его понимаете, или нашли где-то в инете и скопировали?

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

    Хотя б еще код был интересный или необычный - некоторые огрехи можно было бы простить. А тут просто корявый скетч нулевого уровня сложности, который любой начинающий запросто напишет сам.
     
    Евгенич, Airbus и parovoZZ нравится это.
  6. На этом дисплее можно было бы сделать меню настроек терморегулятора. Зачем же еще сенсорный экран?
     
  7. b707

    b707 Гуру

    да вообще не понятно, к чему тут экран :) и код весь из обрывков каких-то, половина закомментировна... черновик какой-то.
     
  8. parovoZZ

    parovoZZ Гуру

    Скетч и переводится как черновик.
     
    Mitrandir и b707 нравится это.
  9. ZAZ-965

    ZAZ-965 Гуру

    Переводится как эскиз или набросок. Я услышал это слово раньше, чем Ардуино - моя сестра рисовала скетчи в скетчбуке (рус. мазня в альбоме). Но Гугл говорит, что скетч может переводиться как чучело или пугало.
     
    Последнее редактирование: 7 авг 2018
  10. parovoZZ

    parovoZZ Гуру

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

    Grommedia Нуб

    Код сделан читабельным))) В моем проекте нужен дисплей. Скетч подходит всем кто делает терморегулятор на базе Max 6675 c термопарами. А вывод данных делайте хоть на лоб)))
     
  12. b707

    b707 Гуру

    Вы реально полагаете, что эта недоделка хоть кому-то будет полезна?

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

    Ну и главное - ну кому нужны эти 20 строчек, что в них нового или сложноо- библиотечные функции чтения температур и пара строк вывода на экран?
    ради чего вы их выложили? похвастать, что вы так можете? - зря.
    Теперь все видят. что программируете вы плохо, только и всего.
     
    Евгенич и parovoZZ нравится это.