#include "DHT.h" // Configuración del hardware #define DHTPIN 2 // Pin de datos (S) del DHT11 [cite: 1] #define DHTTYPE DHT11 #define VIBRADOR 9 // Pin del motor vibrador DHT dht(DHTPIN, DHTTYPE); // Variables de control float umbralAlerta = 26.0; // Temperatura de activación definida por el usuario float tempAmbiente = 0; bool ambienteCapturado = false; void setup() { Serial.begin(9600); dht.begin(); pinMode(VIBRADOR, OUTPUT); Serial.println("Sistema Tonalli: Monitoreo Activo..."); [cite: 3] } void loop() { // El DHT11 requiere al menos 2 segundos entre lecturas delay(2000); float t = dht.readTemperature(); // Lectura digital de temperatura [cite: 1] // Validar que el sensor esté respondiendo if (isnan(t)) { Serial.println("Error: No se detecta el sensor DHT11"); return; } // Establecemos la temperatura de referencia la primera vez que se enciende if (!ambienteCapturado) { tempAmbiente = t; ambienteCapturado = true; Serial.print("Referencia ambiente establecida en: "); Serial.print(tempAmbiente); Serial.println("°C"); } // Monitor Serie para calibración [cite: 5] Serial.print("Temp Actual: "); Serial.print(t); Serial.println("°C"); // LÓGICA DE VIBRACIÓN SEGÚN EL CAMBIO TÉRMICO if (t > umbralAlerta) { // CASO 1: TEMPERATURA ALTA (Calor arriba de 26°C) [cite: 4] // Vibración rápida: 1 segundo por ciclo Serial.println("!!! ALERTA: Calor detectado - Vibración rápida !!!"); [cite: 4, 5] digitalWrite(VIBRADOR, HIGH); delay(500); digitalWrite(VIBRADOR, LOW); delay(500); } else if (t < (tempAmbiente - 1.0)) { // CASO 2: TEMPERATURA BAJA (Frío respecto al inicio) // Vibración lenta: 3 segundos por ciclo Serial.println("Aviso: Descenso de temperatura - Vibración lenta"); digitalWrite(VIBRADOR, HIGH); delay(500); digitalWrite(VIBRADOR, LOW); delay(2500); } else { // CASO 3: TEMPERATURA NORMAL digitalWrite(VIBRADOR, LOW); Serial.println("Temperatura estable."); [cite: 6] } }