Nota

¡Hola, bienvenido a la Comunidad de Aficionados a Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte de expertos: Resuelve problemas posventa y desafíos técnicos con ayuda de nuestra comunidad y equipo.

  • Aprender y compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Vistas previas exclusivas: Obtén acceso anticipado a anuncios de nuevos productos y avances.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.

  • Promociones festivas y sorteos: Participa en sorteos y promociones de fiestas.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy!

6.3 Alarma de Alta Temperatura

A continuación, crearemos un dispositivo de alarma de alta temperatura utilizando un termistor, botón, potenciómetro y LCD. El LCD1602 muestra la temperatura detectada por el termistor y el valor del umbral de alta temperatura, que puede ajustarse utilizando un potenciómetro. El valor del umbral se almacena en la EEPROM al mismo tiempo, así que si la temperatura actual supera el valor del umbral, el zumbador sonará.

Componentes Necesarios

Para este proyecto, necesitamos los siguientes componentes.

Comprar un kit completo es definitivamente conveniente, aquí está el enlace:

Nombre

ELEMENTOS DE ESTE KIT

ENLACE

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

También puedes comprarlos por separado en los siguientes enlaces.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa SunFounder R3

COMPRAR

Protoboard

COMPRAR

Cables Puente

COMPRAR

Resistencia

COMPRAR

Buzzer

-

Botón

COMPRAR

I2C LCD1602

COMPRAR

Termistor

COMPRAR

Potenciómetro

COMPRAR

Esquemático

../_images/wiring_high_tem.png

Cableado

../_images/tem_alarm.png

Código

Nota

  • Puedes abrir directamente el archivo 6.3.high_tem_alarm.ino en la ruta 3in1-kit\basic_project\6.3.high_tem_alarm.

  • O copia este código en Arduino IDE.

  • Aquí se utiliza la biblioteca LiquidCrystal I2C, puedes instalarla desde el Library Manager.

    ../_images/lib_liquidcrystal_i2c.png

Después de que el código se haya cargado con éxito, el LCD1602 muestra la temperatura detectada por el termistor y el valor del umbral de alta temperatura, que puede ajustarse utilizando un potenciómetro. El valor del umbral se almacena en la EEPROM al mismo tiempo, así que si la temperatura actual supera el valor del umbral, el zumbador sonará.

Nota

Si el código y la conexión están bien, pero el LCD todavía no muestra contenido, puedes girar el potenciómetro en la parte trasera.

¿Cómo funciona?

  1. Inicializa el botón, el zumbador y el LCD1602 I2C, y lee los valores de la EEPROM. Aquí también se utiliza una interrupción para leer el estado del botón.

    void setup()
    {
        pinMode(buzzerPin, OUTPUT);
        pinMode(buttonPin, INPUT);
        lcd.init();
        lcd.backlight();
        upperTem = EEPROM.read(0);
        delay(1000);
        attachInterrupt(digitalPinToInterrupt(buttonPin), buttonState, FALLING);
    }
    
    • Aquí se utiliza una interrupción para leer el estado del botón. Cuando se presiona el botón, buttonPin cambia de bajo a alto.

    • La función buttonState se llama cuando se activa la interrupción, y cambia el valor de la variable state.

    • FALLING significa que la interrupción ocurre cuando buttonPin pasa de bajo a alto.

  2. Para establecer el umbral de alta temperatura, se llama a la función upperTemSetting() cuando state es 1 (state cambia entre 0 y 1 con la presión del botón) en el programa principal, de lo contrario se llama a monitoringTemp() para mostrar la temperatura actual y el umbral establecido.

    void loop()
    {
        if (state == 1)
        {
            upperTemSetting();
        }
        else {
            monitoringTemp();
        }
    }
    
  3. Acerca de la función upperTemSetting().

    void upperTemSetting()
    {
        int setTem = 0;
    
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Adjusting...");
        lcd.setCursor(0, 1);
        lcd.print("Upper Tem: ");
    
        while (1) {
            lcd.setCursor(11, 1);
            setTem = map(analogRead(potPin), 0, 1023, 0, 100);
            lcd.print(setTem);
            if (state == 0)
            {
                EEPROM.write(0, setTem);
                upperTem = setTem;
                lcd.clear();
                return;
            }
        }
    }
    
    • Con esta función se puede establecer un umbral. Al entrar en esta función, el LCD1602 muestra el valor actual del umbral, que puede modificarse con el potenciómetro. Este valor del umbral se almacenará en la EEPROM y se saldrá cuando se vuelva a presionar el botón.

  4. Acerca de la función monitoringTemp().

    void monitoringTemp()
    {
        long a = analogRead(temPin);
        float tempC = beta / (log((1025.0 * 10 / a - 10) / 10) + beta / 298.0) - 273.0;
        float tempF = 1.8 * tempC + 32.0;
        lcd.setCursor(0, 0);
        lcd.print("Temp: ");
        lcd.print(tempC);
        lcd.print(char(223));
        lcd.print("C   ");
        lcd.setCursor(0, 1);
        lcd.print("Upper: ");
        lcd.print(upperTem);
        lcd.print(char(223));
        lcd.print("C   ");
        delay(300);
        if (tempC >= upperTem)
        {
            digitalWrite(buzzerPin, HIGH);
            delay(50);
            digitalWrite(buzzerPin, LOW);
            delay(10);
        }
        else
        {
            digitalWrite(buzzerPin, LOW);
        }
    }
    
    • Utilizando esta función, puedes mostrar la temperatura y configurar una alarma.

    • Se lee el valor del termistor y luego se convierte a temperatura en Celsius mediante la fórmula y se muestra en el LCD1602.

    • El umbral establecido también se muestra en el LCD.

    • Si la temperatura actual es mayor que el umbral, el zumbador sonará una alarma.