Egy kis segítséget szeretnék kérni Tőletek, hogy minél jobb legyen a kazán-puffer és puffer-fűtéskör közötti szivattyúink vezérlése. Nagyon kezdőként indultam el az arduino világában és összehoztam egy programot, ami működteti az arduino-nkat azzal az áramkörrel, amit párom készített hozzá. Az áramkörről nem tudok sokat, csak annyit, hogy hova minek a bemenete van kötve és hova mit kell nekem kiküldeni. Csatolnám ide a kis programot is, ami most így szépen vezérli is a mi rendszerünket, viszont biztos vagyok benne, hogy bőven lehetne mit szépíteni rajta, pláne, hogy nem használok EEPROM memória területet, és ahogy én gondolom, nálunk ez fontos lenne, különben nem sokáig fog működni az arduino-nk.
Van egy AVR-Duino / Mega 2560 UNO (CH340) panelünk és ahhoz van kötve egy két soros LCD kijelző a két szivattyú és 3 db LM35-ös hőmérséklet szenzor és van egy termosztát, ami ha kéri a fűtést, akkor %V-4,99V közötti értéket ad, ha nem kéri, akkor meg össze-vissza 3V és 0V között dobál mindenfélét. Első gondom az volt, hogy nem tudtam folyamatosan mérni egy jelet - pl hogy a termosztát 5 másodpercig adja-e az 5V-ot, így ezt több leolvasás átlagolásával értem el. A második gondom, meg hogy most minden a program memória területén van, amit ha jól gondolok egy címet max 10.000-szer lehet írni és annyi neki...ennyi méréssel gyorsan tönkre mehet a panel, ha jól sejtem, tehát ezt is szeretném valahogy orvosolni...Ha van valakinek kedve hozzá, kérem nézze meg a programot és adjon némi útmutatást, ha nem nagy kérés!
Köszönöm előre is!
A kód teljes egészében:
Kód: Egész kijelölése
#include "LiquidCrystal.h"
int KF_sensorPin = A0; //kazan felso reszenek merese
int PF_sensorPin = A1; //puffer felso reszenek merese
int PA_sensorPin = A2; //puffer also reszenek merese
int puf_szivPin = 40; //puffer-kazan kozotti szivattyu laba
int rad_szivPin = 42; //radiator szivattyu laba
int TermostatPin = A8; //termosztat jele
int ciklus_hossz = 10;
int szam_atlag = 3;
float KF_osszeg = 0.0;
float KF_atlag = 0.0;
float PF_osszeg = 0.0;
float PF_atlag = 0.0;
float PA_osszeg = 0.0;
float PA_atlag = 0.0;
float TP_osszeg = 0.0;
float TP_atlag = 0.0;
float TP_voltage = 0.0;
//LCD
LiquidCrystal lcd(31, 33, 35, 37, 39, 41);
//RS(31), E(33), D4(35), D5(37), D6(39), D7(41)
void setup()
{
lcd.begin(16, 2);
pinMode(puf_szivPin, OUTPUT);
pinMode(rad_szivPin, OUTPUT);
digitalWrite(puf_szivPin, LOW);
digitalWrite(rad_szivPin, LOW);
}
void loop()
{
//elozo meres atlagainak kiszamitasa
KF_atlag = (KF_osszeg / szam_atlag)+4;
PF_atlag = (PF_osszeg / szam_atlag)+1;
PA_atlag = (PA_osszeg / szam_atlag)-4;
TP_atlag = (TP_osszeg / (ciklus_hossz));
//digitalWrite(rad_szivPin,HIGH);
//Futeskor es Puffer kozotti szivattyu vezerlese
if(digitalRead(rad_szivPin) == LOW){
if((TP_atlag > 4.9)&&(PF_atlag > 40.5)){
digitalWrite(rad_szivPin, HIGH);
}
}else if((PF_atlag < 39.5)||(TP_atlag < 4.0)){
digitalWrite(rad_szivPin, LOW);
}
//Kazan es Puffer kozotti szivattyu vezerlese
if((digitalRead(puf_szivPin) == LOW)&&(KF_atlag > 50)){
if(digitalRead(rad_szivPin) == HIGH){
if(KF_atlag > PF_atlag+10){
digitalWrite(puf_szivPin, HIGH);
}
}
if(digitalRead(rad_szivPin) == LOW){
if(KF_atlag > PA_atlag+10){
digitalWrite(puf_szivPin, HIGH);
}
}
}
if(digitalRead(puf_szivPin) == HIGH){
if(digitalRead(rad_szivPin)== LOW){
if(KF_atlag < PA_atlag+5){
digitalWrite(puf_szivPin, LOW);
}
}else if((KF_atlag < 49)||(KF_atlag <= PF_atlag)){
digitalWrite(puf_szivPin, LOW);
}
}else if((digitalRead(puf_szivPin) == LOW)&&(KF_atlag >= 70)){
digitalWrite(puf_szivPin, HIGH);
}
//LCD-re kiiras
//lcd.clear();
lcd.setCursor(0,0);
lcd.write("KF:");lcd.print(KF_atlag);
lcd.write("PF:");lcd.print(PF_atlag);
lcd.setCursor(0,1);
lcd.print(TP_atlag);lcd.write(" V");
lcd.setCursor(8,1);
lcd.write("PA:");lcd.print(PA_atlag);
//Osszegek nullazasa
KF_osszeg=0;
PF_osszeg=0;
PA_osszeg=0;
TP_osszeg=0;
//Atlag homersekletekhez szukseges osszegek szamitasa
for(int i=0; i < ciklus_hossz; i++){
int KF_reading = analogRead(KF_sensorPin);
int PF_reading = analogRead(PF_sensorPin);
int PA_reading = analogRead(PA_sensorPin);
int TP_reading = analogRead(TermostatPin);
float KF_voltage = KF_reading * 5.0 / 1024;
float PF_voltage = PF_reading * 5.0 / 1024;
float PA_voltage = PA_reading * 5.0 / 1024;
TP_voltage = TP_reading * 5.0 / 1024;
float KF_temperatureC = (KF_voltage ) * 100 ;
float PF_temperatureC = (PF_voltage ) * 100 ;
float PA_temperatureC = (PA_voltage ) * 100 ;
if(i>(ciklus_hossz-szam_atlag-1))
{
KF_osszeg = KF_osszeg + KF_temperatureC;
PF_osszeg = PF_osszeg + PF_temperatureC;
PA_osszeg = PA_osszeg + PA_temperatureC;
}
TP_osszeg = TP_osszeg + TP_voltage;
//Kesleltetes
delay(300);
}
}