Autor Tema: Crear un Control Remoto IR  (Leído 9220 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Crear un Control Remoto IR
« en: 23 de Junio de 2006, 18:34:54 »
Hola saludos, acabo de concluir con un proyecto de tranmisión por RF, me parecio de maravilla, ahora se me ha metido a la cabeza hacerlo por IR.

para RF use modulos de tx y rx TWS-433 y RWS-433 de Centronics; ahora pienso que debe existir algo similar para hacerlo con IR, para lograr ese alcance, como lo hago?? existen modulos de tx y rx en IR?? cuales son algunos?? o que debo hacer?? muchas gracias chao.
.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Crear un Control Remoto IR
« Respuesta #1 en: 23 de Junio de 2006, 18:43:25 »
Hola Cryn, existen en el mercado modulos receptores IR, los tansmisores los debes hacer vos ya que solo son un led infrarrojo, dos resistencias y un transistor , no recuerdo alguno en este momento, pero ya te aseguro que no lograras el mismo alcance que as conseguido con los de RF, el receptor de IR solo posee 3 pines, 2 de la alimentación y el restante es la salida del dato que entrarás de manera directa al PIC y este se encargará de interpretar el codigo, es muy similar el uso de los RF.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Crear un Control Remoto IR
« Respuesta #2 en: 25 de Junio de 2006, 15:04:49 »
Hola saludos muchas gracias por la respuesta, pues tengo algunas inquietudes mas sobre el tema, primeramente, no tendrias un esquema tanto del emisor como del receptor? y es importante la frecuencia de trabajo?? ya que vi algunos codigos para controles remotos y unos trabajan en una frec y otros en otra y bueno como adaptar ello por ejemplo en el receptor y tb como hacerlo en el emisor; porque pretendo usar un receptor simplemente programado por mi, y usar como emisor un control remoto sony, como adaptar las frecuencias, porque en la decodificación no creo tener problemas ya que de manera similar lo hice en Rf (con ayuda de posts del foro).
.

Desconectado patolinec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 206
Re: Crear un Control Remoto IR
« Respuesta #3 en: 25 de Junio de 2006, 15:14:12 »
Hola pues el pana Manolo(Nocturno) desarrollo un proyecto muy bueno sobre eeso aqui la direccion:

http://manolo.auna.com/proyectos-tsop.html
Casi me maté pero ahora estoy de nuevo vivo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Crear un Control Remoto IR
« Respuesta #4 en: 29 de Junio de 2006, 17:40:59 »
gracais por el link, reinteresante, algunos aportes mas?? osea existen otros detectores de infrarrojos, porque ese no lo encontre aca por mi pais (Bolivia), alguien sabe algunos codigos mas? gracias
.

Desconectado piclord

  • PIC12
  • **
  • Mensajes: 52
Re: Crear un Control Remoto IR
« Respuesta #5 en: 30 de Junio de 2006, 00:04:53 »
Bueno, si vas a usar un mando sony, deberas entender el codigo SIRC (12/15/20 bits)...luego, los receptores infrarojos, la mayoria trabaja en 38/40 Khz...que es lo normal....Ahora, para transmitir señales en el mismo formato usando fotodiodo emeisor, deberas generar una eñal modulada en dicha frecuencia para representar un 1 o 0...(los receptores tienen un margen de 400/800 us de la señal modulada para detectar un 1 o un 0)....

A 40 Khz, el perido de cada pulso es de 25us...esa señal debes hacerla durar 600us en caso de un 0, y 1200us en caso de un 1. El receptor infrarojo tien en su salida 5 volts en caso de ausnecia de señal, y baja a 0 volts encaso de recivir un pulso...de modo que los receptores por lo general invierten la señal...si quieres mantener el orden original, deberars usar un transistor emisor comun con salida en colector...

Saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Crear un Control Remoto IR
« Respuesta #6 en: 30 de Junio de 2006, 07:48:24 »
Como te comentan, hay muchos protocolos y muchas frecuencias distintas de modulación usados por distintos fabricantes.

En esta página no están todos, pero sí los más importantes:
http://www.xs4all.nl/~sbp/knowledge/ir/ir.htm

De ahí fue donde conseguí la información para el proyecto que te han linkado más abajo y que, por cierto, ha cambiado de dirección. Ahora lo tengo ubicado en:
http://elrebujito.es/modules.php?name=News&file=article&sid=90&mode=&order=0&thold=0

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Crear un Control Remoto IR
« Respuesta #7 en: 01 de Julio de 2006, 20:30:56 »
Gracias por las respuestas, mirando por mi casa veo que tengo muchos controles sony, asi que quiero usar un detector de infrarrojos para sony, supongo que tendrá la codificación SIRC? ya la vi y la analice, como dije ya tuve experiencia con la RC-5, asi que no tuve problemas para entender la SIRC, como saber si son 12/15 ó 20 bits los de mi control? y bueno ahora definido todo esto aparte del detector usado por el link que me dejaron, hay algun otro que pueda usar (codigos de otros sensores IR), ya saben para buscarlo por mi pais; y no tuvieran aparte de lo anterior un esquema pequeño (o grande, no importa) para un transmisor IR con protolo Sony SIRC (usando PIC16f877a), con su modulador y toda la cosa, o algo para guiarse talvez con otro protocolo pero bueno la idea de que usar, osea conexiones, valores de componentes, etc?
muchas gracais por la ayuda.
.

Desconectado piclord

  • PIC12
  • **
  • Mensajes: 52
Re: Crear un Control Remoto IR
« Respuesta #8 en: 02 de Julio de 2006, 00:25:11 »
Mira
Para capturar las tramas puedes usar el sgte codigo (basado en redraven: http://picmania.garcia-cuervo.com/Proyectos_AUX_Botones.htm).

Mi experiencia me dice que un mando sony envia tramas de 12 bits para la mayoria de las teclas. Sin embargo tambien implementa tramas de 15 y 20 bits....de modo que se aconseja capturar las tramas de todos los botones...Para ello se puede utilizar la interrupcion externa por RB0 usando ambos flancos (rising/falling)..asi se puede obtener los tiempos en que la señal se mantuvo en HIGH como asi tambien cuando estubo en LOW...al momento de producirse la interrupción, se debe capturar el valor de TMR0 y resetearlo nuevamente, para que comience a incrementarse y capturar el tiempo en el próximo flanco....es sencillo de implementar....

Se usa TMR0 con DIV16 para adecuar los tiempos y los valores maximos del TMR0....si consideramos que SIRC estipula 600us para un 0, y 1200 us para un 1, y 600us de tiempo entre acda pulso...vemos que div16 es suficiente....ahora, el receptor infrarojo (yo he usado el IRM8601) responde con pulsos de entre 400/800 us.....asi que hay un margen sobre el cual se maneja el TMR0....este codigo me ha funcionado bien..capturé las tramas del mando de mi equipo de audio sony genezzi...un mandop RM-SC3.....

Pienso que si se desea utilizar funciones relacionadas con cierttos botones, no es necesario conocer el codigo sirc...sino mas bien capturas las tramas y ordenarlas en un buffer en modo LSB/MSB first según se desee...y luego comparar con el valor guardado en la eeprom...y listo...

El programa captura los tiempo HIGH y LOW y los almacena en 2 buffer, tambien cuenta el numero de interrupciones...luego los muestra por RS232 al PC.....
Para saber si es un 1 o un 0...basta con multiplicar el valor del TMR0 capturado por 16us y ya sabras de que se trata...
Generalmente, un 0 da un valor de 30 a 45 del TMR0, y el doble para un 1, osea entre 65/90...para el star bit da entre 130/145....recordar que el receptor tiene un margen de 400/800us, y segun eso el valor de TMR0 varia....

Para que el codigo sirva debes usar un transistor npn emisor comun salida colector....de lo contrario cambiar la asignacion en los buffer..


Suerte..

Código: [Seleccionar]
#include <16F648A.h>
#device *=16      //    Full RAM Pointer
#FUSES NOWDT        // Watch Dog Timer
#FUSES PUT        // Power Up Timer
#FUSES NOPROTECT  //    Code not protected from reading
#FUSES BROWNOUT //    Reset when brownout detected
#FUSES NOMCLR       // Master Clear pin enabled
#FUSES NOLVP      // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES INTRC_IO   // Internal RC Osc, no CLKOUT
#FUSES NOCPD      // No EE protection
#use delay(clock=4000000,RESTART_WDT)
#use rs232(baud=19200,parity=n,xmit=PIN_B2,rcv=PIN_B1,bits=8)

char Command=0;
char Keypress=0;
int i=0;             //Contador genérico
int uTimeUp=0;
int uTimeDown=0;
int TimesUp[72];     //almacena valor del TMR0 cuando RB0=1
int TimesDown[72];   //almacena valor del TMR0 cuando RB0=0
int status=0;
                     //Selecciona el flanco a monitorear
int flanco=1;        //Por defecto el de subida
long int n_int=0;         // Contador del número de interrupciones ocurridas

void Transmission(void);   //declara la funcion Transmision()
void clear_buffer(void);

#int_rda
void serial_isr() {

  Keypress=0;
  if(kbhit()){
    Keypress=getc();
    if(Keypress!=0){
      Command=Keypress;
    }
  }
}

#int_EXT
EXT_isr() {

  ++n_int;                                      // Autoincremento del contador de interrupciones
   //clear_interrupt(int_ext);                    // Limpia el FLAG indicador de
                                                // interrupción externa
  switch(flanco){                               //

    // Flanco de bajada
    case 0: TimesUp[uTimeUp++]=GET_RTCC();      // Obtiene el tiempo del pulso Alto 1.
            flanco=1;
            ext_int_edge(L_TO_H);               // Próximo flanco que se espera, L_TO_H
            set_timer0(0);                      // Reset del contador TMR0
            break;

    // Flanco de subida
    case 1: TimesDown[uTimeDown++]=GET_RTCC();  // Obtiene el tiempo del pulso bajo 0.
            flanco=0;
            ext_int_edge(H_TO_L);               // Próximo flanco que se espera, H_TO_L
            set_timer0(0);                      // Reset del TMR0 para contar el largo del pulso 1

            break;
  }

  //enable_interrupts(INT_EXT);
//}
}




void main()
{

   setup_counters(RTCC_INTERNAL,RTCC_DIV_16);      //TMR0 se incrementa cada 16us
                                                   //de modo que nunca se desborda
                                                   //TMR0 se incrementa cada 16us=0,016ms
                                                   //2,4ms/0,016ms=150
   set_tris_b(0b11111011);                       //B1/B0=entrada,B2=salida
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   //disable_interrupts(INT_RTCC);                 // Deshabilita int por TMR0
   //delay_ms(3000);
   ext_int_edge(L_TO_H);                           //Para capturar el start bit
   enable_interrupts(INT_RDA);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   flanco=1;


   clear_buffer();  //limpia ambos buffer


  printf("\n\rPresione el Mando ...\r\n\n");

  set_rtcc(0);

  do{                                     // Bucle do/while, se ejecuta permanentemente

    if(Command!=0){
      Command=0;
      Transmission();
    }
  } while (TRUE);                         //Bucle infinito
}

void clear_buffer(void){
   for(i=0;i<72;i++){
    TimesUp[i]='\0';                      // Limpia ambos buffers con NULL
    TimesDown[i]='\0';
    }
}

void Transmission(void){

  printf("\n\rResultados:\n\n\r");

  printf("Total Interrupciones: %2Lu\r\n\n",n_int);


  printf("\n\r#  Down Table:       Up Table:\n\n\r");
  for(i=0;i<72;i++){
     printf("%2u Valor: %3u        Valor: %3u\n\r",i,TimesDown[i],TimesUp[i]);
  }
  clear_buffer();
  ext_int_edge(L_TO_H);                           //Para capturar el start bit. Reconfigura en caso de error.
  flanco=1;
  n_int=0;
  printf("\n\rPresione el Mando ...\r\n");
  status=input(PIN_B0);
  printf("RB0=%2u\n\r",status);
}
« Última modificación: 06 de Julio de 2006, 00:33:10 por piclord »

Desconectado locolc

  • PIC10
  • *
  • Mensajes: 1
    • Titus Chatarra Site
Re: Crear un Control Remoto IR
« Respuesta #9 en: 06 de Agosto de 2006, 10:41:46 »
Gente aca les dejo un link de donde saque bastante info para mi control IR

http://www.lirc.org

espero que les sirva jeje  :-/
Todavia no estoy del todo loco............... creo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Crear un Control Remoto IR
« Respuesta #10 en: 19 de Agosto de 2006, 00:54:18 »
Hola saludos de vuelta con este tema, muchas gracias por todas las respuestas me han servido de mucho, usare un control remoto sony de tv, asi qeu creo que usa 7 bits a 38 Khz segun datos que recoelecte por internet, ahora he tenido un problema, he conseguido varios codigos de detectores aca por internet de los enlaces que me dieron y de otros lados mas: son estos: SFH506-xx TFMS5xx0 TK18xx TSOP12xx TSOP48xx TSOP62xx GP1UD26xK GP1UD27xK GP1UD28xK GP1U581Y HRMxx00 IRM8601S son todos correctos??? bueno creo que si son todos correctos ya que los saque como los mencione de la red, pero lamentablemente ninguno de ellos esta disponible en mi pais (Cochabamba-BOLIVIA) alguien que sea de aca y tenga unn codigo que exista en la venta local, se lo agradecere bastante, y bueno si alguien conoce de algun codigo que no tenga y que crean qeu me puede servir se los agradecere tb; y en el peor de los casos habra alguna forma de reemplazar este detector (aunque creo que no sea posible ya que viendo la hoja de datos esta casi todo ahi dentro), nose con componentes haciendo un ciercuito qeu haga el mismo trabajo, se podra???

Una consulta mas, usare el integrado L293x; yo quiero usar el L293D, porque lleva diodos internos de protección, y nose si el L293B lleva los diodos (bueno todo eso solo para ahorrar espacio); o puedo usar el B sin diodos?? o si o si se colocan diodos si es qeu no los lleva internamente (porque en la hojas de datos no especifica que los tenga), pienso controlar dos motores dc de 5v con este integrado.

Muchas gracias por la ayuda. :)
.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Crear un Control Remoto IR
« Respuesta #11 en: 19 de Agosto de 2006, 18:40:09 »
alguien tiene un diagrama de un circuito que maneje un led infrarrjo, con su modulador para 38khz?? para simular un control remoto sony o philips rc-5?? m elo pasa por favor gracias, se lo agradecere mucho
.


 

anything