Problema ricevitore IR TSOP1738

Ciao a tutti, vi scrivo perchè sto riscontrando problemi con la ricezione dei codice infrarossi tramite il sensore TSOP1738.

Praticamente sto cercando di prelevare i codici del telecomando del mio condizionatore così che possa, ritrasmettendoli con un led IR, comandare tramite Arduino il condizionatore. Se non sono stato abbastanza chiaro questo è il link del progetto che seguo. Il problema sta proprio nella fase di ricezione con il sensore perchè non riesco ad avere un codice ogni volta che premo un pulsante ed inoltre quando li ricevo (uno ogni tanto con molta pazienza) sono tutti diversi nonostante abbia sempre premuto ON/OFF lasciando invariata la temperatura e altre opzioni.

Sapete come aiutarmi? Grazie in anticipo a chiunque ci provi

Se cerchi nel forum troverai discussioni sugli IR dei condizionatori. Pare che i segnli che inviano sono molto complicati, non inviano solo un semplice comando ma un bel pò di informazioni, difficili da interpretare. Mai fatto nulla personalmente, ripeto, prova a cercare nel forum vecchie discussioni. esempio: https://forum.arduino.cc/index.php?topic=397063.0

... aggiungo che, se veramente vuoi "cavare un ragno dal buco" (... ovvero, riuscire a capire qualche cosa di quei segnali), ti devi dotare di un software professionale (... a pagamento, 25 US$ per uso NON commerciale) e del relativo hardware per la decodifica di segnali IR ... AnalysIR !!!

E' sicuramente il miglore strumento hardware/software per l'analisi dei segnali IR da telecomandi che ci sia in ambito Arduino.

Guglielmo

Grazie ad entrambi, credo che provvederò all'acquisto di AnalysIR come suggerisci, tanto farà comodo anche in futuro! Spero di riuscire a breve a provare il tutto, per ora mi limito a ringraziarvi nuovamente.

zioCri:
Grazie ad entrambi, credo che provvederò all’acquisto di AnalysIR come suggerisci …

Ricorda che, oltre al software, occorono alcuni LED ricevitori e trasmettitori che devi montare su una piccola shield per Arduino. Ti consiglio il loro Kit da 15 US$ (Kit F) che contiene differenti ricevitori IR e un LED trasmettitore.

Per avere il massimo dei risultati dovrai montare su una shield per Arduino (una di quelle per prototipazione), DUE ricevitori IR (come spiegato nelle note del software … puoi scaricare la demo per leggerle) ed un LED trasmettitore.

Guglielmo

Si ora provo con i componenti che ho, ho anche un Arduino Uno inutilizzato. Poi se vedo che non funziona provvederò all'acquisto del kit come da te suggerito. Grazie ancora! Mi rifaccio sentire appena ho qualche novità

zioCri: Ciao a tutti, vi scrivo perchè sto riscontrando problemi con la ricezione dei codice infrarossi tramite il sensore TSOP1738.

Praticamente sto cercando di prelevare i codici del telecomando del mio condizionatore così che possa, ritrasmettendoli con un led IR, comandare tramite Arduino il condizionatore. Se non sono stato abbastanza chiaro questo è il link del progetto che seguo. Il problema sta proprio nella fase di ricezione con il sensore perchè non riesco ad avere un codice ogni volta che premo un pulsante ed inoltre quando li ricevo (uno ogni tanto con molta pazienza) sono tutti diversi nonostante abbia sempre premuto ON/OFF lasciando invariata la temperatura e altre opzioni.

Sapete come aiutarmi? Grazie in anticipo a chiunque ci provi

