Hola muy buenas. Hace tiempo compré algunas unidades de ventilador de techo Faro Easy Barcelona y, como creo que a muchos os ha pasado, el mando a distancia de alguno de ellos ha muerto.
Incapaz de ver dónde estaba el problema (por si fuera algo aparente de la placa del mando) decidí mirar mandos compatibles en diferentes tiendas. Pero estos no bajaban de los 30-50 euros!
Es claramente un precio excesivo comparado con el coste del mando.
Después de varias vueltas he llegado a una solución mucho más económica (menos de 10 euros) que he querido compartir con vosotros.
1. Arduino. Diría que casi cualquier modelo es válido para este proyecto. En mi caso tenía un viejo Arduino Diecimila que me ha valido perfectamente. Su evolución natural (más potente y con más memoria) es el Arduino UNO. Si no te urge sustituir el mando(por el tiempo de entrega) puedes encontrarlo en páginas chinas por muy poco dinero. Por ejemplo Aliexpress:
Para alimentarlo podemos utilizar un cable USB (de los antiguos, tipo A - tipo B). Si no tienes ninguno por ahí, de alguna vieja impresora por ejemplo, puedes adquirirlo por mu poco dinero (en el ejemplo de arriba, se incluye el cable).
2. Generador de RF de 433MHz. Por lo que valía (y porque me hacía falta para 'sacar' los códigos del mando de Faro) adquirí el transmisor y el receptor juntos (el Aliexpress):
3. Receptor de IR. Como el mando está roto, voy a sustituirlo por algún mando de IR (tele, STB, A.C., etc) que tenga por casa.
Éste es el receptor que adquirí aunque vale cualquiera:
4. Cables de tira macho-hembra. Los utilizaremos para conectar los módulos de RF e IR a la placa arduino.
Yo ya tenía varios por ahí, pero os pongo un ejemplo que he visto:
5. Mando a distancia. Casi cualquier mando de los que ya tenéis por casa debería valer como sustituto. En mi caso primero utilicé el propio mando de la TV utilizando los botones esos que nadie sabe para que sirven pero me cansaba de ver mensajes de 'no disponible' en la TV cuando los pulsaba así que utilicé un mando que tenía de un viejo desco android TX3 pro:
Me basé en lo que aprendí en el siguiente link:
http://www.circuitbasics.com/arduino-ir-remote-receiver-tutorial/
De todas maneras os pongo aquí todo lo necesario para montar el módulo de IR:
Primero tenemos que identificar los diferentes pines del receptor de IR. Normalmente tendremos 3, VCC, GND y Signal.
En mi caso es recpetor de IR coresponde de la siguiente manera:
Y el conexionado es como explica el diagrama de más abajo:
Éstos módulos de IR suelen funcionar con una rango de tensión de entre 3V a 5V. Así que utilizaremos la fuente de alimentación que ya proporciona la placa Arduino.
Conectaremos los pines GND y Vcc del receptor IR a los conectores GND y 5V de la placa arduino respectivamente utilizando los cables macho-hembra.
Por último el cable de señal lo conectaremos entre el receptor (marcado como 'Y' en mi caso) y el pin marcado como '7' en la barra de pines de señales
El montaje del módulo de IR está listo. Ahora toca instalarnos el entorno de programación para cargar nuestro primer programa
Primero debemos descargarnos la última versión disponible desde la WEB de Arduino:
https://www.arduino.cc/en/Main/Software
Por si acaso, os dejo aquí la versión: Enlace de drive
Una vez instalado, antes de conectar nuestro Arduino, como vamos a utilizar 2 librearías especiales para hacer funcionar tanto el IR como el RF primero debéis bajar los 2 zip del siguiente link: Librerías
Una vez bajados debemos descomprimirlos en la carpeta libraries donde teneís instalado el programa de Arduino. Por defecto está en C:/Archivos de programa (x86)/Arduino/libraries/
Y descomprimimos ambas carpetas como aparece en la imagen de más arriba.
Ahora ya podemos conectar nuestra placa arduino a un puerto USB del ordenador y arrancar el programa arduino IDE. Éste deberá automáticamente instalar los drivers necesarios.
Si nos aparece un puerto COM detectado (desde le menú Herramientas) entonces tiene buena pinta:
Es posible que desde ese menú tengás que seleccionar manualmente la placa y procesador que utiliza vuestra placa arduino. En el caso de Arduino UNO creo que sólo hace falta el modelo de placa y nada más.
Una vez tengamos configurada la placa y veamos que detecta el puerto COM ya podemos subir nuestro primer programa.
En este link os dejo lo 3 códigos que vamos a utilizar en este proyecto: Códigos
Descomprimimos el archivo zip y entramos en la carpeta "IR_receiver_codes". Dentro hay un fichero con el mismo nombre que al hacer doble clic debería abrir el programa de arduino:
Si pulsamos el botón redondo de la izquierda (tiene un icono de tic azúl) compilaremos el programa para comprobar que no tiene errores en la escritura.
En nuestro caso vamos a compilar y subir el programa en nuestra placa así que sólo es necesario darle al icono de la flecha y esperar:
Una vez subido (debería poner 'subido') en el pie de la ventana ya estamos listos para leer los códigos del mando a utilizar.
Para ello desde la propia aplicación abrimos el monitor serie desde 'Herramientas -> Monitor Serie' y vamos pulsando las diferentes teclas del mando que queremos utilizar. En mi caso me aparecen los siguientes valores conforme voy probando botones:
A veces aparecen valores 'espúreos' como los FFFFFFFF de más arriba que tengo que ignorar. Es recomendable pulsar varias veces el botón para saber con seguridad qué código es el correcto para cada botón.
Este programa que como sabéis lo he sacado del link del comienzo del apartado está preparado para los protocolos de IR más comunes (funciona perfectamente con el mando de mi TV Samsung también). Si tuvierais que hacer algún ajuste porque el protocolo de vuestro mando no lo reconoce seguro que hay infinidad de tutoriales para hacerlo funcionar o... buscáis otro mando que funcione y listo.
En mi caso he almacenado los códigos de los siguientes botones que voy a linkar con los valores del mando Faro Easy original:
En mi ejemplo tenía claro qué botón utilizar como ON/OFF pero para el resto de botones populares como el LIGHT y el SPEED he utilizado dos pares de botones que me parecían fáciles de adivinar.
En mi caso mis códigos son:
// ON/OFF - boton de Power: 1FE8A75:
// DIM - Botón rojo: 1FE906F:
// REVERSE - Botón RW: 1FEBD42
Flecha izquierda: 1FEA45B
// LIGHT - Botón central: 1FEB04F
Botón amarillo: 1FE2AD5
//SPEED - Botón FF: 1FEDD22
Flecha derecha:1FEE41B
//TIMER - Boton azul: 1FEF20D
Al igual que con el módulo de IR yo no tengo idea de programar en Arduino y protocolos de RF así que me basé en lo que aprendí en el siguiente link:
https://github.com/sui77/rc-switch/wiki/HowTo_Send
De todas maneras os pongo aquí todo lo necesario para montar el módulo de RF:
Primero tenemos que identificar los diferentes pines del receptor de IR. Normalmente tendremos 3, VCC, GND y DATA.
En mi caso es recpetor de IR corresponde de la siguiente manera:
GND y VCC van conectados
En realidad debo dejar también conectado el receptor de IR como explicaba en el apartador anterior. Como sólo hay una salida de 5V lo que hecho en mi caso es empalmar 2 cables para tener 2 hembras y un macho. Yo utilicé un soldador pero tambén se pueden pelar y enroscarlos en la parte macho. Otra posibilidad sería utilizar el de 3V para el IR y el de 5V para el RF (con la tierra no hace falta porque el arduino tiene 2 pines de GND)
Os pongo una foto de cómo quedó mi montaje definitivo (ambos módulos a 5V y la misma tierra):
Ya sólo queda abrir el código dentro de la entramos en la carpeta "Sending_FARO_example_RCU_STB". Dentro hay un fichero con el mismo nombre que al hacer doble clic debería abrir el programa de arduino.
Este programa es el que utilizo yo en mi caso y funciona con mi mando de IR con las asignaciones que expliqué en los apartados anteriores y los códigos de RF cuando el selector está subido para los valores '1' y '2':
Si queréis utilizar cualquier otra combinación del selector os dejo aquí todos los códigos del mando en sus diferentes combinaciones: Códigos_mando_Faro
Todos estos códigos los he obtenido montando el receptor de RF que compré junto con el transmisor de 433MHz y el programa 'ReceiveDemo_Advanced' que también os incluí junto con los programas del receptor de IR y el transmisor de RF. No necesitáis utilizarlo para mando Faro Easy pero si tuvierais otro modelo de ventilador de RF 433MHz, con este programa junto con el receptor podríais sacar los códigos para ese modelo si el protocolo del mando está soportado por el programa (el de Faro estaba). Simplemente conectar el pin de datos de vuestra antena receptora al pin 2 del arduino (sin olvidar los 5V y GND) y arrancar el programa. Los códigos se visualizan desde l monitor serie igual que con el programa de IR.
Como decía, si abrimos el word con los códigos y buscamos mi opción de selector:
1 2 3 4 X
- - _ _ ?
En el selector 'X' siempre hay un interrogante porque da igual como esté, si está activado (hacia arriba) entonces el botón de 'DIM' (para regular la luz) funcionará, si no, no. Igualmente pongo el código de DIM también
ON/OFF:
Decimal: 3580 (12Bit) Binary: 110111111100 Tri-State: 1F1110 PulseLength: 490 microseconds Protocol: 6
Raw data: 11288,328,936,252,1016,252,520,748,1032,240,1028,232,1024,252,1024,236,1036,236,1032,232,1024,244,524,740,532,
DIM:
Decimal: 3836 (12Bit) Binary: 111011111100 Tri-State: not applicable PulseLength: 490 microseconds Protocol: 6
Raw data: 11296,248,1012,252,1016,256,1016,244,524,748,1016,252,1016,248,1028,240,1020,248,1032,236,1028,240,528,736,516,
Reverse:
Decimal: 3964 (12Bit) Binary: 111101111100 Tri-State: 11F110 PulseLength: 490 microseconds Protocol: 6
Raw data: 11300,336,924,236,1024,244,1020,248,1028,236,532,740,1028,232,1040,232,1020,244,1024,244,1032,236,532,732,540,
Light:
Decimal: 4076 (12Bit) Binary: 111111101100 Tri-State: not applicable PulseLength: 491 microseconds Protocol: 6
Raw data: 11300,236,1036,240,1020,244,1044,224,1028,236,1024,244,1020,248,1028,236,524,744,1020,244,1032,236,536,736,524,
Speed:
Decimal: 4060 (12Bit) Binary: 111111011100 Tri-State: 111F10 PulseLength: 490 microseconds Protocol: 6
Raw data: 11284,344,940,240,1020,252,1036,256,1012,256,1012,248,1020,256,516,744,1028,240,1024,248,1020,248,520,740,532,
Timer:
Decimal: 4028 (12Bit) Binary: 111110111100 Tri-State: not applicable PulseLength: 490 microseconds Protocol: 6
Raw data: 11284,260,1016,252,1024,248,1068,196,1036,228,1024,248,528,732,1020,252,1024,240,1040,228,1020,248,516,752,552,
Para cada función lo que nos interesa únicamente son los valores binarios.
Entonces, una vez abierto el programa debéis cambiar tanto los códigos de IR como los de RF (en éste último caso si no utilizáis el mismo selector que yo). Extracto de mi programa:
void loop() { if (irrecv.decode(&results)){ if (results.value == 0XFFFFFFFF) results.value = key_value; switch(results.value){ // ON/OFF: boton de Power case 0x1FE8A75: mySwitch.send("110111111100"); break; // DIM: boton rojo case 0x1FE906F: mySwitch.send("111011111100"); break; // REVERSE case 0x1FEBD42: // Boton RW mySwitch.send("111101111100"); break; case 0x1FEA45B: // Flecha izquierda mySwitch.send("111101111100"); break; // LIGHT case 0x1FEB04F: //Boton central mySwitch.send("111111101100"); break; case 0x1FE2AD5: //Boton amarillo mySwitch.send("111111101100"); break; //SPEED case 0x1FEDD22: // Boton FF mySwitch.send("111111011100"); break; case 0x1FEE41B: // Flecha derecha mySwitch.send("111111011100"); break; //TIMER case 0x1FEF20D: //Boton azul mySwitch.send("111110111100"); break; } key_value = results.value; irrecv.resume(); Si te fijas más arriba, por ejemplo, tengo linkado el botón de POWER de mi mando (1FE8A75) que obtuve con la aplicación "IR_receiver_codes" con el de ON/OFF de mi ventilador en el selector de este ejemplo:
ON/OFF:
Decimal: 3580 (12Bit) Binary: 110111111100 Tri-State: 1F1110 PulseLength: 490 microseconds Protocol: 6
Es simplemente editar, añadir o quitar en función del mando y los botones que queráis utilizar.
Si al probarlo veis que no funciona podéis probar a utilizar el siguiente código que, en el caso del selector como lo tengo yo debería encender y apagar la luz cada 2 segundos:
#include <RCSwitch.h>RCSwitch mySwitch = RCSwitch();void setup() { Serial.begin(9600); // Transmitter is connected to Arduino Pin #10 mySwitch.enableTransmit(10); // Optional set pulse length. mySwitch.setPulseLength(490); // Optional set protocol (default is 1, will work for most outlets) mySwitch.setProtocol(6); }void loop() { mySwitch.send("111111101100"); digitalWrite(13,HIGH); delay(500); digitalWrite(13,LOW); delay(2000); }Y listo, si todo ha ido bien, uan vez cargado el programa ya no hace falta más el ordenador. Desconectáis el arduino con sus 2 módulos conectados y enchufáis el USB a la TV por ejemplo. Cuando esté arrancado ya podéis utilizar vuestro mando de IR que habéis programado para manejar el Faro Easy a partir de ahora.
Os dejo unas imágenes y un vídeo de cómo ha quedado mi prototipo utilizando un viejo tarjetero de plástico que tenía por ahí: