Nota
Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Unisciti agli appassionati per approfondire Raspberry Pi, Arduino ed ESP32 insieme a noi.
Perché unirti?
Supporto esperto: Risolvi problemi post-vendita e affronta sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.
Sconti speciali: Approfitta di sconti riservati sui nostri prodotti più recenti.
Promozioni e omaggi festivi: Partecipa a promozioni e omaggi durante le festività.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
6.3 Allarme ad Alta Temperatura¶
Ora realizzeremo un dispositivo di allarme ad alta temperatura utilizzando un termistore, un pulsante, un potenziometro e un LCD. Il display LCD1602 mostra la temperatura rilevata dal termistore e il valore soglia di alta temperatura, che può essere regolato utilizzando un potenziometro. Il valore soglia viene memorizzato su EEPROM, quindi se la temperatura corrente supera la soglia, il buzzer emetterà un segnale acustico.
Componenti necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente comodo acquistare un intero kit, ecco il link:
Nome |
OGGETTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Starter 3 in 1 |
380+ |
Puoi anche acquistarli separatamente dai link qui sotto.
INTRODUZIONE COMPONENTI |
LINK DI ACQUISTO |
|---|---|
- |
|
Schema
Collegamenti
Codice
Nota
Puoi aprire il file
6.3.high_tem_alarm.inonel percorso3in1-kit\basic_project\6.3.high_tem_alarmdirettamente.Oppure copia questo codice nell’Arduino IDE.
La libreria
LiquidCrystal I2Cviene utilizzata qui, puoi installarla dal Library Manager.
Dopo aver caricato correttamente il codice, l’LCD1602 mostrerà la temperatura rilevata dal termistore e il valore soglia di alta temperatura, che può essere regolato utilizzando un potenziometro. Il valore soglia viene memorizzato su EEPROM, quindi se la temperatura corrente supera la soglia, il buzzer emetterà un segnale acustico.
Nota
Se il codice e i collegamenti sono corretti, ma l’LCD non visualizza nulla, puoi regolare il potenziometro sul retro.
Come funziona?
Inizializza il pulsante, il buzzer e l’LCD I2C1602, e leggi i valori dall’EEPROM. Viene utilizzato anche un interrupt per leggere lo stato del pulsante.
void setup() { pinMode(buzzerPin, OUTPUT); pinMode(buttonPin, INPUT); lcd.init(); lcd.backlight(); upperTem = EEPROM.read(0); delay(1000); attachInterrupt(digitalPinToInterrupt(buttonPin), buttonState, FALLING); }
L’interrupt viene utilizzato per leggere lo stato del pulsante. Quando il pulsante viene premuto,
buttonPinpassa da basso ad alto.La funzione buttonState viene chiamata quando l’interrupt viene attivato, e cambia il valore della variabile state.
FALLINGsignifica che l’interrupt si verifica quandobuttonPinpassa da basso ad alto.
Per impostare la soglia di alta temperatura, la funzione
upperTemSetting()viene chiamata quando state è 1 (state passa tra 0 e 1 con la pressione del pulsante) nel programma principale, altrimenti viene chiamatamonitoringTemp()per visualizzare la temperatura corrente e la soglia impostata.void loop() { if (state == 1) { upperTemSetting(); } else { monitoringTemp(); } }
Riguardo alla funzione
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; } } }
Una soglia può essere impostata con questa funzione. Quando si entra in questa funzione, l’LCD1602 visualizza il valore soglia corrente, che può essere modificato utilizzando il potenziometro. Questo valore soglia verrà memorizzato su EEPROM e uscito quando il pulsante viene premuto di nuovo.
Riguardo alla funzione
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); } }
Con questa funzione, puoi visualizzare la temperatura e impostare un allarme.
Il valore del termistore viene letto e quindi convertito in temperatura Celsius tramite la formula e visualizzato su LCD1602.
La soglia impostata viene anch’essa visualizzata sull’LCD.
Se la temperatura corrente è maggiore della soglia, il buzzer emetterà un segnale acustico.