Want create site? Find Free WordPress Themes and plugins.

Buenas,

Me presente hace un tiempo y poco he podido utilizar o ponerme con ello. Ahora que vino el calor quería tener controlado la temperatura de casa y poder poner el aire acondicionado antes de llegar yo.

Como muchos saben los aires utilizan códigos un poco especiales. demasiados largos y pocas librerías pueden con ellos. Hay que utilizar códigos RAW y perfecto.

Después de darle vueltas al código lo he podido adaptar para que envie los códigos y pueda encender y apagar el aire desde fuera de casa.

Creo que nadie había puesto esto, si esta pido perdón, pero en su momento lo busque y no vi nada.

1º Hay que modificar un valor en la libreria IRremote. Vete a las librerias y abre el archivo IRremoteInt.h, busca la linea:
#define RAWBUF  101  // Maximum length of raw duration buffer

Modifica esta valor al doble, yo creo que lo tengo puesto en 400, tengo varios pc´s y no tengo sincronizadas las librerias.

Con esto ya podemos recibir los códigos perfectamente con el código que pongo seguidamente.

Code:
#define LEDPIN 13
//you may increase this value on Arduinos with greater than 2k SRAM
#define maxLen 800

volatile  unsigned int irBuffer[maxLen]; //stores timings – volatile because changed by ISR
volatile unsigned int x = 0; //Pointer thru irBuffer – volatile because changed by ISR

void setup() {
 Serial.begin(115200); //change BAUD rate as required
 attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//set up ISR for receiving IR signal
}

void loop() {
 // put your main code here, to run repeatedly:

 Serial.println(F(“Press the button on the remote now – once only”));
 delay(5000); // pause 5 secs
 if (x) { //if a signal is captured
   digitalWrite(LEDPIN, HIGH);//visual indicator that signal received
   Serial.println();
   Serial.print(F(“Raw: (“)); //dump raw header format – for library
   Serial.print((x – 1));
   Serial.print(F(“) “));
   detachInterrupt(0);//stop interrupts & capture until finshed here
   for (int i = 1; i &t x; i++) { //now dump the times
     if (!(i & 0x1)) Serial.print(F(“-“));
     Serial.print(irBuffer[i] – irBuffer[i – 1]);
     Serial.print(F(“, “));
   }
   x = 0;
   Serial.println();
   Serial.println();
   digitalWrite(LEDPIN, LOW);//end of visual indicator, for this time
   attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//re-enable ISR for receiving IR signal
 }

}

void rxIR_Interrupt_Handler() {
 if (x &t maxLen) return; //ignore if irBuffer is already full
 irBuffer[x++] = micros(); //just continually record the time-stamp of signal transitions

}

Cuando ya tenemos los códigos, ahora modificamos el .ino de nuestro proyecto. Modificamos estas dos líneas en la primera pestaña. Para poder utilizar la otra librería que YO HE PROBADO Y FUNCIONA CON ESTOS CODIGOS. Seguro que investigando se puede con otra o la que viene en nuestro proyecto.

Code:
#if defined (EXC_LED_IR)  || defined (EXC_IR_RECIVE)
//#include &tIRremote.h&t
#include &tIRLib.h&t
#endif

ahora también hay que modificar esta línea.

Code:
#ifdef EXC_LED_IR  
 //IRsend irsend;
IRsend My_Sender;
#endif

Con esto ya podemos ir a la pestaña de “InfraRedFunction” o en nuestro “Arduino Automatión” en el menú del mando y modicarlo a nuestros códigos de esta forma. Yo lo he dejado encender y apagar, que son los códigos que saque en su momento.
En el apartado “EXC_LED_IR”, dentro de “SendIr”. Lo cambiamos por esto.

Code:
   int khz=38;//modulation frequency of 38kHz
   //Encender
   unsigned int  rawData1[] = {4360, 4404, 560, 1588, 560, 544, 536, 1588, 560, 1592, 560, 516, 560, 540, 532, 1592, 560, 540, 536, 516, 560, 1588, 560, 520, 556, 516, 560, 1588, 564, 1592, 560, 516, 560, 1592, 556, 540, 536, 516, 560, 1588, 564, 1588, 560, 1592, 560, 1592, 560, 1592, 556, 1592, 560, 1592, 560, 1588, 560, 516, 560, 516, 560, 540, 536, 540, 536, 540, 532, 520, 556, 1592, 560, 1588, 560, 516, 560, 1592, 560, 516, 556, 520, 556, 540, 536, 540, 536, 512, 560, 544, 532, 1588, 564, 540, 536, 1588, 560, 1588, 564, 1588, 560, 1592, 560, 5172, 4384, 4376, 560, 1592, 560, 520, 556, 1592, 556, 1592, 560, 540, 536, 540, 536, 1588, 560, 516, 560, 520, 552, 1592, 560, 516, 560, 516, 560, 1592, 556, 1592, 560, 520, 556, 1588, 564, 516, 560, 516, 560, 1588, 560, 1592, 560, 1588, 560, 1592, 560, 1592, 560, 1588, 560, 1592, 560, 1588, 560, 516, 560, 516, 560, 540, 536, 540, 536, 516, 556, 540, 536, 1592, 560, 1588, 560, 540, 536, 1592, 560, 540, 532, 520, 556, 540, 536, 516, 560, 520, 556, 512, 564, 1588, 560, 516, 560, 1588, 560, 1592, 560, 1588, 564, 1588, 560};      
   //Apagar
   unsigned int  rawData2[] = {4360, 4404, 560, 1592, 556, 544, 532, 1592, 560, 1592, 560, 516, 560, 540, 536, 1584, 564, 540, 536, 516, 560, 1592, 560, 516, 560, 516, 560, 1540, 612, 1588, 560, 512, 564, 1588, 564, 512, 564, 1592, 556, 1592, 560, 1592, 560, 1588, 564, 516, 560, 1588, 560, 1592, 560, 1592, 560, 540, 536, 520, 556, 516, 560, 520, 556, 1592, 560, 516, 560, 520, 552, 1592, 560, 1592, 560, 1592, 560, 516, 560, 516, 560, 516, 564, 536, 532, 520, 556, 516, 560, 516, 560, 512, 564, 1592, 560, 1588, 560, 1592, 560, 1592, 560, 1592, 560, 5172, 4364, 4400, 560, 1592, 560, 520, 556, 1592, 560, 1588, 564, 528, 544, 516, 560, 1588, 564, 516, 560, 516, 560, 1588, 560, 520, 556, 544, 532, 1588, 564, 1592, 560, 540, 536, 1588, 560, 516, 560, 1588, 564, 1592, 560, 1592, 556, 1588, 564, 516, 560, 1588, 560, 1592, 564, 1588, 560, 520, 556, 516, 560, 520, 556, 540, 536, 1588, 564, 516, 556, 516, 560, 1592, 560, 1588, 564, 1588, 560, 520, 556, 516, 560, 516, 560, 540, 532, 520, 556, 516, 560, 544, 532, 540, 536, 1588, 564, 1588, 560, 1592, 560, 1588, 564, 1588, 560};    
   switch (CommandNumber) {
   case 1:    
     //Encender
     My_Sender.IRsendRaw::send(rawData1, sizeof(rawData1)/sizeof(int), khz); //AnalysIR Batch Export – RAW
     delay(40);      
     break;
   case 2:    
     //Apagar
     My_Sender.IRsendRaw::send(rawData2, sizeof(rawData2)/sizeof(int), khz); //AnalysIR Batch Export – RAW
     delay(40);      
     break;
    }  
#ifdef EXC_IR_RECIVE
  irrecv.enableIRIn(); // Re-enable receiver
#endif

En la primera parte, generamos las variables por cada botón. Después vamos poniendo case3, case4 asi sucesivamente modificando cada variable para su case, por defecto vienen 19.

Seguro que se puede mejorar, pero funciona perfecto y poder encender el aire antes de llegar a casa con el programa directamente.

Espero que sirva de ayuda para esa gente que lo quieren para este calor.

Adjunto la librería a utilizar. Se utiliza el PIN 9 para el IRDA. No se si es asi en la librería que viene. Se puede cambiar por el que queramos en el fichero “IRLibTimer.h” en la línea

Code:
if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    //#define IR_SEND_TIMER1    11
    #define IR_SEND_TIMER2        9
    //#define IR_SEND_TIMER3    5
    //#define IR_SEND_TIMER4    6
    //#define IR_SEND_TIMER5    46

Un saludo.

Me acabo de dar cuenta que debería ir mejor en el El rincon del manitas, error mio. Si alguien lo puede mover estaría agradecido.

  IRLib-master.zip (Size: 1.22 MB / Downloads: 1)

Source: Foro Domotica
Control de aire acondicionado.

Did you find apk for android? You can find new Free Android Games and apps.

Estamos atualizando la pagina web en breve . estaremos 100% Descartar