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+ |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
- |
|
Esquemático
Cableado
Código
Nota
Puedes abrir directamente el archivo
6.3.high_tem_alarm.inoen la ruta3in1-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.
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?
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,
buttonPincambia de bajo a alto.La función buttonState se llama cuando se activa la interrupción, y cambia el valor de la variable state.
FALLINGsignifica que la interrupción ocurre cuandobuttonPinpasa de bajo a alto.
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 amonitoringTemp()para mostrar la temperatura actual y el umbral establecido.void loop() { if (state == 1) { upperTemSetting(); } else { monitoringTemp(); } }
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.
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.