Olyan problémám van hogy néha nem mér vagy fals értéket ad valamelyik szenzor véletlenszerűen .
ez miatt megzavarodik a relé vezérlés.
Mit kellene változtatnom hogy jó legyen. A szenzorok normál módban vannak 4k7 ellenállással.
Kód: Egész kijelölése
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#define ONE_WIRE_BUS 2 // Hőmérők az 2 lábon
OneWire oneWire(ONE_WIRE_BUS);
LiquidCrystal_I2C lcd(0x27, 20, 4); //lcd a A4,A5 lábon
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ( (val / 10 * 16) + (val % 10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val / 16 * 10) + (val % 16) );
}
// Sznzorok azonosítása
DallasTemperature sensors(&oneWire);
DeviceAddress pufferfent = { 0x28, 0x08, 0xD7, 0x45, 0x92, 0x04, 0x02, 0x31 };// "T1"
DeviceAddress pufferlent = { 0x28, 0xFD, 0x2D, 0x45, 0x92, 0x0E, 0x02, 0x54 };// "T2"
DeviceAddress bojlerfent = { 0x28, 0x13, 0x78, 0x45, 0x92, 0x13, 0x02, 0x4C };// "T3"
DeviceAddress bojlerlent = { 0x28, 0x9F, 0xD1, 0x45, 0x92, 0x11, 0x02, 0x8A };// "T4"
float T1 = 0;
float T2 = 0;
float T3 = 0;
float T4 = 0;
// Változók
int Relay1 = 11;
int Relay2 = 12;
void setup()
{
// Relék definiálása a portokon
pinMode (Relay1, OUTPUT); // bojler fütés
pinMode (Relay2, OUTPUT); // cirkuláció bekapcsolása
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
//hőmérők beállítása
sensors.begin();
sensors.setResolution(pufferfent, 9); //hőmérők beállítása, pontosság 9-12 bit
sensors.setResolution(pufferlent, 9);
sensors.setResolution(bojlerfent, 9);
sensors.setResolution(bojlerlent, 9);
/* A fix szöveg megjelentse
A kiírás beállitsa, balfelső sarok 0,0
1 oszlop s 0 sor */
lcd.init();
lcd.backlight();
lcd.setCursor(6, 0);
lcd.print("Bojler ");
lcd.setCursor(13, 0);
lcd.print("Puffer ");
lcd.setCursor(1, 1);
lcd.print("Felul:");
lcd.setCursor(1, 2);
lcd.print("Alul :");
}
void printTemperature(DeviceAddress deviceAddress)
{
//ha nem látja a hömérséklet szenzort
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("?");
} else {
lcd.print(tempC, 0); // "1" :tizedes értékig irja "2" : szazas értékig
}
}
void loop()
{
sensors.requestTemperatures(); // Adatkérés a hőmérőtől
T1 = sensors.getTempC(pufferfent);
T2 = sensors.getTempC(pufferlent);
T3 = sensors.getTempC(bojlerfent);
T4 = sensors.getTempC(bojlerlent);
delay(2000);
// hovairjuk a hőmérsékletet
/* Hömrséklet kiírsa */
lcd.setCursor(7, 1); // A kiírás bellítsa, balfelső sarok 0,0
printTemperature(bojlerfent); // Hömérsklet kiíratsa
lcd.print("\337C ");
lcd.setCursor(7, 2);
printTemperature(bojlerlent);
lcd.print("\337C ");
lcd.setCursor(13, 1);
printTemperature(pufferfent);
lcd.print("\337C ");
lcd.setCursor(13, 2);
printTemperature(pufferlent);
lcd.print("\337C ");
//szabalyozas()
if (T3 <= T1)
digitalWrite(11, HIGH);
//kapcsoljon Ki
else if (T3 > 55) digitalWrite(11, HIGH);
//kapcsoljon Ki
else if (T3 < 50)
digitalWrite(11, LOW);
//kapcsoljon Be
if (digitalRead(Relay1) == LOW) //relé 1 állapot kiiratása
{
lcd.setCursor(1, 3);
lcd.print("Bojler Futes: BE");
}
else
{
lcd.setCursor(1, 3);
lcd.print("Bojler Futes: KI");
}
}
https://drive.google.com/drive/folders/ ... sp=sharing