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

../_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 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.

../_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 acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTE

LINK PER L’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

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/image258.png

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

../_images/image259.jpeg