15-01-2017, 22:26
Witam
Z kilku dostępnych w sieci projektów "ulepiłem" sobie wielokanałowy sterownik pieca gazowego.
Krótki opis działania: w dwóch (na razie) pokojach umieszczone będą czujniki DS18b20 i na grzejnikach lub przy rozdzielaczu zamontowane elektrozawory. W przypadku spadku temperatury poniżej zadanej, załączany jest przekaźnik sterujący danym grzejnikiem i po ustalonym czasie załączany piec. Program działa jak należy, ale nie wiem co dopisać do kodu, żebym dostępnymi 2 przyciskami p1/p2 (+/- zadana temp) mógł ustawiać oddzielnie temperaturę T1 i T2 (oddzielnie dla pokoi). Domyślam się, że trzeba dołożyć chociaż jeden dodatkowy przycisk "setup" którym będę wybierał "pokój" ale co dopisać do kodu ... nie mam bladego pojęcia. Na razie ustawiana jest tylko T1.
No i kwestia histerezy. Co i gdzie dopisać, żeby przekaźnik był załączany przy T, a wyłączany przy T+h?
Arduino mam od tygodnia więc proszę o wyrozumiałość. Z góry dziękuję za pomoc.
Z kilku dostępnych w sieci projektów "ulepiłem" sobie wielokanałowy sterownik pieca gazowego.
Krótki opis działania: w dwóch (na razie) pokojach umieszczone będą czujniki DS18b20 i na grzejnikach lub przy rozdzielaczu zamontowane elektrozawory. W przypadku spadku temperatury poniżej zadanej, załączany jest przekaźnik sterujący danym grzejnikiem i po ustalonym czasie załączany piec. Program działa jak należy, ale nie wiem co dopisać do kodu, żebym dostępnymi 2 przyciskami p1/p2 (+/- zadana temp) mógł ustawiać oddzielnie temperaturę T1 i T2 (oddzielnie dla pokoi). Domyślam się, że trzeba dołożyć chociaż jeden dodatkowy przycisk "setup" którym będę wybierał "pokój" ale co dopisać do kodu ... nie mam bladego pojęcia. Na razie ustawiana jest tylko T1.
No i kwestia histerezy. Co i gdzie dopisać, żeby przekaźnik był załączany przy T, a wyłączany przy T+h?
Arduino mam od tygodnia więc proszę o wyrozumiałość. Z góry dziękuję za pomoc.
Kod:
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
int p1 = 7; // przycisk zwiekszajacy nastawe temperatury T1
int p2 = 6; // przycisk zmniejszajacy nastawe temperatury T1
int p1state = 0;
int p2state = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define ONE_WIRE_BUS A0
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int nastaw1 = 22; // zadana temperatura T1
int nastaw2 = 23; // zadana temperatura T2
int przekaznik1 = 8; // pin przekaznik elektrozaworu z czujnika T1
int przekaznik2 = 9; // pin przekaznik elektrozaworu z czujnika T2
int przekaznik3 = 10; // pin przekaznik pieca
void setup(void)
{
pinMode(przekaznik1,OUTPUT);
pinMode(przekaznik2,OUTPUT);
pinMode(przekaznik3,OUTPUT);
pinMode (7, INPUT_PULLUP); // przycisk zwiekszajacy nastawe temperatury
pinMode (6, INPUT_PULLUP); // przycisk zmniejszajacy nastawe temperatury
lcd.begin(16, 2);
sensors.begin();
Serial.begin(9600);
}
void wys(void){
sensors.requestTemperatures();
lcd.setCursor(0, 0);
lcd.print("T1=");
lcd.print(sensors.getTempCByIndex(0));
lcd.print(" ");
lcd.print("NT1=");
lcd.print(nastaw1);
lcd.setCursor(0, 1);
lcd.print("T2=");
lcd.print(sensors.getTempCByIndex(1));
lcd.print(" ");
lcd.print("NT2=");
lcd.print(nastaw2);
if (sensors.getTempCByIndex(0) < (nastaw1)) {
digitalWrite(8,HIGH);
} else {
digitalWrite(8,LOW);
}
if (sensors.getTempCByIndex(1) < (nastaw2)) {
digitalWrite(9,HIGH);
} else {
digitalWrite(9,LOW);
}
}
void loop(void)
{
p1state = digitalRead(p1);
p2state = digitalRead(p2);
if(p1state == LOW){nastaw1=nastaw1+1;}
if(p2state == LOW){nastaw1=nastaw1-1;}
wys();
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH) { //
delay(3000);
digitalWrite(10, HIGH);
}
else {
digitalWrite(10, LOW);
}
}