/* *** *** *** Ovládání klimatizace arduino MEGA 2560+ethernet shield *** *** *** */ #include #include #include #include "IRremote.h" #include /* Ovladaní klimatizace ir diodou přes webové stránky na adrese ip 192.168. 1.13 Potřebné vybavení Arduino Mega ETHERNET SHIELD DHT22, IR led */ byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac adresa byte ip[] = { 192, 168, 1, 13 }; // ip arduino byte gateway[] = { 192, 168, 1, 254 }; // Přístup k internetu přes router byte subnet[] = { 255, 255, 255, 0 }; // maska EthernetServer server(80); //server port IRsend irsend; int khz = 38; //modulační frekvence diody // kod ovladače pro TEPLOTA 18 unsigned TEPLOTA18[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1600, 550,1600, 550,1600, 550,1600, 600,1550, 600,500, 550,1600, 600,500, 550,500, 550,500, 600,500, 550,1600, 600,500, 550,1600, 550,500, 600,1550, 600,1600, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; // kod ovladače pro TEPLOTA 19 unsigned TEPLOTA19[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1550, 600,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,500, 600,500, 550,1600, 550,500, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; // kod ovladače pro TEPLOTA 20 unsigned TEPLOTA20[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1600, 550,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,500, 550,500, 600,500, 550,1600, 600,500, 550,500, 550,500, 600,1600, 550,1600, 550,1600, 550,1600, 600,500, 550,1600, 550,1600, 600,1600, 550 }; // kod ovladače Teplota 21 unsigned TEPLOTA21[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1550, 600,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,500, 600,500, 550,1600, 550,500, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; // kod ovladače Teplota 22 unsigned TEPLOTA22[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1600, 550,1600, 550,1600, 550,1600, 600,1550, 600,500, 550,1600, 600,500, 550,500, 550,500, 600,500, 550,1600, 600,500, 550,1600, 550,500, 600,1550, 600,1600, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; // kod ovladače Teplota 23 unsigned TEPLOTA23[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1550, 600,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,500, 600,500, 550,1600, 550,500, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; // kod ovladače pro TEPLOTA 24 unsigned TEPLOTA24[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1600, 550,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,500, 550,500, 600,500, 550,1600, 600,500, 550,500, 550,500, 600,1600, 550,1600, 550,1600, 550,1600, 600,500, 550,1600, 550,1600, 600,1600, 550 }; // kod ovladače Teplota 25 unsigned TEPLOTA25[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1550, 600,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,500, 600,500, 550,1600, 550,500, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; // kod ovladače Teplota 26 unsigned TEPLOTA26[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1550, 600,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,500, 600,500, 550,1600, 550,500, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; // kod ovladače DISPLAY unsigned TEPLOTA27[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1550, 600,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,500, 600,500, 550,1600, 550,500, 600,1600, 550,500, 550,1600, 600,500, 550,1600, 550,1600, 600,500, 550,1600, 550,500, 600,1600, 550 }; #define DHTPIN 2 // Datový pin DHT22 je 2 #define DHTTYPE DHT22 // osazeno DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); int irPin = 9; // pin IR diody String readString; //řada boolean COOLON = false; // stav chlazení boolean DRYON = false; // stav vysoušení int CILOVATEPLOTA = 0; // stav aktualni teploty void setup() { Ethernet.begin(mac, ip, gateway, subnet); dht.begin(); pinMode(irPin, OUTPUT); Serial.begin(9600); } void loop() { float t = dht.readTemperature(); // hodnota teploty float h = dht.readHumidity(); // hodnota vlhkosti /*spuštění klienta*/ EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); readString.concat(c); //zapamatovat každý znak v řetězci //if HTTP request has ended if (c == '\n' && currentLineIsBlank) { Serial.print(readString); if (readString.indexOf("L=0") > 0) { // čtení hodnoty v případě, že Aklimatizace by měla svítit if (CILOVATEPLOTA != 18){//Pokud není zapnuto //Serial.println("Dry ON"); irsend.sendRaw(TEPLOTA18, sizeof(TEPLOTA18) / sizeof(int), khz); DRYON = true; COOLON = false; } } else if (readString.indexOf("L=1") > 0) { if (CILOVATEPLOTA != 19){ //pokud je zapnuto //Serial.println("Cool ON"); irsend.sendRaw(TEPLOTA19, sizeof(TEPLOTA19) / sizeof(int), khz); COOLON = true; DRYON = false; } } else if (readString.indexOf("L=2") > 0) { if(CILOVATEPLOTA != 20){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA20, sizeof(TEPLOTA20) / sizeof(int), khz); CILOVATEPLOTA = 20; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } else if (readString.indexOf("L=3") > 0) { if(CILOVATEPLOTA != 21){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA21, sizeof(TEPLOTA21) / sizeof(int), khz); CILOVATEPLOTA = 21; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } else if (readString.indexOf("L=4") > 0) { if(CILOVATEPLOTA != 22){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA22, sizeof(TEPLOTA22) / sizeof(int), khz); CILOVATEPLOTA = 22; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } else if (readString.indexOf("L=5") > 0) { if(CILOVATEPLOTA != 23){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA23, sizeof(TEPLOTA23) / sizeof(int), khz); CILOVATEPLOTA = 23; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } else if (readString.indexOf("L=6") > 0) { if(CILOVATEPLOTA != 24){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA24, sizeof(TEPLOTA24) / sizeof(int), khz); CILOVATEPLOTA = 24; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } else if (readString.indexOf("L=7") > 0) { if(CILOVATEPLOTA != 25){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA25, sizeof(TEPLOTA25) / sizeof(int), khz); CILOVATEPLOTA = 25; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } else if (readString.indexOf("L=8") > 0) { if(CILOVATEPLOTA != 26){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA25, sizeof(TEPLOTA26) / sizeof(int), khz); CILOVATEPLOTA = 26; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } else if (readString.indexOf("L=9") > 0) { if(CILOVATEPLOTA != 27){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA27, sizeof(TEPLOTA27) / sizeof(int), khz); CILOVATEPLOTA = 27; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; } } // sestava stranky HTML client.println("HTTP/1.1 200 OK....."); client.println("Content-Type: text/html"); client.println(); // inicializovat stránku (musí být odstraněny, pokud používáte AJAX) client.print("Klimatizace doma"); //inicializuje tělo client.println("
"); //rozlišení pro nokia 5800 640x360, iPhone4 960x640 pixel, iPhone5 1136x640 client.println("

