TSOP 31238 e IR LED

Ciao a tutti, ho comprato il ricevitore TSOP 31238 e l'emettitore LED IR perché volevo fare delle prove col condizionatore della Saunier Duval. Ho collegato il ricevitore (con la protuberanza rivolta verso di me) all'arduino con il primo pin a partire da sinistra al gnd, il secondo in serie con una resistenza da 100 ohm all'alimentazione da 5V ed il terzo al pin 11. se carico lo sketch di esempio della libreria IRrecvDump e punto il telecomando al dispositivo riesco a ricevere la raw. Ad esempio,

spegne:

Raw (98): -7500 700 -3300 700 -3300 650 -3300 700 -1350 650 -3300 700 -1350 650 -3300 700 -3300 650 -1350 650 -1400 650 -1350 650 -3300 700 -1350 650 -3300 700 -1350 650 -1400 650 -1350 650 -3300 700 -3300 700 -3300 650 -3350 650 -1350 700 -3300 650 -1350 650 -3300 700 -1350 650 -1350 650 -1350 650 -1400 650 -3300 650 -1400 600 -3300 700 -1350 650 -3300 700 -1350 650 -3300 700 -1350 650 -3300 700 -1350 600 -1350 600 -3400 600 -1400 600 -3400 600 -1400 600 -3400 600 -1400 600 -3400 600 -3300 600

Accende a 26 gradi raffrescamento:

Raw (98): -7500 700 -3300 700 -3300 650 -3350 650 -1350 700 -3300 650 -1350 700 -3300 700 -3250 700 -1350 650 -1350 650 -1350 700 -3300 650 -1350 700 -3300 650 -1350 700 -1400 650 -1350 650 -3350 650 -3350 650 -3300 700 -3300 700 -1300 700 -3300 700 -1300 700 -3300 650 -1350 600 -1400 700 -1350 650 -1350 600 -3400 600 -1400 600 -3350 650 -1400 600 -3400 600 -1400 600 -3400 600 -1400 600 -3400 600 -1400 600 -1350 650 -3350 650 -1350 650 -3350 650 -1400 600 -3350 650 -1400 600 -3350 650 -3300 600

Ho modificato la prima raw, che chiamerò OFF togliendo il primo valore e sostituendo " -" con ",":

700,3300,700,3300,650,3300,700,1350,650,3300,700,1350,650,3300,700,3300,650,1350,650,1400,650,1350,650,3300,700,1350,650,3300,700,1350,650,1400,650,1350,650,3300,700,3300,700,3300,650,3350,650,1350,700,3300,650,1350,650,3300,700,1350,650,1350,650,1350,650,1400,650,3300,650,1400,600,3300,700,1350,650,3300,700,1350,650,3300,700,1350,650,3300,700,1350,600,1350,600,3400,600,1400,600,3400,600,1400,600,3400,600,1400,600,3400,600,3300,600

Ho poi modificato la seconda raw, che chiamerò ON allo stesso modo:

700,3300,700,3300,650,3350,650,1350,700,3300,650,1350,700,3300,700,3250,700,1350,650,1350,650,1350,700,3300,650,1350,700,3300,650,1350,700,1400,650,1350,650,3350,650,3350,650,3300,700,3300,700,1300,700,3300,700,1300,700,3300,650,1350,600,1400,700,1350,650,1350,600,3400,600,1400,600,3350,650,1400,600,3400,600,1400,600,3400,600,1400,600,3400,600,1400,600,1350,650,3350,650,1350,650,3350,650,1400,600,3350,650,1400,600,3350,650,3300,600

Ho quindi collegato il polo positivo del LED IR al pin 3 e quello negativo in serie con una resistenza da 330 ohm a terra. Ho caricato su arduino questo sketch:

//An IR LED must be connected to Arduino PWM pin 3.

#include "IRremote.h"

IRsend irsend;

void setup()

{

Serial.begin(9600);

}

int khz=38; 

//ON the A/C
unsigned ON[] =
{700,3300,700,3300,650,3350,650,1350,700,3300,650,1350,700,3300,700,3250,700,1350,650,1350,650,1350,700,3300,650,1350,700,3300,650,1350,700,1400,650,1350,650,3350,650,3350,650,3300,700,3300,700,1300,700,3300,700,1300,700,3300,650,1350,600,1400,700,1350,650,1350,600,3400,600,1400,600,3350,650,1400,600,3400,600,1400,600,3400,600,1400,600,3400,600,1400,600,1350,650,3350,650,1350,650,3350,650,1400,600,3350,650,1400,600,3350,650,3300,600};

// OFF the A/C
unsigned OFF[] =
{700,3300,700,3300,650,3300,700,1350,650,3300,700,1350,650,3300,700,3300,650,1350,650,1400,650,1350,650,3300,700,1350,650,3300,700,1350,650,1400,650,1350,650,3300,700,3300,700,3300,650,3350,650,1350,700,3300,650,1350,650,3300,700,1350,650,1350,650,1350,650,1400,650,3300,650,1400,600,3300,700,1350,650,3300,700,1350,650,3300,700,1350,650,3300,700,1350,600,1350,600,3400,600,1400,600,3400,600,1400,600,3400,600,1400,600,3400,600,3300,600};


void loop() {

irsend.sendRaw(ON, sizeof(ON)/sizeof(int),khz);
Serial.println("ON");
Serial.println(sizeof(ON)/sizeof(int));
Serial.println(khz);
delay(5000);

irsend.sendRaw(OFF, sizeof(OFF)/sizeof(int),khz);
Serial.println("OFF");
Serial.println(sizeof(ON)/sizeof(int));
Serial.println(khz);
delay(5000);

}

I Serial.print mi servivano solamente per verificare la lunghezza del raw (97) e la frequenza (38). Non funziona. Dove può essere l'errore?

Guarda per esperienza personale anche se raw non è detto che funziona. Prova ad aumentare #define RAWBUF che si trova sul file header della lib cioè iRRemote.h Riavvia tutto e riprova. Se non dovesse funzionare, acquista analysIR io dopo sei mesi di prove ho risolto solo così a prima botta...costa pochissimo..7 euro se non erro... ti fa il codice lui in automatico e idem gli array

roxdragon: Prova ad aumentare #define RAWBUF che si trova sul file header della lib cioè iRRemote.h

Adesso il #define RAWBUF è impostato a 100. A quanto dovrei metterlo?

roxdragon: acquista analysIR

Siccome non ho proprio idea di cosa tu stia parlando (app, strumentino hw) hai un link?

prova a metterlo a 255 il RAWBUF . Per quanto riguarda il sw http://www.analysir.com/blog/get-analysir/ Questo già va più che bene...non c'è bisogno di hw particolari...sempre tsop e ir

roxdragon: prova a metterlo a 255 il RAWBUF .

con il RAWBUF impostato a 255 ho rifatto la procedura ed ho prima acquisito i raw di acceso e spento e sono cambiati di poco. Poi li ho dati in pasto al secondo sketch per inviarli via IR LED al condizionatore. Non funziona ancora. Se non c'è altro da fare proverò con il sw analysir. Grazie

allora, ho scaricato il programma nella versione 0914240769 inserito licenza e tutto.
poi da qui

ho scaricato lo sketch.
fatto girare adesso il raw ha una lunghezza di 101:

Spegne:

Raw: (101) 6588, -7596, 676, -3348, 684, -3344, 676, -3352, 684, -1348, 684, -3344, 676, -1356, 676, -3348, 684, -3320, 684, -1344, 688, -1344, 676, -1356, 680, -3348, 684, -1348, 684, -3344, 676, -1352, 680, -1408, 676, -1352, 680, -3348, 684, -3344, 680, -3348, 684, -3344, 680, -3348, 684, -3340, 680, -1328, 684, -3340, 684, -1348, 684, -1348, 684, -1348, 684, -1348, 684, -1348, 684, -1344, 688, -3324, 676, -1356, 676, -3352, 684, -1344, 688, -3340, 680, -1352, 680, -3348, 684, -1348, 684, -1304, 676, -3348, 684, -1348, 684, -3344, 680, -1352, 680, -3348, 676, -1356, 676, -3348, 684, -3276, 676, -7368, 684,

Accende:

