Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   ROOMBA, SCOOBA, NAVIBOT, etc (http://foros.zackyfiles.com/forumdisplay.php?f=467)
-   -   Emisor de IR (Infrarrojos) para ROOMBA con PIC16F84 (http://foros.zackyfiles.com/showthread.php?t=570461)

ZackY 25/07/2007 17:00

Emisor de IR (Infrarrojos) para ROOMBA con PIC16F84
 
Desde hace algunos meses dispongo de uno de esos aspiradores autonomos (robotizados) ROOMBA. Como he visto que no hay mucha información en internet sobre el protocolo que se usa para transmitir los comandos IR a este aspirador, y aprovechando que estoy con un proyecto sobre éste, pongo aqui unas rutinas que he creado para enviar esos comandos IR con un PIC16F84.

El protocolo que usa para la emisión de estos comandos Infrarrojos (IR) es el siguiente:

Portadora de Frecuencia = 38 KHz (T = 26,31usg = Ton + Toff)
1 Lógico = 3 msg de envío de la portadora (ON) + 1 msg de OFF
0 Lógico = 1 msg de envío de la portadora (ON) + 3 msg de OFF

Por lo tanto, para enviar un "1 lógico" se deben enviar: 3msg/T = 114 pulsos (Ton+Toff) (3msg/26,31usg=114) y 1 msg a OFF.

Por lo tanto, para enviar un "0 lógico" se deben enviar: 3msg/T = 38 pulsos (Ton+Toff) (1msg/26,31usg=38) y 3 msg a OFF.

El comando CLEAR (comienza a aspirar) es el código 136 = "10001000"

Aquí va el programa que he creado para enviar el comando CLEAR y que el aspirador se ponga a funcionar.

Código:

program Envio_Comandos_ROOMBA
' Envios de comandos IR a ROOMBA
' *******************************************************************************
'  (c) Autor: ZackY - zackyzgz@yahoo.es
'
'-HARDWARE:
'    MCU: PIC 16F84A
'    Cristal: 4 Mhz
'    Diodo IR conectado a PORTA.1 (salida)
'    Pulsador conectado a PORTB.0 (entrada)
' *******************************************************************************
 Dim pulsado as byte

    'Sub-rutina para generar un 1 logico de trama IR
  Sub procedure Env_Uno()
    Dim i as byte
        For i=1 to 114          ' 3msg/26umg= 114 pulsos on-off
        Setbit(PORTA,1)
        Delay_us(12)          '  Ajuste: Debería ser 13usg, pero observando el osciloscipio
        Clearbit(PORTA,1)    '      ese valor se ajusta mejor
        Delay_us(2)            '  Ajuste: Debería ser 13usg, pero observando el osciloscipio
        next i                      '      ese valor se ajusta mejor
        Clearbit(PORTA,1)    ' 1msg a OFF
        Delay_ms(1)
    End sub

    'Sub-rutina para generar un 0 logico de trama IR
  Sub procedure Env_Cero
    Dim i as byte
        For i=1 to 38        ' 1msg/26umg= 38 pulsos on-off
        Setbit(PORTA,1)
        Delay_us(12)
        Clearbit(PORTA,1)
        Delay_us(2)
        next i
        Clearbit(PORTA,1)    ' 3msg a OFF
        Delay_ms(3)
  End sub


Main:
  TRISA = 0                ' PORTA.1 como Salida
  TRISB = 1                ' PORTB.0 como Entrada
  PORTA.1 = 0  ' Inicializo PORTA - Apago led
  PORTB.0 = 1  ' Inicializo PORTB - Entrada OFF
  pulsado = 0
Inicio:

  While true
    If PORTB.0 = 0 then    ' Envio comando CLEAR
        Env_Uno      'Envia 1
        Env_Cero    'Envia 0
        Env_Cero    'Envia 0
        Env_Cero    'Envia 0
        Env_Uno      'Envia 1
        Env_Cero    'Envia 0
        Env_Cero    'Envia 0
        Env_Cero    'Envia 0
        Delay_ms(32)
    end if
  Wend
End.

Este code esta probado y funcionando :). Si tenéis algun comentario o duda sobre el, podéis postearlo aqui.

nocturno66 24/08/2008 06:41

Inspirado por el mando de Zacky, desarrollé uno para mi Roomba basado en un PIC10F220.
Podéis verlo aquí: [B][URL="http://www.micropic.es/index.php?option=com_content&task=view&id=78&Itemid=1"]Sencillo mando IR para Roomba serie 500[/URL][/B]

[YOUTUBE]4SpEHAbt_5k[/YOUTUBE]

[URL="http://www.micropic.es/index.php?option=com_content&task=view&id=78&Itemid=1"]http://www.micropic.es/images/imagen...mbaFrontal.jpg[/URL]

ZackY 02/09/2008 12:22

Ei!, Me alegra que te fuera útil mi proyecto :). Ya he visto que está anunciándolo la web MicroPIC.

macguiwer 20/09/2008 22:48

