Go Down

Topic: Problema ricevitore IR TSOP1738 (Read 2666 times) previous topic - next topic

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

nid69ita

#1
Aug 18, 2018, 03:25 pm Last Edit: Aug 18, 2018, 03:28 pm by nid69ita
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
my name is IGOR, not AIGOR

gpb01

#2
Aug 18, 2018, 04:21 pm Last Edit: Aug 18, 2018, 04:22 pm by gpb01
... 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
Search is Your friend ... or I am Your enemy !

zioCri

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.

gpb01

#4
Aug 18, 2018, 05:12 pm Last Edit: Aug 18, 2018, 05:12 pm by gpb01
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
Search is Your friend ... or I am Your enemy !

zioCri

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à

Lollo82

#6
Aug 20, 2018, 02:16 pm Last Edit: Aug 20, 2018, 03:18 pm by Lollo82
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.

Lollo82

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.

Lollo82

#8
Aug 20, 2018, 02:28 pm Last Edit: Aug 20, 2018, 02:55 pm by Lollo82
Questo è un esempio di raw di un climatizzatore COMFEE convertito in codice.
Code: [Select]

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
Code: [Select]

#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.

zioCri

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!

gpb01

#10
Sep 03, 2018, 01:29 pm Last Edit: Sep 03, 2018, 01:29 pm by gpb01
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
Search is Your friend ... or I am Your enemy !

zioCri

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.

gpb01

#12
Sep 03, 2018, 03:43 pm Last Edit: Sep 03, 2018, 03:43 pm by gpb01
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.
Search is Your friend ... or I am Your enemy !

zioCri

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.

Lollo82

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.

Go Up