Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto esperto: Risolvi i problemi post-vendita e le 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 alle anteprime.
Sconti speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e omaggi: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!
3.1.7 Monitoraggio del surriscaldamento
Nota
A seconda della versione del tuo kit, identifica se hai ADC0834 o MCP3008 e procedi con la sezione corrispondente.
Introduzione
Potresti voler creare un dispositivo di monitoraggio del surriscaldamento applicabile a diverse situazioni, ad esempio, in una fabbrica, se desideriamo avere un allarme e lo spegnimento automatico della macchina quando si verifica un surriscaldamento del circuito. In questo progetto, utilizzeremo un termistore, joystick, cicalino, LED e LCD per creare un dispositivo intelligente di monitoraggio della temperatura con soglia regolabile.
Componenti necessari
Per questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTE |
LINK PER L’ACQUISTO |
|---|---|
- |
|
- |
|
- |
Schema elettrico
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO18 |
Pin 12 |
1 |
18 |
GPIO27 |
Pin 13 |
2 |
27 |
GPIO22 |
Pin15 |
3 |
22 |
GPIO23 |
Pin16 |
4 |
23 |
GPIO24 |
Pin18 |
5 |
24 |
SDA1 |
Pin 3 |
||
SCL1 |
Pin 5 |
Procedure sperimentali
Passo 1: Costruisci il circuito.
Passo 2: Vai alla cartella del codice.
cd ~/raphael-kit/c/3.1.7/
Passo 3: Compila il codice.
gcc 3.1.7_OverheatMonitor.c -lm -lwiringPi
Passo 4: Esegui il file eseguibile.
sudo ./a.out
Quando il codice viene eseguito, la temperatura corrente e la soglia di alta temperatura 40 vengono visualizzate su I2C LCD1602. Se la temperatura corrente è superiore alla soglia, il cicalino e il LED si attivano per avvisarti.
Joystick viene utilizzato per regolare la soglia di alta temperatura. Muovendo il Joystick lungo l’asse X e Y puoi regolare (aumentare o diminuire) la soglia di temperatura massima. Premi di nuovo il Joystick per resettare la soglia al valore iniziale.
Nota
Se compare il messaggio di errore
wiringPi.h: No such file or directory, consulta Installazione e verifica di WiringPi.Se compare l’errore
Unable to open I2C device: No such file or directory, consulta Configurazione I²C per abilitare I2C e controllare se il cablaggio è corretto.Se il codice e il cablaggio sono corretti ma l’LCD non visualizza alcun contenuto, puoi regolare il potenziometro sul retro per aumentare il contrasto.
Spiegazione del codice
int get_joystick_value(){
uchar x_val;
uchar y_val;
x_val = get_ADC_Result(1);
y_val = get_ADC_Result(2);
if (x_val > 200){
return 1;
}
else if(x_val < 50){
return -1;
}
else if(y_val > 200){
return -10;
}
else if(y_val < 50){
return 10;
}
else{
return 0;
}
}
Questa funzione legge i valori degli assi X e Y. Se X>200, restituisce
1; se X<50, restituisce -1; se Y>200, restituisce -10;
e se Y<50, restituisce 10.
void upper_tem_setting(){
write(0, 0, "Upper Adjust:");
int change = get_joystick_value();
upperTem = upperTem + change;
char str[6];
snprintf(str,3,"%d",upperTem);
write(0,1,str);
int len;
len = strlen(str);
write(len,1," ");
delay(100);
}
Questa funzione serve per regolare la soglia e visualizzarla su I2C LCD1602.
double temperature(){
unsigned char temp_value;
double Vr, Rt, temp, cel, Fah;
temp_value = get_ADC_Result(0);
Vr = 5 * (double)(temp_value) / 255;
Rt = 10000 * (double)(Vr) / (5 - (double)(Vr));
temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));
cel = temp - 273.15;
Fah = cel * 1.8 +32;
return cel;
}
Legge il valore analogico di CH0 (termistore) di ADC0834 e lo converte in valore di temperatura.
void monitoring_temp(){
char str[6];
double cel = temperature();
snprintf(str,6,"%.2f",cel);
write(0, 0, "Temp: ");
write(6, 0, str);
snprintf(str,3,"%d",upperTem);
write(0, 1, "Upper: ");
write(7, 1, str);
delay(100);
if(cel >= upperTem){
digitalWrite(buzzPin, HIGH);
digitalWrite(LedPin, HIGH);
}
else if(cel < upperTem){
digitalWrite(buzzPin, LOW);
digitalWrite(LedPin, LOW);
}
}
Quando il codice viene eseguito, la temperatura corrente e la soglia di alta temperatura 40 vengono visualizzate su I2C LCD1602. Se la temperatura corrente è superiore alla soglia, il cicalino e il LED si attivano per avvisarti.
int main(void)
{
setup();
int lastState =1;
int stage=0;
while (1)
{
int currentState = digitalRead(Joy_BtnPin);
if(currentState==1 && lastState == 0){
stage=(stage+1)%2;
delay(100);
lcd_clear();
}
lastState=currentState;
if (stage==1){
upper_tem_setting();
}
else{
monitoring_temp();
}
}
return 0;
}
La funzione main() contiene l’intero processo del programma come segue:
1) Quando il programma inizia, il valore iniziale di stage è 0, e la temperatura corrente e la soglia di alta temperatura 40 vengono visualizzate su I2C LCD1602. Se la temperatura corrente è superiore alla soglia, il cicalino e il LED si attivano per avvisarti.
2) Premendo il Joystick, stage diventerà 1 e potrai regolare la soglia di alta temperatura. Muovendo il Joystick lungo l’asse X e Y puoi regolare (aumentare o diminuire) la soglia corrente. Premendo di nuovo il Joystick, la soglia verrà resettata al valore iniziale.
Immagine del fenomeno