Enviando señales IR a Robosapien usando Arduino

1

Estoy intentando enviar comandos a un Robosapien (primera generación) usando un LED IR conectado a un Arduino. He visto páginas web sobre cómo conectar un microcontrolador directamente al juguete, pero lo que quiero hacer es enviar comandos a través de IR.

Encontré un artículo de K. Smith que mencionó que los comandos de IR enviados por el control remoto Robosapien toman la siguiente forma:

Para enviar el código hexadecimal 85 :

  

La señal IRout se mantiene alta hasta que se envía una señal. Entonces una cadena de   Se envían cinco ceros para indicar que se acerca un comando. Entonces el código hexadecimal   se envía, pero en lugar de enviar un "1", se envía un "1110" y en lugar de   se envía un ‘0’ a ‘10’. Entonces $ 85 se ve así:

Binary:     1    0  0  0  0  1    0  1
Robosapien: 1110 10 10 10 10 1110 10 1110

Así que probé el siguiente código:

int bitTime=833; 
int IROut =  4; 

// The setup() method runs once, when the sketch starts

void setup()   {                
  // initialize the IR digital pin as an output:
  pinMode(IROut, OUTPUT);      

  Serial.begin(9600);
}

void test()
{
  // output high
  digitalWrite(IROut,HIGH);
  delay(1000);

  // 5 zeros
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);

  // send 1110 10 10 10 1110 10 1110

  // 1110
  digitalWrite(IROut,HIGH);
  delayMicroseconds(3*bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  // 10
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  // 10
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  // 10
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  // 1110
  digitalWrite(IROut,HIGH);
  delayMicroseconds(3*bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  // 10
  digitalWrite(IROut,HIGH);
  delayMicroseconds(bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);
  // 1110
  digitalWrite(IROut,HIGH);
  delayMicroseconds(3*bitTime);
  digitalWrite(IROut,LOW);
  delayMicroseconds(bitTime);

   // output high
  digitalWrite(IROut,HIGH);
  delay(1000);
}

void loop()                     
{ 
  test();
}

Pero desafortunadamente no recibo ninguna respuesta de Robosapien. ¿Qué estoy haciendo mal?

    
pregunta M-V

1 respuesta

1

Un tiempo de bit de 833 µs implica una velocidad de datos de 1200 bps. No sé nada acerca de Robosapien, pero mi primer pensamiento es que esta señal posiblemente sea la codificación (envolvente) impuesta a una señal portadora IR de frecuencia más alta (por ejemplo, 38 kHz).

¿Puede proporcionar un enlace al artículo de K. Smith como referencia?

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas