hace tiempo estoy detrás de controlar las revoluciones del ventilador que le tengo puesto a mi raspberry pi 3, porque al conectarlo directamente a los GPIO va al máximo de revoluciones y es un zumbido de fondo bastante molesto...
Estuve investigando por varios sitios y no he encontrado absolutamente nada para las nuevas, sólo para la primera RPi, al final sirve para todas igual, lo único es que en vez de usar el código en C que he encontrado por ahí (un poco lioso, había que compilarlo, generaba un archivo de configuración...) y que creo que consume un poco más de recursos (si me equivoco, ¡corregidme!), encontré un script que diseñó un chaval, lo he probado y funciona a la perfección, lo personalizas a tu gusto (en qué rango de temperatura quieres que se encienda, se apague...).
En este tutorial voy a partir desde cero (bueno, desde cero cero no, tendréis que tener las herramientas apropiadas, no voy a pasar por la parte de la fabricación de las mismas

- Componentes necesarios para realizar este proyecto:
- - Raspberry Pi 1, 2 o 3
- - Un ventilador para la misma (si puede ser, que no supere los 0.20A)
- - Soldador de estaño, el estaño, algunos cablecitos o conexiones para los GPIO
- - Transistor npn (2N3904 es el que he cogido yo para probar, no sé si es el más indicado pero funciona... me recomendaron este porque era para carácter general)
- - Y cómo no, el script.

Este es el esquema del transistor, hay que tener en cuenta el cómo conectar las patillas, ya que podemos hacer un estropicio si no las conectamos bien.
- 1. En la patilla E debemos conectar el GPIO tierra o GND.
- 2. En la patilla B debemos conectar el GPIO 18 (es el único que tiene control PWM) con el cual excitaremos la base del transistor para ponerlo en corte y establecer una frecuencia determinada para así hacer que el ventilador varíe sus RPM basándonos en la temperatura interna medida en el procesador.
- 3. En la patilla C debemos conectar el polo negativo de nuestro ventilador (o cable negro).
- 4. Y ¿qué hacemos con nuestro polo positivo del ventilador? Pues conectarlo directamente al puerto GPIO de +5V

Los cables ya soldados al transistor quedarían de la siguiente forma:

Ya sólo queda enchufar nuestra RPi y mediante SSH o cómo uno quiera, copiar el siguiente script:
Código: Seleccionar todo
#!/bin/bash
#Define GPIO pin 18 as PWM
gpio -g mode 18 pwm
#Always num = 0
num=0
while [ $num = 0 ]; do
# What's the CPU temp?
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
temp=$(($temp/1000))
#Show the temperature
clear
printf "Temperatura: $tempºC\nVentilador activado."
# Variable temperature control
if
[ $temp -gt 40 ] && [ $temp -lt 69 ];
then
vartemp=$(echo $[temp * 13])
gpio -g pwm 18 $vartemp
# Maximum fan RPM
elif
[ $temp -ge 69 ];
then
gpio -g pwm 18 1024
# Switch off the fan
else
gpio -g pwm 18 0
clear
printf "Temperatura: $tempºC\nVentilador parado."
sleep 60
fi
#Pause 1 second
sleep 1
done
exit 0
Código: Seleccionar todo
nano
(copiamos todo el código)
Ctrl+X
S
(Y le damos el nombre) fancontroller
Código: Seleccionar todo
ls
Código: Seleccionar todo
bash fancontroller
Código: Seleccionar todo
sudo apt-get purge wiringpi
sudo apt-get install wiringpi
he intentado ejecutarlo en segundo plano para tener el terminal SSH libre pero no he podido

Y listo, quiero añadirle que se inicie cuando la RPi se encienda o se reinicie pero es otro tema a investigar, igual que modificar el script a mi gusto para ponerle tramos de temperatura personalizados o incluso optimizar más el script.
Fuente: http://www.retrowiki.es/fororw/viewtopi ... 81&t=31285