Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Traducción
Circuitos Taller Artesanía Cocinando Viviendo Fuera Profesores Iniciar sesión | Inscribirse
Ingeniería inversa: truco de automatización del hogar controlado por USB
Por chr en Circuitos > Microcontroladores 116,041 296 40 Presentado
Descargar Favorito
por chr
Más del
Seguir
autor:
Acerca de: Me gustan los microcontroladores y los LED :D Más acerca de chr »
¡Hackea un sistema domótico inalámbrico para controlarlo por USB usando dos
microcontroladores AVR!
https://www.instructables.com/id/Reverse-Engineering-RGB-LED-Bulb-with-IR-remote/
Hay dos formas de piratear un control remoto de RF para que sea controlado por una
computadora o un microcontrolador.
La manera genial:
la mayoría de los controles remotos de RF tienen un módulo separado para transmitir datos.
Este dispositivo generalmente tiene una línea VCC y GND y una línea de DATOS. Puede
transmitir fácilmente sus propios datos inalámbricos conectando un microcontrolador a la
línea DATA.
Sin embargo, para transmitir algo que los receptores inalámbricos puedan entender, primero
debe averiguar cómo se formatean y transmiten los datos inalámbricos.
Yo uso la Lógica de Saleae. ¡Esta es una herramienta increíble y he realizado algunos trucos de
ingeniería inversa con este dispositivo!
Compruébalo en http://www.saleae.com/logic/
¡Cuesta 149 USD pero es una buena inversión para cualquier hacker!
Necesitará:
● 1x kit domótico inalámbrico
● 1x caja de proyectos
● 1x conector USB tipo B
● 2 diodos zener de 3,6 v
● 1x diodo zener de 8.2v
● 1 transistor BC548
● Condensador cerámico 2x 22pF
● Condensador cerámico 2x 100nF
● 1 condensador de 4,7 uF.
● 1x condensador de 100uF
● 1x condensador de 470uF
● 1x condensador de 330uF
● 1x cristal de 12 MHz
● 2x LED con resistencia (utilicé 1k ohm)
● 2 resistencias 68R
● 1x resistencia 1k5
● 1x resistencia 2k2
● 1 resistencia de 1 m
● 1 inductor de 270uH
● 1 diodo 1N4004
● 1 microcontrolador ATmega8
● 1x protoboard. Tipo de ojo de soldadura, no stripboard.
Supuse que el control remoto tenía un módulo RF separado. Vamos a abrirlo y comprobar si
este es el caso.
¡Eeey! ¡Seguro que sí! El pequeño tablero verde dentro del control remoto es el módulo RF.
Era un poco difícil llegar a las conexiones con mi osciloscopio y las sondas del analizador lógico,
así que simplemente extendí las conexiones usando un cable de cobre de núcleo sólido.
El control remoto es alimentado por una batería de 9V. Mi analizador lógico solo está clasificado
para 5 voltios, por lo que quiero verificar qué sucede con la línea de DATOS antes de conectarlo
a mi analizador lógico.
Si la señal en la línea de DATOS es de 9 voltios, tengo que hacer algunos trucos para bajarla a 5V
para el analizador lógico.
Conecté una sonda de osciloscopio a la línea DATA y GND a la línea GND en el control remoto.
Ajusté el gatillo a dos voltios y presioné un botón. ¡Salen los datos! Dulce. ¡Esto parece muy
hackeable!
Resulta que la línea de datos es de solo 3 voltios. La distancia entre las líneas de puntos
horizontales en la pantalla del osciloscopio es de 2 voltios.
El módulo de RF parece un dispositivo bastante simple, así que supondré que puede manejar
tanto 5 voltios como 3. El microcontrolador funcionará a 5 voltios.
El osciloscopio es una gran herramienta, pero para ver qué está pasando realmente con esa
señal de datos, es mucho más fácil usar un analizador lógico.
El analizador lógico solo lee 0 y 1, por lo que no obtengo todo el ruido analógico que obtengo
en el osciloscopio, y está conectado a la computadora a través de USB, por lo que es mucho más
fácil de leer que la pequeña pantalla del osciloscopio.
Así que conecto la línea de DATOS al canal 1 de mi analizador lógico. Selecciono una tasa de
captura de 1 MHz, eso debería ser más que suficiente para esto.
El analizador lógico muestra 4 marcos distintos de datos. Al principio pensé que tal vez esto iba
a ser más complicado de lo que había anticipado. Pero para mi alivio, los 4 fotogramas eran
idénticos. Lo mismo sucedió con todos los demás botones del control remoto. Es probable que
los datos se transmitan 4 veces porque el enlace inalámbrico es intrínsecamente poco fiable :p
Así que hago zoom en uno de los fotogramas y veo que consta de pulsos de diferente longitud.
En este punto no tengo idea de qué es 0 y qué es 1.
Ok, en este momento solo tengo un montón de pulsos cortos y largos, ¡y no tengo idea de lo
que significa!
El control remoto tiene un pequeño botón debajo de la tapa de la batería. Si se presiona este
botón, tengo que volver a asociar todos los receptores con el control remoto. Si el control
remoto de su vecino está interfiriendo con sus luces, presione este botón para obtener una
nueva identificación aleatoria. Sospecho que presionar este botón crea algún tipo de código
aleatorio específico para ese control remoto.
Si eso es cierto, puedo usarlo para identificar al menos algunas partes de los datos.
Inicié el analizador lógico nuevamente y presioné ON para la lámpara uno 5 veces mientras
presionaba el botón de reinicio entre cada vez que presionaba la lámpara 1 ON.
Para que sea más fácil ver lo que estaba pasando, copié y pegué los marcos de datos en gimp y
los coloqué uno debajo del otro. En el analizador lógico se representan uno al lado del otro, lo
que dificulta bastante la comparación.
Por suerte, los chicos de Saleae habían pensado en esto. Ctrl+shift+m le permite copiar una
selección de la pantalla al portapapeles.
Como sospechaba, presionar el botón de reinicio cambió un número aleatorio dentro del
control remoto que se transmite con cada cuadro de datos.
El primer bit es siempre el mismo. Esto tiene sentido. Probablemente "despierte" a los
receptores o le diga que "¡Oye, aquí vienen los datos, prepárate!"
Los siguientes 12 bits consecutivos cambian cada vez que presiono el botón de reinicio. Marqué
los bits que cambiaron en rojo y los bits constantes en verde.
Parece que los datos de carga útil para cada cuadro son de 8 bits.
Otra gran cosa acerca de hacer este truco de la manera genial en lugar de simplemente soldar
cables en los botones, es que también puedes usar el campo aleatorio de 12 bits. Puede tener 4
luces en una ID de red y otras 4 en otra ID de red, ¡y controlarlas desde el mismo control remoto!
¡En realidad, puedes controlar (2^12)*4 = 16384 lámparas con este truco!
Entonces sé qué bits ignorar, el bit de inicio y los bits de identificación de red. Pero todavía no sé
cómo el control remoto representa el 0 y el 1.
El control remoto tiene botones para 4 lámparas. La forma más lógica de representarlos en la
trama de datos es con un número binario de 2 bits.
Inicié el analizador lógico nuevamente y presioné el botón de ENCENDIDO para las lámparas 1,
2, 3 y 4. Luego lo copié y pegué en Gimp para obtener una descripción general.
Ok, cuatro bits cambian cuando presiono un botón de ENCENDIDO. Dos de los bits parecen
estar contando en binario de 0 a 3. Lo más probable es que sean los bits de dirección de la
lámpara.
Para la lámpara 1, ambos son pulsos largos. Para la lámpara 2 hay un pulso corto y otro largo.
Esto significa que el bit menos significativo se envía primero. Lo contrario de lo que
normalmente escribirías un número binario.
Debido a que parece que los bits marcados en verde parecen estar contando de 0 a 3, asumiré
que estos son los bits de dirección de la lámpara. Todavía no sé qué son los bits marcados en
azul. Probablemente algún tipo de suma de verificación para garantizar una comunicación sin
errores.
Además, he aprendido de esto que, con toda probabilidad, los bits se transmiten así.
● Pulso largo: 0
● Pulso corto: 1
En este punto, sé cómo se representan el 0 y el 1, y creo que sé qué bits representan la dirección
de la lámpara. También creo que los dos últimos bits son una forma de suma de verificación.
Para averiguar el resto del marco de datos, tuve que capturar datos para todas las pulsaciones
de botones posibles.
Encendí el analizador lógico y presioné ENCENDIDO para las 4 lámparas, luego APAGADO, luego
TODO ENCENDIDO y TODO APAGADO, y finalmente DIM + y DIM -.
Para facilitar un poco la depuración, escribí todos los fotogramas capturados en OpenOffice.
Omití los primeros 13 bits, ya que sabía lo que eran. También dejé algunas líneas para los
botones DIM para que la captura de pantalla encajara en el tamaño de imagen predeterminado
de Instructables.
Parece que los datos de carga útil tienen dos bits para la dirección de la lámpara, luego 4 bits
para los datos de comando.
Los bits de comando fueron bastante fáciles de descifrar. En la segunda imagen, he dividido los
datos en 3 columnas, dirección de la lámpara, bits de comando y suma de verificación.
Como puede ver, el bit de comando 2 solo está encendido cuando presiono los botones TODO
ENCENDIDO o TODO APAGADO. Eso significa que este bit es un bit de transmisión que hace que
todos los receptores escuchen.
El bit 3 solo está encendido cuando presiono el botón ON o el botón DIM. Llamemos a este bit
de comando ON/OFF.
El bit 4 solo está encendido cuando presiono los botones DIM +/-. Llamémoslo DIM.
El bit 5 siempre es bajo. Un poco de misterio. No tengo idea de lo que hace. ¿Quizás solo está ahí
porque el algoritmo de suma de comprobación necesita un número par de bits?
En la última imagen, puede ver que he realizado ingeniería inversa en todo el marco de datos.
Supuse que el sistema tenía 4 direcciones de lámparas, ya que hay 4 botones en el control
remoto. Pero otra posibilidad es que los primeros tres bits sean la dirección de la lámpara, y esa
dirección 111 se transmita. Si este es el caso, entonces podría tener 7 lámparas + transmisión en
una ID de red.
En este punto, sé qué es todo lo que está dentro del marco de datos. Sin embargo, no tengo
idea de cómo se calcula la suma de verificación.
Empecé a leer sobre sumas de verificación en Wikipedia e intenté aplicar todo tipo de
algoritmos a los datos. Nada realmente parecía funcionar. Luego noté que la suma de
verificación para cualquier botón presionado era idéntica, independientemente de la ID de red
aleatoria. La suma de comprobación solo se calcula en función de los datos de la carga útil.
Supongo que está codificado en el control remoto para simplificar el diseño del chip.
Entonces, con esto en mente, probé algunas cosas más simples. Me di cuenta de que las
secuencias de 01 y 01 se cancelaban entre sí y producían una suma de verificación de 00, y que
las secuencias de 01 y 10 producían una suma de verificación de 11.
Después de algunas pruebas y errores, encontré un algoritmo simple que siempre producía la
suma de verificación correcta.
Los primeros dos bits se someten a XOR con los segundos dos bits. El resultado de esto es XOR
con los dos últimos bits.
Entonces, ahora que sabemos qué es todo, lo único que queda por hacer es averiguar el
momento de las señales.
Cada bit se compone de un período de baja y un período de alta. El ciclo completo es siempre
de 1,92 milisegundos. Un pulso largo es de 1,3 ms y un pulso corto es de 0,62 ms.
Cada trama, excluido el bit de inicio, es de 38,4 ms. 38,4/20 = 1,92 ms. Así que 1,92 ms parece un
buen punto de partida para crear los tiempos correctos.
El contador se actualiza cada 128 ciclos de reloj. Esto significa que tengo que usar 120 y 58 como
valores de contador para los pulsos cortos y largos.
(1000/12000000)*128*121 = 1,29 mS
(1000/12000000)*128*59 = 0,62 mS
Reuní una función simple para llenar un búfer con los tiempos de retraso para un marco de RF
dado. Luego, una rutina de interrupción enciende y apaga un pin IO y establece el valor de
comparación del temporizador para crear el pulso de longitud deseado.
Lo conecté al analizador lógico y copié y pegué el resultado en Gimp. ¡Bingo! La señal resultante
es idéntica a la del control remoto RF :D El
Pero el control remoto usaba una batería de 9v... ¿quizás el módulo RF necesitaba 9v? Conecté
el VCC en el módulo RF a +9V y lo intenté de nuevo. ¡Éxito!
Después de buscar en Google, descubrí que las bombas de carga eran la solución correcta.
No soy un gurú de la electrónica analógica, pero intentaré explicar cómo (creo) funciona.
Se suministra una señal PWM al transistor para hacer esto 23.000 veces por segundo. Cada vez
que se libera el transistor, el voltaje en el capacitor aumenta un poco.
El bucle principal del microcontrolador comprueba continuamente si el voltaje está por debajo
del nivel de umbral. Si es así, se inicia la señal pwm. Si se alcanza el nivel de umbral, pwm se
desactiva.
El circuito es bastante simple. Todas las cosas complicadas están dentro del módulo RF.
La línea de DATOS del módulo RF está conectada a un pin IO. El transistor de la bomba de carga
y el LED de estado también están conectados a los pines IO.
(Olvidé las resistencias en los dos LED en el esquema. Puede agregar las resistencias apropiadas
usted mismo).
usbrf.sch Descargar
Antes de encender el soldador, quiero comprobar si todo funciona como se supone que debe
hacerlo.
Solo he usado USB una vez antes, y nunca con alimentación de sistema de 5V y diodos zener
como los que usa este diseño. Además, la caja en la que estoy colocando el circuito es bastante
pequeña, por lo que no habrá espacio para un encabezado ISP. Programaré el AVR en la placa de
pruebas y luego lo pasaré al circuito soldado.
En este punto, todo funciona. Esperemos que todavía funcione cuando todo esté soldado en su
lugar;)
http://www.obdev.at/products/vusb/index.html
No voy a entrar en detalles sobre cómo funciona el software. La ingeniería inversa es el énfasis
de este Instructable. Aquí está la versión corta:
Necesita dos programas para que esto funcione. Un programa en su computadora y firmware
para el microcontrolador.
Microcontrolador:
Las transmisiones de RF reales se realizan mediante una rutina de interrupción. Uso una
interrupción de temporizador porque es la forma más fácil de obtener una sincronización
precisa. La interrupción del temporizador lee desde un búfer global donde se almacenan los
tiempos de retraso. No almaceno el estado de encendido/apagado del transmisor de RF ya que
siempre se alterna entre encendido y apagado. Comienzo con un pulso de apagado, luego
alterno pulsos de encendido y apagado.
El búfer contiene 42 valores. Hay 21 bits para transmitir, y cada uno tiene un período bajo y un
período alto. Esta configuración no es muy eficiente en RAM, pero el ATmega8 tiene mucho.
¡Cambiaré RAM por legibilidad de código en lugar de tener RAM sin usar!
Dependiendo del tipo de solicitud enviada desde la PC, puede hacer diferentes cosas dentro de
esta función. Tengo dos tipos de solicitud configurados, set_network_id y send_command.
Ordenador:
También creé un pequeño script php para llamar al programa de computadora de la línea de
comandos cuando se presionan los botones en una página web. ¡Abre la página web en tu
Android/iPhone y controla las luces! :D
usb_domótica-0.1.tar.gz Descargar
9 Más imágenes
Tengo una bonita cajita en la que quiero que mi proyecto viva dentro.
1) La placa de circuito más pequeña que tenía era demasiado pequeña y el siguiente paso era
demasiado grande. Tuvo que ser cortado a la medida. Suficientemente fácil. Solo uso un
cuchillo para alfombras y corto a lo largo de la línea donde quiero cortar. Haga esto de 3 a 5
veces y simplemente rompa la parte que desea eliminar. También tuve que hacer un poco de
dremeling para dejar espacio para algunas piezas de plástico dentro de la caja.
2) El puerto USB debe ser accesible desde el exterior, ¡así que dremel! Imprimí una plantilla con
las dimensiones del enchufe USB y la pegué a la caja. Luego usé una "broca de enrutador"
dremel para dremel. Esta broca se puede perforar y luego mover hacia los lados para cortar
agujeros más grandes.
5 más imágenes
El módulo RF ocupa casi la mitad del espacio dentro de la cajita, así que tuve que hacer el
circuito muy compacto.
Puse todo lo más cerca posible y usé alambre magnético para hacer las conexiones.
Esta es la primera vez que utilizo alambre magneto. ¡Fue genial trabajar con él! Incluso mejor
que el cable Kynar. Obtuve la idea de este Instructable:
https://www.instructables.com/id/Wiring-Pen/
Logré exprimir todo usando un poco más de la mitad del tablero. ¡El módulo RF encaja
perfectamente en el espacio restante!
El oscilador del módulo de RF tiene escrito el texto 433.92, así que supongo que es un
transmisor de 434 MHz.
Sparkfun tiene un transmisor inalámbrico de 434 MHz que solo cuesta $3.95.
http://www.sparkfun.com/products/8946
Todo funciona :D
Además, puede cambiar las luces mucho más rápido que el control remoto original :)
Concurso de
microcontroladores Segundo Premio en el
Ver concurso
Concurso de Microcontroladores
Sé el primero en compartir
¿Hiciste este proyecto? ¡Compártelo con nosotros!
¡Lo hice!
Recomendaciones
Adición de teclas a un teclado mecánico Password Vault V3.0 de Northstrix en Infinity Mirror Dodecahedron de Lámpara de botella solar DIY de
por Hanzo en Informática Microcontroladores MarcoGhelfino en LED opengreenenergy en LED
V |
Agregar sugerencia Pregunta publicar comentario
40 comentarios
El objetivo final es un sistema de domótica impulsado por un RasPi, con interfaz web, temporizadores,
sensores, etc.
2 respuestas F
¿Se puede usar un duplicador de voltaje para el transmisor de RF usando 2 capacitores y 2 diodos?
http://www.reuk.co.uk/Making-Voltage-Doublers-and-Multipliers.htm
Lo siento, puse tu foto sobre el amplificador de voltaje en la descripción. ¿Está bien o debería
eliminarlo?
Bonito osciloscopio por cierto, parece caro. Sparkfun tiene un osciloscopio USB realmente bueno,
como el analizador lógico que usó/ha hecho referencia. Ambos están en la parte inferior de su página
de herramientas. http://www.sparkfun.com/categories/177. Me encantaría ver esto hecho con algunas
de las unidades xbee que venden, pero hacerlo de esta manera podría ser más barato.
Cocinando
© 2022 Autodesk, Inc. Términos de servicio | Declaracion de privacidad | La configuración de privacidad | Avisos legales y marcas registradas