Ciao questo è un progetto al quale sto lavorando da tempo e con il quale ho avuto i riscontri desiderati con i due climatizzatori di casa al punto di realizzarmi una app per ios che tramite una richiesta GET fatta ad arduino ed ethernet shield mi permette di controllarli a 360 gradi. Ti invio un link a youtube del progetto di quando potevo controllarli tramite lcd touch e una web app. https://www.youtube.com/channel/UCo7yqRtivZMaGySTThDp-lg?view_as=subscriber Allore il problema grosso è come dice nid69ita è che il codice inviato dai telecomandi dei climatizzatori è molto complesso soprattutto se vuoi controllarli a 360 gradi e non soffermarti al semplice accendi e spegni a parametri preimpostati. La libreria ti permette di estrarre un massimo di non ricordo quanti ma mi sembra 32 bit, mentre il telecomando del climatizzatore ne invia molti ma molti i più. Intanto modifica il file della libreria irremote.h, in fondo dove c'è la riga #define RAWBUF metti un numero alto, io avevo messo 500 e con il climatizzatore dal comando più lungo ci stavo dentro. Salvi, apri l'ide e carichi lo sketch che ti cattura il raw. Schiacci il tasto di accensione con l'impostazione che desideri e ti uscirà il raw, prendi in considerazione solo i numeri con il segno meno, quelli più o meno dal -1200 più o meno corrispondono agli uno, quelli -600 più o meno agli zero. Se vuoi capire come funziona esattamente la codifica ti scrivi il codice su un foglio di carta, e ripeti l'operazione variando ad esempio solo la temperatura e lo scrivi sotto a quello precedente. Facendo così vedi quale byte varia in funzione della temperatura e come. La cosa più complicata è calcolare il byte finale di controllo, ma con un pò di pazienza lo si fa. Mentre se ti accontenti di alcuni semplici comandi, copia il raw di quelli che ti interessano e lo invii utilizzando la funzione sendraw. E inoltre tieni presente che ON/OFF son due comandi differenti. Se per il telecomando il climatizzatore è spento lo accenderai, mentre se per il telecomando è acceso lo spegnerai. Quindi supponendo che il climaa sia spento tu quando schiaccerai ON/OFF avrai un determinato codice (di accensione e impostazione di un determinato numero di parametri quali temperatura, mode, ventola, sleep, swing ecc...), alla pressione successiva dello stesso tasto anche se tu non hai variato nulla avrai tutto un altro codice che corrisponderà per l'appunto al comando di spegnimento. Non è lo stesso comando che il clima una volta interpreterà come on e la successiva come off come per il televisore. Come quando schiacci il più o il meno della temperatura, per il climatizzatore non è un tasto di incremento o decremento. Basta che provi a impostarlo a 20 gradi, ti sposti in un'altra stanza e schiacci il più sino a portarti a 25, torni nella stanza del clima, lo ripunti e schiacci il più, lui non si porterà a 21, bensì a 26. Fidati, è un lavoro fattibilissimo, ci vuol più a dirsi che a farsi. Se non son stato chiaro chiedi pure.

Ah chiaramente se poi scegli la strada di controllarlo a 360 gradi. 99% dovrai crearti una apposita funzione. Comunque prova a dirmi la marca, se siamo fortunati hai la stessa mia e ti passo la libreria modificata.

Questo è un esempio di raw di un climatizzatore COMFEE convertito in codice.

Condizionata 17° ventola auto
-4350 600 -1500 600 -550 550 -1600 550 -1600 550 -550 550 -550 550 -1550 550 -550 550 -550 550 -1600 550 -500 550 -550 550 -1600 550 -1600 550 -550 550 -1600 550 -1600 550 -500 600 -1550 600 -1600 550 -1600 550 -1600 550 -1600 550 -1600 550 -550 550 -1550 600 -550 550 -500 550 -550 550 -550 550 -550 500 -550 550 -550 550 -500 550 -550 550 -550 500 -550 550 -550 550 -500 550 -550 550 -1600 550 -1600 550 -1600 600 -1550 550 -1600 600 -1550 550 -1550 650 -1550 600 
101100100100110110111111010000000000000011111111
Condizionata 17° ventola 1
-4350 600 -1550 600 -500 550 -1650 500 -1600 600 -500 550 -550 550 -1600 550 -550 550 -500 550 -1600 550 -550 550 -550 550 -1600 500 -1650 550 -500 550 -1650 500 -1650 550 -500 550 -550 550 -1600 550 -1600 550 -1600 550 -1600 550 -1600 550 -550 550 -1600 550 -1600 550 -550 550 -500 550 -550 550 -550 550 -500 550 -550 550 -550 500 -550 550 -550 550 -550 550 -500 550 -550 550 -500 550 -1600 550 -1650 550 -1600 550 -1600 550 -1600 550 -1600 550 -1600 550 -1650 500 
101100100100110110011111011000000000000011111111
Condizionata 17° ventola 2
-4350 550 -1600 550 -550 550 -1600 550 -1600 550 -550 550 -550 550 -1600 500 -550 550 -550 550 -1600 550 -500 550 -550 550 -1600 550 -1650 500 -550 550 -1600 550 -550 550 -1600 550 -500 600 -1600 550 -1600 550 -1600 550 -1600 550 -1600 550 -1600 550 -550 550 -1600 550 -550 550 -500 550 -550 550 -550 550 -500 550 -550 550 -500 550 -550 550 -550 550 -500 550 -550 550 -500 550 -550 550 -1600 550 -1600 550 -1650 550 -1600 500 -1650 550 -1600 550 -1600 550 -1600 550 
101100100100110101011111101000000000000011111111
Condizionata 17° ventola 3
-4300 650 -1550 600 -500 550 -1600 550 -1600 600 -500 550 -550 550 -1600 550 -550 550 -500 550 -1600 550 -550 550 -550 550 -1550 550 -1600 600 -500 550 -1600 550 -550 550 -550 550 -1600 550 -1550 600 -1600 550 -1550 600 -1600 550 -1550 600 -1600 550 -1600 600 -500 550 -550 550 -500 550 -550 550 -550 550 -500 550 -550 550 -550 500 -550 550 -550 550 -550 550 -500 550 -550 500 -600 500 -1600 550 -1600 600 -1550 600 -1550 600 -1600 550 -1550 600 -1600 550 -1600 550
101100100100110100111111110000000000000011111111

Il primo 1 negativo -4300 è il bit di start.

Quello che segue è l'esempio di invio di un comando raw ad un climatizzatore Samsung

#include "IRremote.h"

IRsend irsend;

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

unsigned int ON[120]={3200, 8900,550, 1550,550, 500,500, 550,500, 550,500, 500,550, 500,550, 500,550, 500,550, 500,500, 1600,500, 500,550, 500,550, 1550,500, 550,500, 1600,500, 1550,550, 500,550, 1550,500, 1600,500, 1550,550, 1550,500, 1600,500, 1550,550, 1550,500, 1600,500, 500,550, 500,550, 500,550, 500,500, 1600,500, 550,500, 500,550, 1550,550, 1550,500, 550,500, 500,550, 500,550, 500,550, 1550,500, 550,500, 1600,500, 500,550, 1550,500, 550,500, 550,500, 500,550, 1550,550, 500,500, 550,500, 550,500, 550,500, 500,550, 1550,550, 1550,500, 1600,500, 1550,550,};

void loop() {
 irsend.sendRaw(ON,120,38);
 Serial.println("Pompa di calore 20 gradi");
 delay(2000);
 }

Come vedi per poter reinviare il raw devi copiare quello che ti esce dalla codifica levando i segni meno e se non ricordo male il primo valore. Ps. una volta che hai codificato tutti i comandi che desideri riporta il valore RAWBUF modificato in precedenza al valore originale, altrimenti la libreria occupa uno sproposito di memoria per nulla.

Grazie mille Lollo82, purtroppo leggo solo ora perchè sono stato in vacanza. Ho visto il tuo progetto ed è fatto molto bene, complimenti!

Per ora a me basterebbe qualcosa di meno, come accendere o spegnere il condizionatore. Il mio problema però è a priori dell'invio dati che, per lo meno nella teoria, credo di avere capito. Infatti non riesco ad ottenere i codici del mio condizionatore, neanche con il programma AnalysIR consigliato da Guglielmo. Nonostante mi veda che ci sia stato l'invio di un segnale IR e me lo aggiunge nella history, esso appare da 0 bit senza nessun value, non permettendomi quindi il reverse engineering. Hardware e software dovrebbero essere a posto perchè capto altri segnali (come quello del telecomando della TV) senza problemi. Il mio condizionatore è un Panasonic e non un Samsung ahimè! Il modello è di questo tipo.

Sapevo fosse una cosa difficile ma non so come venirne a capo, se sapete darmi qualche consiglio vi ringrazio infinitamente!

zioCri: Infatti non riesco ad ottenere i codici del mio condizionatore, neanche con il programma AnalysIR consigliato da Guglielmo. Nonostante mi veda che ci sia stato l'invio di un segnale IR e me lo aggiunge nella history, esso appare da 0 bit senza nessun value, non permettendomi quindi il reverse engineering.

