Invernadero interior independiente – Proyecto de trabajo real maduro

Invernadero interior independiente – Proyecto de trabajo real maduro © GPL3+

Otro invernadero interior alimentado por Nano. Entorno 100% controlado con algunos beneficios añadidos que hacen la vida más fácil.

Componentes y suministros

ard nano
arduino nano r3
× 1
Ge6mtc5pim8a5v4ehamx
Escudo Arduino 4 Relés
Es un bloque de 4 relés.
× 1
51gzz5eu9pl.  sx425
Sensor ultrasónico – HC-SR04 (Genérico)
× 1
13285 01
Sensor de movimiento PIR (genérico)
× 1
09590 01
LED (genérico)
× 1
181 02
LCD estándar de Adafruit – 16×2 Blanco sobre azul
Interfaz I2C soldada.
× 1
6w4a8521 450x300
DFRobot Gravity: sensor analógico capacitivo de humedad del suelo – resistente a la corrosión
un sensor sencillo
× 2
Ti tg 02b dc12b a
Bomba de líquido RobotGeek DC – Grande
Esta es una bomba de líquido genérica
× 2
Válvula de líquido
× 1
Reserva de agua
× 1
10167 01
Sensor de temperatura DHT22
× 1

Herramientas y máquinas necesarias.

09507 01
Soldador (genérico)

Acerca de este proyecto

Bueno, me gusta cultivar mis propios vegetales.

Descubrí Arduino hace apenas unos meses y quedé maravillado con esta pequeña placa. Antes probé Raspberry y Python pero no me inspiraron.

Entonces, después de algunos intentos (temporizador de reacción, sensor de piso automatizado, puerta de riel para el tren de mi hijo), decidí construir algo más serio y funcional.

Bueno, depende de ti verlo.

Descripción del Proyecto:

La estructura principal es un armario portátil IKEA rediseñado. Agregué aislamiento de poliestireno y construí otro estante en el medio. Después de estos tengo tres estantes. El más bajo es principalmente para iniciar semillas: hay una estera calefactora. Los otros dos son para plantas.

La circulación del aire, el calentamiento y la medición de la temperatura/humedad se realizan mediante un “horno” de tubería ABC. Se utiliza un sensor DHT22 para medir la temperatura y la humedad.

El control de la humedad se realiza mediante un pequeño ventilador de «jaula de ardilla» de 12 V.

Un Arduino Nano (placa compatible) está en el centro de la unidad de control. Hay una pantalla LCD I2C para mostrar todos los parámetros y estados necesarios. El sensor de movimiento IR activa la luz de fondo de la pantalla LCD cuando hay alguien en el área.

Hay un reloj de relé RTC que da, a través de un pin digital, una referencia de «día/noche» a todo el sistema. La temperatura interior tiene dos puntos de ajuste «noche» y «día» para simular condiciones reales. Las luces permanecen encendidas durante el «día» durante unas 15 horas.

Sistema de riego: un depósito de agua de lluvia (nieve) está conectado a un bloque con dos bombas a través de una electroválvula y un filtro. El nivel del agua se mide con un sensor ultrasónico. Dos sensores capacitivos de humedad del suelo monitorean la humedad y activan las bombas de agua de forma independiente para su zona respectiva. El riego se bloquea cuando el nivel de agua en el barril se vuelve crítico y un LED muestra una advertencia de «bajo nivel de agua».

Así que básicamente ese es el proyecto. Disfrute y haga preguntas si es necesario. También hablo francés, rumano y ruso.

codificado

Código Arduino de efecto invernadero. Un proyecto de trabajo real.arduino
Tenga en cuenta que algunas partes del código aún están en desarrollo. Comprueba siempre la compatibilidad y recuerda mantener mi nombre como referencia. Gracias
//===GreenHouse sketch created by Victor Onofrei. 2019===
#include <DHT.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <HCSR04.h>
#include <SandTimer.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27,20,4);
HCSR04 watersens(5,6);
SandTimer timersensor;
SandTimer backlightimer;
SandTimer pump1timer;
SandTimer pump2timer;
const int lowaterled=4;
const int venthum=7;
const int irsensor=8;
const int pump2=9;
const int heaterpin=10;
const int lightpin=11;
const int pump1=12;
const int timerpin=13;
int h=0;
int t=0;
int Soil1=0; //lower soil moisture sensor
int Soil2=0;
int settemp;
int daytemp=26;
int nightemp=23;
int timervalue;
int motiondetect;
int waterlevel;


void setup() {
  dht.begin();
  lcd.init();
  timersensor.start(2000);
  backlightimer.start(30000);
  pump1timer.start(10000);
  pump2timer.start(10000);
  pinMode(heaterpin, OUTPUT);
  pinMode(timerpin, INPUT);
  pinMode(lightpin, OUTPUT);
  pinMode(lowaterled, OUTPUT);
  pinMode(venthum, OUTPUT);
  pinMode(irsensor, INPUT);
  pinMode(pump1, OUTPUT);
  pinMode(pump2, OUTPUT);
  digitalWrite(pump1, HIGH);
  digitalWrite(pump2, HIGH);
 }

void loop() {
  sensorcheck();
  lowater();
  settempset();
  humidcontrol();
  runheat();
  runlights();
  lcdprint();
  lcdbacklight();
  watering();
 }

//===========Functions=============

void sensorcheck(){
  if (timersensor.finished()){
    h=dht.readHumidity();
    t=dht.readTemperature();
    timervalue=digitalRead(timerpin);
    Soil1=analogRead(6);
    Soil2=analogRead(7);
    Soil1=map(Soil1,560,270,01,99);
    Soil2=map(Soil2,545,270,01,99);
    motiondetect=digitalRead(irsensor);
    waterlevel=watersens.dist();
    waterlevel=map(waterlevel,3,57,99,01);
    timersensor.startOver();
  }
}

void lowater(){
  if (waterlevel<=3){
    digitalWrite(lowaterled, HIGH);
  }
  else{
    digitalWrite(lowaterled, LOW);
  }
}

void watering(){
  if ((waterlevel>=3)&&(Soil1<=24)){
    digitalWrite(pump1, LOW);
//    if (pump1timer.finished()){
//      digitalWrite(pump1, HIGH);
//      pump1timer.startOver();
//    }
  }
else{
  digitalWrite(pump1, HIGH);  
}
  
  if ((waterlevel>=3)&&(Soil2<=24)){
    digitalWrite(pump2, LOW);
//    if (pump2timer.finished()){
//      digitalWrite(pump2, HIGH);
//      pump2timer.startOver();
//    }
  }
else {
  digitalWrite(pump2, HIGH);
}
}

void settempset(){
  if (timervalue==HIGH){
  settemp=daytemp;
}
else{
  settemp=nightemp;
}
}

void lcdbacklight(){
    if (motiondetect==1){
    lcd.backlight();
  }
else if ((motiondetect==0)&&(backlightimer.finished())){
  lcd.noBacklight();
  backlightimer.startOver();
}
}

void humidcontrol(){
  if(h>=72){
  digitalWrite(venthum, HIGH);
}
else if (h<=65){
  digitalWrite(venthum, LOW);
}
}

void runheat(){
  if(t>=settemp){
  digitalWrite(heaterpin, HIGH);
}
else{
  digitalWrite(heaterpin, LOW);
}
}

void runlights(){
if (timervalue==LOW){
  digitalWrite(lightpin, HIGH);
}
else{
  digitalWrite(lightpin, LOW);
}
}

void lcdprint(){
  lcd.setCursor(0,0);
  lcd.print("T/H:");
  lcd.print(t);
  lcd.print("/");
  lcd.print(h);
  lcd.setCursor(10,0);
  lcd.print("WL:");
  lcd.print(waterlevel);
  lcd.print("%");
  lcd.setCursor(0,1);
  lcd.print("Z1:");
  lcd.print(Soil1);
  lcd.print("%");
  lcd.print(" ");
  lcd.print("Z2:");
  lcd.print(Soil2);
  lcd.print("%");
}

Fuente Arduino.cc