#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define HUMO_PIN 34
#define BUZZER 25
#define LED_VERDE 18
#define LED_AMARILLO 19
#define LED_ROJO 23
int limiteHumo = 2000;
int tempAlta = 50;
bool alertaEnviada = false;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(BUZZER, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_ROJO, OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
int humo = analogRead(HUMO_PIN);
float temp = dht.readTemperature();
Serial.print("Humo: ");
Serial.print(humo);
Serial.print(" | Temp: ");
Serial.println(temp);
if (humo > limiteHumo && temp > tempAlta) {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, LOW);
alarmaRapida();
mostrar("INCENDIO", "PELIGRO");
if (!alertaEnviada) {
Serial.println("🔥 INCENDIO DETECTADO 🔥");
alertaEnviada = true;
}
}
else if (humo > limiteHumo) {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, LOW);
alarmaLenta();
mostrar("GAS DETECTADO","precaucion");
alertaEnviada = false;
}
else {
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, LOW);
noTone(BUZZER);
mostrar("SISTEMA ESTABLE,","sin riesgo");
alertaEnviada = false;
}
delay(100);
}
void alarmaLenta() {
digitalWrite(LED_AMARILLO, HIGH);
tone(BUZZER, 1000);
delay(200);
digitalWrite(LED_AMARILLO, LOW);
noTone(BUZZER);
delay(800);
}
void alarmaRapida() {
digitalWrite(LED_ROJO, HIGH);
tone(BUZZER, 1500);
delay(100);
digitalWrite(LED_ROJO, LOW);
noTone(BUZZER);
delay(100);
}
void mostrar(String linea1, String linea2) {
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.println(linea1);
display.setTextSize(1);
display.setCursor(0, 45);
display.println(linea2);
display.display();
}
Loading
ssd1306
ssd1306