Nei giorni precedenti avevo promesso di postare un codice che permettesse di controllare via web, tramite protocollo http, il nostro Arduino.
Seguendo il suggerimento di un codice facilmente reperibile in rete, ho apportato alcune modifiche ed ho implementato la visualizzazione dei valori di temperatura e luminosità di un ambiente.
Le applicazioni che possono essere create utilizzando questo codice sono una moltitudine, potreste collegare un termostato della caldaia, controllare se alcuni interruttori magneti collegati alle porte e finestre di casa vostra sono stati aperti o chiusi, controllare la temperatura del vostro appartamento, aprire il portone di casa, inviare un allarme acustico, ecc. ecc.
Se avete più idee e fantasia di me non esitate a comunicarmele!!!
Cosa ci serve?
- Arduino UNO o qualunque Board Arduino
- Ethernet Shield
- Stadio pilota con relè
- Breadboard
- Fotoresistenza
- Sensore di temperatura (MCP9700A)
- Alcune resistenze
- LED
- Adattatore USB da 220V AC a 5V DC o Alimentatore DC (5V – 15V) jack maschio 2,1mm
- Cavo USB (nel caso si utilizzi un alimentatore il cavo USB è superfluo)
- Multipresa elettrica (da donare alla causa)
- Cavetteria varia
- Cavo di Rete RJ-45 (no cross se si utilizza un router o un hub)
- Smartphone (GPRS – UMTS) o un dispositivo che permetta la navigazione WEB
- Router con Connessione Internet
Qui sotto riporto un semplice schema dei collegamenti che ho fatto utilizzando il programma opensource Fritzing che consiglio vivamente.
Lo stadio pilota con relè ci serve in quanto Arduino non può erogare più di 40mA pertanto con un piccolo transistor, un diodo ed un paio di resistenze è possibile controllare un relè alimentao a 5V DC. In questa maniera è possibile anche applicare a valle dello stadio pilota anche carichi alimentati a 220V in corrente alternata, nel mio caso ho collegato una multipresa elettrica con una lampadina da 220V 23W come carico.
Il codice che ho scritto su Arduino crea un mini Server WEB dove è possibile connettersi tramite un client collegato ad internet (nel mio caso un Nokia 5800) e controllare lo stato del sensore di temperatura e della fotoresistenza. In più passando un determinato parametro è possibile attivare via protocollo HTTP una o più uscite.
Qui a fianco sono riportati gli screenshots di quello che veniva visualizzato dal browser del mio Nokia 5800.
In alto i valori del sensore di temperatura e della fotoresistenza, in basso lo stato dell’uscita, nel mio caso il pin 9, e i link ACCENTI – SPEGNI che passano i paramenti ad Arduino per attivare o disattivare l’uscita da controllare via web.
Nella prima immagine il PIN 9 è disattivato, mentre nella seconda immagine il pulsante ACCENDI è stato cliccato, si capisce dal colore viola che ha assunto il link e il PIN 9 si è attivato.
Nell’esempio che ho riportato ho attivato l’uscita 9 alla quale era collegato lo stadio pilota con relè che tramite un parametro passato via HTTP accendeva o spengeva una lampada.
Sull’ingresso analogico 0, ho collegato la fotoresistenza che oltre a comunicarmi il suo stato via web accende e spegne un led quando si verifica una determinata condizione.
Stessa cosa per il sensore di temperatura collegato nel mio esempio all’ingresso analogico 1. Anch’esso oltre a comunicarmi la temperatura via web fa accendere o spegnere un led al verificarsi di una determinata condizione.
Per esempio se al posto del led avessimo collegato lo stadio pilota con relè al termostato della caldaia questa si sarebbe accesa quando la temperatura misurata fosse stata inferiore alla temperatura di controllo impostata nel codice e solo se l’uscita fosse stata attivata. Oppure se al posto del led della fotoresistenza avessimo collegato una sirena questa avrebbe iniziato a suonare nel momento in cui la luminosità dell’ambiente fosse cambiata.
Qui sotto ho caricato il video dimostrativo del funzionamento. Non è il massimo della legge 626 ma è per dimostrare ai più scettici, come tramite un telefonino che supporti la navigazione web, sia possibile attivare o disattivare un attuatore, nel mio caso un relè che alimenta una lampada a 220V AC.
!!! ATTENZIONE !!!
Se siete minorenni o non avete conoscenze riguardo l’elettricità a medio-alto voltaggio e avete intenzione di applicare un carico alimentato a 220V in AC sullo stadio pilota, fatevi seguire da un professionista o da una persona qualificata in materia.
A valle dello stadio pilota, sul relè, è applicata una differenza di potenziale di 220 Volt in Corrente Alternata, potreste farvi molto male, quindi cercate di prendere le massime precauzioni quando fate i test!!!
PER LA TUA SALUTE SE NON SAI QUELLO CHE STAI FACENDO E’ MEGLIO CHE LASCI PERDERE!!!
Detto ciò fatevi un idea!!!
Qui sotto è riportato il codice e come ogni buon tinkerer che si rispetti ho cercato di commentarlo il più possibile per chiarire la lettura e le definizioni del codice.
Dona 1.99 Euro per scaricare il progetto completo
A donazione effettuata una email con le informazioni e il link per scaricare il progetto ti sarà inviata all'indirizzo di posta che hai utilizzato su PayPal per fare la donazione
Compilare con IDE Arduino 1.0 o successive!
0 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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
/* *** *** *** Policy di Utilizzo Solo per uso privato. Ogni uso commerciale dei codici forniti dal sottoscritto sarà ritenuto furto di proprietà intellettuale, perseguibile a norma di legge. Progetto realizzato da Gianni Favilli www.giannifavilli.it Il codice sorgente (sketch) di Arduino sono di proprietà intellettuale del sottoscritto. Ogni tipo di riproduzione o divulgazione è vietata. Il committente si impegna a non divulgare a terzi i dati e le sorgenti realizzati per il suddetto progetto in quanto proprietà intellettuale di Gianni Favilli anche in seguito di fine collaborazione tra le parti. Gianni Favilli *** *** *** */ /* *** NB NELLO SKETCH SONO STATI INSERITI DELIBERATAMENTE UN PAIO DI ERRORI. LA IDE IN FASE DI COMPILAZIONE VI AIUTERA' AD INDIVIDUARLI *** */ #include <String.h> #include <SPI.h> #include <Ethernet.h> /* *** COMPILARE CON ARDUINO 1.0 o successive controllare un attuatore via web con sensori di temperatura e luce ARDUINO UNO ETHERNET SHIELD by GianniFavilli.it - www.giannifavilli.it *** */ byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address byte ip[] = { 192, 168, ***, *** }; // ip arduino internet in byte gateway[] = { 192, 168, ***, *** }; // internet access via router byte subnet[] = { 255, 255, ***, *** }; //subnet mask EthernetServer server(80); //server port int outPin = 9; // pin attuatore String readString; //string boolean LEDON = false; // flag status attuatore /*termistore*/ float temp; // variabile da calcolare float volt; // variabile da calcolare sul sensore di temperatura float tempPin = 1; // pin analogico IN temperature sensor int ledPintemp = 13; // pin led termistore float tempreg = 25.0; // temperatura di controllo in celsius /*end termistore*/ /*fotoresistore*/ int light; // variabile da calcolare int ledPinlux = .12; // pin led fotoresistenza int photoresistor = 0; // pin analogico IN fotoresistore /*end fotoresistore*/ void setup(){ Ethernet.begin(mac, ip, gateway, subnet); pinMode(outPin, OUTPUT); pinMode(ledPinlux, OUTPUT); Serial.begin(9600); } void loop(){ /*inizio calcolo temperatura*/ temp = ((5 * analogRead(tempPin) * 100.0 ) / 1024) - 50; // Codice ottimizzato /* (grazie giulio400 e jumpjack) volt = ( analogRead(tempPin) * 5) / 1024; // calcolo il valore letto e lo trasformo in valore di tensione temp = (volt - 0.5) * 100; // conversione MCP9700A */ /*fine calcolo temperatura*/ /*inizio luce*/ light = analogRead(photoresistor); light = constrain(light, 0, 1023); // limiti dei valori tra 0 e 100 light = map(light, 0, 150, 255, 0); /*fine luce*/ /*inizio client*/ EthernetClient client = server.available(.); if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); readString.concat(c); //memorizzo ogni carattere della stringa //if HTTP request has ended if (c == '\n' && currentLineIsBlank) { Serial.print(readString); if(readString.indexOf("L=1") > 0) {// lettura del valore se il LED si deve accendere // il led sarà acceso digitalWrite(outPin, HIGH); // accendo il led LEDON = true; Serial.print("ON pin "); Serial.println(outPin); } else { //il led sarà spento digitalWrite(outPin, LOW); //sengo il led LEDON = false; Serial.print("OFF pin "); Serial.println(outPin); } // COSTRUZIONE PAGINA HTML client.println("HTTP/1.1 200 OK....."); client.println("Content-Type: text/html"); client.println(); // inizializzo pagina (da togliere se uso ajax) client.print("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>"); //inizai il body client.println("<div style='width:360px; height:640px;'>"); //risoluzione per nokia 5800 640x360 client.println("<h1>STATUS SENSORI</h1><hr />"); //Scrive sul browser il valore del termistore client.println("<p>TEMPERATURA = "); client.print(temp); client.println(" C <br /></p>"); if (temp < tempreg) { // scrive sul web freddo se il valore del termistore è basso client.print("<p><strong>FREDDO</strong></p>"); } else { // scrive sul web caldo se il valore del termistore è alto client.print(" <p><strong>CALDO</strong></p>"); } //Scrive sul browser il valore della fotoresistenza client.println("<p>LUCE = "); client.print(analogRead(light)); client.println("<br /></p>"); if (light < 150) { // scrive sul web luce se il valore della fotoresistenza è alto client.print("<p><strong>LUCE</strong></p>"); } else { // scrive sul web buio se il valore della fotoresistenza è basso client.print(" <p><strong>BUIO</strong></p>"); } // link per aggiornare pagina e valori client.print("<h2>AGGIORNA SENSORI: <a href=''>CHECK</a></h2><hr />"); client.println("<h1>CONTROLLO ATTUATORI via internet</h1>"); client.println("<hr />"); client.print("<h1>PIN control n. "); client.print(outPin); client.println("</h1>"); client.println("<br />"); //scrivo il LED status client.print("<font size='5'>PIN status: "); if (LEDON) { client.println("<span style='color:green; font-weight:bold;'>ON</span></font>"); } else. { client.println("<span style='color:grey; font-weight:bold;'>OFF</span></font>"); } client.print("<h2><a href='/?L=1'>ACCENDI</a> | <a href='/?L=0'>SPEGNI</a></h2>"); // firma client.println("<hr />"); client.print("<h4>Visita <a href='https://www.giannifavilli.it' target='_blank' />www.giannifavilli.it</a></h4>"); client.println("<hr />"); // chiudo il div client.println("</div>"); // chiudo pagina da togliere se uso ajax client.println("</body></html>"); // pulisco la stringa per la successiva lettura readString=""; //fermo il client client.stop(.); } //if c == /n } // if client available } // while client connesso } // FINE if client if (temp < tempreg) { // accende o spengo un led se la temperatura è più bassa di quella di controllo digitalWrite(ledPintemp., HIGH); //accendo Serial.print("ON pin "); //scrivo in console Serial.println(ledPintemp); //scrivo in console } else { digitalWrite(ledPintemp., LOW); //spengo Serial.print("OFF pin "); //scrivo in console Serial.println(ledPintemp); //scrivo in console } if (light < 150) { // accende o spengo un led se la c'è luce digitalWrite(ledPinlux., HIGH); // accendo Serial.print("ON pin "); //scrivo in console Serial.println(ledPinlux.); //scrivo in console } else { digitalWrite(ledPinlux., LOW); //spengo Serial.print("OFF pin "); //scrivo in console Serial.println(ledPinlux.); //scrivo in console } } // fine loop |
Dona 1.99 Euro per scaricare il progetto completo
A donazione effettuata una email con le informazioni e il link per scaricare il progetto ti sarà inviata all'indirizzo di posta che hai utilizzato su PayPal per fare la donazione
Per maggiori informazioni sul sensore di temperatura e la fotoresistenza, potete far riferimento a questo articolo.
Se volete un progetto più elaborato che permette ad Arduino sia un controllo remoto in ingresso che l’invio di dati in uscita leggete anche questo articolo Arduino: Controllo Remoto e Notifica via SMS senza GSM shield.
Non esitate a commentare in caso di perplessità, informazioni, reclami o consigli!!!
Sono tutti ben accetti!!!
Ciao,
complimenti per la realizzazione! davvero un bel progetto! ho intenzione di fare qualcosa di simile.
dove hai preso il relè?
Ciao Andrea,
mi rifornisco da http://www.ethermania.com nella sezione Arduino – Attuatori puoi trovare lo stadio pilota con relè a circa 6-8 euro o il singolo relè a circa 2 euro, ma senza stadio pilota Arduino non riesce ad erogare la corrente necessaria ad eccitare la bobina del relè.
Grazie dei complimenti e se ti viene in mente qualche applicazione da fare con questo progetto fammi sapere 😉
grazie mille. stavo pensando di fare un’applicazione per symbian ma sono ancora alle basi
Ci stavo provando anche io ma è troppo complicato, ho provato con Python … idem, allora ho deciso di sfruttare il browser web utilizzato da Symbian e in 1/5 del tempo ho ottenuto il risultato. Più avanti proverò ad implemantare AJAX (sempre su browser web). Altrimenti il futuro è Android 😉
eh infatti android è più semplice. comunque è comoda anche l’applicazione web, sarebbe interessante implementare creando una lista dei mac address autorizzati ad accendere
Ciao! Davvero interessante questo progetto… Sono un ragazzo che studia all’ITIS, indirizzo informatico… Giravagavo per la rete e sono finito sul tuo sito e al tuo fantastico progetto.. Mi hanno sempre affascinato progetti come questo e visto che è spiegato davvero bene, mi piacerebbe provare a replicarlo…
Dal video vedo che colleghi una lampada ad una classica presa dela corrente a 220 e dal telefono riesci a farla accendere… inoltre visualizzi temperatura e se c’è luce o meno nell’ambiente… davvero F-A-N-T-A-S-T-I-C-O!
è possibile collegare, per esempio, invece di una lampada, una tv piuttosto che un pc e accenderlo da remoto?
Spero di averti fatto capire quello che intendevo dire…
Se ho detto qualche stupidata correggimi al volo…:-)
Aspetto una tua risposta… Intanto rinnovo i complimenti… Davvero molto molto interessante!
Ciao!
Grazie dei complimenti e dell’interesse.
Per rispondere alla tua domanda, alla multiperesa puoi attaccare qualunque apparato a piacere alimentao a 220V in AC, io ho usato una lampadina come esempio significativo. ATTEZIONE basta che il carico applicato sulla multipresa non superi la potenza supportata del relè montato sullo stadio pilota, devi vedere le specifiche del componente. Nel mio caso il relè è un T7SS5E6-05 quindi a interruttore chiuso (nello stato eccitato) il relè lavora con un massimo di tensione applicata pari a 250V e la corrente massima supportata pari a 6A quindi P=V*I=250*6=1500W. Pertanto il carico applicato sulla multipresa non deve superare 1,5KW io per sicurezza cerco si stare intorno al 1KW e consiglio di fare la stessa cosa anche a te. Se studi l’ITIS sicuramente sarai in grado di verificare la potenza assorbita dagli apparati che intendi applicare sulla multipresa 😉
Ciao!
Perfetto! Già che ci sono ti faccio un’altra domanda, questa volta relativa ad un programma… (scusa se continuo a farti domande ma la curiosità è davvero tanta…
Nel programma vedo che devi dare un indirizzo del tipo 192.x.y.z… È l’indirizzo specifico del router..?
Ancora complimenti e grazie per le risposte…
No è l’indirizzo che vuoi assegnare ad arduino che fino all’ultima serie sarà uguale agli indirizzi della tua rete privata (vedi l’indirizzo del router e del tuo pc) l’ultima serie è identificativa degli apparati di rete collegati al router. Se il tuo router è del tipo 192.168.0.1 e il tuo pc è 192.168.0.50 ad arduino devi assegnare un indirizzo del tipo 192.168.0.X dove X va da 1 a 254 tranne gli indirizzi gia utilizzati nella tua rete, che nell’esempio che ti ho fatto non devono essere nè 1 nè 50
Ottimo… Ancora grazie!
proprio quello che stavo cercando, vorrei replicare lo stesso progetto per accendere la caldaia e quindi scadare casa prima del mio ritorno. pensi che sia possibile.? complimenti per il progetto…
Il codice è online perchè condiviso con la cumunity, quando ho pensato questo codice l’inento era proprio quello di controllare dispositivi elettrici e riscaldamento da remoto, quindi è in linea con il tuo progetto. Se ti vengono in mente altre idee o modifiche al codice con delle “innovazioni” se per te non è un problema, mi piacerebbe avere un report per continuare lo sviluppo 😉 Grazie dei complimenti e buono sviluppo.
Molto interessante questo… è soprattuto sarebbe utilissimo… come scritto sopra io sono più ferrato sulla parte informatica… dell’elettronica conosco solo le basi e proprio per questo mi piacerebbe prendere spunto da questo progetto proprio per provare a fare qualcosa di pratico.. la mia domanda è… come si potrebbe, praticamente, fare in modo che scatti il termostato….? intendo proprio la parte pratica…
perchè il mio termostato è manuale… devi proprio girare la manopolina per accenderlo… non penso sia possibile integralo con questo progetto… purtroppo… comunque se avete qualche idea a riguardo sarebbe ben accetta… !
Dovresti intercettare l’alimentazione tra la caldaia e il termostato, con Arduino a monte del termostato. Se non hai competenze elettriche ti sconsiglio di eseguire questa operazione, rischi di farti male e/o fare casini all’impianto elettrico e alla caldaia.
Ciao,
non mi è chiaro come hai calcolato la formula per ricavare la temperatura: sul datasheet leggo:
Vout = Tc*Ta+V0
Quindi:
Ta= Vout-Vo/Tc
Sul pin di arduino leggo un valore pari a:
valore = Vout * 1024/Vref (non 1023, i valori vanno da 0 a 1023, quindi sono 1024)
Quindi
Vout = valore*Vref/1024
Percio sarebbe
Ta = Vout-Vo/Tc = (valore*Vref/1024)-Vo/Tc
Se Vref = 5:
Ta = (5*valore/1024)-Vo/Tc
Perche’ tu usi invece questa formula?
temp = ((5 * analogRead(tempPin) * 100.0 ) / 1023) * 0.330
Non consideri Vo?
Pero’ anche se V0=0 a me verrebbe:
Ta = (5*valore/1024)/Tc = (5*valore/1024)/0,01 = (5*valore*100)/1024
E il valore 0.330 cos’e’?
Ciao, a parte l’errore dei 1023 bit che come hai giustamente segnalato sono 1024, la mia formula è identica alla tua con V0=0 -> Ta=(5*analogRead*100)/1024
Il valore 0.330, come ho commentato nel codice, è una costante che ho dovuto inserire nella formula per avere una taratura ottimale del valore misurato. Senza quella costante inserita nella formula vengono fuori temperature non veritiere. Certamente quella costante funziona solamente se le temperature misurate da Arduino sono vicine alla temperatura ambiente (10°C _ 40°C) per temperature inferiori o maggiori lo scarto diventa troppo grande e la temperatura misurata rischia di non essere veritiera. Aiutami te a capire dove sbaglio e/o come posso modificare la formula. Hai provato a far uscire il valore tramite Arduino o ti sei fermato alla teoria? Quanti sensori e/o attuatori hai collegato al tuo Arduino? In uscita di Arduino sull’alimentazione Vcc +5V hai questo valore effettivo?
Anche a me non mi è chiaro il perchè (Vcc=5V che effettivamente non sono 5 ma 4.7 o 5.3, sensore danneggiato, resistenze passive che disturbano il circuito, etc.) ma solo inserendo quella costante sono riuscito ad avere un valore di temperatura, misurato da Arduino, veritiero.
Fammi sapere e grazie dell’utile segnalazione e del problema da risolvere.
Ciao hai fatto veramente un ottimo progetto!
Non ho però capito una cosa. Il client connesso al web a che indirizzo si connette? Cioè dal browser del telefono a che sito ti connetti. Non l’ho ancora capito. E se volessi fare una cosa tutta mia dove vado a modificare l’indirizzo del mio sito? ciao e grazie mille
Grazie,
Il “sito” che intendi te in realtà è l’indirizzo IP di arduino oppure utilizzi un servizio tipo DynDNS che assegna, per esempio, alla tua connessione ADSL un indirizzo del tipo http://www.pippo.net.
Per cambiare l’indirizzo ip di arduino devi modificare la riga 14. Ciao!
Ciao Gianni,
innanzitutto mi complimento per il modo originale e nuovo di realizzare un progetto con Arduino basando su un codice tutto scritto da Te!
Leggendo questo progetto mi hai fatto venire l’acquolina in bocca ed ho comprato Arduino…eccomi a giocare per automatizzare varie cose nella casa!
Ho buone conoscenze informatiche ed elettroniche…ma non capisco nulla di programmazione…e sto provando a modificare empiricamente il tuo codice per fare un po’ di esperienza…
Non ho capito come fare affinché Arduino chieda una password per poter poi controllare le automazioni inserite.
Ho fatto le prove con indirizzi privati e sono molto soddisfatto..adesso vorrei rendere pubblico l’IP per poter controllare le varie cose ovunque mi trovi.
Ecco perche’ ho necessità di inserire una password,altrimenti chiunque potrebbe accendere la luce,il clima o la caldaia 😉
Naturalmente vorrei fare una cosa molto semplice del tipo:
appena inserito l’IP mi chiede un codice che mi abilita ad operare per un minuto oppure fino a che non premo un log-out.
Che dici si riesce a fare? Mi aiuteresti?
Garzieissime!
Giulio.
Ciao Giulio,
grazie di tutto, anche della tua spiegazione sul sensore di temperatura, effettivamente ho fatto un errore matematico e il tuo metodo sembra funzionare alla grande.
Per connetterti da remoto su Arduino devi utilizzare un servizio tipo DynDNS che assegna, per esempio, alla tua connessione ADSL un indirizzo del tipo http://www.pippo.net.
Per quanto riguarda l’inserimento di uno user e password se cerchi nel forum di arduino c’è qualcuno che ci ha già pensato, anche se personalemnte non sovraccaricherei il codice con il timeout e il log-out che andrebbe fatto con un javascript dato che l’html è un linguaggio per pagine statiche e non dinamiche come php o asp.
Io sto testando una soluzione ma al momento non riesco a postare un codice stabile. Appena riesco a trovare un po’ di tempo non mancherò di postare il codice.
Ciao e a presto!
Caro Gianni,
leggendo il data sheet del sensore di temperatura vedo:
Sensor Output
Output Voltage, TA = 0°C V0°C — 500 — mV MCP9700/9700A
Temperature Coefficient TC — 10.0 — mV/°CMCP9700/9700°
Link: http://docs-europe.electrocomponents.com/webdocs/0a89/0900766b80a890ac.pdf
Quindi ho modificato la lettura cosi’:
float letturav = 0.00; //Lettura da porta
float volt = 0.00; // Per leggere la tensione e tarate
….etc….
/*inizio temp*/
letturav = analogRead(tempPin); //leggo il valore dal tempPin
volt = (letturav*5)/1023; //lo trasformo in valore di tensione
temp = (volt-0.5)*100; // conversione MCP9700A
/*fine temp*/
Lo sto provando e mi sembra ottimale e preciso.
Cosa ne pensi?
Ciao.
Giulio.
/*inizio temp*/
letturav = analogRead(tempPin); //leggo il valore sul temp
volt = (letturav*5)/1023; //lo trasformo in valore di tensione
temp = (volt-0.5)*100; // conversione MCP9700A
/*fine temp*/
Qui proverei a dividere per 1024 anzichè per 1023, c’è da contare anche lo 0 come valore.
Ciao Gianni! Complimenti per l’articolo! è molto interessante. Sto cercando anche io di fare una cosa simile prendendo spunto qua e la e ho notato che il tuo progetto è in linea con il mio. Ho letto che parlavi di android…conosci per caso domotichome.net? è un applicativo per android che ti consente di comandare l’arduino tramite un’applicazione.
Oggi pomeriggio proverò il tuo codice, il relè con lo stadio pilota l’ho costruito ieri e con domotichome già funziona. Mi interessa moltissimo la tua implementazione di sensori di temperatura e luce! Complimenti! A Presto. Francesco
Grazie Francesco,
non conosco domotichome ma andrò subito a dare un occhiata. Tienimi aggiornato su l’impelmentazione 😉
Ciao e grazie.
Ciao Gianni, hai dato un’occhiata? Cosa ne dici di provare a farne una tu di applicazione simile? Purtroppo ho notato che pur essendo ben fatto il sito c’è poca gente che lo segue. Mentre tu sei molto disponibile e magari, con tutti i ragazzi che scrivono, si può fare qualcosa! Io mi metto a disposizione al 100% anche con il materiale. Se mi dai schemi e liste di materiale mi arrangio a comprare tutto e a costruire. Tieni conto che sono un elettricista quindi metto mani tranquillamente al mio impianto domestico per testare il tutto. Se ti va ne parliamo!!!
Ciao Francesco,
attualmente il mio momento lavorativo non è dei migliori e con il caldo alle porte, non nego, che smanettare su Arduino non è tra le mie aspettative maggiori 🙂 Queste cose le faccio a tempo perso, però una collaborazione è cosa molto gradita ma non avrei intenzione di fissare delle scadenze altrimenti diventa un lavoro e non più una passione. Ti terrò aggiornato sugli sviluppi e quando riesco a combinare qualcosa di nuovo non mancherò di comunicartelo. Chiaramente la cosa è rivolta anche a te, nel caso che hai delle novità puoi scrivermi, i contatti sono sul web. Grazie ancora dell’interessamento. A presto 😉
beh certo ci mancherebbe! Magari a fare una bella applicazione e metterla sul market a pochi euro qualcosina per lo “sbattimento” ti tiri fuori 🙂
Dai ora cerco di mettere insieme un po’ di guide che ho trovato in giro e di implementarle con le tue! Ti terrò aggiornato! Ciao a presto!
Non è un discorso di lavoro inteso come remunerazione economica ma come dispendio di tempo libero 🙂 … sono filosoficamente a favore dell’opensource e del CopyLeft, pertanto se ci deve essere un guadagno deve servire solo a tirare avanti il progetto senza uno scopo di lucro 😉
Questo per me è un hobby e mi piacerebbe che rimanesse tale.
Con Android, l’Iphone e a breve anche Canonical (Ubuntu) lanciata nel mondo dell’Application Store a pagamento o ci muoviamo adesso o siamo “fritti” 😀
Ciao ciao e a presto …
Cercavo proprio questo..! Per prima cosa rispondo alla domanda..
Credo che si possa agire in qualche modo hackerando il termostato.. collegando un transistor in parallelo al pulsante o applicando un servomotore alla manopolina per farla muovere..
Comunque è un po’ di tempo che penso alla domotica, l’idea mi è nata una delle molte volte che arrivo nel letto, spengo la luce e mi accorgo di aver dimenticato la luce della scala, il router, il televisore o qualunque altra cosa acceso, oppure che esco ma devo tornare indietro a controllare se ho chiuso una finestra. Il tuo sistema potrebbe essere l’ideale..!
Oltrettutto tra pochi mesi se tutto va bene potrei diventare felice possessore di un piccolo appartamento (piccolo = più facile da monitorare con Arduino 🙂 ) e l’idea di domoticizzarlo è allettante. Se muovo qualche passo in questo progetto sarei felice di parlarne e sentire il tuo parere ed i tuoi consigli.
Pensavo però ad un problema.. la sicurezza. Come si può impedire l’accesso a persone indesiderate in modo efficace? Idee?
Ciao, a presto..!
complimenti! un piccolo neo… invece di effettuare un check manuale come si può farglielo fare in automatico senza il refresh con l’html???grazie mielle
Grazie!
Per tenere sotto controllo lo stato di arduino ho utlizzato un server web, dai un occhiata a questo articolo https://www.giannifavilli.it/blog/arduino-webcontrol-gcal-sms/
Dato che un browser esegue il rendering della pagina solo se c’è una connessione ho fatto in maniera tale che Arduino a cadenza regolare invia una stringa al server web che elabora la richiesta. Il problema di questa soluzione è che necessiti di un server web o un hosting.
Te hai altre idee?
Salve, innanzitutto ti faccio i miei complienti per aver pubblicato uno dei pochissimi micro progetti di domotica con sensori e relè gestiti con arduino via web.
Premetto che sono un neofita, con il mio Arduino ho cercato di mettere in pratica il tuo progettino ma rilevo due problematiche:
– il fotoresistore da dei valori spesso sballati
– il relè quando clicco sul comando web ACCENDI viene sollecitato si accende e istantaneamente si spegne
Cosa sto sbagliando?
Ciao,
ho preso spunto dal tuo articolo per il mio progetto d’esame.
Sto progettando un impianto d’irrigazione controllato tramite cellulare. Hai la possibilità di inviarmi un file PCB del circuito?e per il controllo del mio impianto su che sito internet devo entrare?
Ti ringrazio anticipatamente per l’aiuto.
Non ho il PCB e il “sito internet per entrare” come dici te non è altro che l’indirizzo IP di Arduino. Ciao e grazie della visita
potresti gentilmente dirmi i valori di resistenze e del diodo?
Lo stadio pilota lo puoi acquistare su EtherMania che ti fornisce sia il diodo che le resistenze. La resistenza per il LED è di 220ohm quella sulla fotoresistenza è di 10Kohm. I i valori e quindi i colori delle resistenze sul disegno (schema elettrico su bread board) sono corrispondenti al vero.
Ciao, bellissimo progetto. Ti volevo chiedere un dubbio che ho riquardo la ethernet shield:
1) l’indirizzo del mio router è 192.168.1.1, devo mettere un indirizzo ad arduino per poterlo utilizzare con l’ethernet shield ?
2) ma le applicazioni che vedo realizzate con la ethernet shield sono utilizzabili sono nelle reti locali ? Cioè se io mi trovo a parigi e devo accendere un led a roma come faccio ? e posso farlo prima di tutto ? grazie mille spero possa essermi di aiuto
E’ tutto scritto nell’articolo, nello sketch e nei commenti.
Comunque:
1) Sì! Per cambiare l’indirizzo ip di arduino devi modificare la riga 14 dagli per esempio { 192, 168, 1, 28 }
2a) No! funziona sia da rete locale puntando all’indirizzo di arduino o tramite rete esterna vedi 2b.
2b) Configuri il router per comunicare con l’esterno della rete locale, google ti può aiutare. Poi utilizzi un servizio tipo DynDNS che assegna alla tua connessione ADSL un indirizzo del tipo http://pippo.myip.net
Prima di tutto mi complimetno con Lei! Ottimo lavoro!
unica perplessità che ho: non riesco a far affacciare il mio router con la rete esterna (pubblica). So che devo andare a smanettare con NAT, se non mi sbaglio.. Ho un router D-Link 2740B. Ho già associato un “nome” al mio IP pubblico con DynDNS… Mi potrebbe gentilmente indicare una guida?
Sì, devi “giocare” con la configurazione del NAT e del port forwarding. Non ho mai avuto un d-link quindi l’unica guida che ti posso consigliare è quella di Google 😉 Buona fortuna!
..ok. 🙂 Una domanda logica: come è possibile essere visibili fuori dalla rete privata senza aver acuistato un indirizzo IP ? Il mio ISP assegna solo un IP dianmico al mio router ma questo IP non è pubblico!
A volte non è possibile lasciare il commento compare ” ! ” sopra la scritta “Bentornato…”. Sarebbe molto meglio specificare l’ERRORE.
Ci pensa il servizio fornito da DynDNS o No-Ip o altri di questo genere. Grazie per la segnalazione “dell’errore” (anche se errore non è) vuol dire che non hai inserito il secure-code correttamente o un’altro campo richiesto, l’inserimento del sito web è facoltativo, comunque questa non è la sezione giusta per la segnalazione, dato che stiamo parlando di arduino e non del mio sito. Per la prossima volta usa l’area contatti.
Starò attento la prossima volta, scusami!
Allora ho registrato il IP del mio router (dinamico) usando questo servizio https://www.dnsdynamic.org ad un indirizzo. Ma non riesco ad accedere dentro al mio router da una rete fuori dalla mia. Penso che sia obbligato a comprare un IP pubblico! Lei come ha fatto? Ha usato il suo IP pubblico o ha usato la rete privata per accedere dentro al server web di arduino?
ciao, complimenti per la realizzazione,
ho testato il funzionamento del tuo progetto e confermo che funziona anche in remoto, basta associare al proprio indirizzo ip un servizio di dns dinamico, poi nel router configurare un servizio in ingresso sulla porta 80, e nel firewall del router aprire la porta in modo che il traffico venga dirottato all indirizzo ip di arduino che sarete voi a settare.
la mia domanda invece e” , se si volesse aggiungere nella pagina web ulteriori comandi di accensione e spegnimento, oppure comandi di apertura con un certo delay ,utile per apricancelli ecc, come si potrebbe fare
Ciao e grazie,
per comandare più attuatori ci sono molte discussioni sul forum di Arduino che continuo a consigliare per una visita http://arduino.cc/forum/
Comunque:
if(readString.indexOf(“L=1”) > 0) {
…
} else {
…
}
if(readString.indexOf(“L=2”) > 0) {
…
} else {
…
}
if(readString.indexOf(“L=3”) > 0) {
…
} else {
…
}
Ciao.
Ciao Gianni alla fine sono riuscito a far funzionare tutto: accendere/spegnere una lampadina da internet! 🙂
Era il router che aveva problemi cmq!
ciao gianni….ho provato ad aggiungere altri comandi ( if)come l esempio qui sopra citato ma non riesco a figurarli nella pagina web… ciao e grazie per una tua eventuale risposta
Buongiorno, non riesco a far riconoscere arduino al router(BELKIN N WIRELESS) nell’elenco dei dhcp, ed acnhe se disattivo il dhcp non è che va meglio ho anzi nemmeno più il pc si connette. Esiste una guida su come configurare il router forse bisogna disattivare qualche firewall? grazie in anticipo
Il DHCP va ABILITATO. Imposta un IP STATICO per la tua scheda ethernet (dell’arduino). Poi devi aggiungere l’ip dell’arduino sulla porta 80 nella DMZ o NAT del router..