Progetto: Arduino + Ethernet Shield + IR Remote per condizionatore

Salve a tutti, sto realizzando un interessante progetto per l'automatizzazione della temperatura di casa. Infatti avevo in mente di utilizzare il condizionatore, che fa anche da pompa di calore, per regolare la temperatura sia durante il periodo estivo, sia durante il periodo invernale. La regolazione può avvenire in due modi: la prima è quella automatica, attraverso un real time clock e un sensore di temperatura e quella manuale, dove in pratica l'utente seleziona lui la temperatura attraverso una interfaccia grafica. Per ora sono riuscito, attraverso un relè, ad accedere e spegnere il condizionatore, però non riesco a modificare i parametri. Volevo utilizzare un modulo IR per trasformare Arduino in un vero e proprio telecomando, per le varie impostazioni. Il telecomando che uso è YR-H10. Cosa mi consigliate per interfacciare Arduino con il condizionatore ? Vi ringrazio come sempre per la disponibilità.

Inizia da qui --> http://www.mauroalfieri.it/informatica/tutorial-arduino-ir-con-tsop1738.html Devi decodificare tutti i comandi possibili del telecomando del condizionatore. Poi fai il contrario: mandi con Arduino i codici e vedi se il condizionatore funziona.

PaoloP: Inizia da qui --> http://www.mauroalfieri.it/informatica/tutorial-arduino-ir-con-tsop1738.html Devi decodificare tutti i comandi possibili del telecomando del condizionatore. Poi fai il contrario: mandi con Arduino i codici e vedi se il condizionatore funziona.

Grazie per la risposta ! L'unica cosa che non ho capito è se il dispositivo TSOP1738 riesce ad inviare i segnali, oppure soltanto a riceverli.

No, li riceve solo. Per spedire devi usare un led a infrarossi.

Per i collegamenti (scheda 20): http://forum.arduino.cc/index.php?topic=146152.0

Potrebbe interessarti anche questo, dal minuto 0:35

http://youtu.be/VuqOFjQTVYg

Saluti, Dario.

nid69ita: No, li riceve solo. Per spedire devi usare un led a infrarossi.

Per i collegamenti (scheda 20): http://forum.arduino.cc/index.php?topic=146152.0

Grazie per la risposta. Ho acquistato questi due prodotti (ricevitore + trasmettitore) http://www.ebay.it/itm/130922577237?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649#ht_1181wt_1414. Dovrò prima capire i codici del mio telecomando e poi dopo trasformerò Arduino in un vero telecomando. Poi, come ultima parte, dovrò creare il web server. Una domanda: se io imposto, per esempio, la temperatura da Arduino a 24°, sul display del telecomando del condizionatore, comparirà anche li 24° ? Non si sarà interferenza tra due dispositivi ?

No, non credo che il telecomando riceva i dati.
Quindi sul telecomando potresti visualizzare 18° ma impostare il condizionatore con Arduino a 24°.

PaoloP: No, non credo che il telecomando riceva i dati. Quindi sul telecomando potresti visualizzare 18° ma impostare il condizionatore con Arduino a 24°.

Domanda: Se io aumento di un grado la temperatura che passa da 24° a 25°, il segnale inviato dal telecomando è imposta 25°, oppure aumenta di un grado la temperatura ? Non vorrei che si creasse conflitto con Arduino !

jackbell16: Domanda: Se io aumento di un grado la temperatura che passa da 24° a 25°, il segnale inviato dal telecomando è imposta 25°, oppure aumenta di un grado la temperatura ? Non vorrei che si creasse conflitto con Arduino !

Ciao,

ogni volta che invii un comando la stringa contiene tutto lo stato (ventole, deumidificazione ed altro) quindi se hai due punti di comando, ad esempio il telecomando ed arduino, potresti creare dei conflitti in quanto il telecomando non sarà mai allineato ai comandi inviati da arduino e viceversa. Diverso il discorso se hai più comandi (ad esempio tutti basati su arduino) sincronizzati tra loro.

Se guardi il video che ho inserito in precedenza, noterai come all'inizio la temperatura impostata sul condizionatore e quella mostrata su Android siano diverse e risultino allineate solo dopo aver inviato un comando.

Saluti, Dario.

veseo:

jackbell16: Domanda: Se io aumento di un grado la temperatura che passa da 24° a 25°, il segnale inviato dal telecomando è imposta 25°, oppure aumenta di un grado la temperatura ? Non vorrei che si creasse conflitto con Arduino !

Ciao,

