/* * Měření výšky hladiny a teploty v nádrži a následné odesílání na portál tmep.cz * * Použité komponenty: * Prototypová deska Wemos D1 * Ultrazvukový vodotěsný modul pro měření vzdálenosti JSN-SR04T * Dallas čidlo na teplotu * * Zbastleno z příkladů na arduino-shop.cz a wiki.tmep.cz * * https://arduino-shop.cz/arduino/1457-esp8266-esp-12e-ota-wemos-d1-ch340-wifi-arduino-ide-uno-r3.html * https://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-ds18b20.html * https://navody.arduino-shop.cz/navody-k-produktum/ultrazvukovy-vodotesny-modul-pro-mereni-vzdalenosti-jsn-sr04t.html * https://wiki.tmep.cz/doku.php?id=zarizeni:esp8266 * */ // ESP #include #include #include // Ultrazvuk #include // Teplota #include #include // Pripojeni k wi-fi síti const char* nazevWifi = "NAZEVWIFI"; const char* hesloWifi = "HESLOKWIFI"; // Piny a nastaveni #define pinTrigger 5 #define pinEcho 4 #define maxVzdalenost 450 const int pinCidlaTeplomer = 14; // Inicializace ultrazvukového měřícího modulu z knihovny NewPing sonar(pinTrigger, pinEcho, maxVzdalenost); // Vytvoření instance oneWireDS z knihovny OneWire OneWire oneWireDS(pinCidlaTeplomer); // Vytvoření instance senzoryDS z knihovny DallasTemperature DallasTemperature senzoryDS(&oneWireDS); // Pro TCP spojení WiFiClient client; // Pole kde indexem je namerena vzdalenost a hodnotou procentualni vyjadreni plnosti nadrze int procenta[] = { 100, 99, 99, 98, 97, 97, 96, 95, 95, 94, 93, 93, 92, 91, 91, 90, 89, 89, 88, 87, 87, 86, 85, 85, 84, 83, 83, 82, 81, 81, 80, 79, 79, 78, 77, 77, 76, 75, 75, 74, 73, 73, 72, 71, 71, 70, 69, 69, 68, 67, 67, 66, 65, 65, 64, 63, 63, 62, 61, 61, 60, 59, 59, 58, 57, 57, 56, 55, 55, 54, 53, 53, 52, 51, 51, 50, 49, 49, 48, 47, 47, 46, 45, 45, 44, 43, 43, 42, 41, 41, 40, 39, 39, 38, 37, 37, 36, 35, 35, 34, 33, 33, 32, 31, 31, 30, 29, 29, 28, 27, 27, 26, 25, 25, 24, 23, 23, 22, 21, 21, 20, 19, 19, 18, 17, 17, 16, 15, 15, 14, 13, 13, 12, 11, 11, 10, 9, 9, 8, 7, 7, 6, 5, 5, 4, 3, 3, 2, 1, 1, 0 }; void setup() { // Zahájení komunikace po sériové lince Serial.begin(9600); // Zapnutí komunikace knihovny s teplotním čidlem senzoryDS.begin(); // Připojení k wifi WiFi.begin(nazevWifi, hesloWifi); // čekání na úspěšné připojení k routeru, // v průběhu čekání se vytiskne každých // 500 milisekund tečka po sériové lince while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Pripojeno k WiFi siti "); Serial.println(nazevWifi); Serial.print("IP adresa: "); Serial.println(WiFi.localIP()); } void loop() { // načtení informací ze všech připojených čidel na daném pinu senzoryDS.requestTemperatures(); // výpis teploty na sériovou linku, při připojení více čidel // na jeden pin můžeme postupně načíst všechny teploty // pomocí změny čísla v závorce (0) - pořadí dle unikátní adresy čidel Serial.print("Teplota cidla DS18B20: "); Serial.print(senzoryDS.getTempCByIndex(0)); Serial.println(" stupnu Celsia"); // načtení vzdálenosti v centimetrech do vytvořené proměnné vzdalenost int vzdalenost = sonar.ping_cm(); // pauza před dalším měřením delay(50); // pokud byla detekována vzdálenost větší než 0, // provedeme další měření if (vzdalenost > 0) { vzdalenost = 0; // pro získání stabilnějších výsledků provedeme 10 měření // a výsledky budeme přičítat do proměnné vzdalenost for(int i = 0; i < 10; i++) { vzdalenost += sonar.ping_cm(); delay(50); } // v proměnné vzdálenost máme součet posledních 5 měření // a musíme tedy provést dělení 10 pro získání průměru vzdalenost = vzdalenost/10; // Odecteme kominek + odtok vzdalenost = vzdalenost - 45; if(vzdalenost > 150) { vzdalenost = 150; } if(vzdalenost < 0) { vzdalenost = 0; } // vytištění informací po sériové lince Serial.print("Vzdalenost mezi senzorem a predmetem je "); Serial.print(vzdalenost); Serial.println(" cm."); } // pokud byla detekována vzdálenost 0, je předmět mimo měřící rozsah, // tedy příliš blízko nebo naopak daleko else { Serial.println("Vzdalenost mezi senzorem a predmetem je mimo merici rozsah."); delay(500); } if(client.available()) { char c = client.read(); Serial.write(c); } // Kdyby bylo uz nejake spojeni nahodou otevrene... client.stop(); // if there's a successful connection: if (client.connect("http://nadrz.tmep.cz", 80)) { Serial.print("Pripojuji se na tmep.cz..."); // send the HTTP GET request: client.print("GET /?"); client.print("tep"); client.print("="); client.print(senzoryDS.getTempCByIndex(0)); client.print("&humV"); client.print("="); client.print(procenta[vzdalenost]); client.println(" HTTP/1.1"); client.print("Host: "); client.println("nadrz.tmep.cz"); client.println("User-Agent: arduino-ethernet"); client.println("Connection: close"); client.println(); Serial.println(" OK."); } else { // if you couldn't make a connection: Serial.println(" spojeni selhalo"); } delay(60000); }