Huerto e Invernadero automatizados con web de control remota

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 <Stepper.h>

// DHT - Version: Latest 
#include <DHT.h>

// Arduino Low Power - Version: 1.2.0
//#include <ArduinoLowPower.h>

#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