ogni volta che invii un comando la stringa contiene tutto lo stato (ventole, deumidificazione ed altro) quindi se hai due punti di comando, ad esempio il telecomando ed arduino, potresti creare dei conflitti in quanto il telecomando non sarà mai allineato ai comandi inviati da arduino e viceversa. Diverso il discorso se hai più comandi (ad esempio tutti basati su arduino) sincronizzati tra loro.

Se guardi il video che ho inserito in precedenza, noterai come all'inizio la temperatura impostata sul condizionatore e quella mostrata su Android siano diverse e risultino allineate solo dopo aver inviato un comando.

Saluti, Dario.

Grazie per la risposta. Uno che mi arriva il sensore per ricevere i segnali ad infrarossi, avevo in mente di copiarmi i codici dell'attuale telecomando, in modo da poterli inviare da Arduino. Quello che dici è che non va bene utilizzare Arduino e il telecomando contemporaneamente, giusto ?

Non è che non va bene, semplicemente c'è l'inconveniente di non avere una sincronizzazione tra i dispositivi di comando. In linea generale, le impostazioni del condizionatore non credo che varieranno così spesso, quindi il problema non degenera nell'impossibilità di utilizzare questa soluzione.

Ovviamente, se utilizzi Arduino per effettuare dei comandi temporizzati o di altro tipo e nel frattempo utilizzi il telecomando, parte delle impostazioni potrebbero andare perse.

Il mio consiglio è di utilizzare solo Arduino come dispositivo di comando, interagendo attraverso un'applicazione per smartphone, un webserver oppure un pannellino di controllo. In questo modo, aggiri il problema.

Saluti, Dario.

Mi è arrivato il ricevitore di segnali ad infrarosso e ho fatto una lista del comandi del condizionatore. https://www.dropbox.com/s/nr0ih6l5lgr5xqy/Lista_codici_condizionatore.pdf Ho alcuni dubbi: a volte il codice della stessa impostazione (temperatura, ventola etc..) varia; è normale ? Mi sarei aspettato lo stesso codice.Secondo voi, se copio un codice, che è stato generato in un certo momento, quel valore, verrà interpretato correttamente anche in un secondo momento ?

Dovrebbero essere uguali, magari c'è qualche altra impostazione ad essere diversa: velocità ventole, deumidicazione o altro.

Prova a controllare.

Saluti, Dario.

Mi è appena arrivato il LED ad infrarossi. Purtroppo non riesco a far funzionare il programmare, o meglio mi da il seguente errore: exponenet has no digit.

