Proyecto Final 1

Baño automatizado

 

¡Veamos tu primer gran desafío de domótica! En este proyecto, te embarcarás en la emocionante tarea de diseñar y construir un "Baño Inteligente y Sostenible" utilizando tu kit MentorBit. A través de esta experiencia práctica, explorarás cómo la tecnología puede transformar un espacio cotidiano en un ambiente más cómodo, eficiente y consciente con el medio ambiente. Aprenderás a integrar diversos sensores para monitorizar las condiciones del baño en tiempo real y controlar actuadores que reaccionan de forma inteligente, optimizando el confort, la seguridad y el ahorro energético.

Tu misión es crear un prototipo funcional de este innovador sistema. Para lograrlo, utilizarás el sensor DHT11 para registrar continuamente la temperatura y humedad del aire del baño. Si la humedad o la temperatura suben demasiado, el Motor N20 DC con reductora, equipado con una pequeña hélice, se activará para mejorar la ventilación automáticamente; podrás, además, regular manualmente la velocidad de este ventilador mediante el potenciómetro integrado en la placa MentorBit, visualizando los niveles de ventilación en el display de 7 segmentos.

El sistema también gestionará la iluminación: el sensor LDR detectará la intensidad de la luz ambiental y, si las luces están encendidas y hay demasiada luz natural, el brillo del LED RGB se ajustará automáticamente para conseguir una iluminación óptima, reduciendo el consumo innecesario. Para maximizar el ahorro, el sensor PIR detectará la presencia de personas en el baño, apagando el LED verde del MentorBit de forma automática si no se detecta movimiento durante un periodo de tiempo. Toda la información crucial, como la temperatura, humedad y el estado de la luminosidad y ventilación, se mostrará claramente en la pantalla LCD del MentorBit.

Uno de los aspectos más destacables de este proyecto es su enfoque en la sostenibilidad. Todo el sistema estará diseñado para alimentarse y recargarse de manera autónoma, utilizando un panel solar, un módulo de cargador solar y una batería 18650. Esto no solo lo convierte en una solución eco-friendly, sino que también te enseñará sobre la gestión de energía en sistemas embebidos.

Para llevar a cabo este proyecto, contarás con el MentorBit, el módulo expansor de entradas y salidas para conectar todos tus componentes, así como cables JST, tornillos y tuercas para el montaje de tu prototipo.

#include <MentorBit.h>
#include <MentorBitMotores.h>
#include <MentorBitPantallas.h>
#include <MentorBitDisplay.h>
#include <MentorBitSensores.h>
#include <MentorBitLDR.h>
#include <MentorBitDHT11.h>
#include <MentorBitPir.h>
#include <MentorBitRGB.h>
#include <MentorBitPuertos.h>

// --- DEFINICIÓN DE PINES (¡AJUSTA ESTO SEGÚN TUS CONEXIONES REALES!) ---
// Asumo que estás usando el módulo expansor
// Revisa la documentación de tu expansor y MentorBit.


// Actuadores
#define LED_PIN    MentorBitPuertos::PUERTO_MODULO_2_DIGITAL


// --- INSTANCIACIÓN DE OBJETOS ---
MentorBit miMentorBit;
MentorBitMotores DriverMotores;
MentorBitDisplay Display;
MentorBitPantallas DriverPantallas;
MentorBitPuertos miModuloPuertos;

// Sensores
MentorBitPir miPIR(miModuloPuertos.PUERTO_GENERICO_1_DIGITAL_3);
MentorBitDHT11 miDHT(miModuloPuertos.PUERTO_MODULO_1_DIGITAL);


// Declaramos el objeto
MentorBitRGB led_rgb(LED_PIN);


// --- VARIABLES GLOBALES ---
unsigned long tiempoUltimaPresencia = 0;
const unsigned long TIMEOUT_PRESENCIA = 10000; // 10 segundos sin presencia para apagar luces (ajustable)

const int UMBRAL_HUMEDAD_ALTA = 70; // % RH (Humedad Relativa)
const int UMBRAL_TEMP_ALTA    = 28; // Grados Celsius

const int UMBRAL_LUMINOSIDAD_BAJA = 700; // Valor del LDR para considerar que hay poca luz
const int UMBRAL_LUMINOSIDAD_ALTA = 200; // Valor del LDR para considerar que hay mucha luz


