Nota

Ciao, benvenuto nella Community su Facebook per gli appassionati di SunFounder Raspberry Pi, Arduino e ESP32! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • 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 consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci dei nuovi prodotti e anteprime esclusive.

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

  • Promozioni e Giveaway Festivi: Partecipa a concorsi e promozioni in occasione delle festività.

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

3.1.4 Ventilatore Intelligente

Nota

../_images/mcp3008_and_adc0834.jpg

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

Introduzione

In questo corso, utilizzeremo motori, pulsanti e termistori per creare un ventilatore intelligente manuale e automatico, con velocità regolabile.

Componenti

../_images/list_Smart_Fan1.png

Schema di Collegamento

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

GPIO27

Pin 13

2

27

GPIO22

Pin 15

3

22

GPIO5

Pin 29

21

5

GPIO6

Pin 31

22

6

GPIO13

Pin 33

23

13

../_images/Schematic_three_one41.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image2451.png

Nota

Il modulo di alimentazione può essere collegato a una batteria da 9V con la clip per batteria inclusa nel kit. Inserisci il jumper del modulo di alimentazione nelle strisce da 5V della breadboard.

../_images/image1181.jpeg

Per gli utenti del linguaggio C

Passo 2: Accedi alla cartella del codice.

cd ~/davinci-kit-for-raspberry-pi/c/3.1.4/

Passo 3: Compila.

gcc 3.1.4_SmartFan.c -lwiringPi -lm

Passo 4: Esegui il file eseguibile.

sudo ./a.out

Una volta eseguito il codice, avvia il ventilatore premendo il pulsante. Ogni pressione aumenta o diminuisce la velocità di 1 livello. Sono disponibili 5 livelli di velocità: 0~4. Se raggiungi il livello e premi di nuovo, il ventilatore si ferma con velocità pari a 0.

Nota

Se non funziona dopo l’esecuzione o compare un messaggio di errore: "wiringPi.h: No such file or directory", consulta Il codice C non funziona?.

Quando la temperatura aumenta o diminuisce di più di 2℃, la velocità aumenta o diminuisce automaticamente di 1 livello.

Spiegazione del Codice

int temperture(){
    unsigned char analogVal;
    double Vr, Rt, temp, cel, Fah;
    analogVal = get_ADC_Result(0);
    Vr = 5 * (double)(analogVal) / 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;
    int t=cel;
    return t;
}

La funzione temperture() converte i valori del termistore letti da ADC0834 in valori di temperatura. Consulta 2.2.2 Termistore per ulteriori dettagli.

int motor(int level){
    if(level==0){
        digitalWrite(MotorEnable,LOW);
        return 0;
    }
    if (level>=4){
        level =4;
    }
    digitalWrite(MotorEnable,HIGH);
    softPwmWrite(MotorPin1, level*25);
    return level;
}

Questa funzione controlla la velocità di rotazione del motore. L’intervallo di level va da 0 a 4 (il livello 0 arresta il motore). Ogni livello rappresenta un aumento del 25% della velocità del vento.

int main(void)
{
    setup();
    int currentState,lastState=0;
    int level = 0;
    int currentTemp,markTemp=0;
    while(1){
        currentState=digitalRead(BtnPin);
        currentTemp=temperture();
        if (currentTemp<=0){continue;}
        if (currentState==1&&lastState==0){
            level=(level+1)%5;
            markTemp=currentTemp;
            delay(500);
        }
        lastState=currentState;
        if (level!=0){
            if (currentTemp-markTemp<=-2){
                level=level-1;
                markTemp=currentTemp;
            }
            if (currentTemp-markTemp>=2){
                level=level+1;
                markTemp=currentTemp;
            }
        }
        level=motor(level);
    }
    return 0;
}

La funzione main() contiene l’intero processo del programma, come segue:

  1. Legge costantemente lo stato del pulsante e la temperatura corrente.

  2. Ad ogni pressione, il livello aumenta di +1 e contemporaneamente la temperatura viene aggiornata. L’intervallo di Level è da 1 a 4.

  3. Quando il ventilatore è in funzione (livello diverso da 0), la temperatura viene monitorata. Una variazione di ±2℃ causa un aumento o diminuzione del livello.

  4. Il motore cambia velocità di rotazione in base al Level.