/* *** *** *** 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 ON zapnuto unsigned dry[] = {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 OFF vypnuto unsigned OFF[] = {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 Topím na 18 unsigned COOL[] = {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 pro Topím na 19 stupnu unsigned TEPLOTA19[] = {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 }; #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) { if (COOLON || DRYON) { // Pokud by byl zapnut, vypne jej //Serial.println("AC -> OFF"); irsend.sendRaw(OFF, sizeof(OFF) / sizeof(int), khz); COOLON = false; DRYON = false; } } else if (readString.indexOf("L=1") > 0) { // čtení hodnoty v případě, že Aklimatizace by měla svítit if (!DRYON) { //Pokud není zapnuto //Serial.println("Dry ON"); irsend.sendRaw(dry, sizeof(dry) / sizeof(int), khz); DRYON = true; COOLON = false; } } else if (readString.indexOf("L=2") > 0) { if (!COOLON) { //pokud je zapnuto //Serial.println("Cool ON"); irsend.sendRaw(COOL, sizeof(COOL) / sizeof(int), khz); COOLON = true; DRYON = false; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// else if (readString.indexOf("L=3") > 0) { if(CILOVATEPLOTA != 19){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTA19, sizeof(TEPLOTA19) / sizeof(int), khz); CILOVATEPLOTA = 19; ///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("Vypnuto"); } else if (COOLON) { client.println("Topim na 18*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 " + CILOVATEPLOTA + "*C"); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// else { client.println("Zapnuto"); } //sem pridavam tlacitka client.print("

| ON | OFF | 18C | 19*C | 20*C | 21*C | 22C | 23C | 24C | 25C

"); //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