You are on page 1of 3

/*

RIEGO AUTOMATICO CON SENSOR DE LUZ


Con este pequeo codigo podras regar tu maceta automaticamente,
preocupandote unicamente de que no le falte agua al deposito.
Para activarlo, unicamente pulsaremos el boton que indica al
programa que tiene que regar.
El programa lo primero que comprobara es que sea de noche, mediante
un sensor de luz.
Confirmado que no hay luz, comprobara que el sensor del plato de
la maceta este seco (circuito abierto), y procedera a encender la
bomba durante 5 segundos, despues hara una pausa de unos 5 minutos
para darle tiempo al agua a que se filtre en el sustrato.
Pasados esos 5 minutos vuelve a comprobar que el plato este seco.
Si es asi volvera a encender la bomba durante otros 5 segundos y la
volvera a apagar durante otros 5 minutos.

Una vez que el programa detecta que el plato esta mojado (circuito
cerrado)
para la bomba y hace un reset de la placa para vaciar todas las
variables
y esperar a que vuelvas a pulsar el boton de inicio.*/
int humedad = 0;
int luz = 1000;
int pulsado = 0;
void setup(){
Serial.begin(9600);
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
//este pin lo utilizamos para encender la bomba,
a travs del rel.
pinMode(5, INPUT);
//este pin sirve para detectar si hay humedad o
no. Si detecta energia, es que hay humedad.
pinMode(3, INPUT);
//Este pin lee el estado del pulsador de inicio
de riego.
//tambin se usa el pin A0, que servir para
detectar la cantidad de luz que hay en el exterior, a travs de un sensor
de luz.
}
void loop() {
if (digitalRead(3) == 1) { //comprobamos que el pulsador esta
presionado.
pulsado = 1;
digitalWrite(12, HIGH); //Encendemos un led que nos indica que el
pulsador se a presionado.
}
pulsador();
}
void pulsador() {
int intensidad = analogRead (A0); //se guarda en la variabla la
"cantidad de luz" que hay en el exterior

Serial.println("Intensidad: ");
Serial.println(intensidad); //esto me sirvio a mi para ver las salidas
cuando estuve haciendo el programa.
Serial.println("\n");
delay(1000);
if (pulsado == 1) {
Serial.println("Pulsador: SI");
//Lo mismo, esto es para cuando
estuve aciendo el trasto xD+
if (intensidad > luz) { //analiza la luz exterior es inforior al
lmite que hemos marcado. si esto pasa, se cumple el condicional (se
supondr que es de noche)
delay(5000);
if (intensidad > luz){ //se esperan 5 segundos y se vuelve a
analizar si es de noche o no. esto sirve para evitar que el sistema
reconozca como noche una sombra de una persona, etc
pulsado = 1;
riego();
}
}else {
digitalWrite(10, LOW); //si no hay luz (es de dia), el riego se
apaga.
//pulsado = 0;

}
}else {
Serial.println("Pulsador: NO");}

void riego() {
if (digitalRead(5) == 0) { //en el caso en que se confirme que es
de noche, se analizar si hay humedad o no, en el caso en que no haya, se
cumple el condicional
delay(2000);
humedad = 0; //se establece en la variable de humedad, que no
la tierra no est hmeda
Serial.println ("Maceta:"); Serial.println(humedad); //mas de
lo mismo
digitalWrite(9, HIGH); //se encienda la vlvula y comienza el
riego
Serial.println("Bomba ON");
delay(25000);
digitalWrite(9, LOW); // se para durante 5 minutos
Serial.println("Bomba OFF");
delay(120000);
riego();
//volvemos a iniciar la funcion rieego para que
compruebe la humedad del plato.
}
else {digitalWrite (9, LOW);
humedad = 1; //se se detecta que hay humedad, se establece que hay
humedad en la variable y se apaga el riego
Serial.println("Maceta: ");
Serial.println(humedad);
software_Reset();
//resetamos la placa para liberar las
variables.
}
}

void software_Reset() //Hacemos parpadear el led y resetamos la placa.


{
Serial.println("RESET");
pulsado = 0;
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(2000);
asm volatile (" jmp 0");
}

You might also like