Raw: (101) 6596, -7588, 684, -3344, 676, -3348, 684, -3344, 680, -1352, 680, -3348, 684, -1348, 676, -3352, 680, -3320, 684, -1348, 684, -1348, 684, -1344, 688, -3340, 680, -1352, 680, -3348, 684, -1348, 676, -1408, 684, -1348, 684, -3340, 684, -3344, 676, -1356, 676, -3352, 680, -3348, 676, -3352, 680, -1324, 680, -3348, 684, -1348, 684, -1344, 688, -3340, 680, -1352, 680, -1352, 680, -1352, 680, -3328, 684, -1348, 684, -3344, 680, -1352, 680, -3344, 680, -1352, 680, -3348, 684, -1348, 684, -1304, 676, -3352, 680, -1348, 684, -3344, 680, -1352, 680, -3348, 684, -1348, 684, -3344, 680, -3276, 684, -7360, 684,

Al solito, ho tolto il primo valore (ho provato anche con il primo valore inserito), sostituito spazi e spazi e trattini con le virgole, ridato in pasto allo sketch che invia il sengale tramite IR LED ma niente. :cold_sweat:

Ho provato poi ad aprire il programma per vedere se riuscivo ad ottenere qualche info in più seguendo questa guida:

Effettivamente riconosce la porta dove è collegato l’arduino ed la casella in basso a destra diventa verde (vedi immagine). il TSOP è collegato al pin 2 ma non rileva niente.

edit1: ok, sono riuscito a far andare analysIR con arduino (vedi seconda immagine). Adesso prendo la colonna Duration e la incollo come raw nello sketch?

edit2: ho provato ad incollare il nuovo raw preso dalla colonna Duration nello sketch che invia:

Spegne:

1000,6588,7596,632,3396,628,3400,624,3404,628,3400,624,3404,632,1396,624,3404,632,3372,628,1404,632,1396,624,1408,624,1408,624,1408,624,3404,632,1400,632,1452,632,1400,632,3396,628,3400,620,3404,632,3396,628,3400,632,3396,628,1376,624,3404,632,1400,632,1400,632,1400,632,1400,624,1408,624,1408,624,3384,628,1404,628,3400,624,1408,624,3404,632,1396,636,3396,624,1404,628,1360,632,3396,628,1408,624,3400,624,1408,624,3404,628,1400,636,3392,628,3332,620,7424,624

Accende:

1000,6596,7588,632,3396,628,3400,632,3396,632,3396,624,3404,632,1396,636,3392,628,3376,680,1352,680,1348,684,1348,684,1348,684,1348,676,3352,680,1352,680,1404,680,1352,680,3348,676,3348,688,1344,676,3352,684,3344,628,3400,632,1372,632,3396,628,1404,628,1404,628,3400,624,1408,624,1404,628,1404,628,3384,628,1404,632,3392,628,1404,632,3396,628,1404,628,3400,624,1408,624,1364,624,3400,624,1408,624,3404,632,1400,632,3396,628,1404,628,3400,624,3332,632,7412,632

ho provato a togliere il primo valore e poi anche il secondo ma niente. Ho provato anche a sostituire il led e la resistenza ma niente ancora.

No no a te non interessa nessuna colonna o modifica. Se non erro, apri il programma e poi sparagli l'on ad arduino, "SE NON ERRO" dovrebbe apparirti sulla colonna di destra una stringa... poi fai file > export ir signal > documento di testo mi sembra... una cosa simile.. ti salva lo sketch già fatto ... devi fare solo copia incolla su arduino...

Vedi: http://forum.arduino.cc/index.php?topic=227247.msg1646557#msg1646557

fai in modo da puntare il led all' A/C e possibilmente quasi al buio!

il comando da analysIR è file>Batch Export> poi io ho scelto IRremote (perché ha lo stesso nome della libreria per arduino).

Ho quindi copiato il contenuto in uno sketch pulito e creato il void loop. Ecco il codice:

/*
Automatically Generated by AnalysIR - Batch Export Utility
Registered to: xxxx
Session History
Type : Key : Value : Bits
0 : RAW :  :  : 0
1 : RAW :  :  : 0
2 : RAW :  :  : 0
3 : RAW :  :  : 0
*/

// NB: Not all protocols are supported by IRremote or IRLib. You may need to edit the code below manually
// Automatically Generated by AnalysIR for xxxx, visit http://www.AnalysIR.com or email info@....... for further details
#include "IRremote.h"

IRsend irsend;

void setup()

{

Serial.begin(9600);

}

int khz=38; //NB Change this default value as neccessary to the correct modulation frequency


