Mitsubishi kirigamine AC [RISOLTO]

pndtkd: Comunque non credevo fosse un tema così poco trattato...accendere un condizionatore con arduino! Penso che sia l'unico modo per farlo tra l'altro.

no, la problematica non sta nell'accendere qualcosa con Arduino come generatore IR, ma nella decodifica/ricodifica dei segnali del tuo condizionatore; se cerchi sul forum Telecomando IR trovi tanta roba realizzata e funzionante. Comunque la R da 100ohm ed il C da 47-100µF NON sono un'opzional per il TSOP, sono un'obbligo previsto dal data-sheet, quindi vanno montati sempre.

EDIT: infatti come vedi qualcosa si trova....

pighixxx: Comunque non pensavo che usando Google si trovasse qualcosa... http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

air conditioner arduino ir

Quello è l'ovvio, banale, scontato esempio che ho postato prima e che ho usato come sketch per ricevere i codes. Il problema è un altro. *p=leggi su.

Come detto prima ho provato sia mettendoli che non mettendoli ed il risultato, ovvero ciò che ricevo, è lo stesso.
saluti

pablos: Ok! fammi! mettere! insieme! i pezzi che avevo usato sui miei condizionatori! e ti posto il codice necessario ! per leggere gli impulsi! Non ho più i circuiti collegati!! mi ci vuole un pochetto!!

ciao!!

Magari! te ne sarei grato! nella sequenza che ricevo mxxxxx mxxxx mxxxx......che ricevo noto che si ripetono ogni tot; vorrà dire qualcosa? poi ho l'impressione che la m vada rimossa per un'eventuale ritrasmissione.

Grazie mille in anticipo per l'aiuto concreto.

Francesco

Se può essere utile porto la mia esperienza. Avevo bisogno di utilizzare un telecomando IR per altri scopi quindi ho compilato uno sketch dove con il monitor seriale vedevo stampato a video il codice inviato dal telecomando in binario e non in hex. Dopo un po di invii ho capito che alla pressione di un qualsiasi pulsante i primi 32 bit erano il codice vero e proprio (a sua volta composto da una parte uguale per ogni tasto ed una differente). I seguenti pacchetti erano solo una serie di 11111111111.....

Forse se provi a leggere results.value riesci a risolvere...

Prova a usare questo sketch e dimmi se ti da ancora unknow, se ti restituisce il numero dei bit del segnale e modello

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);
decode_results results;

void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.println("Could not decode message");
  } 
  else {
    if (results->decode_type == NEC) {
      Serial.print("Decoded NEC: ");
    } 
    else if (results->decode_type == SONY) {
      Serial.print("Decoded SONY: ");
    } 
    else if (results->decode_type == RC5) {
      Serial.print("Decoded RC5: ");
    } 
    else if (results->decode_type == RC6) {
      Serial.print("Decoded RC6: ");
    }
    Serial.print(results->value, HEX);
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");
  }
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    } 
    else {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}

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

int on = 0;
unsigned long last = millis();

void loop() {
  if (irrecv.decode(&results)) 
  {
    if (millis() - last > 250) {
      dump(&results);
    }
    last = millis();      
    irrecv.resume(); // Receive the next value
  }
}

a me ad esempio il mio condizionatore restituisce questo per ON

Decoded NEC: 90100210 (32 bits)
Raw (74): -5418 9150 -4400 700 -1600 700 -450 750 -450 750 -1550 750 -450 700 -450 750 -450 750 -450 750 -450 700 -500 700 -450 750 -1550 750 -450 750 -450 700 -450 750 -450 750 -450 750 -450 750 -400 750 -450 750 -450 750 -450 700 -1600 750 -400 750 -450 750 -450 750 -450 700 -1600 700 -450 750 -450 750 -450 700 -500 700 -450 750 -450 750 -450 750

questo per OFF