Hai montato lo schema completo con i DUE ricevitori la loro consigliati ?

Perché se ne montano DUE è proprio per decodificare NON solo i dati, ma anche la portante che può essere diversa da telecomando a telecomando !

Guglielmo

gpb01: Hai montato lo schema completo con i DUE ricevitori la loro consigliati ?

Perché se ne montano DUE è proprio per decodificare NON solo i dati, ma anche la portante che può essere diversa da telecomando a telecomando !

Guglielmo

Si ho fatto come loro suggeriscono e cioè messo il ricevitore TSSP4038 sul pin 2 e il learner TSMP58000 sul pin 3.

zioCri: Si ho fatto come loro suggeriscono e cioè messo il ricevitore TSSP4038 sul pin 2 e il learner TSMP58000 sul pin 3.

Che portante ha individuato? 38 Khz o diversa?

Guglielmo

P.S.: Purtroppo NON ho un condizionatore Panasonic altrimenti ti facevo qualche prova anche io ... ... però considera che AnalysIR di solito NON sbaglia un colpo, quindi mi sembra strano che non legga nulla. In ogni caso puoi contattare l'autore che è sempre molto disponibile a fornire supporto.

Non mi dice nessuna portante, su carrier rimane scritto 0 per qualsiasi segnale, anche per quello del telecomando della televisione. La cosa strana è che non riesce a identificare il type come "Panasonic" lasciando un generico "RAW". In pratica l'unica cosa che ho nella history è il data.

Credo che proverò a contattare l'autore come mi suggerisci.

Modifica la variabile rawbuf con un valora abbastanza alto. 500 dovrebbe bastare (l’unico con un codice più lungo che al momento ho visto è di un riello), e con il codice della libreria vedrai che ti restituisce tutto il codice. Lo fai per l’accendi e poi per lo spegni (alle impostazioni da te desiderate) ed il gioco è fatto. Appena riesco comunque col telecomando universale guardo il codice panasonic con l’oscilloscopio e guardo cosa esce. Così ti dico. E ti passo il raw.

Allora ora ci provo e ti faccio sapere. Per ora grazie mille Lollo82 per il supporto!

Allora, intanto non dirlo nemmeno per scherzo... Con tutte le volte che il supporto è stato dato a me, il minimo che posso fare anche se purtroppo nel mio molto piccolo mi pare contribuire. Secondo, ho analizzato i diversi codici panasonic presenti nel telecomando universale e come puoi vedere dalle immagini, la più grossa difficoltà che hai nel decodificarli è che come accade per il COMFEE lo stesso codice viene inviato più volte dopo una pausa (che probabilmente la libreria IRremote interpreta come termine della trasmissione) che misuro e ti saprò dire di quanto è.

Primo codice: Come puoi vedere viene inviato 3 volte lo stesso codice con una pausa. https://www.dropbox.com/s/ggvsaqlofynu5jn/PrimoCodice.png?dl=0

Secondo codice: In questo caso il comando viene inviato 2 volte sempre con una pausa tra un invio e l'altro. https://www.dropbox.com/s/nkyyu4it2thvrxm/SecondoCodice.png?dl=0

Terzo codice: Qua viene prima inviato un codice probabilmente di controllo e successivamente il comando. https://www.dropbox.com/s/a0h1wozbvdx2su0/TerzoCodice.png?dl=0

Quarto codice: Praticamente identico al terzo

Quinto codice: Qui come nel primo, il comando viene inviato 3 volte, a occhio e croce cambiano oltre al codice i tempi. https://www.dropbox.com/s/qk67iqob0z6olgx/QuintoCodice.png?dl=0

Sesto codice: Praticamente uguale al terzo e quarto https://www.dropbox.com/s/3lpxb0vxv4skmnm/SestoCodice.png?dl=0

Settimo codice: Anche qua lo stesso comando viene inviato due volte a distanza di un ritardo. https://www.dropbox.com/s/8oz3pgpy99v616v/SettimoCodice.png?dl=0

Non so quale sarà di questi che può controllare il tuo, ma estrapolando un raw per codice e testandolo lo troviamo. Riuscissi a inviare il raw (anche se non completo) che ti trovi col tuo sarebbe la mortre sua.

