Termostato wifi con Arduino e miuPanel

Ciao a tutti!

Il progetto che realizzeremo oggi è un termostato wifi controllabile con una applicazione per smartphone.
In pratica da dovunque voi siate potrete controllare un dispostivo tramite la chiusura di un contatto di un relè (una caldaia, un ventilatore, una scaldiglia,etc)






I componenti di cui avremo bisogno sono:

  • una scheda Arduino
  • un modulo wifi miuPanel SCF-01 (acquistabile qui)
  • un sensore di temperatura DHT11
  • un modulo relè 
  • breadboard e cavetteria varia.



Ecco il video del primo prototipo, in cui potete vedere il funzionamento del sistema:




Schematizzando il principio di funzionamento di questo sistema è il seguente:

  •  la scheda wifi miuPanel si collega alla vostra rete wifi di casa
  •  la scheda Arduino invia, via seriale, le informazioni al modulo miuPanel per generare il pannello grafico che vedrete sul vostro smartphone.
  •  scaricate poi l'app miuPanel sul vostro smartphone e riconoscete il pannello (se non sapete come si fa o se volete muovere i primi passi con questo fantastico dispositivo leggete qui)
  •  agendo sull'app generata sul vostro smartphone il modulo wifi restituirà all'Arduino delle stringhe di testo in base a ciò che avete fatto (ad esempio attivato o disattivato uno switch).
  •  leggendo queste informazioni poi, l'Arduino, comanderà ciò che è collegato alle porte di uscita.



A questo punto siamo pronti a realizzare lo schema elettrico:



A questo punto abbiamo quasi finito, sarà sufficiente caricare il seguente sketch per iniziare ad utilizzare il nostro sistema.

Assicuratevi di avere la libreria DHT11 per il sensore di temperatura e ricordatevi di scollegare il cavetto dal pin 0 di Arduino durante il caricamento!


In pratica tutto quello che vedete sul pannello è contenuto nelle righe inviate dall'Arduino al miuPanel via seriale (quindi sulle righe 22,23 - 50,51 e 55,56)


Questi sono gli screenshot del pannello che apparira sull'app se tutto sarà andato a buon fine:





         




Il funzionamento è molto intuitivo, nella "modalità manuale" (primo screenshot) controllerete lo stato del relè manualmente agendo sullo switch, mentre nella "modalità automatica" (secondo e terzo screen) andrete ad inserire la temperatura che vorrete raggiungere nel campo "ins_t", se la temperatura impostata è più alta di quella attuale il relè si attiverà, quando la temperatura attuale raggiungerà quella impostata il rele si spegnerà.

Finito!
e ricordate che potete personalizzare il pannello come vorrete,
tutte le info necessarie su www.miupanel.com

Per qualsiasi info su questo progetto lasciate pure un commento qui sotto,
ciao!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

