Copiar y enviar codigo infrarrojo desde arduino

Hola, me presento.
Soy Jaime Padilla, nuevo en arduino, pero con algun que otro pinito ya hecho.
Estoy intentando controlar mi hogar desde mi telefono movil, cosa que ya tengo casi conseguido, a excepción de los codigos infrarrojos del mando a distancia de los aires acondicionados.

No consigo enviarlos. O si los envio no se si sera problema del led, o del codigo. La cuestion es que no logro encender los aparatos, aunque si capturo los codigos con el sketch de decodificación.

Agradeceria ayuda de alguien experto en el tema. Muchas gracias de antemano.
Me gustaria no quedarme estancado en este apasionante mundo de arduino.

Y que buscaste en el foro?
Algo que hubieras hecho de haber leído las normas del foro, porque tu consulta está ampliamente respondida.
Ve a Search (arriba derecha) y busca aire acondicionado y verás de qué hablo.

Perdon, es que soy nuevo en esto. Me pondre haber que encuentro por otro sitio. Gracias.

Busca domótica, busca automatización, esp8266, wifi, todos temas que sirven a tus fines.

Hola Surbyte. Llevo varios dias intentando enviar codigos IR desde mi arduino.
He logrado encender y apagar la tele de casa. Pero por mas que busco información no logro encender ninguno de los aparatos de aire acondicionado que tengo en el hogar.

El código que uso es el siguiente:

#include <EEPROM.h>
#include <SoftwareSerial.h>
#include <DHT.h>
#include <IRremote.h>

IRsend irsend;
SoftwareSerial wifi(5,4); // RX, TX
DHT dht(6, DHT11);

const int             ir = 3;
const int         sensor = 6;

const int          luz_1 = 7;
const int detector_luz_1 = 8;

const int          luz_2 = 9;
const int detector_luz_2 = 10;

const int          luz_3 = 11;
const int detector_luz_3 = 12;

int estado_luz_1 = LOW;
int estado_luz_2 = LOW;
int estado_luz_3 = LOW;


void setup()
{
Serial.begin(9600);
wifi.begin(9600);
dht.begin();
 
  pinMode(sensor, INPUT);
  pinMode(luz_1, OUTPUT);
  pinMode(detector_luz_1, INPUT);
  pinMode(luz_2, OUTPUT);
  pinMode(detector_luz_2, INPUT);
  pinMode(luz_3, OUTPUT);
  pinMode(detector_luz_3, INPUT);
  pinMode(ir, OUTPUT);       

  digitalWrite (luz_1, EEPROM.read(0));
  digitalWrite (luz_2, EEPROM.read(1));
  digitalWrite (luz_3, EEPROM.read(2));

sendCommand("AT+RST\r\n",2000);
//sendCommand("AT+CWMODE=1\r\n",1000);
//sendCommand("AT+CWJAP=\"rose\",\"\"\r\n",10000);

sendCommand("AT+CIFSR\r\n",1000);
sendCommand("AT+CIPMUX=1\r\n",1000);
sendCommand("AT+CIPSERVER=1,80\r\n",1000);
Serial.println("Server Ready");
}

void loop() 
{
   if   (digitalRead(detector_luz_1) == LOW)
        {estado_luz_1 = LOW;}
  else  {estado_luz_1 = HIGH;}
     
 
  if   (digitalRead(detector_luz_2) == LOW)                         
       {estado_luz_2 = LOW;}
  else {estado_luz_2 = HIGH;}                    

   
  if   (digitalRead(detector_luz_3) == LOW)
       {estado_luz_3 = LOW;}
  else {estado_luz_3 = HIGH;}

  int h = dht.readHumidity();
  int t = dht.readTemperature();


if(wifi.available())
{
String content;
if(wifi.find("+IPD,"))
{
delay(100);
int connectionId = wifi.read()-48;
wifi.find("luz_");

int pinNumber = (wifi.read()-48);
int secondNumber = (wifi.read()-48);

if(secondNumber>=0 && secondNumber<=9)
{pinNumber*=10;
 pinNumber +=secondNumber;}

if (pinNumber == 1)
   {digitalWrite (luz_1, estado_luz_1);
   EEPROM.write(0, estado_luz_1);
   content += "LA LUZ 1 ESTA ";
     if  ((estado_luz_1)==HIGH)
         {content+= "APAGADA";}
     else{content += "ENCENDIDA";}}

if (pinNumber == 2)
   {digitalWrite (luz_2, estado_luz_2);
    EEPROM.write(1, estado_luz_2);
    content += "LA LUZ 2 ESTA ";
      if  ((estado_luz_2)==HIGH)
          {content+= "APAGADA";}
      else{content += "ENCENDIDA";}}

if (pinNumber == 3)
   {digitalWrite (luz_3, estado_luz_3);
    EEPROM.write(2, estado_luz_3);
    content += "LA LUZ 3 ESTA ";
        if  ((estado_luz_3)==HIGH)
            {content+= "APAGADA";}
        else{content += "ENCENDIDA";}}


if (pinNumber == 4)
  {content += "LA TEMPERATURA ES DE ";
   content += t;
   content += " GRADOS";}

if (pinNumber == 5)
  {content += "LA HUMEDAD ES DEL ";
   content += h;
   content += " %";}

if (pinNumber == 6)
  {content += estado_luz_1;
   content += ",";
   content += estado_luz_2;
   content += ",";
   content += estado_luz_3;
   content += ",";
   content += t;
   content += ",";
   content += h;}

if (pinNumber == 7)
    {for (int i = 0; i < 3; i++)
         {
          unsigned int raw[100] = {8900,4500,550,1700,500,1750,500,600,550,650,500,650,500,600,550,600,550,1700,600,600,550,1650,600,1650,550,650,550,600,500,600,550,600,550,600,600,1700,550,550,600,1650,550,650,500,600,600,600,550,550,550,650,550,600,550,1650,550,600,550,650,550,600,550,1650,550,1700,550,550,650,550,600,550,550,600,550,650,550,550,600,550,550,600,600,600,500,600,550,600,550,600,600,600,550,550,550,600,550,600,600,500,550,};
          irsend.sendRaw(raw,100,38);
          delay(1500);
          content += "CODIGO ENVIADO";}}

  
sendHTTPResponse(connectionId,content);  //send close command
String closeCommand = "AT+CIPCLOSE=";
closeCommand+=connectionId;
closeCommand+="\r\n";
sendCommand(closeCommand,1000);

}}}


