#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include <DHT.h>
// Definiciones para la pantalla OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Definiciones para el sensor DHT11
#define DHTPIN 2 // Pin digital al que está conectado el DHT11
#define DHTTYPE DHT22 // Define el tipo de sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Definición para el sensor MQ135
#define MQ135PIN A0 // Pin analógico al que está conectado el MQ135
// Definición para el zumbador
#define BUZZERPIN 3 // Pin digital al que está conectado el zumbador
void setup() {
Serial.begin(9600);
// Inicializar el DHT11
dht.begin();
// Inicializar la pantalla OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Error al iniciar la pantalla OLED"));
for(;;);
}
// Invertir la pantalla OLED
display.setRotation(2); // Gira la pantalla 180 grados
display.display();
delay(2000);
display.clearDisplay();
// Configurar el pin del zumbador como salida
pinMode(BUZZERPIN, OUTPUT);
}
void loop() {
// Leer los valores del DHT11
float humedad = dht.readHumidity();
float temperatura = dht.readTemperature();
// Leer el valor del sensor MQ135
int mq135_value = analogRead(MQ135PIN);
// Verificar si hay fallos en las lecturas
if (isnan(humedad) || isnan(temperatura)) {
Serial.println(F("Error en la lectura del DHT11"));
return;
}
// Imprimir los valores en el monitor serie
Serial.print(F("Humedad: "));
Serial.print(humedad);
Serial.print(F("% Temperatura: "));
Serial.print(temperatura);
Serial.print(F("°C MQ135: "));
Serial.println(mq135_value);
// Mostrar los valores en la pantalla OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(F("Humedad: "));
display.print(humedad);
display.println(F("%"));
display.setCursor(0, 10);
display.print(F("Temperatura: "));
display.print(temperatura);
display.println(F(" C"));
display.setCursor(0, 20);
display.print(F("MQ135: "));
display.print(mq135_value);
display.display();
// Activar el zumbador si se detectan condiciones anormales
if (mq135_value > 300 || temperatura > 30 || humedad < 30) { // Ajusta los valores umbrales
tone(BUZZERPIN, 440);
} else {
noTone(BUZZERPIN);
}
// Esperar 2 segundos antes de la siguiente lectura
delay(2000);
}