Nota

Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme agli altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi problemi post-vendita e 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 ai nuovi annunci di prodotti e alle anteprime.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e omaggi: Partecipa a omaggi e promozioni speciali durante le festività.

👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

3.1.7 Monitoraggio del Surriscaldamento

Nota

../_images/mcp3008_and_adc0834.jpg

A seconda della versione del tuo kit, identifica se hai ADC0834 o MCP3008 e procedi con la sezione corrispondente.

Introduzione

Potresti voler realizzare un dispositivo di monitoraggio del surriscaldamento che si applichi a varie situazioni, ad esempio, in una fabbrica, per avere un allarme e lo spegnimento automatico della macchina in caso di surriscaldamento del circuito. In questo progetto, utilizzeremo un termistore, joystick, buzzer, LED e LCD per creare un dispositivo intelligente di monitoraggio della temperatura il cui limite massimo è regolabile.

Componenti necessari

In questo progetto, avremo bisogno dei seguenti componenti.

../_images/list_Overheat_Monitor.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistare i componenti separatamente dai link qui sotto.

INTRODUZIONE COMPONENTI

LINK DI ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Modulo Joystick

-

ADC0834

-

Transistor

ACQUISTA

I2C LCD1602

ACQUISTA

Termistore

ACQUISTA

Cicalino

-

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

../_images/Schematic_three_one8.png

Procedura sperimentale

Passo 1: Costruisci il circuito.

../_images/image258.png

Passo 2: Vai nella 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 è in esecuzione, la temperatura corrente e la soglia di temperatura alta 40 vengono visualizzate su I2C LCD1602. Se la temperatura corrente supera la soglia, il buzzer e il LED iniziano ad avvisarti.

Joystick qui è per la regolazione della soglia di temperatura alta. Muovendo il Joystick lungo l’asse X e Y puoi regolare (alzare o abbassare) la soglia di temperatura alta corrente. Premi di nuovo il Joystick per ripristinare la soglia al valore iniziale.

Nota

  • Se appare un errore come wiringPi.h: Nessun file o directory, fai riferimento a Installa e Controlla wiringPi.

  • Se appare l’errore Impossibile aprire il dispositivo I2C: Nessun file o directory, devi fare riferimento a Configurazione I²C per abilitare I2C e controllare se il cablaggio è corretto.

  • Se il codice e il cablaggio sono corretti, ma l’LCD non mostra contenuti, puoi ruotare 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 di X e Y. Se X>200, verrà restituito 1; X<50, verrà restituito -1; y>200, verrà restituito -10, e y<50, verrà restituito 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;
}

Leggi il valore analogico di CH0 (termistore) di ADC0834 e convertilo 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 è in esecuzione, la temperatura corrente e la soglia di temperatura alta 40 sono visualizzate su I2C LCD1602. Se la temperatura corrente supera la soglia, il buzzer 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 tutto il processo del programma come mostrato:

1) Quando il programma si avvia, il valore iniziale di stage è 0, e la temperatura corrente e la soglia di temperatura alta 40 vengono visualizzate su I2C LCD1602. Se la temperatura corrente supera la soglia, il buzzer e il LED si attivano per avvisarti.

2) Premi il Joystick e stage sarà 1 e potrai regolare la soglia di temperatura alta. Muovendo il Joystick lungo l’asse X e Y puoi regolare (alzare o abbassare) la soglia corrente. Premi di nuovo il Joystick per ripristinare la soglia al valore iniziale.

Foto del fenomeno

../_images/image259.jpeg