Zonnecollectorverwarming voor zwembad

Arduino specifieke Software
Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Zonnecollectorverwarming voor zwembad

Berichtdoor DG300flyer » 28 Apr 2017, 13:37

Beste Forumleden ,

Ik heb volgens een ontwerp en Arduino code op het internet een controller gebouwd die de verwarming van een zwembad met zonnecollector stuurt.
De installatie bestaan uit een zonnecollector op het dak van de woning en een pomp die het zwembadwater naar de collector pompt op het ogenblik dat er temperatuur voor het zwembad wordt gevraagd en de temperatuur van het collectorwater 10°C hoger is dan het zwembadwater, de pomp valt stil op het ogenblik dat het temperatuurverschil tussen collector en zwembad kleiner is dan 1°C
De code heb ik enigzins aangepast aan mijn behoefte en het geheel werkt prima uitgezonderd 1 stukje.
In de code is voorzien in een vorstbeveiliging voor de installatie zodat bij vriestemperaturen de pomp in werking wordt gesteld om de kans op vorstschade te vermijden
In de code gebruikt men 0°C ( wat ik gemakkelijk kan aanpassen dit is geen probleem ) om de pomp te starten maar op het ogenblik dat de collectorsensor een ,temperatuur van 0,1°C meet valt de pomp terug stil met et gevolg dat de pomp rond het vriespunt constant in en uit wordt geschakeld.
Ik had nu graag in het vorstbeveiligings gedeelte van de code een Hysterese van ongeveer 3°C ingebouwd zodat de pomp begint te draaien bij 0°C en pas terug stilvalt als het collectorwater 4°C of meer bedraagt.( we pompen dan zwembadwater dat warmer is in de collector )
Ik weet niet hoe ik dit in de code moet verwerken !
Hieronder vind u de code die voor de vorstbeveiliging dient!
Is er iemand die mij kan helpen aub
cpp code
}
// Freeze Protection
if (freezing= 1){ // vriesbeveiliging actief = 1 vriesbeveiliging niet actief = 0
if (Collector_tempC <= 1 ) { Siurblys_ijungtas(); // Pump turn on
}}


}else{// If the collector temperature sensor is not working, the pump for 3 minutes (the time variable indicates REQUEST_Collector_Error)

if (millis() > timer_Collector_Error + REQUEST_Collector_Error) {
timer_Collector_Error = millis();
Saved_Boiler_tempC=Boiler_tempC; // remembering the boiler temperature
Siurblys_ijungtas();

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor nicoverduin » 28 Apr 2017, 13:44

Wat is het verschil tussen 'vergelijken' en 'gelijkstellen' met = tekens?

Voor de rest kan ik er weinig mee omdat de rest van de sketch er niet bij zit.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor DG300flyer » 28 Apr 2017, 13:57

Dag Nico, ik stuur je hier de volledige code, er zitten een aantal dingen in die ik niet gebruik zoals Byte arrow up en Byte arrow down ik weet niet hoe ik dit moet verwijderen ( , ik heb vanalles geprobeert maar dan krijg ik tijdens het compilen constant errors ) maar dit hindert de goede werking niet.
Ik ben met de arduinocode zo weinig vertrouwt dat ik eigenlijk niet snap wat je bedoeld sorry maar mijn kennis is te klein.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#include <OneWire.h>
#include <DallasTemperature.h>

#define Pump A0 //Siurblio valdymo relės išvadas
#define Relay2 A1 //Termostato valdymo relės išvadas
#define SERIAL_BAUD_RATE 9600
#define Collector 8 // collector sensor conclusions
#define Boiler 9 // Boiler sensor conclusions

int analogPin = A2; ////daugiasūkio rezistoriaus pajungimo išvadas
int relayPin = Pump;
int relay2Pin = Relay2;
static long timer_pump=0;
static long timer_Relay2=0;

static long timer_Collector_Error=0;
static long timer_Boiler_Error=0;

#define REQUEST_Pump_Control 20 // 10000 millis= 10 sekundziu
#define REQUEST_Relay2_Control 20 // 15000 millis= 15 sekundziu
#define REQUEST_Collector_Error 20 // 120000 millis= 3 minutės
#define REQUEST_Boiler_Error 20 // 30000 millis= 30 sekundziu



int freezing = 1; // variable frost protection enabled (freezing = 1) or off (freezing = 0)
int Differential_ON=10; // You asked what the temperature difference between the collector pump relay is activated
int Differential_OFF=1; // to such differences pump relay off
int Collector_Error, Boiler_Error; // sensor status "error" tag
int Collector_Good, Boiler_Good; // sensor status 'all good' tag
float Collector_tempC, Boiler_tempC, Sensor3_tempC; // variables to store values ​​of the temperature measurements
float Saved_Collector_tempC, Saved_Boiler_tempC;

byte arrow_up[8]={ // pump on indicator (arrow up)
B00100,
B01110,
B11111,
B00100,
B00100,
B00100,
B00100,
B00100
};
byte arrow_down[8]={ // Pump disarm symbol (arrow down)
B00100,
B00100,
B00100,
B00100,
B00100,
B11111,
B01110,
B00100
};

// Sets the values of the controller "build bridges" with sensors DS18B20
OneWire Collector_T(Collector);
OneWire Boiler_T(Boiler);
DallasTemperature CollectorSensor(&Collector_T);
DallasTemperature BoilerSensor(&Boiler_T);
DeviceAddress Collector_Sensor_Address;
DeviceAddress Boiler_Sensor_Address;

int backLight = 13; // output 13 controls the display backlight
int val = 0;

void setup() {
Serial.begin(SERIAL_BAUD_RATE);
pinMode(Pump, OUTPUT);
pinMode(Relay2, OUTPUT),
pinMode(backLight, OUTPUT);
digitalWrite(backLight, HIGH); // activated lighting.
lcd.createChar(2, arrow_up);
lcd.begin(16, 4); // set up van het LCD hier 16 colommen en 4 rijen , rij 1 = 0 en rij 2 = 1 rij3 = 2 , rij4 = 3
lcd.setCursor(1,0);
lcd.print("Zwembad Control");
lcd.setCursor(2,1);
lcd.print("Alex Jacobs!");
lcd.setCursor(2,2);
lcd.print("Arduino NANO");
lcd.setCursor(3,3);
lcd.print("Maart 2017");
delay(3000); // Aanmeldscherm is zichtbaar voor 3 seconden.

lcd.clear();
CollectorSensor.begin();
if (!CollectorSensor.getAddress(Collector_Sensor_Address, 0))
CollectorSensor.setResolution(Collector_Sensor_Address, 12);
BoilerSensor.begin();
if (!BoilerSensor.getAddress(Boiler_Sensor_Address, 0))
BoilerSensor.setResolution(Boiler_Sensor_Address, 12);
//TempSensor.begin();
//if (!TempSensor.getAddress(Temp_3_Sensor_Address, 0))
//TempSensor.setResolution(Temp_3_Sensor_Address, 12);
}

void loop()

{ // Start main programm

val = (analogRead(analogPin) * 30.0) / 1024; // lees de weerstandswaarde van de potmeter en bereken naar temperatuur hier 30°C
lcd.setCursor(0,3);
lcd.print("Temp.Gevr.");
lcd.setCursor(12,3);
lcd.print(val);
lcd.setCursor(15,3);
lcd.print("C");// display resistor value on the screen

BoilerSensor.requestTemperatures();
Boiler_tempC=BoilerSensor.getTempC(Boiler_Sensor_Address);
{
if (Boiler_tempC >= val) { Rele_2_ijungta();}
if (Boiler_tempC <= val) { Rele_2_isjungta();}


}

if (!CollectorSensor.getAddress(Collector_Sensor_Address, 0)) {
lcd.setCursor(0,0);
Collector_Error=1;
}
else
{
CollectorSensor.requestTemperatures(); // command sensor to show the measured temperature
Collector_tempC=CollectorSensor.getTempC(Collector_Sensor_Address);
if (Collector_tempC==-127.00){
lcd.setCursor(0,0);
Collector_Error=1;
}
else
{
lcd.setCursor(0,0);
lcd.print("Collector ");
lcd.setCursor(10,0);
lcd.print(Collector_tempC);
lcd.setCursor(15,0);
lcd.print("C");
lcd.setCursor(0,2);
lcd.print("Verschil ");
lcd.setCursor(11,2);
lcd.print(Collector_tempC-Boiler_tempC);
Collector_Good=1;
lcd.setCursor(15,2);
lcd.print("C");
}}

if (!BoilerSensor.getAddress(Boiler_Sensor_Address, 0)) {
lcd.setCursor(0,1);
Boiler_Error=1;
}
else{
BoilerSensor.requestTemperatures();
Boiler_tempC=BoilerSensor.getTempC(Boiler_Sensor_Address);
if (Boiler_tempC==-127.00){
Boiler_Error=1;
}
else{
lcd.setCursor(0,1);
lcd.print("Zwembad ");
lcd.setCursor(10,1);
lcd.print(Boiler_tempC);
Boiler_Good=1;
lcd.setCursor(15,1);
lcd.print("C");
}}

if (millis() > timer_pump + REQUEST_Pump_Control) {
timer_pump = millis();
if (Boiler_Good==1){
if (Collector_Good==1){ // Check at the collector is not warmer than the boiler
if (Collector_tempC - Boiler_tempC >= Differential_ON) {
Siurblys_ijungtas();
}
if (Collector_tempC - Boiler_tempC <= Differential_OFF) {
Siurblys_isjungtas();


}
// Freeze Protection
if (freezing= 1){
if (Collector_tempC <= 1 ) { Siurblys_ijungtas(); // Pump turn on
}}


}else{// If the collector temperature sensor is not working, the pump for 3 minutes (the time variable indicates REQUEST_Collector_Error)

if (millis() > timer_Collector_Error + REQUEST_Collector_Error) {
timer_Collector_Error = millis();
Saved_Boiler_tempC=Boiler_tempC; // remembering the boiler temperature
Siurblys_ijungtas();

}else{ if (Saved_Boiler_tempC-Boiler_tempC <=2){
Siurblys_isjungtas(); // If the collector temperature sensor is not working and the boiler temperature drops, the pump is turned off
}}
}}
else{ if (Collector_tempC >=60){Siurblys_ijungtas();}

}} //__________________________________________________


}
void Siurblys_ijungtas() {
digitalWrite(Pump, HIGH);

}
// Pump switch-off and the corresponding mark on the screen display
void Siurblys_isjungtas(){
digitalWrite(Pump, LOW);

}
// Thermostat relay on and the corresponding mark on the screen display
void Rele_2_ijungta() {
digitalWrite(Relay2, LOW);

}
// Thermostat relay switch-off and the corresponding mark on the screen display
void Rele_2_isjungta(){
digitalWrite(Relay2, HIGH);

}

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor Gij Kieken » 28 Apr 2017, 14:19

Denk aan wat Nico zegt en volg misschien deze link.
https://www.arduino.cc/en/Reference/Assignment
en zo een beetje verder bladeren.

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor DG300flyer » 28 Apr 2017, 14:37

Hallo Gij Kieken ,

Bedankt voor de tip maar hier wordt ik helemaal niet wijs uit .

Beste groeten
Alex Jacobs

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor Gij Kieken » 28 Apr 2017, 15:01

Hey,
Het is niet de bedoeling om onder Nico zijn duiven te schieten, kijk ook even hier naar https://www.arduino.cc/en/Reference/If.
Dan moet er toch een lichtje opgaan.
Het is nogmaals zo een voldoening wanneer je het zelf oplost en ook weet waarom.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor Koepel » 28 Apr 2017, 17:05

De sketch lijkt te maken te hebben met deze: https://github.com/SauleVire/Kolektorius_v2/blob/master/v1.2/v1.2.ino
Zowel in die oorspronkelijke sketch als in deze sketch kom ik een paar foutjes tegen, maar ik denk dat het uiteindelijk wel kan gaan werken.

@DG300flyer, je hebt helaas code die een beetje rammelt. Hoe ga je dat oplossen ? Ben je bereid om zelf iets van de taal 'c' en 'c++' te leren ? Als je wel eens eerder iets gedaan hebt met programmeren, dan is het alleen wennen aan een nieuwe taal.

Fouten:
- vergelijken versus gelijkstellen
- komma na pinMode in plaats punt komma
- millis variabelen geen unsigned long
- millis verkeerd gebruikt, door een tijd in de toekomst te berekenen.

De structuur van de code zou ik ook anders doen. Ik kan namelijk niet zien wat die grote if-else constructie met millis en temperaturen allemaal tot gevolg heeft.

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor DG300flyer » 28 Apr 2017, 17:22

Hallo iedereen

Hier een foto van de werkende controller .
Bijlagen
DSCI0109 (600 x 450).jpg
DSCI0109 (600 x 450).jpg (43.71 KiB) 7952 keer bekeken
DSCI0110 (600 x 450).jpg
DSCI0110 (600 x 450).jpg (46.54 KiB) 7952 keer bekeken
Laatst gewijzigd door DG300flyer op 28 Apr 2017, 17:57, in totaal 1 keer gewijzigd.

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor DG300flyer » 28 Apr 2017, 17:26

Hallo Koepel ,

Bedankt voor de reactie, ik zou graag meer weten over de programmeertaal maar ik vind nergens een goede nederlandstalige cursus , in mijn buurt kan je ook nergens een cursus volgen over deze materie . Ik ben al een tijdje met Arduino bezig en heb ondertussen al een paar projectjes aan de praat gekregen en die werken goed .
Voor dit project was de code origineel voorzien voor een 16x2 lcd maar ik heb dit verandert voor een 16x4 lcd waar ik de tekst en de geprojecteerde gegevens naar mijn smaak heb aangepast.
Het toestel is al een week of 2 in dienst en werkt perfect op de vriesbeveiliging na natuurlijk waardoor de pomp rond het vriespunt constant op en afslaat wat vervelend en schadelijk is voor de pomp.

Mijn code is inderdaad gebaseerd op de Link die u doorgaf

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Zonnecollectorverwarming voor zwembad

Berichtdoor nicoverduin » 28 Apr 2017, 19:23

Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten