Las plantas tienen diferentes ciclos de riego que afectarán de manera importante su desarrollo a lo largo del tiempo. En el caso de las plantas crasas, un sobreexceso de agua puede pudrir las raíces o fomentar la aparición de hongos, o en el caso de que no se riegue, la planta se secará. En el caso de plantas de hogar puede ser pregunta frecuente el “¿Cuando fue la última vez que regué esa planta?” o el establecer cuanta agua utilizar y cada cuanto tiempo hacer el riego.
Monitoreo de humedad en tierra
Características:
- Medición de humedad en tierra a través de una interfaz web (utilizando una conexión ethernet). El sistema actualmente realiza la medición del sensor cuando llega una solicitud http en el puerto 80, por lo que el siguiente paso sería implementar un programa que periodicamente consulte el sensor, y guarde esa información en algun tipo de almacenamiento.
Materiales:
- Arduino Duemilanove (ATMega328p)
- Shield Ethernet HR911105A
- Moisture sensor v2 (Sensor de humedad) Wiki
- 1 LED de 3 colores y sus respectivas resistencias de 330 ohm
Código:
/** * Sensor de humedad de tierra + Indicador led con estado. */ #include <SPI.h> #include <Ethernet.h> // Pines int sensorHumedad = 0; int ledRojo = 5; int ledVerde = 6; int ledAzul = 9; int tempo = 2000; int lecturaSensor; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; EthernetServer server = EthernetServer(80); void prenderRojo() { analogWrite(ledRojo, HIGH); analogWrite(ledVerde, LOW); analogWrite(ledAzul, LOW); } void prenderAzul() { analogWrite(ledRojo, LOW); analogWrite(ledVerde, LOW); analogWrite(ledAzul, HIGH); } void prenderVerde() { analogWrite(ledRojo, LOW); analogWrite(ledVerde, HIGH); analogWrite(ledAzul, LOW); } void setup() { analogWrite(ledVerde, HIGH); delay(tempo/4); analogWrite(ledVerde, LOW); delay(tempo/4); analogWrite(ledAzul, HIGH); delay(tempo/4); analogWrite(ledAzul, LOW); delay(tempo); Serial.begin(57600); Ethernet.begin(mac); server.begin(); } void loop() { EthernetClient client = server.available(); if (client) { // una solicitud HTTP termina con un salto de línea boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // si se llega al final de la línea (caracter de nueva línea // recibido) y la línea esta vacía, la solicitud HTTP terminó, // por lo que se puede enviar una respuesta if (c == '\n' && currentLineIsBlank) { // enviar una cabecera estandar de respuesta http client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); lecturaSensor = analogRead(sensorHumedad); client.print("Valor sensor de humedad: "); client.print(lecturaSensor); client.println("<br />"); break; } if (c == '\n') { // empieza una nueva línea currentLineIsBlank = true; } else if (c != '\r') { // Se ha encontrado un caracter en la línea actual currentLineIsBlank = false; } } } // Darle tiempo al navegador para recibir la información delay(1); client.stop(); } Serial.print("Valor sensor de humedad:"); lecturaSensor = analogRead(sensorHumedad); Serial.println(lecturaSensor); if(lecturaSensor < 300) { prenderRojo(); } else if(lecturaSensor < 700) { prenderVerde(); } else { prenderAzul(); } delay(tempo); }