mercoledì 6 luglio 2016

Tutorial: Termostato remoto via web con Arduino o EDI

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:


Utilizziamo un transistor BC337 NPN in configurazione CBE (collettore - Base - Emettitore) per non danneggiare il micro.


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