hoy he conectado mi oscilo a un recptor IR y he comprovado la trama de los faros en modo puerta
y veo cosas raras
a ver he visto 2 tipos de tramas unas de 8 y otras de 16 digitos
y cada faro tiene su propia tipo de trama
ejemplo de mi faro 1
0011000100110000 y a veces 00110000
ejemplo faro 2
0011100100111000 y a veces 00111001
parece que entre tarma y trama espera 8 mS
en principio entre el modo pared y faro por lo menos al principio no hay diferencias (logicamente esta al pricipio en modo pared)
y estas senales eran sin la robotina cerca.
la idea seria desarollar nuestro propia pared virtual
lo que me despista es lo de la logitud de trama igual es un problema del triger del oscilo no se.
en realidad no consegi ver nada en el oscilo en modo "norma" desaparecia casi en seguida la trama, como es digital lo que hice fue capturar la señal y verla despues.
por cierto yo tengo el modelo 570 y tengo el mando a distancia yo creo que ese mando no es en infarojo es en radio ya que tengo la robotina debajo del sofa tapada por un cubre sofa (tengo que levantarlo para la vuelta a casa) y funciona perfectamente.

macguiwer 21/09/2008 09:54

bueno en los foros americanos he encontrado informacion sobre el tema hay dicen esto sobre las paredes virtuales
The virtual beam is a 500Hz pulse modulated on a 35Khz carrier pulse
luego esa señal que yo he pillado que es?
tengo hasta fotos de la pantalla del oscilo..................
la señal esa de los 500 Hz yo no la he visto por ningun lado.
y si lo que comento que se parece mucho a la del mando a distancia.
alguien puede repetir mis medidas.

ZackY 03/11/2008 22:41

Las paredes virtuales, por lo que yo se, no están codificadas, no emiten ningún código concreto ni variable. Simplemente como puedes leer, es una onda de 500Hz, modulada sobre una portadora de 35KHz. Por lo tanto, hay que usar un detector de 35Hz como "demodulador", y leer/detectar esa onda de 500Hz para saber que estamos recibiendo señal de la pared virtual, así de sencillo.

Reesit 24/04/2009 12:56

¡Buenos dias!
Entonces podemos programar un viejo telefono mobil con IR para utilizarlo.
Estaria muy interesado en el tema.

Muchas grácias

Reesit

carvelavega 21/05/2009 08:06

Me es dificil conseguir el PIC 10F222 ¿Se puede hacer con otro micro? ¿se puede programar con el TE20?

Gracias por vuestra ayuda

Insu 17/09/2009 14:43

HOla.

Me gustaria saber si para el modelo 530 sirven estas interesantes indicaciones.

Me gustaría hacerme un control remoto para poder integrar a mi querida Roomba en un sistema X10 y poder darle ordenes desde la playa o el trabajo ;)

Enhorabuena por la Web, me ha servido de mucha ayuda con mi Roombita y he leído muchos mensajes antes de comprarmela.

Gracias,

Insu.

Lepes 14/10/2009 15:23

No sé muy bien desde cuando, pero iRobot ha liberado un pdf "iRobot Roomba 500 series Open Interface Specifications", por supuesto en inglés.

[url]http://www.irobot.com/filelibrary/create/Create%20Open%20Interface_v2.pdf[/url]

smoussen 08/05/2010 17:30

Hola, este hilo ya es algo antiguo, pero yo por aqui no jeje asi que voy a ello con lo que pienso.

Primero, felicitar a Zacky y Nocturno por el estupendo trabajo de investigación y luego para macguiver, como he apuntado en otro hilo y bien dice maese Zacky, la pared virtual se trata de una señal de 500Hz modulada a 38Khz, lo he probado y funciona, pero veo una diferencia importante entre crear el rayo VW ó utilizar un Ligthouse en modo VW, pues la roomba al encontrarse con este último, la primera vez que se lo encuentra, se para delante de él durante unos segundos para establecer una comunicación, despues de detectado y asignado un codigo identificativo ya no se para cuando se lo encuentra, simplemente lo "esquiva" y sin embargo cuando creas un rayo VW, directamente lo esquiva, no se para delante para intentar comunicarse con él.

Esto significa que mientras la unidad LH no ha sido encontrada, emite algo mas que esa frecuencia de 500 Hz modulada, que le esta diciendo a roomba "escuchame, soy una unidad a la que le tienes que asignar un numero para poder identificarme", mas ó menos, de ahí que macguiver encuentre una trama que no sabe que es.

Ademas, no acabo de comprender de que forma se puede comunicar para identificar los LH si no vienen con un codigo predefinido, quizá por eso macguiver encuentra una trama diferente en cada unidad.

El protocolo para hacerlo podría ser:

1º- me pongo en marcha y envio orden de encendido a LHs via radio.
2º- a cada unidad LH que encuentro mediante IR, le asigno un codigo via radio y espero su respuesta de confirmación via IR.
3º-zona limpia, envio petición de cambio de zona al ultimo LH que he visto de los que tengo asignado un codigo, pues se supone que es del que mas cerca me encuentro.

No voy a seguir con los pasos por que se sale del tema, la cuestión es, si envío un codigo via radio, este debe de tener un destino concreto sino todos los LHs se dan por enterados con lo que reina la anarquía.

No se si van por ahi los tiros, espero que alguien me saque de dudas.

smoussen 03/07/2010 09:39

Hola clockk, yo tengo 5 Lighthouses y están todos modificados con un Pic para emitir un rayo VW puro en ese momento fantasma en que se desconectan por unos segundos, mira este hilo, que por cierto todavía no he completado.
[URL="http://foros.zackyfiles.com/showthread.php?t=620427"]http://foros.zackyfiles.com/showthread.php?t=620427[/URL]


La franja horaria es GMT +2. Ahora son las 20:24.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate