Cada día nuestra persiana se va haciendo más inteligente, o más bien, la voy haciendo menos tonta. Esta vez hemos incluido al sistema un elemento muy importante a la hora de hacerla más autónoma: el sensor de luz, al haberle incorporado la memoria eeprom anteriormente nos posibilita añadirle este tipo de sensores. El funcionamiento en esta primera prueba es muy simple, cuando detecta que hay una determinada luz sube la persiana para así dejar pasarla, y cuando detecta más oscuridad la cierra, partiendo de esto podríamos hacerla a nuestro gusto, y conforme hubiera más luz, se pusiese a una determinada posición. Os dejo el video de prueba
El código es el siguiente:
// Miguel Angel Torres de la Camara, matc2068@gmail.com, openmechatronics.wordpress.com
//Proyecto domotica: control de persianas mediante el sensor de luminosidad
#include <Servo.h>
#include <Wire.h>
#include <CursoArduino.h>
#include <EEPROM.h>
const int analogInPin = A0;
int sensorPin = A0; // pin del sensor de luz
int sensorValue = 0;
int addr = 0;
int estado = EEPROM.read(addr); //estado de la persiana (0-100) guardado en la memoria eeprom
byte valor;void setup(){
inicializa();
Serial.begin(9600);
}
void subePersiana(){ //funcion para subir la persiana (100) desde abajo (0)
if(sensorValue > 640){ //sube la persiana si hay mucha luz
retrocedeDerecho(100);
delay(900);
estado = 100; //al subir el estado es igual a 100
EEPROM.write(addr, estado); //guarda el estado en la direccion 0
}
else{
para();
}}
void bajaPersiana(){ //funcion para bajar la persiana (0) desde arriba (100)
if(sensorValue < 500){ //baja la persiana si hay poca luz
avanzaDerecho(100);
delay(850);//al bajar, el tiempo necesario disminuye
estado = 0; //estado nuevo es igual a 0
EEPROM.write(addr, estado); //guarda estado en la eeprom
}
else{
para();
}}
void loop(){
sensorValue = analogRead(analogInPin);
int dato = Serial.read(); //lee el numero en el serial
if(estado == 100){ //si la persiana esta arriba
bajaPersiana(); //bajala cuando no haya luz
}
else if(estado == 0) { //si la persiana esta abajo
subePersiana(); //subela cuando no haya luz
}
//imprime el estado de la memoria eeprom y el valor del sensor de luminosidad
Serial.print(addr);
Serial.print(«\t»);
Serial.print(EEPROM.read(addr), DEC);
Serial.println();
Serial.print(«sensor = » );
Serial.print(sensorValue);
Serial.println();
delay(30);
}
parabenos es un diseño hermoso!