Decoded NEC: 80100210 (32 bits)
Raw (74): 30988 9150 -4350 750 -1550 750 -450 700 -450 750 -450 750 -450 750 -450 700 -500 700 -450 750 -450 750 -450 750 -450 700 -1550 750 -450 750 -450 750 -450 750 -400 800 -400 750 -450 750 -450 750 -450 750 -400 750 -450 750 -1550 750 -450 700 -450 750 -450 750 -450 750 -1550 700 -500 700 -450 750 -450 750 -450 700 -500 700 -450 750 -450 750

pndtkd:

pighixxx:
Comunque non pensavo che usando Google si trovasse qualcosa…
A Multi-Protocol Infrared Remote Library for the Arduino
air conditioner arduino ir

Quello è l’ovvio, banale, scontato esempio che ho postato prima e che ho usato come sketch per ricevere i codes.
Il problema è un altro. *p=leggi su.

Sarà anche ovvio mai hai letto in quella pagina la sezione “Handling raw codes” ?
e poi alla fine un ulteriore link a “I’ve used this library to implement a “Universal remote” to record and playback IR codes.”:

Ed è sicuro che in quei raw che hai letto dal telecomando le “m” e le “s” sono da togliere. A quelle pagine spiega come funziona il protocollo e m=Mark e s=Space.
Tra gli esempi di quella libreria c’e’ IRrecord.pde che legge anche i dati raw e li ritrasmette, spiegando anche che devono essere compensati in quanto invio e ricezione sono diversi.

Un utente a quelle pagine risponde anche:
"This started to work for me after increasing RAWBUF in IRremote.h to 256. Indeed, 129 bytes were collected from the non-standard remote of my aircondition. Maybe the default buffer is a bit tight here. To the poster who wonders how to replay what’s been received: Copy the received code sequence from the serial terminal, remove the s and m characters and pass the numbers to the sendRaw call. "

In effetti la difficoltà sta nel replicare il segnale, una volta identificato il protocollo nel mio caso NEC, mi sono dovuto studiare il segnale e adattare lo sketch http://wiki.altium.com/display/ADOH/NEC+Infrared+Transmission+Protocol Funzionava, unico problema ... la potenza del segnale oltre 1.5mt tra il led e lo split non funzionava

pablos:
Prova a usare questo sketch e dimmi se ti da ancora unknow, se ti restituisce il numero dei bit del segnale e modello

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);
decode_results results;

