Raspberry Pi 4 tiene una conexión para ventilador configurada de fábrica al PIN 8 (GPIO 14) que se activa a partir de 60ºC. Aunque el fabricante nos dice que ese rango de temperaturas es correcto, a mi me parece demasiado alto. Por ello he creado un script en Python con el cual podemos decir a qué temperatura queremos poner en marcha el ventilador.
Necesitamos un ventilador de 3 pines, que cuente con un cable rojo 5V positivo, negro para negativo y azul para el control de velocidad.
El funcionamiento es simple, rojo y negro se conectan a 5 voltios de la Raspberry y azul a un pin de nuestra elección para activar o desactivar el ventilador.
En este script, conectaremos el cable azul al pin 18, al cual daremos valor HIGH o LOW, dependiendo de los valores de temperatura que asignemos.
Este tipo de ventilador usa el modo PWM o ancho de pulso para regular el voltaje y así la velocidad de rotación del ventilador, pero eso lo veremos en otro script.
La ejecución del programa es la siguiente:
- Temperatura igual o superior a 45 grados activa el ventilador.
- Entre 44 y 39 grados el ventilador se mantiene activo.
- El ventilador se para al bajar de 39 grados.
- El ventilador se mantiene apagado hasta que la temperatura sea igual o superior a 45 grados.
Eres libre de usar el rango de temperaturas que más te interesen, modifica los valores en el programa.
Este script espera a ejecutar el bucle cada 5 segundos a fin de no cargar los núcleos del procesador y con ello subir artificialmente la temperatura.
Aquí tenemos el código.
#!/usr/bin/python3
# https://linuxete.duckdns.org/
# https://chapuboot.blogspot.com/
# Importa la librería de control de GPIO de la Raspberry
import RPi.GPIO as GPIO
# Importa la función sleep del módulo time
import time
#Desactivar advertencias (warnings)
GPIO.setwarnings(False)
#Modo de identificación de GPIO
GPIO.setmode(GPIO.BOARD)
# Configurar pin 18 como salida
GPIO.setup(18, GPIO.OUT)
# Inicializamos pin 18 apagado con False, con True el programa inicia con el ventilador en marcha hasta meterse en el bucle While.
GPIO.output(18, False)
# Función Lectura de temperatura
def get_cpu_temp():
temperatura = open( "/sys/class/thermal/thermal_zone0/temp" )
cpu_temp = temperatura.read()
temperatura.close()
return float(cpu_temp)/1000
#bucle infinito
while True:
time.sleep(5) #espera a ejecutar el bucle cada 5 segundos.
print(get_cpu_temp())
if get_cpu_temp() >= 45:
GPIO.output(18, GPIO.HIGH)
elif get_cpu_temp() <= 44 and get_cpu_temp() >= 40:
continue
elif get_cpu_temp() < 39:
GPIO.output(18, GPIO.LOW)
Abre una terminal y escribe:
nano ventilador.py
Copia, pega el código anterior y guarda pulsando las teclas Crtl + o y sal con Crtl + x
Ahora, dale permisos de ejecución con:
chmod +x ventilador.py
Programa la ejecución del programa al inicio con cron, escribe en la terminal:
crontab -e
Al final del texto, pega el siguiente código:
@reboot /usr/bin/python3 /home/tu_usuario/ventilador.py
Sustituye «tu_usuario» por el tuyo propio.
Guarda con Crtl + o y cierra con Ctrl +x
Ahora cada vez que se encienda tu Raspberry el programa se ejecutará al inicio.
Ventiladores disponibles 40 mm y 3 pines
- GeeekPi 2PCS Raspberry Pi 4 PWM Controllable
- Tiendatec
- Ventilador PWM, 5V, 3 pines, 40 mm
- GeeekPi Raspberry Pi Cooling Fan el que estoy usando en mi Raspberry.
Esquema de los pines GPIO
Comprueba que funciona y mantén tu Raspberry mas fresca que una lechuga.