String sendData(String command, const int timeout)
{
String response = "";
int dataSize = command.length();
char data[dataSize];
command.toCharArray(data,dataSize);
wifi.write(data,dataSize); // send the read character to the wifi
Serial.write(data,dataSize);
long int time = millis();
while( (time+timeout) > millis())
{
while(wifi.available())
{
// The esp has data so display its output to the serial window
char c = wifi.read(); // read the next character.
response+=c;
}
}
Serial.print(response);
return response;
}

void sendHTTPResponse(int connectionId, String content)
{
// build HTTP response
String httpResponse;
String httpHeader;
// HTTP Header
httpHeader = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n";
httpHeader += "Content-Length: ";
httpHeader += content.length();
httpHeader += "\r\n";
httpHeader +="Connection: close\r\n\r\n";
httpResponse = httpHeader + content + " ";
sendCIPData(connectionId,httpResponse);
}

/*
* Name: sendCIPDATA
* Description: sends a CIPSEND=<connectionId>,<data> command
*
*/
void sendCIPData(int connectionId, String data)
{
String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=data.length();
cipSend +="\r\n";
sendCommand(cipSend,1000);
sendData(data,1000);
}

String sendCommand(String command, const int timeout)
{
String response = "";
wifi.print(command); // send the read character to the wifi
long int time = millis();
while( (time+timeout) > millis())
{
while(wifi.available())
{
// The esp has data so display its output to the serial window
char c = wifi.read(); // read the next character.
response+=c;
}
}
//Serial.print(response);
return response;
}

y para capturar los codigos de los mandos uso este otro:

// If one keypress results in multiple codes being output, then

// change in IRremoteInt.h:

// #define _GAP 50000


#include <IRremote.h>


int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;


void setup()

{

  Serial.begin(9600);

  irrecv.enableIRIn(); // Start the receiver

}


int c = 1;


void dump(decode_results *results) {

  int count = results->rawlen;

  Serial.println(c);

  c++;

  Serial.println("For IR Scope: ");

  for (int i = 1; i < count; i++) {

   

    if ((i % 2) == 1) {

      Serial.print("+");

      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);

    }

    else {

      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);

    }

    Serial.print(" ");

  }

  Serial.println("");

  Serial.println("For Arduino sketch: ");

  Serial.print("unsigned int raw[");

  Serial.print(count, DEC);

  Serial.print("] = {");

  for (int i = 1; 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.print("};");

  Serial.println("");

  Serial.print("irsend.sendRaw(raw,");

  Serial.print(count, DEC);

  Serial.print(",38);");

  Serial.println("");

  Serial.println("");

}


void loop() {

  if (irrecv.decode(&results)) {

    dump(&results);

    irrecv.resume(); // Receive the next value

  }

}

El led IR lo tengo conectado al pin 2 de mi arduino nano y cuando lo compruebo con una camara sale perfectamente destellando al recibir la orden. Además he hecho la prueba de recibir el codigo que se emite desde mi arduino al monitor serie y coincide con el que emite el control remoto.

¿Existen distintos tipos de leds IR y estare usando uno que no es compatible con los receptores de los aparatos de aire acondicionado?.

¿Sera la frecuencia de emision?. En tal caso, ¿como podria averiguar la frecuencia con la que emite los controles de los aparatos?.

Estoy estancado aqui y quisiera saber si a alguien le ha pasado algo similar y como logro solucionarlo.
Un saludo y muchisimas gracias.

Hola jjpadillasanzltr, esperaba que no te fueras fuera del foro. En el sentido de que si usas Search (arriba derecha), y pones aire acondicionado hay muchos que intentaron lo mismo que tu.

Vamos a comenzar desde 0.
Primero, que marca es tu aire acondicionado? Eso debiste postearlo. Hay temas en este foro que se encuentran mas fácilmente por ese lado.
Aún así mira esto, solo son respuestas a Aire acondicionado. No he visto sus contenidos, pero es a lo que me refiero. Mucha información en el foro y todos del 2014.. asi que te queda mucho para revisar.

Domotica Aire Acondicionado LG
Conectar arduino a control del aire acondicionado central
[Arduino + IR] Problemas al clonar el mando (Airzone) de mi AACC