59 commenti:

  1. Ciao come hai fatto ad inserire il codice in maniera cosi corretta a con la grafica di arduino? Grazie

    RispondiElimina
  2. ciao, cosa intendi? per la grafica del pannello trovi un simulatore sul sito di miuPanel dal quale puoi fare tutte le prove che vuoi,
    spero intendessi questo, ciao!

    RispondiElimina
  3. Ciao, sono Angelo e non ci capisco più nulla.
    Vorrei alienare il cavo USB che ora collega il mio PC con Arduino Uno, con una connessione wifi.
    Ho acquistato il relativo modulo ed il suo adattatore di tensione, dato che i comandi ad Arduino vengono passati da basic col PC, è necessario l'uso di miupanel??? Grazie

    RispondiElimina
    Risposte
    1. Il cavo USB è necessario per programmare l'arduino UNO, l'uso di miuPanel è vincolato al modulo WiFi miuPanel

      Elimina
  4. Scusa ma il quesito è un altro ovvero : per far vedere Arduino al PC l'uso di miuPanel è vincolante o ci si riesce in altro modo.
    Grazie

    RispondiElimina
    Risposte
    1. Il collegamento tra Arduino e PC lo fai tramite USB. Il collegamento tra smartphone e Arduino lo fai con miuPanel

      Elimina
    2. Il collegamento tra Arduino e PC lo fai tramite USB. Il collegamento tra smartphone e Arduino lo fai con miuPanel

      Elimina
  5. Scusa ma non capisco, per impartire comandi ad Arduino Uno dal PC in modo wireless cosa devo praticamente fare?????

    RispondiElimina
  6. Ciao io uso un arduino mega 2560 rev3 quando uso i pin tx0 e rx0 funziona tutto bene ma quando cambio questi pin e uso tx2 e rx2 non funziona più nulla perchè?

    RispondiElimina
    Risposte
    1. Ciao Luca,
      hai modificato anche lo sketch per la seriale 2?
      se non sbaglio sulla mega per usare la seriale 2 devi sostituire tutti i "Serial" con "Serial2". Prova così, fammi sapere, ciao!

      Elimina
    2. Si adesso funziona. peró ho notato che nello schema di collegamento il pin tx del modulo va al pin rx di arduino e il pin rx del modulo va al pin tx di arduino, perchè di solito il pin tx va al tx e l'rx va all'rx perchè qua è il contrario?

      Elimina
    3. io di solito vedo il pin tx che entra nell'rx, perchè uno trasmette e l'altro riceve. Non saprei, magari in alcune schede sono state invertite le scritte per facilitare l'utente. Comunque in questo caso il collegamento corretto è TX con RX e viceversa. Ciao

      Elimina
  7. ciao,volevo sapere nella riga 84 cosa significa il (0,4);
    poi anche questa non riesco a capire :
    temperatura_impostata = Msg.substring(4, 6).toInt();

    RispondiElimina
    Risposte
    1. Ciao Alex,
      la funzione "substring" serve a dividere la stringa. in pratica scrivendo "Msg.substring(4,6).toInt();" sto andando a leggere solo i caratteri 4 e 5 di quella stringa, e poi li trasformo in un unico numero.

      ciao!

      Elimina
  8. scusa una cosa non riesco a capire come funziona l applicazione uPanel o meglio come faccio a portare i pulsanti bottoni sull applicazione calcola che ho gia l applicazione sul mio iphone e ho gia configurato il wifi sotto il mio router ... ed ora non riesco ad andare avanti cioecosa devo fare per fare un pannello e portarlo sul pc

    RispondiElimina
    Risposte
    1. Ciao, Miupanel è un pannello "vuoto", per aggiungere dei bottoni sull'app devi dare dei comandi via seriale dall'arduino al modulo miupanel.
      Trovi un esempio qui:
      http://www.danielealberti.it/2015/10/panel-linterfaccia-wifi-semplice-per-i.html

      Ciao!

      Elimina
  9. o meglio una volta inserito lo sketcksu arduino che bisogna fare

    RispondiElimina
  10. ho ricopiato lo sketch emandato su arduino nano ma se apro l applicazioene e connetto wifi mi appare una schermata tutta nera perche dove sbaglio

    RispondiElimina
  11. salve volevoun indicazione
    ho acquistato un modulo miupanel
    configurato con il mio modem econ l applicazione sulmio iphone che riesco a vedere e comunicare.....
    ora io ho fattouno sketch che piosso vedere online i risultati delsensore dh11 siatemperatura umidita e dowe point ...ora vilascio di seguito lo sketch...
    perche volevo sapere se era possibile comunicarecon l applicazione facendo un pannello con grafici e valori di temperatura e umidita' e dowe point aggiornabili con allerta (notifica) se supera o scende determinati valori.....volevo sapere comepoter fare un grafico e se era possibile realizzarlo con upanel.. o come poterlo fare grazie

    RispondiElimina
  12. #include
    #include
    #include
    /*-----( Declare Constants and Pin Numbers )-----*/
    #define DHT11PIN 2 // The Temperature/Humidity sensor
    // Enter a MAC address and IP address for your controller below.
    // The IP address will be dependent on your local network:
    byte mac[] = {
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    /*-----( Declare objects )-----*/
    IPAddress ip(192,168,1, 22);
    // Initialize the Ethernet server library
    // with the IP address and port you want to use
    // (port 80 is default for HTTP):
    EthernetServer server(80);
    dht11 DHT11; //The Sensor Object
    /*-----( Declare Variables )-----*/

    void setup() /****** SETUP: RUNS ONCE ******/
    {
    // Open serial communications and wait for port to open:
    Serial.begin(9600);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }

    // start the Ethernet connection and the server:
    Ethernet.begin(mac, ip);
    server.begin();
    Serial.print("server is at ");
    Serial.println(Ethernet.localIP());
    }//--(end setup )---

    RispondiElimina
  13. void loop() /*----( LOOP: RUNS OVER AND OVER AGAIN )----*/
    {
    // listen for incoming clients
    EthernetClient client = server.available();
    if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
    if (client.available()) {
    char c = client.read();
    Serial.write(c);
    // if you've gotten to the end of the line (received a newline
    // character) and the line is blank, the http request has ended,
    // so you can send a reply
    if (c == '\n' && currentLineIsBlank) {
    // send a standard http response header
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("Connnection: close");
    client.println();


    RispondiElimina
  14. client.println("Content-Type: text/html");
    client.println("Connnection: close");









    RispondiElimina
  15. se mi mandi una email ti mando lo sketch

    RispondiElimina
  16. BUONGIORNO, MI CHIAMO ANTONIO E DA POCO MI SONO AVVICINATO AD ARDUINO, COMPLIMENTI PER IL TUO PROGETTO, VORREI REALIZZARE IL TUO STESSO TERMOSTATO MA MI CHIEDEVO SE SI POTESSE CAMBIARE IL SENSORE DI TEMPERATURA, MI SPIEGO:
    DEVO REALIZZARE UN TERMOSTATO CON WIFI PER CONTROLLARE LA TEMPERATURA DI UNA PENTOLA ELETTRICA, QUINDI IL SENSORE ANDREBBE MESSO ALL'INTERNO DI UN PORTASONDA MONTATO SULLA PENTOLA..
    PENSAVO A UN SENSORE TIPO QUESTO:

    http://www.ebay.it/itm/SONDA-DS18B20-SENSORE-DI-TEMPERATURA-da-55-a-125-C-ARDUINO-ART-CD06-/261141793540?hash=item3ccd438b04:g:F9YAAOSw9NdXqd9G

    SE FOSSE POSSIBILE POTRESTI CAMBIARE IL CODICE PER ADATTARLO A QUESTO TIPO DI TERMOSTATO?
    GRAZIE IN ANTICIPO!

    RispondiElimina
  17. buon pomeriggio alberto e complimenti per il progetto. posso comandare questo termostato anvhe se sono fuori casa?

    RispondiElimina
    Risposte
    1. Ciao, si, in base anche alla configurazione del tuo router.
      Daniele

      Elimina
  18. Salve, vorrei realizzare il progetto ma avrei la necessità di controllare 2 zone diverse (2 sensori e due relè) è fattibile con un solo arduino?
    Grazie

    RispondiElimina
    Risposte
    1. tecnicamente sì, basta che i fili riescano ad arrivare alla scheda Arduino e implementare un poco di codice extra per gestire i compoenti in più. Se no per iniziare si può valutare un progetto su Cayenne Mydevices che è molto più intuitivo. Per il riscaldamento esistono termostati che imparano i tempi di riscaldamento e raffreddamento della casa (tipo netatmo)e adattano l'accensione/spegnimento della caldaia in modo da stabilizzare la temperatura (isteresi o PID) senza avere sbalzi termici che sono tipici dei sistemi on/off basati sulle sole soglie di temperatura.

      Elimina
    2. Ok. Grazie mille. Seguiro i suoi consigli.

      Elimina
  19. Buongiorno.
    Ho realizzato il progetto e grazie alla tua guida è andato tutto bene.
    L'unico problema che ho riscontrato, è che svincolando arduino dal pc e alimentato da fonte esterna si disconnette il modulo wi fi.
    è normale o ho sbagliato qualcosa... Grazie

    RispondiElimina
    Risposte
    1. In che senso si sconnette? Verifica la fonte di alimentazione

      Elimina
    2. Grazie della info.
      Infatti fonte di alimentazione non adeguata. Risolto il problema con alimentatore più potente

      Elimina
    3. Ciao Sandro,
      Mi sono da poco affacciato ha questo mondo di arduino.Ho seguito questo progetto di Daniele Alberti seguendo tutto alla lettera scaricando e inviando lo sketch ma quando apro l'app sul telefono non accade nulla solo il led da verde diventa giallo ma sul display non appare nulla.
      Dove sbaglio?
      Ti ringrazio per la cortese attenzione.

      Elimina
  20. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  21. Grazie Daniele.Ti seguo da tempo ed ho letto molto attentamente i tuoi progetti. Complimenti per il tempo che ci dedichi. Volevo approfittare del tuo know how semplicemente chiedendoti la cortesia di includere nello sketch le stringhe relative all' umidità relativa rilevata....in sintesi, come cavolo si fa ad avere il dato sul modulo del phone?
    Grazie infinite!

    RispondiElimina
  22. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  23. Ciao,
    ho utilizzato il tuo progetto, ma noto una differenza di temperature tra la lettura da monitor seriale e uPanel.
    E' possibile risolvere questo problema?
    Grazie in anticipo e grazie mille per il progetto.

    RispondiElimina
  24. Ciao Daniele, ho iniziato da poco a usare arduino che trovo molto ma molto interessante. Ho usato la prima guida per accendere il led e funziona. Ho provato questa guida per termostato seguendo il tutto alla lettera con collegamenti ecc.ma sul telefono non appare nulla. Dove sbaglio? Chiedo aiuto anche agli altri utenti piu esperti di me!! Grazie a tutti!!

    RispondiElimina
  25. Ciao Daniele,
    ho realizzato il tuo progetto del termostato che funziona alla perfezione.
    Vorrei chiederti di aiutarmi a capire come configurare miupanel e router fastweb per controllare il sistema quando non sono in casa.
    Ti ringrazio immensamente in anticipo.
    Sei un grande.
    Chiedo aiuto anche agli altri utenti
    Grazie a tutti
    Saluti

    RispondiElimina
  26. Ciao! intanto grazie per il lavoro che fai!
    ho un problema con la libreria DHT. L'ho scaricata e messa nella cartella libraries dii Arduino ma quando vado a compilare mi da:

    In file included from C:\Users\xxx\Documents\Arduino\libraries\DHT_sensor_library-1.3.0\DHT_U.cpp:22:0:
    C:\Users\xxx\Documents\Arduino\libraries\DHT_sensor_library-1.3.0\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory
    #include
    ^
    compilation terminated.
    Errore durante la compilazione


    Come mai? grazie!

    RispondiElimina
    Risposte
    1. Ciao e grazie!
      Non capisco perché ti dice "Adafruit_Sensor.h" non ci dovrebbe essere nulla dell'adafruit nello sketch, lo hai modificato o è come nell'esempio?

      Elimina
    2. non ho modificato nulla. ho provato a compilarlo anche da un'altro pc ma mi da sempre lo stesso errore.

      Elimina
    3. Se vai tra gli esempi (nel menu) vedi quelli della libreria DHT?

      Elimina
    4. Risolto! direttamente da "gestisci librerie" ho installato una versione precedente della libreria e va!
      Ora però quando connetto il telefono via Wi-Fi al uPanel si interrompe la connessione wi-fi (solo con questo progetto).
      Grazie per le risposte!

      Elimina
  27. è possibile avere il fritzing sorgente please?

    RispondiElimina
  28. Buongiorno a tutti,
    Sto procedendo con la realizzazione del progetto...
    volevo sapere se si può aggiungere un interruttore per un azionandnto manuale nel caso cadesse la rete e uno schermo ... oppure in generale qualcosa per il controllo in locale ...

    RispondiElimina
  29. Buongiorno. Ho realizzato qualcosa di molto simile al tuo progetto ma volendo fare un passo in più mi sono arenato.
    In pratica il termostato è installato vicino ai sensori di temperatura (uno in ambiente e uno all'esterno) ma lontano dalla caldaia; quindi per collegarlo dovrei stendere 10 metri di filo e temo non passi nelle canalette.
    Allora ho comprato un modulo ESP8266 RELAY con l'idea di posizionarlo vicino alla caldaia e farlo dialogare col termostato attraverso in router di casa.
    I problemi sono:
    - programmazione del modulo per l'accesso alla rete di casa;
    - invio del comando on/off dal termostato al relè, ossia su un indirizzo IP specifico.

    Puoi darmi qualche suggerimento?

    RispondiElimina
  30. interessante se fosse completo con orari on off riscaldamento e impostazione minima e massima. Meglio sfruttando sensore umidità che attiva deumidificatore (quindi aggiungendo un uscita...

    RispondiElimina
  31. Ciao Daniele,
    ho comprato il modulo e dovrei realizzare questo progetto. Ti volevo chiedere se e' possibile inserire nello Sketch anche un Timer settimanale in modo da poter gestire la Caldaia in modo automatico.
    Grazie e buona giornata,
    Massimiliano

    RispondiElimina
  32. Ciao Daniele,bel progetto, volevo chiederti un aiuto, ho realizzato un progetto di domotica con arduino mega e una ethernet shield,quindi non utilizzo il modulo wifi ma una connessione fisica alla rete,oltre ai comandi per le accensioni ho impostato nello sketch 4 sensori di temperatura mpc9700 , uno legge la temperatura del sistema , due leggono le temperature dei due piani e l'ultimo la temperatura esterna.Il mio problema è che non riesco a far funzionare i comandi riferiti ai tre sensori , cioè quando le temperature impostate sono maggiori o minori arduino deve accendere o spegnere i relè dedicati. Sbaglio sicuramente qualcosa nello sketch, ci sto diventando pazzo. Ovviamente se puoi aiutarmi ti posto lo sketch completo. Scusami se sono stato lungo nella descrizione e se magari ìl mio argomento non è proprio inerente a quello trattato qui.Chiedo aiuto a te e a tutti coloro che leggeranno questo messaggio. Ti ringrazio e ringrazio tutti. Ciao
    Roberto

    RispondiElimina
    Risposte
    1. Ciao, prova a postare sketch e problema nella sezione "chiedi e rispondi"

      Elimina
    2. Ciao Daniele, grazie della risposta, ho appena inserito su " chiedi e rispondi " il mio quesito e lo sketch completo.
      Grazie

      Ciao

      Elimina
  33. Ciao Daniele,
    ho comprato il modulo e dovrei realizzare questo progetto. Ti volevo chiedere se e' possibile inserire nello Sketch anche un Timer settimanale in modo da poter gestire la Caldaia in modo automatico.
    Grazie e buona giornata,
    Massimiliano

    RispondiElimina
  34. Ciao ho notato una cosa e vorrei chiederti un'altra indicazione:

    if (tempo > (temporefresh + 1000)) // ogni secondo aggiorno le altre informazioni sul pannello
    {
    Serial.print("#A1:");
    Serial.println(temperatura_impostata);
    if ((automatico == 1) && (t < temperatura_impostata))
    {
    digitalWrite (relais, HIGH);
    Serial.println("#L21");
    }
    if ((automatico == 1) && (t > temperatura_impostata))
    {
    digitalWrite (relais, LOW);
    Serial.println("#L20");
    }
    temporefresh = tempo;
    }
    }

    ho notato che dopo "automatico" il codice rimane uguale sia in acceso che spento, infatti se inserisco una temperatura più alta non stacca.

    Altra domanda: se volessi mettere un dht22 invece che un dht11 cosa devo variare?

    Grazie

    RispondiElimina
    Risposte
    1. Per farlo staccare devi inserire una temperatura più bassa, attacca per "scaldare" l'ambiente.
      Il dht 22 non l'ho mai usato, ma probabilmente ti basta modificare la riga in alto dove si definisce il tipo di dht

      Elimina
    2. Il sensore mi segna sempre 60°. Se imposto la temperatura a 65° non stacca. Proverò a cambiare ma il dht11 con dht22 ma le librerie?

      Grazie

      Elimina
    3. La libreria dovrebbe supportare entrambi, però va approfondita la cosa

      Elimina
  35. Ciao , se al posto del DHT11 usassi una sonda? Come sarebbe lo sketch? Non sono molto pratico di Arduino e vorrei controllare da remoto la resistenza di un solare termico. Grazie

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post