Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Til brug for web modul
- #include <SPI.h>
- #include <Ethernet.h>
- byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
- IPAddress ip(10, 0, 32, 178);
- EthernetServer server(80);
- // Initialisere analogværdier
- int UdetemperaturPin = A1;
- int V1;
- int FremlobTilHusPin = A2;
- int V2;
- int ReturlobFraHusPin = A3;
- int V3;
- int TemperaturEfterVekslerPin = A4;
- int V4;
- int SoltankBundPin = A5;
- int V5;
- int SoltanMidtPin = A6;
- int V6;
- int SoltankTopPin = A7;
- int V7;
- int FyrFremlobPin = A8;
- int V8;
- int GulvvarmeFremPin = A9;
- int V9;
- int VVBTopPin = A10;
- int V10;
- int VVBBundPin = A11;
- int V11;
- int SolfangerManifolPin = A12;
- int V12;
- int SolfangerFremPin = A13;
- int V13;
- int SolfangerReturPin = A14;
- int V14;
- // Inilialisere indgange og variabler for flow måling
- const int inputCf = 5; // Puls indgang centralvarme flowmåler
- int pulseCf = 0; // Variable for saving pulses count.
- int varCf = 0; // Variabel for flowmåling centralvarme
- int qCt = 0; // Variabel for flowmåling centralvarme liter i timen
- float tidCf = 0; // Tid for flowmåling centralvarme
- float qC = 0; // Flowmængde centralvarme
- float JouleC = 0; // Joule centralvare
- float Heffekt = 0 ;
- // Initialisere udgange for pumper og ventiler
- int Cpumpe = 20; // Udgang for cirkulationspumpe til stuehus
- int CpumpeS = 0; // Definere status på relæ for centralvarme pumpe
- int Ventil1 = 21; // Udgang for 3vejs ventil, soltank on/baypass
- int Ventil1S = 0; // Definere status på relæ for 3vejsventil til bypass/soltank
- int Ventil2 = 22; // Udgang for 3vejs ventil, fyr on/baypass
- int Ventil2S = 0; // Definere status på relæ for 3vejsventil til bypass/fyr
- int Spumpe = 23; // Udgang for cirkulationspumpe solvarme
- int SpumpeS = 0; // Definere status på relæ for solvarme pumpe
- int VVBVentil = 24; // Udgang for telestat på VVB
- int VVBVentilS = 0; // Indikerer statur på relæ for telestat for VVB on/off
- int KVVentil = 25; // Udgang for telestat på koldtvandstank
- int KVVentils = 0; // Indikerer status på relæ for telestat på koldtvands tank on/off
- int FyrDrift = 30; // Udgang for drift af fyr,
- int FyrDriftS = 0; // Indikere fyr i drift eller stoppet
- int ElVandVVB = 40; // Udgang for elvarme patron i VVB
- int ElVandVVBs = 0; // Definerer status for elpatron i VVB on/off
- // Definere variabler for temperatur kalkulation
- float R100 = 10000;
- float logR1, logR2, logR3, logR4, logR5, logR6, logR7, logR8, logR9, logR10, logR11, logR12, logR13, logR14, logR15, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, T1, t1, T2, t2, T3, t3, T4, t4, T5, t5, T6, t6, T7, t7, T8, t8, T9, t9, T10, t10, T11, t11, T12, t12, T13, t13, T14, t14, T15, t15, T16, t16, T20, T22, T23;
- float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
- // Inilitasiere variabler
- int forsinkelse = 0;
- int forsinkelse2 = 0;
- // Initiliasere temperature for drift af cirkulationspumpe for stuehus.
- int T40 = 65; // Ideelt fremløbstemperatur
- int T41 = 40; // Start temperatur cirkulationspuumpe for stuehus
- int T42 = 30; // Stop temperatur cirkulationspumpe stuehus
- int T45 = 3; //Acceptabel afvigelse fra ideelt freløb.
- // Differancetemperature for drift af 3 vejs ventiler
- int T60 = 8; // Differance for indkobling af soltank
- int T61 = 3; // Differance for udkobling af soltank
- int T65 = 8; // Differance for fyr fremløb større end fremløb solvarme
- int T66 = 3; // Differance for udkobling af fyr, ved varm solvarme
- // Temperature for varmtvandsbeholdere
- int T70 ; //Ønsket VVBtemperatur, defineres af driftform
- int T71 = 3; //Acceptabel afvigelse VVBtemperatur
- int T72 = 0; //Disponibel
- int T74 = 45; //Ønsket VVBtemperatur eldrift
- void setup() {
- // Nødvendigt for webmodul, fatter ikke hvorfor og havd der sker
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for native USB port only
- }
- Serial.println("Ethernet WebServer Example");
- // start the Ethernet connection and the server:
- Ethernet.begin(mac, ip);
- // Check for Ethernet hardware present
- if (Ethernet.hardwareStatus() == EthernetNoHardware) {
- Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
- while (true) {
- delay(1); // do nothing, no point running without Ethernet hardware
- }
- }
- if (Ethernet.linkStatus() == LinkOFF) {
- Serial.println("Ethernet cable is not connected.");
- }
- // start the server
- server.begin();
- Serial.print("server is at ");
- Serial.println(Ethernet.localIP());
- // Web defination slut
- // Definere idgange
- pinMode(UdetemperaturPin, INPUT);
- pinMode(FremlobTilHusPin, INPUT);
- pinMode(ReturlobFraHusPin, INPUT);
- pinMode(TemperaturEfterVekslerPin, INPUT);
- pinMode(SoltankBundPin, INPUT);
- pinMode(SoltanMidtPin, INPUT);
- pinMode(SoltankTopPin, INPUT);
- pinMode(GulvvarmeFremPin, INPUT);
- pinMode(VVBTopPin, INPUT);
- pinMode(SolfangerManifolPin, INPUT);
- pinMode(SolfangerFremPin, INPUT);
- pinMode(SolfangerReturPin, INPUT);
- pinMode(GulvvarmeFremPin, INPUT) ;
- pinMode(inputCf, INPUT) ;
- // Definerer udgange
- pinMode(Cpumpe, OUTPUT);
- pinMode(Spumpe, OUTPUT);
- pinMode(Ventil1, OUTPUT);
- pinMode(Ventil2, OUTPUT);
- pinMode(VVBVentil, OUTPUT);
- pinMode(KVVentil, OUTPUT);
- pinMode(ElVandVVB, OUTPUT);
- }
- void loop() {
- // Udregner og definere temperature.
- // T1 Udetemperatur
- V1 = analogRead(A1);
- R1 = R100 * (1023.0 / (float)V1 - 1.0);
- logR1 = log(R1);
- t1 = (1.0 / (c1 + c2 * logR1 + c3 * logR1 * logR1 * logR1));
- t1 = t1 - 273.15;
- t1 = (t1 * 9.0)/ 5.0 + 32.0;
- T1 = (t1-32)/1.8; //Udetemperatur
- // T2 Fremløb til hus
- V2 = analogRead(A2);
- R2 = R100 * (1023.0 / (float)V2 - 1.0);
- logR2 = log(R2);
- t2 = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));
- t2 = t2 - 273.15;
- t2 = (t2 * 9.0)/ 5.0 + 32.0;
- T2 = (t2-32)/1.8; //Fremløb til hus
- // T3 Returløb fra hus
- V3 = analogRead(A3);
- R3 = R100 * (1023.0 / (float)V3 - 1.0);
- logR3 = log(R3);
- t3 = (1.0 / (c1 + c2 * logR3 + c3 * logR3 * logR3 * logR3));
- t3 = t3 - 273.15;
- t3 = (t3 * 9.0)/ 5.0 + 32.0;
- T3 = (t3-32)/1.8; // Returløb fra hus
- // T4 Rørtemperatur efter veksler
- V4 = analogRead(A4);
- R4 = R100 * (1023.0 / (float)V4 - 1.0);
- logR4 = log(R4);
- t4 = (1.0 / (c1 + c2 * logR4 + c3 * logR4 * logR4 * logR4));
- t4 = t4 - 273.15;
- t4 = (t4 * 9.0)/ 5.0 + 32.0;
- T4 = (t4-32)/1.8; //Rørtemperatur efter veksler
- // T5 Soltank bund
- V5 = analogRead(A5);
- R5 = R100 * (1023.0 / (float)V5 - 1.0);
- logR5 = log(R5);
- t5 = (1.0 / (c1 + c2 * logR5 + c3 * logR5 * logR5 * logR5));
- t5 = t5 - 273.15;
- t5 = (t5 * 9.0)/ 5.0 + 32.0;
- T5 = (t5-32)/1.8; //Soltank bund
- // T6 Soltank midt
- V6 = analogRead(A6);
- R6 = R100 * (1023.0 / (float)V6 - 1.0);
- logR6 = log(R6);
- t6 = (1.0 / (c1 + c2 * logR6 + c3 * logR6 * logR6 * logR6));
- t6 = t6 - 273.15;
- t6 = (t6 * 9.0)/ 5.0 + 32.0;
- T6 = (t6-32)/1.8; //Soltank midt
- // T7 Soltank top
- V7 = analogRead(A7);
- R7 = R100 * (1023.0 / (float)V7 - 1.0);
- logR7 = log(R7);
- t7 = (1.0 / (c1 + c2 * logR7 + c3 * logR7 * logR7 * logR7));
- t7 = t7 - 273.15;
- t7 = (t7 * 9.0)/ 5.0 + 32.0;
- T7 = (t7-32)/1.8; // Soltank top
- // T8 Fremløb fra fyr
- V8 = analogRead(A8);
- R8 = R100 * (1023.0 / (float)V8 - 1.0);
- logR8 = log(R8);
- t8 = (1.0 / (c1 + c2 * logR8 + c3 * logR8 * logR8 * logR8));
- t8 = t8 - 273.15;
- t8 = (t8 * 9.0)/ 5.0 + 32.0;
- T8 = (t8-32)/1.8; //Fremløb fra fyr
- //T9 Fremlob gulvvarme
- V9 = analogRead(A9);
- R9 = R100 * (1023.0 / (float)V9 - 1.0);
- logR9 = log(R9);
- t9 = (1.0 / (c1 + c2 * logR9 + c3 * logR9 * logR9 * logR9));
- t9 = t9 - 273.15;
- t9 = (t9 * 9.0)/ 5.0 + 32.0;
- T9 = (t9-32)/1.8; //Gulvvarmefremlæb
- // T10 VVB top
- V10 = analogRead(A10);
- R10 = R100 * (1023.0 / (float)V10 - 1.0);
- logR10 = log(R10);
- t10 = (1.0 / (c1 + c2 * logR10 + c3 * logR10 * logR10 * logR10));
- t10 = t10 - 273.15;
- t10 = (t10 * 9.0)/ 5.0 + 32.0;
- T10 = (t10-32)/1.8; //VVB top
- // T11 VVB bund
- V11 = analogRead(A11);
- R11 = R100 * (1023.0 / (float)V11 - 1.0);
- logR11 = log(R11);
- t11 = (1.0 / (c1 + c2 * logR11 + c3 * logR11 * logR11 * logR11));
- t11 = t11 - 273.15;
- t11 = (t11 * 9.0)/ 5.0 + 32.0;
- T11 = (t11-32)/1.8; //VVB bund
- // T12 Solfanger manifol
- V12 = analogRead(A12);
- R12 = R100 * (1023.0 / (float)V12 - 1.0);
- logR12 = log(R12);
- t12 = (1.0 / (c1 + c2 * logR12 + c3 * logR12 * logR12 * logR12));
- t12 = t12 - 273.15;
- t12 = (t12 * 9.0)/ 5.0 + 32.0;
- T12 = (t12-32)/1.8; // Solfanger manifol
- // T13 Solvarme fremløb
- V13 = analogRead(A13);
- R13 = R100 * (1023.0 / (float)V13 - 1.0);
- logR13 = log(R13);
- t13 = (1.0 / (c1 + c2 * logR13 + c3 * logR13 * logR13 * logR13));
- t13 = t13 - 273.15;
- t13 = (t13 * 9.0)/ 5.0 + 32.0;
- T13 = (t13-32)/1.8; // Solvarme fremløb
- // T14 Solvarme retur
- V14 = analogRead(A14);
- R14 = R100 * (1023.0 / (float)V14 - 1.0);
- logR14 = log(R14);
- t14 = (1.0 / (c1 + c2 * logR14 + c3 * logR14 * logR14 * logR14));
- t14 = t14 - 273.15;
- t14 = (t14 * 9.0)/ 5.0 + 32.0;
- T14 = (t14-32)/1.8; //Solvarme retur
- // T15
- // V15 = analogRead(A15);
- // R15 = R100 * (1023.0 / (float)V15 - 1.0);
- // logR15 = log(R15);
- // t15 = (1.0 / (c1 + c2 * logR15 + c3 * logR15 * logR15 * logR15));
- // t15 = t15 - 273.15;
- // t15 = (t15 * 9.0)/ 5.0 + 32.0;
- // T15 = (t15-32)/1.8;
- // Input temperature færdig
- // Udregner differancer
- T20 = T2-T3; // Forskel frem og returløb til hus
- T22 = T4-T3; // Forskel retur fra hus og efter veksler
- T23 = T4-T7; // Forskel veksler og soltank
- // Beregner flow centralvarme
- if(digitalRead(inputCf) > varCf)
- {
- varCf = 1;
- pulseCf++;
- }
- if(digitalRead(inputCf) == 0) {varCf = 0;}
- tidCf = tidCf + 1;
- if(tidCf == 1000){
- Serial.print(pulseCf);
- Serial.print(F(" pulse"));
- // Put an "s" if the amount of pulses is greater than 1.
- if(pulseCf > 1) {Serial.print(F("s"));}
- Serial.println(F(" detected pr/s."));
- qC = ((8.1*pulseCf)/100);
- qCt = qC*60;
- Heffekt = ((T2-T3)*(4200/3600))*(qC*60);
- if(qC == 5/3){
- qC = 0;
- Heffekt = 0;
- }
- Serial.print(qC);
- Serial.println(" L/min");
- Serial.print(Heffekt);
- Serial.println(" W");
- pulseCf = 0;
- tidCf = 0;
- JouleC = (42*(T2-T3)*(qC/60));
- Serial.print(JouleC);
- Serial.println(" joule ... Watt");
- Serial.println(" ");
- }
- delay(1); // Delay for stability.
- // Definere Web modul, fatter ikke en skid af hvad der sker men det virker
- // listen for incoming clients
- EthernetClient client = server.available();
- if (client) {
- Serial.println("new client");
- // an http request ends with a blank line
- bool currentLineIsBlank = true;
- while (client.connected()) {
- if (client.available()) {
- char c = client.read();
- Serial.write(c);
- // if you've gotten to the end of the line (received a newline
- // character) and the line is blank, the http request has ended,
- // so you can send a reply
- if (c == '\n' && currentLineIsBlank) {
- // send a standard http response header
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println("Connection: close"); // the connection will be closed after completion of the response
- client.println("Refresh: 5"); // refresh the page automatically every 1 sec
- client.println();
- client.println("<!DOCTYPE HTML>");
- client.println("<html>");
- // Skriver til web modul
- // Udskriver alle temparature
- client.print("Udetemperatur........................T1= ");
- client.print(T1, 1);
- client.println("<br />");
- client.print("Fremlob til hus.......................T2= ");
- client.print(T2, 1);
- client.println("<br />");
- client.print("Returlob fra hus......................T3= ");
- client.print(T3, 1);
- client.println("<br />");
- client.print("Rortemperatur efter veksler....T4= ");
- client.print(T4, 1);
- client.println("<br />");
- client.print("Soltank bund...........................T5= ");
- client.print(T5, 1);
- client.println("<br />");
- client.print("Soltank midt............................T6= ");
- client.print(T6,1);
- client.println("<br />");
- client.print("Soltank top..............................T7= ");
- client.print(T7, 1);
- client.println("<br />");
- client.print("Fremlob fra fyr........................T8= ");
- client.print(T8, 1);
- client.println("<br />");
- client.print("Fremlob gulvvarme...................T9= ");
- client.print(T9, 1);
- client.println("<br />");
- client.print("VVB top................................T10= ");
- client.print(T10, 1);
- client.println("<br />");
- client.print("VVB bund.............................T11= ");
- client.print(T11, 1);
- client.print(" / ");
- client.print(T70);
- client.println("<br />");
- client.print("Solfanger manifol..................T12= ");
- client.print(T12, 1);
- client.println("<br />");
- client.print("Solvarme fremlob..................T13= ");
- client.print(T13, 1);
- client.println("<br />");
- client.print("Solvarme retur.......................T14= ");
- client.print(T14, 1);
- client.println("<br />");
- client.println("<br />");
- client.print("Varmestyring temperature og status");
- client.println("<br />");
- client.println("<br />");
- client.print("Differancetemperatur frem og retur hus........................................T20= ");
- client.print(T20);
- client.println("<br />");
- client.print("Differancetemperatur fra hus og efter veksler...............................T22= ");
- client.print(T22);
- client.println("<br />");
- client.print("Temperaturdifferance for ind og udkobling af soltank...........T60/T61= ");
- client.print(T60);
- client.print(" / ");
- client.print(T61);
- client.println("<br />");
- client.print("Differancetemperatur veksler og soltank ............................T23= ");
- client.print(T23);
- client.println("<br />");
- client.println("<br />");
- client.print("Status Cirkulationspumpe ");
- client.print(CpumpeS);
- client.println("<br />");
- client.print("Bypass ventil ");
- client.print(Ventil1S);
- client.println("<br />");
- client.print("Status Ventil VVB ");
- client.print(VVBVentilS);
- client.println("<br />");
- client.print("Fyr drift ");
- client.print(FyrDriftS);
- client.println("<br />");
- // Skriver status på centralvarme system.
- client.println("<br />");
- client.println("</html>");
- break;
- }
- if (c == '\n') {
- // you're starting a new line
- currentLineIsBlank = true;
- } else if (c != '\r') {
- // you've gotten a character on the current line
- currentLineIsBlank = false;
- }
- }
- }
- // give the web browser time to receive the data
- delay(1);
- // close the connection:
- Serial.println("client disconnected");
- }
- // Webmodul slut, fatter ikke det hele
- // LOGIK til styring af funktioner
- // Cirkulationspumpe for stuehus
- // Start cirkulationspumpe for stuehus hvis en af varmekilder er over T41
- if ((T2 > T41) || (T4 > T41) || (T7 > T41) || (T8 > T41)) {
- CpumpeOn();
- T70 = 50; // Sætter ønsket VVB temperatur til 50 grader
- }
- // Slukker centralvarmepumpe hvis alle varmekilder er startpunkt - 3 fremløb er under setpunkt og differance mellem frem og retur er under 5 grader
- if (((T2 < T42) && (T4 < (T41 - 3)) && (T7 < (T41 -3)) && (T8 - 3))&& (( T2- T3) < 5))
- {
- CpumpeOff();
- T70 = 10; // Sætter ønsket VVB temperatur til 10 grader
- }
- // Styring af bypass ventil for bypass af soltank
- // Aktiverer ByPass når vekslertemperatur er mere end 2 grader varmere end beholdertop
- if ((T4 > (T7 + 2)) and (T4 > (T8 + 2))) {
- Ventil1On();
- }
- // Slukker ByPass når tanker eller fyr er varmere end vekslertemperatur
- if ((T4 < T7) and (T4 < T8)) {
- Ventil1Off();
- }
- // Styring af VVB
- // Indkobler telestat for VVB
- // Hvis bunden af VVBèn er mindre end setpunkt og fremløb til huset er varmt nok aktiver telestaten.
- if ((T11 < (T70 - T71)) && (T2 > (T11 + T71))) {
- VVBVentilOn(); //Kalder start af VVB ventil
- }
- // Slukker VVB ventil hvis VVB temperatur når setpunkt +3 eller fremløb ikke er 3 grader varmere end VVB
- if ((( T11 > (T70 + T71))) || ((T2 + T71) < T11)) {
- VVBVentilOff() ; // Kalder stop af VVB ventil
- }
- client.stop();
- } // Afslutter loop
- // Betjener udgange for cirkulationspumpe
- // Starter cirkulationspumpe
- void CpumpeOn() {
- forsinkelse2++;
- if(forsinkelse2 > 500){
- digitalWrite(Cpumpe, HIGH); // Trækker udgang for centralvarme pumpe
- CpumpeS = 1; // Sætter centralvarmepumpe til status 1/ON
- }
- }
- // Stopper cirkulationspumpe
- void CpumpeOff() {
- {
- digitalWrite(Cpumpe, LOW); // Slukker udgang for centralvarmepumpe
- CpumpeS = 0; // Sætter centralvarmepumpe til status 0/OFF
- }
- }
- // Betjener udgang for ByPass ventil
- // Aktiverer bypassventil
- void Ventil1On(){
- digitalWrite(Ventil1, HIGH);
- Ventil1S = 1;
- }
- // Slukker Bypassventil
- void Ventil1Off(){
- digitalWrite(Ventil1, LOW);
- Ventil1S = 0;
- }
- // Aktiverer vvb
- void VVBVentilOn() {
- digitalWrite(VVBVentil, HIGH); // Trækker udgang for relæ til telestat for VVB
- VVBVentilS = 1; // Sætter status på VVB telestat
- }
- // Afbryder vvb
- void VVBVentilOff() {
- digitalWrite(VVBVentil, LOW); // Slukker udgang for relæ til telestat for VVB
- VVBVentilS = 0; // Sætter status på VVB talestat til 0
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement