Proyecto domótico con Arduino con 4 lamparas, 1 motor servo y 1 alarma
Hola a todos.
A continuación os presento el proyecto domótico realizado íntegramente mediante Arduino. Consiste en controlar mediante un mando de infrarrojos 4 lámparas, 1 motor servo y 1 alarma.
El montaje es el siguiente:
Podéis probarlo a continuación:
El código comentado para la programación es://Antes de nada declaramos las librerías, pines de los elementos e inicializaciones necesarias
#include <Servo.h> //incluimos la librería para control del servo motor
#include <IRremote.h> //incluimos la librería para el control IR
Servo servo; // Faltaba!!! para no discernir mayúsculas y minúsculas en servo
IRrecv sensor(9); //conectamos la señal que recibe el sensor IR al pin 9
decode_results lectura; //variable que almacena el dato del IR
//declaramos el resto de pines diferentes al infrarrojo
int led1=13;//declaramos pin para activar positivo bombilla 1
int led2=12;//declaramos pin para activar positivo bombilla 2
int led3=11;//declaramos pin para activar positivo bombilla 3
int led4=10;//declaramos pin para activar positivo bombilla 4
int alarma=4;//declaramos pin para activar positivo la alarma
//Declaramos variables para activar y desactivar el servo
int pinservo=8;//declaramos pin para enviar info al motor
int pulsomin = 1000;
int pulsomax = 2000;
void setup()
{
servo.attach(pinservo,pulsomin,pulsomax); //comando para definir el servo servo.attach(pinservo,pulsomin,pulsomax)
Serial.begin(9600);//iniciamos el puerto en serie del monitor
sensor.enableIRIn();//habilitamos el sensor infrarrojo para lectura del control remoto
servo.write(0);//inicializamos el servomotor en la posición inicial 0 grados
pinMode(led1,OUTPUT);//establecemos el pin como dato que sale del Arduino
pinMode(led2,OUTPUT);//establecemos el pin como dato que sale del Arduino
pinMode(led3,OUTPUT);//establecemos el pin como dato que sale del Arduino
pinMode(led4,OUTPUT);//establecemos el pin como dato que sale del Arduino
pinMode(alarma,OUTPUT);//establecemos el pin como dato que sale del Arduino
digitalWrite(13,0);//establecemos los pines que serán actividaos para escritura digital -> digitalWrite(pin,activación con 1 ó 0)
digitalWrite(12,0);
digitalWrite(11,0);
digitalWrite(10,0);
digitalWrite(4,0);
}
void loop() //algoritmo de la programación que se repitará siempre
{
if (sensor.decode(&lectura)) //Si hay una lectura del sensor IR (Se ha pulsado el control remoto)
{
switch (lectura.value)
{
case 0xFD08F7: //código de frecuencia botón 1
if (led1 == 1)
{
digitalWrite(13,LOW); //si estaba encendido, lo apaga
led1 = 0;
}
else
{
digitalWrite(13,HIGH); //si estaba apagado, lo enciende
led1 = 1;
}
break;
case 0xFD8877: //código de frecuencia del botón 2
if (led2 == 1)
{
digitalWrite(12,LOW); //si estaba encendido, lo apaga
led2 = 0;
}
else
{
digitalWrite(12,HIGH); //si estaba apagado, lo enciende
led2 = 1;
}
break;
case 0xFD48B7: //código de frecuencia botón 3
if (led3 == 1)
{
digitalWrite(11,LOW); //si estaba encendido, lo apaga
led3 = 0;
}
else
{
digitalWrite(11,HIGH); //si estaba apagado, lo enciende
led3 = 1;
}
break;
case 0xFD28D7: //Corresponde al botón 4
if (led4 == 1)
{
digitalWrite(10, LOW); //Si estaba apagado lo enciende
led4 = 0;
}
else
{
digitalWrite(10, HIGH); //Si estaba encendido lo apaga
led4 = 1;
}
break;
case 0xFD58A7: //Corresponde al botón 9
if (alarma == 1)
{
digitalWrite(4, LOW); //Si estaba apagado lo enciende
alarma = 0;
}
else
{
digitalWrite(4, HIGH); //Si estaba encendido lo apaga
alarma = 1;
}
break;
case 0xFDA857: //Corresponde al botón 5
for (int i = 10; i <= 13; i++) //for repite los comandos entre corchetes desde 10 hasta 13
{
digitalWrite(i, LOW); //Apaga todos los LEDs (Escribe bajo los pines)
led1 = 0; //Asigna 0 a la lámpara 1
led2 = 0; //Asigna 0 a la lámpara 2
led3 = 0; //Asigna 0 a la lámpara 3
led4 = 0; //Asigna 0 a la lámpara 4
}
break;
case 0xFD6897: //Corresponde al botón 6
for (int i = 10; i <= 13; i++) //for repite los comandos entre corchetes desde 10 hasta 13
{
digitalWrite(i, HIGH); //Enciende todos los LEDs (Escribe alto los pines)
led1 = 1;
led2 = 1;
led3 = 1;
led4 = 1;
}
break;
case 0xFD18E7: //Corresponde al botón 7
servo.write(180); //desplaza el motor servo al punto 180 grados
delay(500);
break;
case 0xFD9867: //Corresponde al botón 8
servo.write(0); //desplaza el motor servo al punto 0 grados
delay(500);
break;
}
sensor.resume(); //Prepara el sensor infrarrojos para nuevas lecturas
}
}
Los códigos de las frecuencias podéis verlos en la siguiente tabla:
a:
For my remote I got the following conversion table:

| Key | Code |
|---|---|
| POWER | 0xFD00FF |
| VOL+ | 0xFD807F |
| FUNC/STOP | 0xFD40BF |
| │◄◄ | 0xFD20DF |
| ►││ | 0xFDA05F |
| ►►│ | 0xFD609F |
| ▼ | 0xFD10EF |
| VOL- | 0xFD906F |
| ▲ | 0xFD50AF |
| 0 | 0xFD30CF |
| EQ | 0xFDB04F |
| ST/REPT | 0xFD708F |
| 1 | 0xFD08F7 |
| 2 | 0xFD8877 |
| 3 | 0xFD48B7 |
| 4 | 0xFD28D7 |
| 5 | 0xFDA857 |
| 6 | 0xFD6897 |
| 7 | 0xFD18E7 |
| 8 | 0xFD9867 |
| 9 | 0xFD58A7 |

Comentarios
Publicar un comentario