• 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
regulator temperatury co, cwu
#1
Witam wszystkich. Jestem tu nowy.
 Od jakiegoś czasu bawię się w programowanie mikro kontrolerów na arduino uno. Skomponowałem dość ciekawy program do sterownika grzania wody w centralnym ogrzewaniu.
do projektu użyłem:
-Arduino uno 
-Wyświetlacz LCD z konwerterem I2C
-dwukanałowy moduł przekaźnikowy
-dwa czujniki temperatury ds18b20 w obudowie+ rezystory 4,7kohm
Wszystko ładnie działa Big Grin Ale... brakuje mi opcji zmiany zadanej temperatury za pomocą trzech przycisków.
Dobrze by było skomponować jakieś małe menu, którym można by zmienić temperaturę załączenia przekaźnika nr 1 ale nie mam żadnej koncepcji jak by można to zrobić:/
Wszelkie pomysły miło widziane. Pozdrawiam
-----------------------------------------------------------------------------------------
KOD:
----------------------------------------------------------------------------
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>


#define ONE_WIRE_BUS 2         //czujnik 1 podpięty do pinu 2
#define ONE_WIRE_BUS2 3         //czujnik 2 podpięty do pinu 3

OneWire oneWire(ONE_WIRE_BUS);    //czujnik 1
OneWire oneWire2(ONE_WIRE_BUS2);   //czujnik 2



DallasTemperature sensors(&oneWire);
DallasTemperature bojler(&oneWire2);

// Definicja wejść wyświetlacza ciekłokrystalicznego

 LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu na 0x27
int przekaznik=5;          //przekaznik 1 do pinu 5
int przekaznik2=6;          //przekaznik 2 do pinu 6

void setup(void)
{
   Serial.begin(9600);
 
  sensors.begin();   // Inicjacja czujnika
 
  lcd.begin(16, 2);  // Inicjacja wyświetlacza
  lcd.clear();
pinMode(przekaznik,OUTPUT); // ustawienie pinu jako wyjście PRZEKAŹNIKA 1
digitalWrite(przekaznik,LOW); // ustawienie na nim stanu niskiego
pinMode(przekaznik2,OUTPUT); // ustawienie pinu jako wyjście PRZEKAŻNIKA 2
digitalWrite(przekaznik2,LOW); // ustawienie na nim stanu niskiego
}

void loop(void)
{
  if (sensors.getTempCByIndex(0)>38) // wywołanie funkcji warunkowej
{                                       //funkcja pompy co 
                                         // 38 - TEMP ZAŁĄCZANIA POMPY
digitalWrite(przekaznik,HIGH); // włączenie przekaźnika 1
    lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)
 lcd.print("T.K:");    // wyświetl T.K: -temperatura kotła
  sensors.requestTemperatures(); 
 lcd.print(sensors.getTempCByIndex(0));
 lcd.print("*C/38*C");   //wyświetl *C/38 czyli jednostka i zadana temperatura
 
}
else
  {
      if (sensors.getTempCByIndex(0)<35) // wywołanie funkcji warunkowej
{                                               //funkcja pompy co
                                                 // 35- temperatura wyłączenie pompy
      digitalWrite(przekaznik,LOW); // wyłączenie przekaźnika 
    lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)
 lcd.print("T.K:");
 sensors.requestTemperatures(); 
 lcd.print(sensors.getTempCByIndex(0));
 lcd.print("*C/38*C"); 
 
}
else
  {
     lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)
 lcd.print("T.K:");
  sensors.requestTemperatures(); 
 lcd.print(sensors.getTempCByIndex(0));
 lcd.print("*C/38*C");
  }
  }
  
if (sensors.getTempCByIndex(0)-7>bojler.getTempCByIndex(0)) // wywołanie funkcji warunkowej
{                                                             //funkcja popmy CWU,  CO większe o 7 niż cCWU
digitalWrite(przekaznik2,HIGH); // włączenie przekaźnika 2
       lcd.setCursor(0,1); // Ustawienie kursora
 lcd.print("T.B:");
  bojler.requestTemperatures(); 
 lcd.print(bojler.getTempCByIndex(0));
 lcd.print("*C/38*C");
 }
else
{
   if (sensors.getTempCByIndex(0)-2<bojler.getTempCByIndex(0)) // wywołanie funkcji warunkowej
{                                                              //funkcja popmy CWU, CO mniejsze o +2 od CWU
digitalWrite(przekaznik2,LOW); // wyłączenie przekaźnika 2
       lcd.setCursor(0,1); // Ustawienie kursora
 lcd.print("T.B:");    wyświetl T.B: czuli temperatur bojlera
  bojler.requestTemperatures(); 
 lcd.print(bojler.getTempCByIndex(0));
 lcd.print("*C");   /Wyświetl *C czyli  jednostkę
 }
else
  {
   lcd.setCursor(0,1); // Ustawienie kursora 
   lcd.print("T.B:");      
  bojler.requestTemperatures(); 
 lcd.print(bojler.getTempCByIndex(0));
 lcd.print("*C);
  }
}
 
}
------------------------------------------------

Kolega miodzik proszony o używanie znaczników kodzik Wink ( wybacz nie mogłem się powstrzymać  )
 
Odpowiedź
  


Wiadomości w tym wątku
regulator temperatury co, cwu - przez miodzik - 23-04-2017, 19:28
RE: regulator temperatury co, cwu - przez namok - 23-04-2017, 21:59
RE: regulator temperatury co, cwu - przez miodzik - 24-04-2017, 21:33
RE: regulator temperatury co, cwu - przez Smaczek - 25-04-2017, 08:10
RE: regulator temperatury co, cwu - przez miodzik - 04-05-2017, 16:51

Skocz do:


Przeglądający: 1 gości