martes, 31 de enero de 2023

MINI INVERNADERO


 

 

Alumna: D. Patricia Blanco Figueredo

Asignatura: Innovación Docente de la Especialidad de Tecnología

Máster: Máster Universitario en Profesor de Educación Secundaria Obligatoria y Bachillerato, Formación Profesional y Enseñanza de Idiomas 

Centro: Universidad de Salamanca

Curso: 2022/2023 

PROYECTO

 


 

DESCRIPCIÓN DEL PROYECTO 

Proyecto planteado para 3ro y 4to de la Eso en la asignatura de Tecnología. 

Este proyecto plantea un Mini invernadero que permite albergar una planta o varias, ya sean para uso culinario, como puede ser una planta de perejil, de albahaca, cilantro, tomate etc, o  plantas ornamentales que necesite una temperatura óptima todo el año. 

El sistema del min invernadero mide la humedad y la temperatura del interior, siendo la óptima de 18 a 24 grados centígrados encendiendo el led de color azul si se encuentra a esta temperatura, e indicando en la pantalla LCD "Stable". A partir de los 25 grados se encendería el led rojo y se marcaría en la pantalla LCD el mensaje "Danger". Al detectar el sensor una temperatura de más de 25 grados centígrados se activaría el Servomotor que giraría 90 grados para que la puerta superior del mini invernadero de abriese y ventilará hasta alcanzar la temperatura menor de 25 grados activando, así nuevamente el servomotor que volvería a la posición 0 que cerraría la ventana. 

 COMPONENTES

1

Arduino Uno R3

1

Posicional Microservomotor

1

LCD 16 x 2

1

250 kΩ Potenciómetro

1

Rojo LED

1

Azul LED

2

1 kΩ Resistencia

1

 Sensor de Temperatura y humedad DHT 

 
 
ESQUEMA 
 

 

 







CÓDIGO


 


#include <Servo.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11



static const int DHT_SENSOR_PIN = 3;
DHT_nonblocking dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);

// initialize the LCD library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup()
{
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  lcd.print("Mi Planta"); //salida de texto inicio en pantalla
  lcd.setCursor(0, 2);

  Serial.begin(9600);  
  myservo.attach(2);  // pin del servo
 
}

/*
 * Poll for a measurement, keeping the state machine alive.  Returns
 * true if a measurement is available.
 */
static bool measure_environment(float *temperature, float *humidity) //estado del entorno
{
  static unsigned long measurement_timestamp = millis();

  /* Measure */
  if (millis() - measurement_timestamp > 1000ul)
  {
    if (dht_sensor.measure(temperature, humidity) == true)
    {
      measurement_timestamp = millis();
      return (true);
    }
  }

  return (false);

}

void loop()
{
 
  float temperature; // variable de temperatura decimal
  float humidity;//variable de humedad decimal

  /* Measure temperature and humidity.  If the functions returns
     true, then a measurement is available. */
  if (measure_environment(&temperature, &humidity) == true)
  {
    lcd.setCursor(0, 0);
    lcd.print("T = ");
    lcd.print(temperature, 1);
    lcd.print("C");
    lcd.setCursor(0, 1);
    lcd.print("H = ");
    lcd.print(humidity, 1);

    if (temperature > 24.0)
    {
      digitalWrite(5, HIGH);
      digitalWrite(4, LOW);
      lcd.print("Danger"); // mensaje que la temperatura alta peligro planta en peligro
      myservo.writeMicroseconds(1000);// se posiciona el servo en cero grados se abre la ventana
     
   
    }
    else
    {
      digitalWrite(5, LOW);
      digitalWrite(4, HIGH);
      lcd.print("Estable"); // mensaje que la temperatura idonea
       myservo.writeMicroseconds(2000);  // se posiciona el servo en 180 grados se cierra la ventana
    }

/* //-----Bucle Movimiento servo si quisieramos que la ventana se cierre y
se abra constantemente para regular temperatura---  
   for (pos = 0; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 120; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }*/
   
  }
 

}