unsigned int Signal_0_0[] = {6592,7592,628,3400,632,3396,624,3404,632,3396,624,3404,628,1404,628,3400,624,3376,624,1408,624,1404,628,1408,624,1404,628,1404,628,3400,632,1400,628,1456,628,1404,628,3400,632,3396,628,3396,636,3392,628,3400,632,3396,628,1376,636,3392,628,1404,628,1404,628,1404,628,1404,628,1404,628,1400,632,3380,632,1400,632,3396,624,1408,624,3400,632,1400,632,3396,628,1404,624,1364,628,3400,624,1408,624,3404,628,1400,632,3396,624,1408,624,3404,628,3328,632,7416,632}; //AnalysIR Batch Export - RAW

unsigned int Signal_1_1[] = {6556,7628,604,3424,596,3432,600,3428,596,3428,604,3424,596,1436,628,3376,648,3376,624,1408,604,1428,604,1428,624,1408,624,1408,624,3400,600,1432,600,1484,600,1432,600,3428,604,3424,596,1436,596,3432,600,3428,596,3428,604,1404,596,3436,616,1436,576,1428,604,3424,600,1432,596,1436,596,1436,596,3412,600,1432,620,3408,596,1436,596,3432,600,1432,600,3428,624,1408,592,1392,600,3404,680,1376,624,3404,628,1404,628,3372,632,1428,600,3428,596,3360,600,7444,600}; //AnalysIR Batch Export - RAW

unsigned int Signal_2_2[] = {6588,7596,624,3404,628,3400,624,3404,628,3400,624,3404,628,1404,628,3400,620,3380,624,1408,624,1408,620,1408,624,1408,624,1408,624,3404,628,1404,628,1456,628,1404,628,3400,624,3404,628,3400,620,3408,624,3400,632,3396,628,1376,624,3404,628,1404,628,1404,628,1404,628,1404,628,1404,628,1404,628,3380,632,1400,632,3396,624,1408,624,3404,632,1396,632,3396,628,1404,628,1360,632,3396,624,1408,624,3404,628,1404,628,3396,628,1404,628,3400,632,3324,624,7424,632}; //AnalysIR Batch Export - RAW

unsigned int Signal_3_3[] = {6612,7572,628,3424,600,3428,604,3424,596,3432,604,3424,596,1436,596,3432,600,3400,600,1432,600,1428,604,1404,648,1408,604,1428,624,3376,624,1408,656,1428,624,1436,596,3432,600,3428,592,1440,624,3400,600,3428,596,3432,600,1404,628,3400,624,1408,620,1412,620,3408,596,1436,596,1408,652,1380,620,3416,596,1408,656,3400,600,1432,600,3428,596,1436,596,3428,624,1408,624,1364,596,3432,600,1432,600,3428,592,1412,652,3400,624,1408,624,3404,596,3336,656,7416,628}; //AnalysIR Batch Export - RAW


void loop() {
irsend.sendRaw(Signal_0_0, sizeof(Signal_0_0)/sizeof(int), khz); //AnalysIR Batch Export - RAW
delay(5000);
irsend.sendRaw(Signal_1_1, sizeof(Signal_1_1)/sizeof(int), khz); //AnalysIR Batch Export - RAW
delay(5000);
irsend.sendRaw(Signal_2_2, sizeof(Signal_2_2)/sizeof(int), khz); //AnalysIR Batch Export - RAW 
delay(5000);
irsend.sendRaw(Signal_3_3, sizeof(Signal_3_3)/sizeof(int), khz); //AnalysIR Batch Export - RAW
delay(5000);
}

questi in pratica sono una serie di accendi e spegni con un delay di 5 sec. Ho abbassato le tapparelle così da avere poca luce. Mi sono anche avvicinato perché pensavo che i 3 metri in linea d'aria potessero creare problemi. Continua a non funzionare.

provba a cambiare i khz ma metti un delay di 3000.
Di solito sono 38 khz ma può variare a quanto ho capito…
fai quella prova e facci sapere… magari usa un for

int i = 0
for (i = 0; i < 100 ; i++){
....irsend,,,,,
......
delay(5000);
}

dopo ogni irsend metti un delay… magari metti anche un Serial.println così vedi nella seriale a che khz sei arrivato!

comunque una resistenza da 330 Ohm su un led IR e' un po' troppo alta, di corrente ne passa poca. Sarebbe da ridurre almeno a 100-150 Ohm