Arduino zonneboiler logger

Nu het arduino-concept erg interessant is gebleken (al zijn er nog glitches in de PV-datastream die ik nog niet kan verklaren/verhelpen), is natuurlijk ook de Atag Qsolar een mooi onderwerp om aan het internet te koppelen.

Inmiddels druk bezig e.e.a. uit te zoeken, en het is me warempel gelukt (als noob-codeschrijver 😉 ) om 1 en vervolgens 4 temperatuursensoren (type DS18S20) uit te lezen!

Geloof je me niet? Hier is een screenshot van de data die gemeten is met 4 sensoren!

en dit is dan de code:

#include <OneWire.h>
//init the one wire interface on pin 10
OneWire ow(10);
//write here the address you receive from the other program
byte sensor1[8]= {0x10, 0x99, 0xC5, 0x18, 0x02, 0x08, 0x00, 0x31};
byte sensor2[8]= {0x10, 0xFC, 0x98, 0x18, 0x02, 0x08, 0x00, 0x60};
byte sensor3[8]= {0x10, 0xEF, 0x9D, 0x18, 0x02, 0x08, 0x00, 0xB0};
byte sensor4[8]= {0x10, 0x75, 0xC3, 0x18, 0x02, 0x08, 0x00, 0xF9};
void setup(void) {
Serial.begin(9600);
}
void writeTimeToScratchpad(byte* address){
//reset the bus
ow.reset();
//select our sensor
ow.select(address);
//CONVERT T function call (44h) which puts the temperature into the scratchpad
ow.write(0x44,1);
//sleep a second for the write to take place
delay(1000);
}
void readTimeFromScratchpad(byte* address, byte* data){
//reset the bus
ow.reset();
//select our sensor
ow.select(address);
//read the scratchpad (BEh)
ow.write(0xBE);
for (byte i=0;i<9;i++){
data[i] = ow.read();
}
}
float getTemperature(byte* address){
int tr;
byte data[12];
writeTimeToScratchpad(address);
readTimeFromScratchpad(address,data);
//put in temp all the 8 bits of LSB (least significant byte)
tr = data[0];
//check for negative temperature
if (data[1] > 0x80){
tr = !tr + 1; //two’s complement adjustment
tr = tr * -1; //flip value negative.
}
//COUNT PER Celsius degree (10h)
int cpc = data[7];
//COUNT REMAIN (0Ch)
int cr = data[6];
//drop bit 0
tr = tr >> 1;
//calculate the temperature based on this formula :
//TEMPERATURE = TEMP READ – 0.25 + (COUNT PER Celsius Degree – COUNT REMAIN)
// (COUNT PER Celsius Degree)
return tr – (float)0.25 + (cpc – cr)/(float)cpc;
}
//fahrenheit to celsius conversion
float f2c(float val){
float aux = val – 32;
return (aux * 5 / 9);
}
//celsius to fahrenheit conversion
float c2f(float val){
float aux = (val * 9 / 5);
return (aux + 32);
}
void loop(void) {
float temp;
float tmp2;
tmp2 = getTemperature(sensor1);
temp = c2f(tmp2);
Serial.print(“sensor 1 Temp = “);
Serial.print(temp);
Serial.print(” F or “);
Serial.print(tmp2);
Serial.println(” C”);
float temp1;
float tmp3;
tmp2 = getTemperature(sensor2);
temp = c2f(tmp2);
Serial.print(“sensor 2 Temp = “);
Serial.print(temp);
Serial.print(” F or “);
Serial.print(tmp2);
Serial.println(” C”);
float temp2;
float tmp4;
tmp2 = getTemperature(sensor3);
temp = c2f(tmp2);
Serial.print(“sensor 3 Temp = “);
Serial.print(temp);
Serial.print(” F or “);
Serial.print(tmp2);
Serial.println(” C”);
float temp3;
float tmp5;
tmp2 = getTemperature(sensor4);
temp = c2f(tmp2);
Serial.print(“sensor 4 Temp = “);
Serial.print(temp);
Serial.print(” F or “);
Serial.print(tmp2);
Serial.println(” C”);
//wait 5 seconds
delay(5000);
}

 

Uiteindelijk wil ik dus dat deze Arduino 6 sensoren gaat registreren, al dan niet met Pachube:

  1. CV aanvoertemperatuur
  2. CV retourtemperatuur
  3. Zonneboiler circuit aanvoer temperatuur (van collector naar buffervat)
  4. Zonneboiler circuit retour temperatuur (van buffervat naar collector)
  5. Tapwater temperatuur (bovenste deel buffervat)
  6. CV aandeel temperatuur (halverwege het buffervat)

 

2 Comments

  1. Bij ons is de zonneboiler gekoppelt aan een houtvergasser-combiketel van
    stukhout en pellets in samenwerking met een thermisch zonnepaneel van 12m² gewoon super zuinig en co² neutraal!
    link naar onze instalatie

Leave a Reply

Your email address will not be published. Required fields are marked *