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
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
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 |
Procedure Sperimentali
Passo 1: Costruisci il circuito.
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.
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 4° 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:
Legge costantemente lo stato del pulsante e la temperatura corrente.
Ad ogni pressione, il livello aumenta di +1 e contemporaneamente la temperatura viene aggiornata. L’intervallo di Level è da 1 a 4.
Quando il ventilatore è in funzione (livello diverso da 0), la temperatura viene monitorata. Una variazione di ±2℃ causa un aumento o diminuzione del livello.
Il motore cambia velocità di rotazione in base al Level.