• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wielokanałowy sterownik pieca gazowego.
#1
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 tygodniaSmile 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);
     }

       
     
 
}
 
Odpowiedź
#2
Nie zagłębiając się w kod, histerezę możesz załatwić dzięki sprawdzeniu, czy przekaźnik jest załączony, czy nie. Jeśli tak, to wyłącz go przy T+h, natomiast jeśli nie, to włącz go przy T.
 
Odpowiedź
#3
(23-01-2017, 14:06)krn78 napisał(a): Nie zagłębiając się w kod, histerezę możesz załatwić dzięki sprawdzeniu, czy przekaźnik jest załączony, czy nie. Jeśli tak, to wyłącz go przy T+h, natomiast jeśli nie, to włącz go przy T.

Witam
Tak ustawiłem, działa jak należy. 
Kod:
  if (sensors.getTempCByIndex(0) < (nastaw1))
     { digitalWrite(8,HIGH); }
 
  if (sensors.getTempCByIndex(0) > (nastaw1+1)) // histereza
     { digitalWrite(8,LOW); }  
}
 
Odpowiedź
#4
Co do dodatkowego przycisku, możesz za jego pomocą ustawiać dodatkową zmienną, która decyduje, którym pokojem sterujesz. To tak samo, jak z tą histerezą, sprawdzasz dodatkowy warunek i tyle.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości