Un reemplazo de control remoto de acondicionador de aire (2 / 4 paso)

Paso 2: Programación - lado de Arduino

Necesitamos para comunicarse a través de interfaz serie y enviar comandos IR.
Para la parte remota de IR vamos a utilizar la biblioteca Arduino IRremote (https://github.com/shirriff/Arduino-IRremote). Esta biblioteca se puede utilizar para enviar datos predefinidos sobre IR, como LIRC. Pero utilizaremos solamente para sus funciones de auxiliar (para ajustar la frecuencia de 38KHz para IR y para administrar tiempos mientras que envía mensajes).

En el anterior instructable encontramos que para comunicar comandos para el acondicionador de aire necesita enviar una secuencia de cierre, una introducción constante, la secuencia de bloqueo otra vez, entonces la carga real. Bien el Arduino puede muy bien tener la introducción de su código y esperando a la carga. Sólo podríamos enviar los valores de opciones y hacer el Arduino modificar una plantilla con estos valores, pero para mantenerlo simple sólo te proporcionan la carga entera y lo deja enviar como es. Para enviar los bits se encenderá el IR LED encendido y apagado según la los tiempos encontrados previamente.

Aquí el Arduino actúa como un "esclavo", nunca iniciar una comunicación. Como pretendo hacer usos múltiples de esta unidad que comenzar las comunicaciones por un solo carácter 'I' significa 'enviar por IR', seguido de 19 bytes de carga útil. El Arduino envía el mensaje al acondicionador de aire.
En el lado de Arduino el código puede parecer un poco demasiado complicado, pero es porque se supone que sirven como un relais de la radio, por lo que la comunicación entre el Pi y el Arduino sobre interfaz Serial no siempre será simplemente enviar el mensaje de IR.
Aquí está la fuente de arduino que se utiliza para enviar comandos al acondicionador de aire.

Un poco de explicación:
-> el bucle código sólo cheques si un comando está listo. En ese caso se ejecuta el comando (por ahora solo "enviar un mensaje de IR").
-> el SerialEvent() se llama después de un loop(), si hay serie de datos en el búfer. En esta función que es leer el comando, la carga útil está preparada y, a continuación, se coloca una bandera a la función loop() que un comando está listo

serialEvent recibir caracteres ASCII que representan valores HEX. Para convertirlo que utilizamos la función sscanf con el "x %" (hexadecimal) opción de formato. Almacenamos los caracteres recibidos en una matriz de 5 char y llenarlo con: "0 x" + los 2 chars '\0' (al final de la cadena).

char hexConvert [5] = "0 x";
ASCII se recibe
para (int i = 0; i < 19; i ++) {}
hexConvert [2] = Serial.read();
hexConvert [3] = Serial.read();
hexConvert [4] = '\0';
convertir a lo caracteres recibido en un valor numérico en carga [i]
sscanf (hexConvert, "%x" y (payload[i]));
}
En este punto la carga [i] contiene el valor binario representado por lo caracteres recibido.

En el enviar horarios adecuados de comando se utilizan cerraduras, introducción y carga útil. Para enviar los datos, el código tiene que enviar cada bit por separado con la función irsend.mark(duration) y irsend.space(duration). Como se explica en el instructivo la duración es de sobre 400 (realmente debería estar más cerca de 420 creo) la marca (en estado) y 400 o 1300us por el espacio (estado OFF) para enviar un 0 o un 1, respectivamente.
Enviar cada bit de cada byte en el código siguiente se utiliza:

para (int s = 0; s < payloadSize; s + +) {}
para (int i = 7; i > = 0; i--) {/ / Bit más significativo es lo primero
irsend.Mark(irSpace);
irsend.Space ((carga útil [s] >> i) y 1 == 1? irOne: irZero);
}
}

Si no estás familiarizado con las operaciones bit a bit hay un montón de tutoriales disponibles en la red.
Lo que pasa aquí es:
Para cada byte de la carga útil (funciona del mismo modo con la introducción):
Para los que van de 7 a 0
cambiar el byte para que alinea a la derecha
Mira el último bit
Si este bit es uno, enviar una señal de "irOne" (1300us), que enviar una señal de "irZero" (400)

Básicamente lo que se obtiene al cambiar el byte de N filas (añadiendo ceros a la izquierda) es el Nth del pedacito en el lado de la derecha. Cuando enmascara con un AND bit a bit (y) 1 tomamos sólo el bit más a la derecha, así que todo el mundo obtenemos el valor de n bits.

Ejemplo con 5B en hexa = 0101 1011 en binario. El paréntesis está aquí hacer hincapié en los bits cambiados de puesto, para facilitar la lectura...

me = 7 = > cambio (0) 101 1011 para 7 filas = 000(0) > 0000
máscara con 1 = > 0000 0000 y 0000 0001 = 0 = > Enviar irZero

i = 6 = > shift (01) 01 1011 6 filas = 00(01) > 0000
máscara con 1 = > 0000 0001 & 0000 0001 = 1 = > Enviar irOne

i = 5 = > shift (010) 1 1011 5 filas = 0(010) > 0000
máscara con 1 = > 0000 0010 & 0000 0001 = 0 = > Enviar irZero

i = 4 = > cambiar (0101) 1011 para 4 filas = > 0000 (0101)
máscara con 1 = > 0000 0101 & 0000 0001 = 1 = > Enviar irOne

i = 3 = > shift (0101 1) 011 para 3 filas = > 000 (0 1011)
máscara con 1 = > 0000 1011 & 0000 0001 = 1 = > Enviar irOne

i = 2 = > shift (0101 10) 11 para 2 filas = > 00 (0110 01)
máscara con 1 = > 0001 0110 & 0000 0001 = 0 = > Enviar irZero

i = 1 = > shift (0101 101) 1 para la 1 fila = > 0(010 1101)
máscara con 1 = > 0010 1101 & 0000 0001 = 1 = > Enviar irOne

i = 0 = > cambiar (0101 1011) para la fila 0 = > (0101 1011)
máscara con 1 = > 0101 1011 & 0000 0001 = 1 = > Enviar irOne

Así que enviamos a pedacitos a la izquierda al orden correcto.

Observe que eso Biblioteca IRremote utiliza pin3 para enviar mensajes. Supongo que podría ser posible usar el pin 11 (mismo temporizador para PWM) modificando la clavija en el código de la biblioteca de destino, pero no lo he probado.

Artículos Relacionados

Reemplazo de controles remotos infrarrojos con un iPhone

Reemplazo de controles remotos infrarrojos con un iPhone

En todo el mundo vida, todo el mundo encuentra con un montón de diferentes mandos a distancia IR, pero a veces consigue frustrar apuntando el control remoto en la dirección correcta, o el DVR no juega cuando lo desee. Surgió la idea de hacer una espe
Control de un acondicionador de aire de IR con Arduino y Android

Control de un acondicionador de aire de IR con Arduino y Android

Para mi primer proyecto de Arduino que decidí controlar mi acondicionador de aire por internet con la ayuda de Arduino y mi celular Android donde tengo acceso a internet. Video es en español pero tendrás lo que estoy demostrando.Paso 1: requisitosReq
Protocolo de control de acondicionador de aire IR remoto ingeniería inverso

Protocolo de control de acondicionador de aire IR remoto ingeniería inverso

Hola, este es mi primer instructivo, espero te guste.En electrónica elegí un proyecto de automatización del hogar: un sistema que me permite a programa de control y dos unidades de aire acondicionado en mi piso. En este instructable muestro cómo lleg
Económico reemplazo dominante del control remoto para un Toyota Yaris

Económico reemplazo dominante del control remoto para un Toyota Yaris

