Codificación del programa

Aquí tenemos el código que desarrollé al principio del proyecto desde TinkerCAD:

Aquí tenemos el código, donde al principio se declaran las variables que posteriormente usaremos. En el setup gracias a pinMode indicamos si los pines funcionan como salida o entrada. Y en el loop ponemos que se haga una lectura digital de los sensores de nivel y una analógica del de humedad.

Empezamos ahora con condicionales.

Si el valor del sensor de humedad es menor que 150 y el valor del sensor de nivel de la pecera es HIGH. Se riega las plantas con ambas bombas de la pecera. Si no, se apagan las bombas que regarían las plantas.

Si el valor de sensor de nivel de la pecera es LOW y el valor del sensor de la fuente es HIGH. La bomba de la fuente envía agua a la pecera para rellenarla. Si no, se apaga la bomba de la fuente.

Si el valor del sensor de nivel de la fuente es HIGH. Se enciende el led, indicando que no es necesario rellenar la fuente desde el suministro. Si el led está apagado, hace falta rellenar la fuente desde el suministro.

El código final del programa montado en arduino:

int humedad1PIN = A0;

int humedad2PIN = A1;

int valvulaRiegoPIN = 11;

int valvulaRiegoPIN1 = 12;

int sensorhumedad1 = 0;

int sensorhumedad2 = 0;

int nivelagua = 0;

int caso = 0;

#include <Wire.h>

#include "RTClib.h"

// RTC_DS1307 rtc;

RTC_DS3231 rtc;

String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" };

String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };

void setup() {

Serial.begin(9600);

if (!rtc.begin()) {

Serial.println(F("Couldn't find RTC"));

while (1);

}

// Si se ha perdido la corriente, fijar fecha y hora

if (rtc.lostPower()) {

// Fijar a fecha y hora de compilacion

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

// Fijar a fecha y hora específica. En el ejemplo, 21 de Enero de 2016 a las 03:00:00

// rtc.adjust(DateTime(2016, 1, 21, 3, 0, 0));

}

// put your setup code here, to run once:

pinMode(humedad1PIN, INPUT);

pinMode(humedad2PIN, INPUT);

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(8, INPUT);

pinMode(9, INPUT);

pinMode(10, INPUT);

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(13, OUTPUT);

pinMode(12, OUTPUT);

pinMode(11, OUTPUT);


}

void printDate(DateTime date)

{

Serial.print(date.year(), DEC);

Serial.print('/');

Serial.print(date.month(), DEC);

Serial.print('/');

Serial.print(date.day(), DEC);

Serial.print(" (");

Serial.print(daysOfTheWeek[date.dayOfTheWeek()]);

Serial.print(") ");

Serial.print(date.hour(), DEC);

Serial.print(':');

Serial.print(date.minute(), DEC);

Serial.print(':');

Serial.print(date.second(), DEC);

Serial.println();

}

void loop() {

//SENSOR HUMEDAD

sensorhumedad2 = analogRead(humedad2PIN);

sensorhumedad1 = analogRead(humedad1PIN);

if(sensorhumedad2 < 1000 and sensorhumedad1 < 1000){

if(sensorhumedad2 > 700 or sensorhumedad1 > 700){

digitalWrite(valvulaRiegoPIN, LOW);

digitalWrite(valvulaRiegoPIN1, LOW);

delay(10000);

digitalWrite(valvulaRiegoPIN, HIGH);

digitalWrite(valvulaRiegoPIN1, HIGH);

delay(60000);

}

}

//SENSOR NIVEL

if (digitalRead(8)==0 and digitalRead(9)==1 and digitalRead(10)==1 ){

caso = 1;

}


if (digitalRead(9)==0 and digitalRead(10)==1){

caso=2;

}

if (digitalRead(10)==0){

caso = 3;

}

if (digitalRead(8)==1 and digitalRead(9)==0 and digitalRead(10)==0 ){

caso = 0;

}

if (digitalRead(8)==0 and digitalRead(9)==1 and digitalRead(10)==0 ){

caso = 0;

}

if (digitalRead(8)==1 and digitalRead(9)==1 and digitalRead(10)==0 ){

caso = 0;

}

if (digitalRead(8)==1 and digitalRead(9)==1 and digitalRead(10)==1 ){

caso = 0;

}if (digitalRead(8)==1 and digitalRead(9)==0 and digitalRead(10)==1 ){

caso = 0;

}

switch(caso){

case 1: //Nivel Bajo

digitalWrite(2,HIGH);

digitalWrite(3,LOW);

digitalWrite(4,LOW);

digitalWrite(13,HIGH);

break;

case 2: //Nivel Medio

digitalWrite(3,HIGH);

digitalWrite(4,LOW);

digitalWrite(2,LOW);

digitalWrite(13, LOW);

break;

case 3: //Nivel Alto

digitalWrite(4, HIGH);

digitalWrite(3,LOW);

digitalWrite(2,LOW);

digitalWrite(13, LOW);

break;

case 0: //Ninguno

digitalWrite(3,LOW);

digitalWrite(4,LOW);

digitalWrite(13, HIGH);

digitalWrite(2, HIGH);

delay(500);

digitalWrite(2, LOW);

delay(500);

break;

}

DateTime now = rtc.now();

printDate(now);

int Bomba = 13;

pinMode(Bomba, OUTPUT);

int A=4;

if (now.hour() == 00){

A+=1;

}

if(A==8){

A=1;

}

if(daysOfTheWeek[A] != "Sabado" or daysOfTheWeek[A] != "Domingo" ){

if(now.hour()>= 8 and now.hour()<= 15){

digitalWrite(Bomba, LOW);

}

}

}