Huerto e Invernadero automatizados con web de control remota

mavicente: Has mirado a usar node mcu, es muy similar a arduino y permite conexión wifi

Te respondo con esta respuesta del propio autor del hilo

  1. trabajar con modulos ESP8266 wifi, como hace @jscarr2, donde me quitaría 2 piezas, el Arduino micro y el transmisor, tendría la ventaja de ser wifi pero como desventaja el alto consumo.

O sea.. va a atrabajar con nodemcu.

Me quedo por aquí para ver cómo progresa el proyecto... estoy interesado en algo similar...

surbyte: Te respondo con esta respuesta del propio autor del hilo

Perdón no lo había visto.

Buenas,

Efectivamente he descartado el uso de wifi por el alto consumo, quiero que el proyecto sea lo mas barato posible y una buena parte se va a ir en placas solares y baterías. Trabajare con modulo RFM69W

Para ir empezando me he centrado en lo que mas urgente me es, poder abrir y cerrar la ventana del invernadero dependiendo de la humedad y la temperatura. He comprado las siguientes piezas y estoy a la espera de que me lleguen:

  • Arduino uno
  • Motor paso a paso (Todavia no se cual elegir)
  • Sensor DHT22
  • L293D
  • Tornillo roscado de impresoras CNC
  • Potenciometro (Regular velocidad del motor)

Tengo una ventana abatible y mi idea es fijar el motor al marco superior, fijarle la varilla al eje del motor y en la parte de abajo realizar algún tipo de estructura fija que soporte la tuerca.

Cuando se quiera bajar la ventana accionare el motor y el giro de este ira enroscando la varilla dentro de la tuerca haciendo que la ventana se abra.

Cuando se quiera cerrar la ventana se realizara el proceso contrario. Dibujo muy mal pero sino se entiende podría intentar dibujarlo.

He desarrollado una primera versión del código:

// Stepper - Version: 1.1.2
#include 

// DHT - Version: Latest 
#include 

// Arduino Low Power - Version: 1.2.0
//#include 

#define STEPS 200
#define NUNVUELTAS 100
#define DHTTYPE DHT22

const int POT = A0;
const int DHTPin = 5;   
const float maxTemperature = 35 ;
const float maxHumidity = 70 ;
const int minRpm = 30 ;
const int maxRpm = 150 ;
const int openDirection = STEPS * NUNVUELTAS ;
const int closeDirection = STEPS * NUNVUELTAS * -1 ;
String stepperStatus = "" ;

DHT dht(DHTPin, DHTTYPE);
Stepper stepper(STEPS, 8, 9);

void setup() {
  Serial.begin(9600);
  Serial.println("Ventana");
  dht.begin();
}

void loop() {
// Apagamos 15 x 8 segundo, que es limite de tiempo
// for (int i = 0 ;  i  <  16 ; i++)
//   LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); 

  //Coprobamos la temperatura y humedad
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  
  if (isnan(temperature) || isnan(humidity)) {
    //Failed to read from DHT sensor!
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println(" %\t");
  
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" *C ");
  
  //Lectura potenciómetro
  int potenciometer = analogRead(POT); 
  //Establecemos la velocidad
  int velocity = map(potenciometer, 0, 1023, minRpm, maxRpm); 
  
  if (isnan(velocity)) {
    //Failed to read Potencimeter
    Serial.println("Failed to read Potencimeter!");
    return;
  }
  
  Serial.print("Velocity: ");
  Serial.print(velocity);
  Serial.println(" RPM ");


  Serial.print("Posicion: ");
  Serial.println(stepperStatus);
  
  if (temperature > maxTemperature || humidity > maxHumidity) {
    if(stepperStatus != "Open") {
      Serial.println("Open Window!");
      move(velocity, openDirection);
      stepperStatus = "Open";
      delay(6000);
    }
  } else {
    if(stepperStatus != "Close") {
      Serial.println("Close Window!");
      move(velocity, closeDirection);
      stepperStatus = "Close";
      delay(6000);
    }  
  }
  Serial.println("End");
  delay(60000);
}

void move(int velocity, int direction) {
  Serial.print("Move engine: ");
  Serial.print(direction);
  Serial.println(" Direction ");
  stepper.setSpeed(velocity);
  stepper.step(direction); 
  return;
}

que tal lo veis?

Segun me vayan llegando los componentes are avanzando.

PD: Sigo buscando una alternativa barata para el convertidor Lipo rider

Buenos dias:

Mientras espero que me vengan los componentes estoy intentando ajustar al máximo el presupuesto de las estacas, he descubierto que el modulo RFM69W necesita de un Arduino, ósea que ese gasto no lo quito.

tengo en mente lo siguiente:

  • Arduino Nano pro
  • Modulo
  • Panel solar 1w 6v
  • Bateria 6000 mah
  • convertidor: Convertidor Es valido para lo que necesito?

  • Sensor DHT22

  • Sensor humedad Suelo

He calculado que con ese panel solar y quitando un 20% la bateria se podría cargar en 4,5 horas de luz solar. Como veis el dimensionamenito de la bateria, me quedo corto?

Gracias y un saludo

Has pensado usar un esp32 + LoRa??

Pues no lo he pensado por desconocimiento, la verdad que son novatillo en esto y no sabia que existían estos módulos, si he entendido bien el ESP32 es como un Arduino + comunicación Wifi + bajo consumo y que se puede programar igual que Arduino, cierto?

De esta forma puedo prescindir del Arduino y del modulo RFM69W con las ventajas de la comunicación Wifi, cierto?

Gracias

Si, se puede programar con el IDE de arduino, es muy fácil de configurar y hay muchos tutoriales. si buscas un poco por china ni llegan a 10€ y lo tienes todo ahi (los esp8266 son parecidos, son los predecesores).

Y si ves que el wifi te puede dar jaleo por alguna razón o vives a <10km monta LoRa y lo puedes ver directamente desde casa. Lo malo es que la trama de datos que puede mandar es mucho mas pequeña que la de Wifi, pero para mandar los datos de los sensores te sobra!

Pufff, que jaleo, con tanta información. El tema del wifi lo descarte por consumos, mi idea es ahorrar en la placa solar y la bateria.

Por otro lado no se que montar si un mesh network, si usar lora, si solo wifi, si comunicación bidirectional, cada vez lo veo mas complicado y con menos ejemplos en internet

Mi primera idea era:

  • 15 clientes y 1 servidor,
  • cada 15 minutos leen la temperatura y la enviar al servidor
  • cuando el servidor activa el riego comunica a los clientes que deben leer la humedad cada 10 segundos
  • cuando la humedad media alcanza la mínima detiene el riego
  • comunica a los clientes que vuelvan a enviar las lecturas cada 15 minutos

Esto me implica comunicación bidireccional, e implementar algún tipo de websocket para comunicar el servidor con los clientes.

Ahora estoy pensando esto:

  • 15 clientes y 1 servidor
  • cada 15 minutos leen la temperatura y la enviar al servidor
  • cada x tiempo pedirle al servidor la humedad mínima
  • Si la humedad esta por debajo de la mínima leer y enviar cada 10 segundos, aquí puedo devolver el estado del riego
  • cuando la humedad media alcanza la mínima detiene el riego
  • cuando el estado del riego paso a enviar cada 15 minutos

De esta forma me evito tener que implementar la comunicación del servidor con los clientes, pero tengo que implementar un nuevo endpoint para que lea la temperatura mínima. También podría darse el caso de que este leyendo cada 10 segundo y el riego no este activo

El servidor y los sensores estarán a manos de 50 metros unos de otros.

que os parece?

Te voy a dar una idea, basada en un proyecto en el que estoy trabajando.

Conectas todos los clientes que quieras por wifi y los programas para que cada 15 min te manden un string con los datos que necesites. El resto del tiempo puedes programar que se duerman... el consumo medio es de 80mA, en procesamiento <150mA y dormido unos 2.5uA.

No se que batería le quieres poner pero con una de 2000mA te da para un día entero (sin contar la energía que produce el panel)

la idea es ponerle una bateria de 6000ma, osga que tenderia para 3 días mas lo que da el panel.

Pero necesito que cuando se active el riego la medición sea mas continua para poder cortar el riego cuando llegue a la humedad deseada, con ese planteamiento en el peor de los casos podría estar regando 15 minutos de mas y el agua que tengo es de depósitos, de ahí que quiera optimizarla al máximo

Gracias

Metele un if que condicione que si esta regando se haga una lectura cada 5min ( o menos, lo que consideres) y el resto del tiempo cada 15 min. y quizas otro if para q por la noche solo te tome una lectura cada hora o cada 2h para ver temperatura y poco mas, realmente no vas a regar por la noche.

El problema es que el que riega y que lee la temperatura y humedad no son el mismo Arduino, de ahí que necesite un mecanismo para que se comuniquen y sepa que se ha activado el riego.

Tendré unas 15 estacas leyendo la humedad de diferentes partes del huerto y el servidor central será el que tenga el control de las electrovalvulas para abir y cerrar el riego.

Por otro lado para saber si es de noche o necesito un reloj + pila o sensor de luz, cierto?

Gracias

Yo utilizara un modulo de relé, q cuestan 1-2€ para activar directamente la bomba d riego, estan tirados de precio, los tienes por apenas 1€ los optoacoplados y no llega a 3€ los SSR. ( envio desde España)

Relé Optoacoplado

Relé Estado Sólido

El tema del reloj te puedes complicar lo q tu quieras... yo para lo que es, pondría algo sencillo y barato, una LDR que en función de la luminosidad te diga "si es de noche" y listo. Así te quitas de tener que programarlo y sincronizarlo con la hora real.

Por otro lado para saber si es de noche o necesito un reloj + pila o sensor de luz, cierto?

Saber si es de noche o dia se resuelve con un LDR. A mi el LDR no me gusta mucho porque tiene solo un UMBRAL que dice Me gusta el sensor de intensidad luminica BH1750 o Lux Meter. Acá tienes un link donde puedes ver el resultado del sensor ante la luz solar

|500x259

Esto te daría momento del dia en los que puedes regar ya que no hay luz solar que es lo que contradice el momento de riego, pero no es relevante.

El otro tema que se debe saber correctamente es la humedad del suelo, y si llueve por ejemplo claramente no habrá necesidad de regar.

Y si tienes muchas zonas tendras que usar algo como un nRF24L01 con un ATtiny85 por ejemplo y alguna batería que lo alimente para que los sensores smart se despierten, envien los datos (humedad y estado de bateria) al master y se pongan a dormir de nuevo para economizar batería.

Guau, no sabia que podia usar un solo micro contralor y no tener que montar un Arduino micro.

una duda, al ATtiny85 le puedo conectar 2 sensores y nRF24L01, tenia idea de montar un sensor de humedad de suelo y un DHT22

Entiendo que con esto el consumo seria mínimo con lo cual también podría bajar la capacidad de la batería y de la placa solar.

A ver.. mira este link (Using ATtiny85, NRF24L01+, DHT2: can't get data from DHT22) que lo busqué con tu pregunta

|500x396

Veo en principio dos pines libres (PB4 y PB5) o sea que sería posible usar uno para el tema de la medicion de suelo.

Buenas

Gracias por el esquema, así me puedo hacer una idea. Ya he encargado unos cuantos componentes mas, los tiny85, el detector de luz solar, una Protoboard, los nRF24L01, 2 baterias 18650, un socket para las pilas y me han surgido unas cuantas dudas:

  • Las baterias las pongo en serie o en paralelo?, según las especificaciones dan 3,7v cada una
  • Las puedo cargar con un polaca solar de 6v 1w?
  • Puedo utilizar esto como controlador de carga?, donde debería conectar el tiny85?
  • Que reles me recomendais Optoacoplados o estado solido?
  • No se si alguien conoce sensores de humedad de suelo estancos, quiero enterrarlos unos 20cm (que es donde están las raíces de las plantas) y solo encuentro de este tipo. Son para clavar en la superficie y no me valen
  • Buscando sensores veo que hay 2 tipos, unos con una pequeña plaquita y otros sin ella, que diferencia hay?

Solo me queda comprar estos sensores y esperar a que me llegue todo para empezar una prueba real.

Gracias a todos

  • Las baterias las pongo en serie o en paralelo?, según las especificaciones dan 3,7v cada una

Porque baterías. 1 sola batería por ATtiny85

  • Las puedo cargar con un polaca solar de 6v 1w?

Con un cargador TP4056 como este

|500x500

  • Puedo utilizar esto como controlador de carga?, donde debería conectar el tiny85?

No entiendo esta pregunta.

  • Que reles me recomendais Optoacoplados o estado solido?

Para controlar electroválvulas 24VAC yo elijo SSR. Asi evitas problemas con las perturbaciones. SI no lo evitas lo minimizas.

  • No se si alguien conoce sensores de humedad de suelo estancos, quiero enterrarlos unos 20cm (que es donde están las raíces de las plantas) y solo encuentro de este tipo. Son para clavar en la superficie y no me valen

Los que conozco son caros. 200 euros

  • Buscando sensores veo que hay 2 tipos, unos con una pequeña plaquita y otros sin ella, que diferencia hay?

Coloca enlaces o imagenes para poder responderte. Usa etiquetas.

TP4046.jpg|700x700

Buenas,

Había pensado en poner 2 baterías para tener algo mas de energía si un día o un par de días esta nublado. El modulo que me indicas es para cargar las baterías con un usb, pero donde van a estar puestos no tengo enchufe para poder conectar las baterías.

El modulo que indico es un controlador de carga solar, he visto el tilo pro, pero se me va de presupuesto, al igual que los sensores que indicas, los he visto por 70E unidad pero imposible poner 12 sensores de esos.

Gracias y un saludo