Klimatizace Nordline


"); //prohlížeč (hodnoty z DHT) client.println("

TEPLOTA = "); client.print(t); client.println(" *C

"); //vypise hodnoty z DHT client.println("

VLHKOST = "); client.print(h); client.println(" %

"); // odkaz na aktualizaci dat client.print("

Obnovit data: Aktualni data


"); client.println("

Ovladani klimatizace

"); //scrivo il AC status client.print("Nastaveno: "); if (DRYON) { client.println("Nocni rezim 18*C"); } else if (COOLON) { client.println("Topim na 19*C"); } else if (CILOVATEPLOTA > 0 && !COOLON && !DRYON) { /// Pokud je cilova teplota > 0 a nebezi zadny z ostatnich programu, vypiseme cilovou teplotu client.println(" Topim na 20*C "); } else if (CILOVATEPLOTA = 21 && !COOLON && !DRYON) { /// Pokud je cilova teplota > 0 a nebezi zadny z ostatnich programu, vypiseme cilovou teplotu client.println(" Topim na 21*C "); } else { client.println("Zapnuto"); } //sem pridavam tlacitka client.print("

| 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |27

"); //podpis stranky client.println("
"); client.print("

Martin Puhlovsky Rudnik 2016

"); client.println("
"); // zavrit client.println("
"); // Zavřu stránky, které mají být odstraněny, pokud používáte AJAX client.println(""); // vycistit pro dalsi cteni readString = ""; //aniž by byla dotčena ke klientovi client.stop(); } //if c == /n } // if client available } // while client connesso } // FINE if client } // fine loop