void setup() {
    Serial.begin(9600);
    Serial.println("Iniciando Baño Inteligente...");

    pinMode(miModuloPuertos.PUERTO_GENERICO_1_ANALOG_2, INPUT); //LDR

    // Inicializamos la pantalla LCD
    DriverPantallas.inicializarLCD();
    DriverPantallas.lcd.print("Bano Inteligente");
    DriverPantallas.lcd.setCursor(0, 1);
    DriverPantallas.lcd.print("Iniciando...");
    delay(2000);

    // Inicializamos el Display 7 Segmentos
    Display.inicializarDisplay();
    Display.imprimir(0); // Mostrar 0 al inicio

    led_rgb.begin(); // INICIALIZA la librería
    led_rgb.cambiarBrillo(50);

    digitalWrite(miMentorBit.LED_VERDE, LOW);

}

void loop() {
    // --- 1. Lectura de Sensores ---
    int temperatura_dht = miDHT.obtenerTemperatura();
    int humedad_dht = miDHT.obtenerHumedad();
    int luminosidad_ldr = analogRead(miModuloPuertos.PUERTO_GENERICO_1_ANALOG_2);
    int lectura_pir = miPIR.lecturaDigital(); // 1 si hay presencia, 0 si no
    int velocidad_potenciometro = analogRead(miMentorBit.POTENCIOMETRO); // Lectura del potenciómetro (0-1023)

    // --- 2. Control de Ventilación (Motor N20 DC) ---
    int velocidad_ventilador_pwm = 0; // Velocidad del ventilador (0-255 para PWM)
    String estadoVentilador = "OFF";

    // Si la humedad o temperatura son altas, encender ventilador
    if (humedad_dht > UMBRAL_HUMEDAD_ALTA || temperatura_dht > UMBRAL_TEMP_ALTA) {
        // Mapear la lectura del potenciómetro (0-1023) a un valor PWM (0-255)
        velocidad_ventilador_pwm = map(velocidad_potenciometro, 0, 1023, 50, 255); // Mínimo 50 para que gire
        estadoVentilador = "ON";
        DriverMotores.moverMotorDC(velocidad_ventilador_pwm, 0);
    }
    else{
        DriverMotores.moverMotorDC(0, 0);
    }
   


    // Mostrar nivel de ventilación en Display 7 segmentos
    // Mapear la velocidad PWM a un rango más simple para el display (ej. 0-9)
    int nivel_ventilacion_display = map(velocidad_ventilador_pwm, 0, 255, 0, 9);
    Display.imprimir(nivel_ventilacion_display);


    // --- 3. Control de Iluminación y Presencia (LDR, PIR, RGB Externo) ---
    bool hayPresencia = (miPIR.lecturaDigital());

    if (hayPresencia) {
        tiempoUltimaPresencia = millis(); // Actualiza el tiempo de la última detección
    }

    // Lógica para encender/apagar y regular el brillo del RGB
    if (hayPresencia || (millis() - tiempoUltimaPresencia < TIMEOUT_PRESENCIA)) {
        // Si hay presencia o si la presencia cesó hace poco (dentro del timeout)
        digitalWrite(miMentorBit.LED_VERDE, HIGH);
       
    } else {
        // No hay presencia por un tiempo, apagar luces
        digitalWrite(miMentorBit.LED_VERDE, LOW);
    }

        int brilloRGB = 50;
        if (luminosidad_ldr > UMBRAL_LUMINOSIDAD_BAJA) { // Muy oscuro, brillo máximo
            brilloRGB = 255;
            led_rgb.cambiarBrillo(brilloRGB); // brillo al máximo
        } else if (luminosidad_ldr > UMBRAL_LUMINOSIDAD_ALTA) { // Poco oscuro/intermedio
            brilloRGB = 100;
            led_rgb.cambiarBrillo(brilloRGB); // Reducir RGB si hay suficiente luz natural
        } else { // Suficiente luz natural
            brilloRGB = 0;
            led_rgb.cambiarBrillo(brilloRGB); // Apagar RGB si hay suficiente luz natural
        }
       
         // Le decimos a la librería qué color queremos poner en qué píxel
         led_rgb.cambiarColor(255, 255, 255);


    // --- 4. Mostrar en Pantalla LCD ---
    DriverPantallas.lcd.clear();
    DriverPantallas.lcd.setCursor(0, 0);
    DriverPantallas.lcd.print("Temp:");
    DriverPantallas.lcd.print(temperatura_dht);
    DriverPantallas.lcd.print("C Hum:");
    DriverPantallas.lcd.print(humedad_dht);
    DriverPantallas.lcd.print("%");

    DriverPantallas.lcd.setCursor(0, 1);
    DriverPantallas.lcd.print("Vent:");
    DriverPantallas.lcd.print(estadoVentilador);
    DriverPantallas.lcd.print(" LDR:");
    DriverPantallas.lcd.print(luminosidad_ldr);

    // --- Pequeña pausa ---
    delay(500); // Actualiza cada medio segundo
}
Vistas
1 Número de vistas
1 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.