void dump(decode_results *results) {
 int count = results->rawlen;
 if (results->decode_type == UNKNOWN) {
   Serial.println(“Could not decode message”);
 }
 else {
   if (results->decode_type == NEC) {
     Serial.print("Decoded NEC: ");
   }
   else if (results->decode_type == SONY) {
     Serial.print("Decoded SONY: “);
   }
   else if (results->decode_type == RC5) {
     Serial.print(“Decoded RC5: “);
   }
   else if (results->decode_type == RC6) {
     Serial.print(“Decoded RC6: “);
   }
   Serial.print(results->value, HEX);
   Serial.print(” (”);
   Serial.print(results->bits, DEC);
   Serial.println(” bits)”);
 }
 Serial.print(“Raw (”);
 Serial.print(count, DEC);
 Serial.print(”): ");

for (int i = 0; i < count; i++) {
   if ((i % 2) == 1) {
     Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
   }
   else {
     Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
   }
   Serial.print(" “);
 }
 Serial.println(”");
}

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

int on = 0;
unsigned long last = millis();

void loop() {
 if (irrecv.decode(&results))
 {
   if (millis() - last > 250) {
     dump(&results);
   }
   last = millis();      
   irrecv.resume(); // Receive the next value
 }
}




a me ad esempio il mio condizionatore restituisce questo per ON


> Decoded NEC: 90100210 (32 bits)
> Raw (74): -5418 9150 -4400 700 -1600 700 -450 750 -450 750 -1550 750 -450 700 -450 750 -450 750 -450 750 -450 700 -500 700 -450 750 -1550 750 -450 750 -450 700 -450 750 -450 750 -450 750 -450 750 -400 750 -450 750 -450 750 -450 700 -1600 750 -400 750 -450 750 -450 750 -450 700 -1600 700 -450 750 -450 750 -450 700 -500 700 -450 750 -450 750 -450 750



questo per OFF


> Decoded NEC: 80100210 (32 bits)
> Raw (74): 30988 9150 -4350 750 -1550 750 -450 700 -450 750 -450 750 -450 750 -450 700 -500 700 -450 750 -450 750 -450 750 -450 700 -1550 750 -450 750 -450 750 -450 750 -400 800 -400 750 -450 750 -450 750 -450 750 -400 750 -450 750 -1550 750 -450 700 -450 750 -450 750 -450 750 -1550 700 -500 700 -450 750 -450 750 -450 700 -500 700 -450 750 -450 750

Grazie mille per il serio interessamento.
Dunque, sostanzialmente è la stessa cosa che avevo fatto io…il tuo sketch ti risponde con il tipo di decodifica. Nel tuo caso sei stato fortunato in quanto si trattava di una decodifica nota alla libreria: NEC…
Nel mio caso come ho già detto ciò che ricevo, non essendo riconosciuto, me lo dà come raw(grezzo)…Usando il tuo sketch ottengo comunque:
ON:
64800004 (48 bits)
Raw (100): 29956 3500 -1600 500 -1200 500 -1250 450 -400 450 -400 500 -350 500 -1200 500 -350 500 -400 450 -1250 450 -1250 500 -350 500 -1200 500 -350 500 -400 450 -1250 450 -1250 500 -350 500 -1200 500 -1250 450 -400 450 -400 500 -1200 500 -350 500 -350 500 -1250 450 -400 450 -400 450 -400 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -1200 500 -400 450 -400 450

OFF:
64800000 (48 bits)
Raw (100): -22354 3450 -1650 500 -1200 500 -1250 450 -400 450 -400 500 -350 500 -1200 500 -350 500 -400 450 -1250 450 -1250 450 -400 500 -1200 500 -350 500 -400 450 -1250 450 -1250 500 -350 500 -1200 500 -1200 500 -400 500 -350 500 -1200 500 -350 500 -350 500 -1250 450 -400 450 -400 500 -350 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -350 550 -350 450 -400 500 -350 500 -350 450 -400 550 -350 450 -400 500 -350 500 -350 500 -350 500 -400 450 -400 500 -350 500

Quello che scrive il tipo che ti ho indicato sopra a proposito di airconditioned, dopo porta a questo codice: http://pastebin.com/EzNNrYey Fa esattamente ON/OFF con due pulsanti e spedisce il raw. Logicamente lui ha scritto i suoi codici raw (quelli che tu metti nel post) tu dovrai sostituirli con i tuoi. Oppure devo prendere quel codice e scriverli io per te? Prego per il serio interessamento. :grin:

Quindi dovè il problema? sono gli stessi codici che hai messo nel primo post. Replicali e sei ok, tra l'altro ti hanno già fornito dei link piuttosto chiari su come fare.

Salve ragazzi ho provato a replicare i codici che ho ricevuto mettendo il codice di accensione in un buffer secondo “la guida” che mi è stata fornita e seguendo anche : http://luckylarry.co.uk/arduino-projects/arduino-redefining-the-tv-remote/
che sostanzialmente fa la stessa cosa di: http://pastebin.com/EzNNrYey

ma non funziona…(ah ho visto che va tolto, oltre le m/s anche il primo valore )…ad un certo punto l’unico risultato ottenuto era una sorta di interferenza…nel senso che se accendevo il circuito il telecomando originale non funzionava piu’, una volta spento riandava…
posto il codice:

#include <IRremote.h>
 
IRsend irsend;
 
// just added my own array for the raw signal.....ho omesso il primo codice...cmq pur mettendondolo non va.
unsigned int powerOn[100] = {3450, 1650, 450, 1300, 450, 1250, 450, 400, 450, 400, 450, 400, 450, 1250, 450,
  400, 500, 400, 450, 1250, 450, 1250, 450, 400, 450, 1250, 450, 450, 450, 400, 450, 1250,
  450, 1250, 500, 400, 450, 1250, 450, 1250, 450, 400, 450, 400, 500, 1250, 450, 400, 450,
  400, 450, 1250, 450, 400, 450, 400, 500, 350, 500, 400, 450, 400, 450, 400, 450, 400, 500,
  350, 500, 400, 450, 400, 450, 400, 450, 400, 450, 400, 450, 450, 450, 400, 450, 400, 450,
  400, 450, 400, 500, 400, 450, 400, 450, 400, 450, 400, 450, 400, 450};
void setup()
{
  Serial.begin(9600);
}
 
void loop() {
 
      // altered the code just to send/test my raw code
      irsend.sendRaw(powerOn,100,38);
      delay(100);
 
}

ciao

Francesco

Ps:come emettitore ho utilizzato un led ir comune da 50 cent(connesso sul pin 3 secondo specifiche libreria)

Se fino ad oggi non hai ancora capito che il codice va messo tra i tag “code” come puoi pensare di capire qualcosa sui segnali IR :grin: :grin:

pablos: Se fino ad oggi non hai ancora capito che il codice va messo tra i tag "code" come puoi pensare di capire qualcosa sui segnali IR :grin: :grin:

modificato....non credo che le due cose siano strettamente correlate :D

Ragazzi ho un importante aggiornamento, speriamo di venirne a capo presto.
Dunque ho installato l’upgrade per la libreria(jvc+panasonic ed ora) :

64800004
Decoded PANASONIC - Address: C4D3 Value: 64800004 (48 bits)
Raw (100): -21006 3500 -1650 450 -1250 500 -1200 500 -350 500 -350 500 -400 500 -1200 450 -400 500 -350 500 -1200 500 -1200 500 -400 500 -1200 500 -350 500 -350 500 -1200 500 -1250 450 -400 500 -1200 500 -1200 500 -350 500 -350 550 -1200 500 -350 500 -350 500 -1200 500 -350 500 -350 500 -400 500 -350 500 -350 500 -350 500 -350 500 -350 550 -350 450 -400 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -350 500 -350 500 -400 500 -350 500 -1200 500 -350 500 -350 500 
64800000
Decoded PANASONIC - Address: C4D3 Value: 64800000 (48 bits)
Raw (100): -38 3450 -1650 500 -1200 500 -1200 500 -350 550 -350 450 -400 450 -1250 500 -350 500 -350 500 -1200 550 -1200 500 -350 500 -1200 500 -350 500 -400 500 -1200 500 -1200 500 -350 550 -1150 550 -1150 500 -400 450 -400 500 -1200 500 -350 500 -350 500 -1250 450 -400 500 -350 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -350 500 -400 450 -400 500 -350 500 -350 500 -350 500 -400 450 -400 500 -350 500 -350 500 -350 500 -400 500 -350 500 -350 500 -350 500

Quindi la codifica sembra essere panasonic…credo che questo sia un riscontro: http://arduinostuff.jimdo.com/home/remote/ir-codes/

ora quindi carico lo sketch di esempio dell’upgrade della libreria:

/*
 * 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
 * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
 */
#include <IRremote.h>
 
#define PanasonicAddress      0x4004     // Panasonic address (Pre data) 
#define PanasonicPower        0x100BCBD  // Panasonic Power button

#define JVCPower              0xC5E8

IRsend irsend;

void setup()
{
}

void loop() {
  irsend.sendPanasonic(PanasonicAddress, PanasonicPower); // This should turn your TV on and off
  
  //irsend.sendJVC(JVCPower, 16,0); // hex value, 16 bits, no repeat
  //delayMicroseconds(50); // see http://www.sbprojects.com/knowledge/ir/jvc.php for information
  //irsend.sendJVC(JVCPower, 16,1); // hex value, 16 bits, repeat
  //delayMicroseconds(50);
  delay(2000);
}

Bene…ora non credo che PanasonicAddress, PanasonicPower siano universali…(anche perchè ho provato e non funzionano) e quindi ho pensato di seguire la guida del link sopra per ricavarmeli…
che ne pensate?

uff! Allora ho rifatto i calcoli a mano seguendo la guida suddetta…e mi esce proprio C4D364800004…che è proprio il code che mi dava, quindi i conti tornano:

64800004
Decoded PANASONIC - Address: C4D3 Value: 64800004 (48 bits)
Raw (100): -21006 3500 -1650 450 -1250 500 -1200 500 -350 500 -350 500 -400 500 -1200 450 -400 500 -350 500 -1200 500 -1200 500 -400 500 -1200 500 -350 500 -350 500 -1200 500 -1250 450 -400 500 -1200 500 -1200 500 -350 500 -350 550 -1200 500 -350 500 -350 500 -1200 500 -350 500 -350 500 -400 500 -350 500 -350 500 -350 500 -350 500 -350 550 -350 450 -400 500 -350 500 -350 500 -400 450 -400 450 -400 500 -350 500 -350 500 -350 500 -400 500 -350 500 -1200 500 -350 500 -350 500

a questo punto ho sbagliato lo schema? ho usato un semplice led ir (anodo pin3, catodo GND)…ricordo che per la trasmissione, secondo libreria, il pin3 e quello da usare…

in definitiva il codice che ho usato:

/*
 * 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
 * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
 */
#include <IRremote.h>
 
#define PanasonicAddress      0x4004     // Panasonic address (Pre data) 
#define PanasonicPower        0x100BCBD  // Panasonic Power button

#define JVCPower              0xC5E8

IRsend irsend;

void setup()
{
}

void loop() {
  irsend.sendPanasonic(0xC4D36480, 0x00040000); // (32 bit il primo + 16)->utili il resto di riempimento 
  
  //irsend.sendJVC(JVCPower, 16,0); // hex value, 16 bits, no repeat
  //delayMicroseconds(50); // see http://www.sbprojects.com/knowledge/ir/jvc.php for information
  //irsend.sendJVC(JVCPower, 16,1); // hex value, 16 bits, repeat
  //delayMicroseconds(50);
  delay(2000);
}

ho provato con la fotocamera ed il led si accende...quindi no problemi hardware...

Come hw non dovresti avere problemi, anche perchè se con lo sketch che spedisce il telecomando non funziona, il condizionatore qualcosa riceve.

Non mi convince il comando che usi, sendPanasonic,
Dentro la libreria vedo:

void IRsend::sendPanasonic(unsigned int address, unsigned long data) {
...
    for(int i=0;i<16;i++)
    {  mark(PANASONIC_BIT_MARK);
        if (address & 0x8000) {

Una mappatura sul primo parametro, con 0x8000. Secondo me il primo parametro è solo 0xC4D3

Hai provato con: sendPanasonic(0xC4D3,0x64800004) per accendere
e sendPanasonic(0xC4D3,0x64800000) per spegnere ?

grazie per la risposta ma, dopo una notte insonne :astonished: ho trovato questo

http://forum.arduino.cc/index.php?topic=151199.0

il mio stesso problema e riceve la stessa cosa...lui alla fine ha imprementato sendMitsubishi...ho provato a fare le modifiche del caso ma non va(tanto per dire lui passa alla funct 4 param e invece ne richiede 5) vabbè...ho provato a chiedere consiglio lì....sto aspettando...Comunque amici, la cosa è piu' dura del previsto! Cosa ne pensate del link?

da quanto ho potuto capire il problema è sulla dim di rawbuf che di default è 100...nel cio caso il codice continua e quindi lo spezza...