Come regolare e controllare la temperatura di casa a distanza??
Come accendere il riscaldamento a distanza via web?
In questo Tutorial andremo a creare una semplice paginetta web che ci informerà della temperatura interna di casa e sempre da remoto possiamo dare il consenso all'impianto di partire e di mantenere la temperatura impostata .
Per il tutorial utilizziamo la sonda di temperatura Dallas DS18B20 con protocollo 1-wire già utilizzata in un precedente tutorial per misurare la temperatura.
Vediamo prima di tutto cosa occorre per realizzare il nostro progetto:
Elenco materiale occorrente utilizzando ARDUINO 2009 / UNO :
- n°1 Scheda ARDUINO 2009 / UNO (acquistabile qui).
- n°1 Shield Arduino Ethernet (acquistabile qui).
- sonda Dallas DS18B20 (acquistabile qui).
- Resistenza da 1Kohm.
- n°1 Relè a 5Vdc di tensione bobina tipo OMRON G5LA-14 o equivalenti.
- n°1 Transistor BC337.
- n°1 Diodo 1N4148.
- n°2 Resistenze da 1K.
- Cavo vari colori per breadboard.
- Cavo di rete LAN.
- Cavo USB.
Elenco materiale occorrente utilizzando ETABETA EDI:
- n°1 Scheda EtaBeta EDI
- n°1 Shield Arduino Ethernet
- n°1 MicroSD da inserire nella Ethernet Shield (opzionale)
- n°1 Cavo di rete LAN
- n°1 Cavo USB
Per chi utilizza Arduino iniziamo a collegare tutti i componenti che ci occorrono sulla breadboard come da schema:
Mentre con ETABETA EDI occorre solo abilitare la sonda di temperatura ed il relè 1 configurando il dip switch DS1 come in foto:
Vediamo lo sketch funzionante per entrambe le soluzioni (ARDUINO ed ETA BETA EDI), il valore di temperatura viene stampato sulla pagina web da noi creata insieme allo stato della caldaia (Accesa / Spenta).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | /* * Tutorial: Termostato remoto via web con Arduino o EDI * * Acqua - Pinto * https://etabetastudio.blogspot.com */ #include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 8 OneWire ourWire(ONE_WIRE_BUS); DallasTemperature sensors(&ourWire); byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Mac address ethernet shield byte ip[] = { 192, 168, 1, 50 }; // indirizzo IP assegnato alla shield byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask EthernetServer server(80); //porta configurata sul router per collegarsi alla scheda anche in remoto boolean a = true; // in accensione la gestione automatica della caldaia è abilitata int rele1 = 7; // pin collegato al relè 1 a cui collegare la caldaia String readString; boolean statocaldaia; //Variabile di controllo stato caldaia (ACCESA/SPENTA) void setup(){ Ethernet.begin(mac, ip, gateway, subnet); //inizializzare la ethernet shield pinMode(rele1, OUTPUT); // Impostare relè 1 come output Serial.begin(9600); //inizializzare seriale sensors.begin(); } void loop(){ sensors.requestTemperatures(); // Procedura x creazione pagina web EthernetClient client = server.available(); //richiesta del client della pagina web if (client) { boolean currentLineIsBlank = true; // se la variabile currentLineIsBlank è nicazione con il client while (client.connected()) { //Verificare la comunicazione cliet/server if (client.available()) { char c = client.read(); readString.concat(c); if (c == '\n' && currentLineIsBlank) { Serial.print(readString); client.println("HTTP/1.1 200 OK"); //Standard HTML client.println("Content-Type: text/html"); client.println(); client.print("<html><head><title>ETA BETA STUDIO WEB CONTROL ARDUINO EDI</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>"); client.println("<meta http-equiv=\"refresh\" content=\"10\">"); // REFRESH PAGINA WEB OGNI 10 SECONDI client.print("Temperature (C): "); client.println(sensors.getTempCByIndex(0)); client.println("<br />"); if (statocaldaia == 1){ client.print("CALDAIA ACCESA "); } else{ client.print("CALDAIA SPENTA "); } Serial.print(readString); // IMPOSTO QUESTO IF PER ABILITARE L'ACCENSIONE O LO SPEGNIMENTO DELLA CALDAIA AL RAGGIUNGIMENTO DELLA TEMPERATURA STABILITA (20°C) if(readString.indexOf("ACCENSIONEAUTOMATICAON") > 0 ) { if (sensors.getTempCByIndex(0) > 20 ){ //IMPOSTO IL VALORE DI TEMPERATURA SOTTO IL QUALE SI ACCENDE LA CALDAIA digitalWrite(rele1, HIGH); a = true; statocaldaia = 1; } else { //IMPOSTO IL VALORE DI TEMPERATURA SOPRA IL QUALE SI ACCENDE LA CALDAIA digitalWrite(rele1, LOW); a = true; statocaldaia = 0; } } if(readString.indexOf("ACCENSIONEAUTOMATICAOFF") > 0 ) { digitalWrite(rele1, LOW); a = false; statocaldaia = 0; } client.print("<h2><a href='/?ACCENSIONEAUTOMATICAON=1'>ACCENSIONE AUTOMATICA ABILITATA</a> | <a href='/?ACCENSIONEAUTOMATICAOFF=1'>ACCENSIONE AUTOMATICA DISABILITATA</a></h2>"); client.println("</body></html>"); readString=""; client.stop(); } } } } if (sensors.getTempCByIndex(0) > 20 && a == true) { // accende caldaia digitalWrite(rele1, HIGH); //accendo statocaldaia = 1; } if (sensors.getTempCByIndex(0) <= 20 && a == true) { // spegne caldaia digitalWrite(rele1, LOW); //spengo statocaldaia = 0; } if (a == false) { digitalWrite(rele1, LOW); //spengo statocaldaia = 0; } } |
Buon Divertimento
Christian Acqua e Massimo Pinto
Nessun commento:
Posta un commento