/*
 * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to Arduino PWM pin 3.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

IRsend irsend;

void setup()
{
  Serial.begin(9600);
}

void loop() {
  
     irsend.sendRaw(8694078E,32);
      delay(100);
    
  
}

Nella prima parte della funzione irsend.sendRaw, c’è il codice che permette di accedere il condizionatore, mentre 32 indica il numero di bit.

Dopo svariati tentativi, non riesco ad inviare un segnale in HEX al mio condizionatore, utilizzando un LED ad Infrarosso. Secondo voi, qual’è il problema ?

jackbell16: Mi è appena arrivato il LED ad infrarossi. Purtroppo non riesco a far funzionare il programmare, o meglio mi da il seguente errore: exponenet has no digit.

Quel numero è esadecimale perciò manca davanti 0x => 0x8694078E

Il codici secondo me non bastano. I vari telecomandi di solito seguono differenti "modi" per inviare dati. Ad esempio molti dei miei telecomandi sono di "tipo" NEC (anche se la marca è united o bluesky)

Nella libreria IRRemote c'e' un esempio che si chiama IRrecvDump.ino DEVI avere un ricevitore su Arduino e con quello sketch puoi scoprire che "tipo" di telecomando hai e i vari codici (che in teoria dovrebbero essere quelli che tu hai postato). Per lo schema: http://forum.arduino.cc/index.php?topic=146152.msg1098046#msg1098046 scheda 20

Se scopri che il tuo telecomando è di tipo NEC allora potrai usare sendNEC(), se è Sony potrai usare sendSony(), etc. Se è Unknow l'unica è la sendRaw() ma quello sketch potrebbe chiarire cosa e come spedire i dati raw (non è detto che basti una sendRaw() e poi il secondo parametro non è fisso, per il NEC è 16, di solito).

nid69ita:

jackbell16:
Mi è appena arrivato il LED ad infrarossi. Purtroppo non riesco a far funzionare il programmare, o meglio mi da il seguente errore: exponenet has no digit.

Quel numero è esadecimale perciò manca davanti 0x => 0x8694078E

Il codici secondo me non bastano. I vari telecomandi di solito seguono differenti “modi” per inviare dati.
Ad esempio molti dei miei telecomandi sono di “tipo” NEC (anche se la marca è united o bluesky)

Nella libreria IRRemote c’e’ un esempio che si chiama IRrecvDump.ino
DEVI avere un ricevitore su Arduino e con quello sketch puoi scoprire che “tipo” di telecomando hai e i vari codici (che in teoria dovrebbero essere quelli che tu hai postato).
Per lo schema: http://forum.arduino.cc/index.php?topic=146152.msg1098046#msg1098046 scheda 20

Se scopri che il tuo telecomando è di tipo NEC allora potrai usare sendNEC(), se è Sony potrai usare sendSony(), etc.
Se è Unknow l’unica è la sendRaw() ma quello sketch potrebbe chiarire cosa e come spedire i dati raw (non è detto che basti una sendRaw() e poi il secondo parametro non è fisso, per il NEC è 16, di solito).

Ciao,
grazie mille per la risposta. Hai perfettamente ragione, sia sul 0x, sia sul tipo di codifica del telecomando. Utilizzando il programma che mi hai indicato, ho trovato che la codifica è “non conosciuta”

1D582B30
Unknown encoding: 1D582B30 (32 bits)
Raw (100): -2300 3100 -2900 3100 -4250 600 -1600 600 -500 550 -1650 600 -500 550 -550 550 -1650 550 -550 550 -1600 600 -500 600 -1600 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1600 600 -1600 600 -500 600 -500 600 -500 600 -500 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -550 550 -1650 550 -1600 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -550 550 -500 600 -1600 600 -500 600 -500 550 -550 550 -550 550 -550 550 -550 550 
C38C632A
Unknown encoding: C38C632A (32 bits)
Raw (100): 25684 3100 -2900 3100 -4250 550 -1650 550 -550 550 -1650 550 -550 550 -550 550 -1650 500 -600 500 -1650 550 -550 550 -1650 550 -1650 550 -550 550 -550 550 -550 550 -550 500 -1650 550 -550 550 -550 550 -1650 550 -1650 550 -550 550 -550 550 -550 550 -550 500 -600 500 -600 500 -550 550 -1650 550 -1650 550 -550 550 -1650 550 -1650 500 -600 500 -550 550 -550 550 -550 550 -1650 550 -1650 550 -550 550 -550 550 -1650 550 -550 550 -550 550 -550 550 -550 500 -600 500 -600 500 
1D582B30
Unknown encoding: 1D582B30 (32 bits)
Raw (100): 4046 2950 -3050 3000 -4350 550 -1650 550 -550 500 -1700 550 -550 550 -550 550 -1600 600 -550 550 -1600 550 -550 550 -1650 500 -1700 550 -550 500 -600 550 -550 550 -550 550 -500 600 -500 550 -600 500 -1650 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1600 550 -1650 600 -500 550 -1700 500 -1650 550 -550 550 -550 550 -550 550 -550 550 -1600 600 -1650 550 -500 550 -550 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550

Ho modificato il seguente programma con i dati relativi alla mia codifica:

#include <IRremote.h>
 
IRsend irsend;
 
// just added my own array for the raw signal
unsigned int powerOn[148] = {23074 , 3050 ,-2950 , 3050, -4300 ,550 ,-1650, 550, -550, 550, -1650, 550, -550, 550 ,-550, 550, -1650, 500, -600, 500 ,-1650, 550, -550, 550, -1650, 550, -1650 ,550, -550, 550, -550, 550, -550, 550, -550, 550, -1600, 550, -550 ,550 ,-550, 550, -1650, 550, -1650, 550, -550, 550, -550, 550, -550, 550, -550, 500, -600, 500, -550, 550, -550 ,550, -550, 550, -1650, 550, -550, 550 ,-550, 550, -1650, 550, -550, 550, -550, 550, -550, 550, -550, 550, -1650, 500 ,-1650, 550, -550, 550 ,-550, 550, -1650, 550, -550 ,550, -550, 550, -550, 550, -550 ,550 ,-550, 550, -550, 550};
 
void setup()
{
  Serial.begin(9600);
}
 
void loop() {
 
      // altered the code just to send/test my raw code
        irsend.sendRaw(powerOn,148,38);
        delay(2000);
}

Purtroppo però non riesco ad accendere il condizionatore. Hai qualche altra idea ?