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

Augustus
Offline
Зарегистрирован: 26.06.2017

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

Вот код который уже имеется.
 

#include <DHT.h>

#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);
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Основная ошибка, можно сказать обычная не обычная, когда разработчик не знает, как должно работать его творение.

1- экран у вас один. Что он должен показывать ? температуру на датчике.

2 - если вы выставляете температуру переключения, то вы разумеется тоже должны выдеть. Но там же смотри п.1

3- суммируя п.1 и п.2 вы должны понять, что температура перекл должна переключаться при переходе отж->наж на 1 шаг. И дальше если кнопка нажата показывать температуру перекл. Отпустили - показ температуры на датчике

4- еще надо организовать записть темпер перекл в ЕЕПРОМ .

Вывод: скорее всего программа должна быть на более высоком уровне программирования (понимания программирования) . 

bwn
Offline
Зарегистрирован: 25.08.2014

С программной точки зрения, надо использовать ифы и операторы сравнения.