Intanto se hai voglia prova ad inviare questo codice al tuo climatizzatore con il led ir. È la replica della prima codifica, dovrebbe iniziare a lavorare a 28 gradi come climatizzatore. (Non so dirti se è il codice di accensione). L’importante è che senti il bip.
Lo invia di continuo ogni 2 secondi. Il trasmettitore tienilo molto vicino al ricevitore del clima perchè il led connesso direttamente ad arduino con una resistenza ha una portata ridicola.

#include "IRremote.h"
 
IRsend irsend;
 
void setup()
{
  Serial.begin(9600);
}
 
unsigned int TestCodice1[55]={3500, 3500, 900, 850, 900, 800, 900, 2600, 900, 2600, 850, 850, 900, 800, 900, 2600, 900, 800, 900, 2600, 900, 850, 850, 850, 900, 800, 900, 850, 850, 2650, 850, 2600, 900, 850, 850, 850, 900, 2600, 900, 2550, 900, 850, 900, 2600, 850, 850, 900, 2600, 900, 2600, 850, 2600, 900, 2600, 900};
 
void loop() {
  for(int i=0; i<3; i++){
    irsend.sendRaw(TestCodice1,55,38);
    delay(29);
 
  
  }
  Serial.println("Test");
  delay(2000);
 }

Niente, il codice che hai postato non va...

In compenso sono riuscito, con la modifica alla libreria che mi hai suggerito, di rilevare i codici RAW rispettivamente di spegni, accendi, spegni (tutto a 28.5°C).

Decoded Panasonic: 7200000(48 bits)
#define Something_DEC 119537664
#define Something_HEX 7200000
Raw (101): 664 3550 -1600 550 -300 550 -1200 500 -350 500 -350 500 -350 550 -300 550 -300 550 -350 500 -350 500 -350 550 -300 550 -350 500 -350 500 -1200 550 -300 550 -300 550 -350 500 -350 500 -350 500 -350 550 -300 550 -1150 550 -1200 500 -1200 550 -300 550 -350 550 -1150 550 -300 550 -350 500 -350 500 -350 550 -300 550 -300 550 -300 550 -350 500 -350 500 -350 550 -300 550 -300 550 -300 550 -350 550 -300 550 -300 550 -350 500 -350 500 -350 500 -350 550 -300 550 -300

Decoded Panasonic: 7200000(48 bits)
#define Something_DEC 119537664
#define Something_HEX 7200000
Raw (101): -11352 3500 -1650 500 -400 450 -1250 500 -350 500 -350 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -400 450 -400 500 -350 500 -1200 500 -400 500 -350 450 -400 450 -400 500 -350 500 -350 500 -350 500 -1250 500 -1200 500 -1200 550 -350 500 -350 500 -1250 500 -350 500 -350 500 -350 500 -350 500 -350 550 -350 500 -350 500 -350 500 -350 500 -350 500 -350 500 -400 600 -250 550 -300 500 -350 550 -350 500 -350 500 -350 550 -300 500 -350 600 -250 550 -350

Decoded Panasonic: 7200000(48 bits)
#define Something_DEC 119537664
#define Something_HEX 7200000
Raw (101): -2392 3600 -1600 500 -350 550 -1150 550 -300 550 -350 500 -350 500 -350 550 -300 550 -300 550 -300 550 -350 550 -300 550 -300 550 -350 500 -1200 500 -350 550 -300 550 -300 550 -350 500 -350 500 -350 500 -350 550 -1150 550 -1200 500 -1200 550 -300 550 -350 500 -1200 550 -300 550 -300 550 -300 550 -350 500 -350 500 -350 550 -300 550 -300 550 -300 550 -350 500 -350 500 -350 550 -300 550 -350 550 -300 550 -300 550 -300 550 -300 550 -350 500 -350 500 -350 500 -350

Il passo avanti è stato fatto ma purtroppo ho provato ad inviare il primo di questi (eliminando il primo valore, tutti i meno, mettendo un virgola) e niente, ancora non va.

È normale. Perchè il momento della pausa viene interpretato come fine trasmissione quando in realtà non lo è. Ma con il raw che hai trovato dovrei riuscire a capire quale codifica tra le 7 del telecomando che ho io è quella corretta. Più tardi mi metto al pc, guardo e ti scrivo.