Arduino e IRremote

Ciao a tutti, sto provando a clonare il telecomando della mia TV da aggiungere all'impiantino di domotica con scarsi risultati.
Ricevo il codice del telecomando e tramite lo script example IRrecvDump ottengo questo per un tasto:

C08F7
Decoded NEC:    
C08F7 (32 bits)
Raw (68): -10004 9100 -4400 600 -500 650 -500 650 -450 650 -500 650 -450 700 -450 650 -450 700 -450 650 -500 650 -450 650 -500 650 -450 650 -1600 700 -1550 700 -450 650 -450 700 -450 650 -500 650 -450 650 -500 650 -1600 650 -450 700 -450 650 -500 650 -1600 650 -1600 650 -1600 650 -1600 650 -450 700 -1600 650 -1600 650 -1600 650

Quindi ho modificato lo script Demo così

/*
 * 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() {
  if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
      irsend.sendNEC('C08F7', 32); // sendSony è diventato sendNEC
      delay(100);
    }
  }
}

Ma la televisione non cambia canale, ho provato con una telecamera a vedere se il led s'illuminava e lo vedo lampeggiare, quindi non è bruciato...

Il led ha un resistenza da 330 sul positivo che è collegato al pin 3.

Ciao e grazie :wink:

Non lo so, non me ne intendo. Però forse non si tratta solo di codici ma anche di tempi di trasmissione?
Di intensità del segnale?

Tempi di trasmissione non ne ho idea visto che fa tutto lui, per l'intensità ho messo il led davanti al ricevitore della TV..

Non me ne intendo molto ma anke io sto integrando il controllo IR nella domotica di casa e alla prima prova c'ho preso (stranamente)

ho notato che se premo il tasto mi da un valore tipo 523 e se continuo a tenerlo premuto continua a darmi un valore ripetuto tipo 14054 quindi sul terminale vedo

523
14054
14054
14054
14054
14054

quindi il 523 è il valore del tasto
e posso dire ad arduino: se ricevi valore 523 accendi la luce.... e lui ovviamente la accende

N.B. rileggendo il topic ho capito di nn aver capito un "arduino" :smiley:

Ciao Guglio

Prova di fare l' inverso. La libreria Ti da anche la possibiltá di decifrare il codice di un tasto del telecomando quando lo premi. Per questo Ti serve un ricecitore IR che demodula i 38kH del telecomando.
Usa per questo per esempio un TSOP4838 o similare. Il "38" finali dicono per quale frequenza di modulazione é fatto.
Cosí leggi il codice del tasto e in un secondo momento lo spari fuori sulla TV.

Ciao Uwe

Ma quel codice che mi butta fuori lo script non è già il segnale decodificato del telecomando?
Cioè io vorrei "semplicemente" clonare il telecomando della TV

ciao Guglio

Lo script Ti da il codice del segnale ricevuto. Visto che i telecomandi modulano su una frequenza alta ( la maggior parte dei telecoamndi usa 38kHz) quei ricevitori lo demodulano e lo script sul arduino Ti dice il codice. Quel codice spedito via quella libreria dovrebbe pilotare al tv o quello per cui é fatto il telecomando.

Ciao Uwe

mai lavorato con IR e/o telecomandi, però un paio di suggerimenti li ho:
1: sicuro di quel delay(100); ? magari la tv si aspetta che il segnale sia ripetuto più spesso, altrimenti lo scarta come "rumore"
2: fai mille prove, e facci sapere quelle che hai fatto! (e come sono andate :slight_smile: ) Per esempio, visto che hai sia l'IR trasmittente che l'IR ricevente, hai provato a leggere il valore che spari fuori dal tuo IR trasmittente col ricevente?

Ho provato con

#include <IRremote.h>
IRsend irsend;

void setup()
{
  Serial.begin(9600);
}
void loop() {
  unsigned int abc[68] = {-10004,9100,-4400,600,-500,650,-500,650,-450,650,-500,650,-450,700,-450,650,-450,700,-450,650,-500,650,-450,650,-500,650,-450,650,-1600,700,-1550,700,-450,650,-450,700,-450,650,-500,650,-450,650,-500,650,-1600,650,-450,700,-450,650,-500,650,-1600,650,-1600,650,-1600,650,-1600,650,-450,700,-1600,650,-1600,650,-1600,650};
  for (int i = 0; i < 3; i++) 
  {   
    irsend.sendRaw(abc,29,38); // 29 e 38 sono costanti
    delay(100);
  }
}

Ma niente...

Anche se uso:

#include <IRremote.h>

int RECV_PIN = 11;
IRsend irsend;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
irsend.sendNEC('C08F7', 32); // sendSony è diventato sendNEC
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

Non ricevo nulla sulla seriale anche se uso il telecomando della TV mentre il LED rimane acceso!!

scusa ma irsend non gli dai alcun pin su cui scrivere. Sei sicuro di usare quello di default corretto?
Per sicurezza prova a specificarlo come in irrecv, in teoria fnchè l'ultimo codice non funziona è inutile andare troppo oltre.
Fai partire l'ultimo codice, così com'è, non ricevi nulla come dice, ma se premi il telecomando (con codice diverso giusto per non sbagliarsi) dovresti ricevere il comando...
se lo ricevi, allora il problema è sul irsend (prova a specificare il pin), altrimenti prima risolvi il problema sulla ricezione (da quel che ho capito la ricezione funzionante sei riuscito a farla, non dovrebbe essere un grosso problema trovare l'eventuale errore)

Potrei sclerare:

.....
const int pin = 3;
IRsend irsend(pin);

Dov'è sbagliato non capisco :cold_sweat:

sketch_feb08a:5: error: no matching function for call to 'IRsend::IRsend(const int&)'
C:\arduino-0021\libraries\IRremote/IRremote.h:72: note: candidates are: IRsend::IRsend()
C:\arduino-0021\libraries\IRremote/IRremote.h:70: note: IRsend::IRsend(const IRsend&)

ho dato un'occhiata, ho trovato questa discussione: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1280862585
in pratica non puoi cambiare il pin di output, che è il digital pin 3 su arduino uno/2009/2010 e nell'arduino mega il digital pin 9...

infatti anche dai commenti dell'esempio di invio dice "An IR LED must be connected to Arduino PWM pin 3."

Sto diventando scemo.
Ho seguito la guida per la parte IR di questo instructables: http://www.instructables.com/id/Fart-Operated-Random-Channel-TV-Remote/

Ottengo il codice ma non c'è modo di far cambiare canale alla tv.
Domani vado a comprare un nuovo led IR perchè questo l'ho anche bruciato dimenticandomi la resistenza :grin: :grin:

Una resistenza da 330ohm andrà bene o è troppo e forse per questo non va?

puoi anche scendere fino a 220 ohm.
che marca è il televisore?

In realtà ho provato con il decoder che è un HUMAX e con un'altra tv philips senza risultati

Dovresti provare il metodo usato nel link che ho messo, per campionare col PC il segnale emesso da arduino e quello dal telecomando, e vedere se sono uguali. Ti basta un auricolare e un led IR.