la llave alejada para mi Toyota Yaris de 2006 tenía 2 botones que estaban cubiertas con una fina lámina de plástico. Con el tiempo, la hoja llevaba y los botones de debajo se caiga! Durante un tiempo, usé una capa de cola de silicona para cubrir sobr
Coche de Control remoto Lego (1997 Volvo 850)

Coche de Control remoto Lego (1997 Volvo 850)

Construye tu propio coche teledirigido de Lego! El video y las fotos de arriba cuentan con mi Lego Volvo, un modelo a escala 1:14 de uno de mis coches favoritos, el carro de finales de los 90 Volvo 850. Este instructable le mostrará cómo construir es
Control remoto vía GSM/GPRS SMS(Arduino)

Control remoto vía GSM/GPRS SMS(Arduino)

control remoto, especialmente cuando este no ethernet o Wifi en el exterior, ha sido una cosas muy profundas en el pasado. Cuando era un niño, siempre imagen que yo tengo un equipo que puede controlar todos los electrodomésticos. Ahora, esto se convi
LED control remoto usando Bluetooth HC-05, Arduino y App móvil

LED control remoto usando Bluetooth HC-05, Arduino y App móvil

¿La tecnología está avanzando a velocidad de rotura de cuello, cada uno de nosotros tiene teléfonos inteligentes hoy en día, existen aplicaciones que nos permiten estar en contacto con nuestros amigos y familiares, obtener información meteorológica m
Reparación de un accesorio clave roto en un llavero de entrada a control remoto

Reparación de un accesorio clave roto en un llavero de entrada a control remoto

hace poco compré un vehículo usado que vino con un llavero de entrada a control remoto.  Lamentablemente, el accesorio para el llavero fue mal diseñado y rompió.  Por lo tanto, el dueño anterior une las teclas con un aparejo hecho de cinta de fibra d
Control remoto bricolaje para Hexdrake

Control remoto bricolaje para Hexdrake

Hola, soy David y este es mi segundo instructable :).Es una continuación de mi primer instructable, donde me muestra cómo construí mi pequeño hexápodo, Hexdrake:En este nuevo instructivo te voy a mostrar cómo hice este controlador protoype para Hexdr
Probar un Control remoto

Probar un Control remoto

En este día en edad, casi todos nuestros sistemas de entretenimiento y dispositivos pueden controlarse por control remoto. Televisores, iHome y algún sistema de videojuegos tienen para controlar los dispositivos y hacer nuestra vida más cómoda. Estos
Gesto-captura Control remoto consola

Gesto-captura Control remoto consola

Resumen del proyectoEste proyecto proporciona una alternativa a la TV estándar remota: una manera más interesante (y mucho más frío) para controlar equipos habilitados para IR. (Para ser claro: esto es falso gesto-captura - sólo estoy utilizando un c
Cómo solucionar cualquier no funciona Control remoto por infrarrojos

Cómo solucionar cualquier no funciona Control remoto por infrarrojos

has siempre encuentro agarrar el control remoto y gire sus electrodomésticos en y no funciona creo que es sólo una situación de batería baja que puede ser fijo, pero cuando lo cambie no funciona en absoluto y te rindas solo tirar el mando a distancia
Control de tus electrodomésticos con control remoto de TV!!

Control de tus electrodomésticos con control remoto de TV!!

Ver el proyecto salida vídeo aquí.He encontrado que algunas personas son muy perezosos para levantarse ir a la Junta y pulse el interruptor para encender la luz o ventilador o cualquier otro aparato pero Hey!, ahora hay una solución más fácil. Ahora
Papel avión-TV mando a distancia con control remoto

Papel avión-TV mando a distancia con control remoto

Crear un avión de papel controlada remota controlado por televisor medio remoto. Super divertido y barato para hacer!Paso 1: Para el paso 1, usted debe obtener todos los materiales: una pequeña li-poli batería (3,7 voltios), un trozo de PCB, motor el