Utilizzo di PWM e transistor NPN
Vorrei iniziare dicendo che non sono un ingegnere elettrico. Se qualcuno che sa di più vede un problema con quello che presento, per favore commenta !
Ho trovato un eccellente articolo per farlo con un Arduino qui. Anche io, tuttavia, sto usando un RaspberryPi (RPi3). Una preoccupazione che ho visto sottolineato è che tirare la potenza dalla GPIO18 per far funzionare la ventola può avere conseguenze negative. Invece, quello che propongo di seguito è tirare il 5v da un pin 5v RPi. Quindi usa PWM e commutazione per controllare il passaggio del 5v alla ventola.
Ecco cosa ho usato: mi capita di vivere in Cina, e il costo totale, con spedizione, per queste parti (multiplo di ciascuna) era inferiore a $ 2 (USD). Magari guarda Alibaba.
- 1x ventola da 5 V
- 1x resistore da 330 ohm
- 1x transistor NPN (2N4401)
- 1x diodo (1N4001)
- 1x Raspberry Pi
Collega la ventola al Raspberry Pi utilizzando il seguente circuito:
Preparati per un po 'di saldatura. Sono stato in grado di saldare insieme tutti i componenti, avvolgerli attorno alla ventola stessa e comunque inserire la ventola nella mia custodia RPi. La descrizione del case dice che la ventola è silenziosa. È una bugia ed è per questo che lo eseguo al 65% della velocità!
simula questo circuito - Schema creato usando CircuitLab
- 5v si collega al pin 2 o 4
- la massa si collega al pin 6
- PWM si collega al pin 12 (GPIO 18)
Leggi il link alle istruzioni di Arduino sopra per informazioni più dettagliate su cosa sta succedendo.
Installazione del software:
Per far funzionare la ventola, ho installato la libreria pigpio. Puoi installare questa libreria dal terminale come segue:
- Dipendenze:
sudo apt-get install build-essential
- Scarica pigpio:
wget abyz.me.uk/rpi/pigpio/pigpio.zip
- Decomprimere:
unzip pigpio.zip && cd PIGPIO
- Compila e installa:
make && sudo make install
Ora abbiamo il programma che useremo per controllare la ventola tramite PWM.
Esecuzione del ventilatore:
puoi creare un nuovo script bash con il seguente contenuto. E impostalo per eseguire @reboot
nel crontab di root. Modificare le variabili all'inizio dello script a proprio piacimento. Se vuoi vedere cosa sta succedendo, imposta DEBUG = 1
e le informazioni verranno scritte in / tmp / debug
. Non lo lascerei acceso una volta che hai confermato che funziona tutto, poiché ciò eseguirà scritture non necessarie sulla tua scheda SD. Questo script presuppone che tu abbia Python installato.
Dichiarazione di non responsabilità: ho eseguito il mio RPi3 con questo script per più di 17 mesi a partire da gennaio 2019. Se queste impostazioni o qualsiasi altra impostazione che utilizzi brucia il tuo fan o causare danni al tuo Raspberry Pi, non posso essere ritenuto responsabile. Usa e apporta modifiche a tuo rischio!
#! / Bin / bashfanSpeed = 65 # avvia la ventola al 65% della velocità; il mio era troppo rumoroso al 100%. Fai attenzione a non impostarlo troppo basso, altrimenti la tua ventola potrebbe non girare! ThresholdF = 135 # Accendi la ventola quando siamo al di sopra di questa soglia di temperaturaC = $ (/ usr / bin / python -c "print ($ thresholdF-32) /1.8")DEBUG=0 debug funzione {[$ DEBUG -eq 1] && echo "[$ (date +% m% d.% H% M% S)] $ 0: $ @" >> / tmp / debug} funzione set_fan {percentuale = $ 1 # valore intero GPIO = 18 # numero pin GPIO; 18 è freq PWM hardware = 25000 # Questa è la frequenza del segnale PWM; aumenta se senti un debug lamentoso "impostando PWM su GPIO $ GPIO a $ {percent}%" [$ percent -gt 0] && / usr / local / bin / pigs hp $ GPIO $ freq 1000000 # fai girare la ventola prima di avviare back sleep 1 / usr / local / bin / pigs hp $ GPIO $ freq $ (/ usr / bin / python -c "print 10000 * $ percent")} funzione get_temp {echo "$ (/ opt / vc / bin / vcgencmd misura_temp | grep -oP "\ d +. \ d") "}
# restituisce 1 se siamo al di sopra della nostra soglia o 0 se non siamo la funzione is_too_hot {echo $ (/ usr / bin / python -c "print 1 if $ thresholdC< $ (get_temp) else 0")} debug "fan script avviato "# avvia il demone pigpiod se non è già in esecuzione [$ (pidof pigpiod | wc -l) -eq 0] && / usr / local / bin / pigpiod && debug" servizio pigpiod avviato "debug" soglia F: $ soglia F " C: $ thresholdC "# avvia un ciclo per continuare a controllare la temperatura della CPU e cambiare la ventola se necessariostate = off while: do while [$ (is_too_hot) -eq 1] do if [" $ state "==" off "]; quindi esegui il debug "accensione della ventola: $ (get_temp) (CPU temp) > $ thresholdC (soglia)" set_fan $ fanSpeed && state = "on" # accende la ventola fi sleep 300 # avvia la ventola per 5 minuti prima di controllare temp di nuovo fatto se ["$ state" == "on"]; quindi eseguire il debug "spegnendo la ventola: $ (get_temp) (CPU temp) < = $ thresholdC (threshold)" set_fan 0 && state = "off" fi sleep 60 # aspetta un minuto prima di controllare temp againdone
Non è difficile immaginare come questo script possa essere modificato per far funzionare la ventola a velocità diverse per temperature diverse.