En esta práctica vamos a utilizar el Control Remoto Inalámbrico IC 2262/2272 4 CH ( 4 canales ) 315 Mhz para arduino y, lo vamos a poner en marcha desde cero.
1º Este dispositivo, para hacerlo funcionar, primero hay que comprarlo ( jejejeje ). Bueno, el último que compré me costo 1,70 € en aliexpress, así que no debe diferir hoy mucho de esa cantidad.
2º ¿ Que es ?. este pack está compuesto por un emisor que emite 4 señales codificada a una frecuencia de 315 Mhz, con posibilidad de poner antena receptora en el módulo receptor, lo que amplia el rango de trabajo.
Esta pareja de componente ( Emisor-receptor ) utilizan los C.I PT2262/PT2272 que realizan un control remoto inalambrico básico. Se utilizan normalmente en sistemas económicos debido a que utilizan códigos fijos y no emiten la información encriptada.
Son comúnmente usados en controles de garajes ( puertas ), control de ventiladores, alarmas sencillas, juguetes, etc.
No son aconsejables cuando la seguridad sea importante.
Para hacer esta práctica necesitamos:
- Arduino Uno
- Cables de conexión ( hebra-macho )
- kit de radiocontroles mencionados antes
- Diodos leds con resistencias de protección
Un poco mas de este dispositivo
El radiocontrol emite la frecuencia codificada con 4 canales disponibles. Esto posibilita tener control sobre 4 variables. Si fuese el control de un coche, un canal puede ser para ponerlo en marcha, el otro para invertir giro del motor, otro para mover las ruedas y el 4º canal para alguna sirena.
Pasamos a explicar el programa
En el detalle del receptor, tenemos la Masa ( GND ) y la alimentación de 5 voltios ( Vccc). Luego, obtenemos una salida llamada Vt que nos ofrece una salida cuando se ha recibido uno de los canales y, por último, D1, D2, D3 y D4 son las salidas de los canales, que generan una señal ( High ) al recibir la señal de radio correspondiente a su canal.
Otro punto marcado en el módulo es el correspondiente a la Antena, que no será necesario para distancias cortas pero es muy útil si vamos a operar mas allá de los 10 metros.
El Tornillo marcado con tinte rojo es un condensador variable ajustado y, por tanto, no se debe tocar bajo ningún concepto
Como esos terminales van a ser salidas del receptor, lo tenemos que entrar en arduino por los puertos correspondientes. Podemos elegir que puertos podemos usar para recibir estas señales y hay que configurarlos como puertos de entrada.
Algo importante en este trabajo es que no vamos a necesitar ninguna librería.
En nuestro caso vamos a utilizar desde el puerto 7 en adelante
Programa:
void setup() -> Configuramos el programa { Serial.begin (9600); -> Establecemos la velocidad del puerto serie pinMode (13, OUTPUT) ; -> el puerto 13 salida pinMode (12, OUTPUT) ; -> Puerto 12 salida for (int i = 7 ; i < 12 ; i++) -> *rutina para poner los pines a entrada pinMode(i, INPUT) ; }
* En este caso, la explicación de esta rutina es la siguiente. La primera parte le asigna el valor i a 7 y dice que siempre que sea menor de 12 lo tiene que incrementar en uno
En la 2º parte pone el pinMode i, de forma que el primer i es 7, y lo pone como input, luego sube a la linea de arriba, se incrementa el i a 8, baja a la siguiente linea y pone el pin 8 a input. Así hasta el 12
Esto sería equivalente a decir
pinMode(7, INPUT) ;
pinMode(8, INPUT) ;
pinMode(9, INPUT) ;
pinMode(10, INPUT) ;
pinMode(11, INPUT) ;
pinMode(12, INPUT) ;
Otra instrucción nueva es el Serial.begin, que nos activa el puerto de salida para poder visualizar datos
2º parte:
void loop() -> Empieza el lazo { if (digitalRead(7) ) // Si hay señal de radio válida { Serial.print("Nos llega un valor. \t"); // se imprime Nos llega un valor if (digitalRead(8)) // leemos el puerto 8 a ver si llega señal Serial.print( "Se ha pulsado el Botón A"); // Se imprime, Se ha pulsado ... if (digitalRead(9)) // se hace lo mismo con el 9 Serial.print( "Se ha pulsado el Botón B"); if (digitalRead(10)) // repetimos para el 10 { Serial.print( "Ahora se ha pulsado el Botón C."); digitalWrite (12, ! digitalRead(12)) ; // Sacamos por el puerto 12 el valor de 12 delay (500) ; // esperamos 0.5 segundos } if (digitalRead(11)) { Serial.print( "Se ha pulsado el botón D"); digitalWrite (13, ! digitalRead(13)) ; // se activa la salida 13 delay (500) ; // se espera 0,5 segundos } Serial.println("\t"); // Imprime un tabulador } }
3º Parte.
¿ Cómo incluir las instrucciones adecuadas para que, al pulsar un botón, el motor cambie de estado ?.
Si hemos pulsado para que suba pero, queremos pararlo antes de tiempo, por ejemplo a mitad de camino, sin tener que esperar a que pare por el fin de carrera del motor, tenemos que incluir un código de forma que se lea la entrada y, sí había sido antes pulsado, se pare, y en caso contrario, se ponga a funcionar
Antes de seguir con el proyecto y, con la idea de incorporar esta función, aconsejo que se monte este programa o, se simule con tinkercad.com
int ledPin = 13; // Conectamos el led 13 y asignamos variable ledPin int inPin = 7; // el botón de lectura es el 7. Lo llamamos inPin int val = 0; // creamos variable val que leerá estado pin 7 int motor = 0;// variable interna que nos viene a decir cómo está el motor void setup() { pinMode(ledPin, OUTPUT); // ponemos el ledPin como salida pinMode(inPin, INPUT); // inPin como entrada } void loop() { val = digitalRead(inPin); // el valor val toma la lectura del pin 7 if (val ==HIGH && motor ==LOW ) /* En la linea anterior, si ha llegado un 1 ( se ha pulsado ) y el motor está parado, entonces ponemos el motor a funcionar */ { motor = 1; // se pone variable motor a 1 digitalWrite(ledPin, HIGH); // se activa motor delay (1000);// delay de un segundo // sets the LED to the button's value } val = digitalRead(inPin); // volvemos a leer el valor if (val ==HIGH && motor == 1 ) /* lo mismo que antes, pero si el motor estaba encendido, tenemos que apagarlo +/ { motor = 0; // se pone variable motor a cero digitalWrite(ledPin, LOW); // se desactiva motor delay (1000); }
Ya estamos cerca. Tan solo hay que construir el programa ( no lo bajo para que se construya con el código dado arriba.
Actividad:
Parte 1. Montar el programa que se indica arriba y comprobar su funcionamiento.
Parte 2: Montar un programa para que active un semáforo a distancia, de forma que se usen tres canales para cada una de las luces y se reserve un cuarto canal para cerrar una valla de acceso al garaje.
La idea es poder controlar el acceso a un garaje por un operario a distancia.
Las luces , a ser de potencia, necesitan un sistema de relés. Si no se dispone del mismo, usar diodos leds.
Para la barrera ( motor ), se puede usar una sirena u otro dispositivo.
Parte 3. Hacer un sistema codificado, que usando la entrada de los cuatro canales, se active un sistema de:
- Arduino empieza a leer la información dada por el transmisor cuando detecta la entrada Vt, y genera un espacio temporal de 10 segundos para tomar una decisión.
- Si después de los 10 segundos la secuencia que se ha entrado por los canales es correcta, se enciende una luz ( también se puede activar la apertura de una cerradura )
- Si a los 10 segundos, el código es erróneo, se dispara una alarma
- El código está compuesto por la secuencia de 8 entradas de los canales recibidos, correspondiente a los canales ABCDDCBA.
Proyecto domótico para controlar toldo
Con el proyecto del mando de RF , vamos a realizar un trabajo final donde se controle la subida y bajada de un toldo, según condiciones atmosféricas ( sol , lluvia y viendo ) , junto con el control manual del mando y añadiendo un control de IOT ( Internet of Things ). Para esta última parte, tenemos que tener en consideración todo el trabajo que viene en el enlace Control de led con ESP8266