Задание условий для включения\отключения реле по пороговой температуре.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Aurus, 26 июн 2017.

Метки:
  1. Aurus

    Aurus Нуб

    Всем доброго времени суток! Стоит задача создания sous vide, она же сувидница, предназначенная для прецизионного нагрева воды. Что имеем в наборе: Arduino nano, реле SRD05VDC, датчик DS18B20, пара кнопок для регулировки температуры и экран( TM1637). Основную часть кода на вывод температуры уже написали, осталось задать условие при котором при достижении определённого температурного порога реле отсекало потенциал от нагревателя.
    Собственно говоря вопрос - как реализовать это с программной точки зрения?

    #include "TM1637.h"
    #include <OneWire.h>

    #define beep_pin 3
    #define button_up 6
    #define button_down 5
    #define relay_pin 4
    #define CLK 9
    #define DIO 8
    #define ds_pin 10

    #define accuracy 1
    #define stand_temp 25
    #define del 100
    //*************назначение выводов гнидуины***************

    TM1637 tm1637(CLK, DIO);
    OneWire ds(ds_pin);

    int Temp;
    int8_t Disp[] = {0x01,0x02,0x03,0x04};

    void beep();
    void displ();


    void setup()
    {
    pinMode(beep_pin, OUTPUT);
    tm1637.set();
    tm1637.init();
    tm1637.point(POINT_ON);
    beep();
    }

    void loop()
    {
    byte data[2];
    ds.reset();
    ds.write(0xCC);
    ds.write(0x44);
    delay(750);
    ds.reset();
    ds.write(0xCC);
    ds.write(0xBE);
    data[0] = ds.read();
    data[1] = ds.read();
    Temp = (data[1]<< 8)+data[0];
    Temp = Temp>>4;
    Temp = round(Temp);
    displ();
    delay(del);
    }
    void beep()
    {
    for(int i = 0; i < 3; i++)
    {
    delay(300);
    digitalWrite(beep_pin, HIGH);
    delay(300);
    digitalWrite(beep_pin, LOW);
    }
    }

    void displ()
    {
    Disp[0] = stand_temp / 10;
    Disp[1] = stand_temp % 10;
    Disp[2] = Temp / 10;
    Disp[3] = Temp % 10;
    tm1637.display(Disp);
    }
    [/code]
     

    Вложения:

  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Если нужен прецизионный контроль, то почему int Temp?


    Упрощённо, в лоб, примерно так:

    Код (C++):
    if(Temp + accuracy > stand_temp)
       {
          digitalWrite(relay_pin, LOW);
       }
    else if(Temp - accuracy < stand_temp)
       {
          digitalWrite(relay_pin, HIGH);
       }
    Если с интеллектом, то ищите примеры ПИД.