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 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:
----------------------------------------------------------------------------
------------------------------------------------
Kolega miodzik proszony o używanie znaczników kodzik ( wybacz nie mogłem się powstrzymać )
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 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 ( wybacz nie mogłem się powstrzymać )