allora, ripesco questa discussione perché c'è ancora chi mi chiede sull' argomento.
ne approfitto per fare un riassunto.
- premetto che, a mio parere, una ventola è inutile e deleteria nel 99% dei casi (e no, l'uso con Retropie o Kodi non esce da questo 99%). Inutile perché Raspberry Pi nasce senza dissipatori e senza ventole, ha una CPU che al massimo assorbe 5W (non i circa 100W di un processore da pc), che le prestazioni sono le stesse sia a 40° che a 78, che fino a 80° è lo stato di funzionamento normale, che proprio in casi di uso intenso o continuato un buon dissipatore passivo è sufficiente, se il case è in grado di far entrare aria fresca e far uscire l'aria calda. Deleterio perché l'alimentazione di queste ventole può disturbare il WiFi (tenere i cavi di alimentazione lontano dal chip WiFi). Alimentare le ventole dal GPIO non è corretto: i pin GPIO possono fornire massimo circa 16mA, e una ventolina solitamente assorbe molto di più. Ciò significa far lavorare male la ventola , mettere sotto stress la linea 5V del Raspberry, che è la stessa di alimentazione di tutto il sistema (= sistema instabile), non avere altra corrente disponibile per gli altri pin GPIO, creare rumore elettrico sui 5V (= ancora sistema instabile).
-Nonostante tutto, c'è chi vuole usare delle ventole, e vuole comandarle con i pin del GPIO in base alla temperatura della CPU. Bene. I pin programmabili sono a 3,3V, assicuratevi prima che la vostra ventola funzioni anche collegando il + a 3,3V e il meno a massa. Se funziona, OK, siete a posto.
Altrimenti, per comandarla dai pin del GPIO, dovrete utilizzare dell' elettronica aggiuntiva, ad esempio tramite l'uso di un transistor 2N3904 NPN o similare, potremo comandare il passaggio di corrente di un carico a 5V (però i 5V prendeteli dall' alimentatore e non dai pin sul GPIO, sempre per la corrente limitata)
![[Immagine: Npn_switch.png]](https://elinux.org/images/7/76/Npn_switch.png)
oppure tramite un relè, un mosfet ecc.
Dopo tutta la premessa hardware, eccoci al software:
si può impostare il funzionamento della ventola solo oltre una certa temperatura di soglia:
Codice:
#!/usr/bin/env python
# comandare ventola in base a temperatura by zzed
from gpiozero import DigitaOutputDevice
from time import sleep
# impostazioni
n = 23 # pin gpio a cui e collegata la ventola (numerazione BCM /GPIO)
t = 60 # temperatura di soglia
# fine impostazioni
ventola = DigitalOutputDevice(n)
while True:
temp = int(open('/sys/class/thermal/thermal_zone0/temp').read()) / 1e3 # prende temperatura CPU
if temp >= t:
ventola.on()
else:
ventola.off()
sleep(20)
Questo semplice programma Python importa DigitaOutputDevice dalla libreria gpiozero e sleep dalla libreria time.
n e t sono le costanti che potete variare in base alle vostre esigenze, rispettivamente il pin a cui è collegato il + della ventola e la temperatura oltre la quale deve accendersi
viene poi impostata la variabile ventola come sispositivo collegato al pin n
in un ciclo, viene letta la temperatura della CPU, se questa è maggiore o uguale della temperatura t di soglia, viene acceso il pin della ventola, altrimenti, viene spento.
si attende 20 secondi, e il ciclo rifà il controllo.
Per rendere lo script attivo a ogni boot, il metodo che io preferisco è editare il file con il comando rc.local
Codice:
sudo nano /etc/rc.local
e aggiungere alla fine la stringa
Codice:
python /home/pi/ventola.py &
in fondo, appena prima di "exit 0".
la & finale serve a evitare che il sistema attenda la fine del programma per proseguire (che essendo un loop infinito, non termina mai)
Volendo, poi si può usare il PWM per regolarne la velocità in base alla temperatura (si possono fare anche "rampe" di accelerazione e decelerazione), ma funzionerà solo se la eventuale elettronica aggiuntiva è in grado di supportare i segnali PWM (ad esempio un transistor, non un relè). E sinceramente.. vale la pena solo come esercitazione con il PWM.