#include <DHT.h>
#include <Servo.h>
// Configuración del sensor DHT
#define DHTPIN 2 // Pin conectado al sensor DHT
#define DHTTYPE DHT11 // Tipo de sensor: DHT11 o DHT22
DHT dht(DHTPIN, DHTTYPE); // Crear objeto DHT
// Configuración del servomotor
Servo servo; // Crear objeto Servo
const int servoPin = 9; // Pin donde está conectado el servomotor
// Variables para controlar la histeresis
int estadoAnterior = -1; // Variable para almacenar el estado anterior del servomotor
void setup() {
Serial.begin(9600); // Iniciar comunicación serial
dht.begin(); // Iniciar el sensor de humedad
servo.attach(servoPin); // Conectar el servomotor al pin especificado
}
void loop() {
// Leer el valor de humedad
float humedad = dht.readHumidity();
// Comprobar si la lectura es válida
if (isnan(humedad))
Serial.println("Error al leer el sensor de humedad");
return;
}
// Mostrar el valor de humedad
Serial.print("Humedad: ");
Serial.print(humedad);
Serial.println("%");
int angulo = -1; // Variable para el ángulo del servomotor
// Lógica para controlar el servomotor con histeresis
if (humedad < 30) {
angulo = 90; // Colocar el servomotor en 90° si la humedad es menor al 30%
}
else if (humedad > 32) {
angulo = 0; // Colocar el servomotor en 0° si la humedad es mayor al 32%
}
// Si la humedad está en el rango de 30% a 32%, mantener la última posición
if (angulo != -1) {
// Si el ángulo es diferente de -1, es que hubo un cambio en la humedad
estadoAnterior = angulo;
servo.write(angulo);
} else {
// Si no hubo cambio, mantener la última posición
if (estadoAnterior != -1) {
servo.write(estadoAnterior);
}
}
// Mostrar el ángulo actual del servomotor
Serial.print("Posición: ");
Serial.print(estadoAnterior);
Serial.println("°");
// Esperar un segundo antes de la próxima lectura
delay(1000);
}