Libreelec con ventilador ruidoso

Libreelec con ventilador ruidoso

Se trata de un post para control del ventilador de la Raspberry Pi con la distribución Libreelec. En mi caso la raspberry está siempre encendida porque tiene instalada un servidor Bittorrent (Transmission) funcionando todo el día. Es una solución fantástica pero en el verano necesita del ventilador ya que se calienta mucho, lo malo es que genera un pequeño ruido después de estar un tiempo encendida, así que después de revisar lo que hay al respecto  por internet, he encontrado una solución ideal que describo a continuación.

  •  Instalar Add-ons Raspberry Pi Tools, disponible desde los repositorios por defecto por lo que en una simple búsqueda aparecerá. Este add-on contiene las funciones de control en Python RPi.GPIO que permite controlar el pineado GPIO de la raspberry.

Raspberry Tools Add-ons

  • Añadir script en python de control que activará/desactivará ventilador según temperatura con nombre autoexec.py y en la ubicación /storage/.kodi/userdata/autoexec.py:

#!/usr/bin/env python
# Original Author: Edoardo Paolo Scalafiotti <edoardo849@gmail.com>
# Modified to work on libreElec by Gary Beldon

import os
import time
import signal
import sys
sys.path.append(‘/storage/.kodi/addons/virtual.rpi-tools/lib’)
import RPi.GPIO as GPIO
import subprocess

maxTemp = 55 # The temperature in Celsius after which we trigger the fan
minTemp = 45 # Temp when we turn the fan off
sleepTime = 10 # Read the temperature every n sec, increase or decrease this limit if you want

logfile = “/storage/.kodi/temp/power.log”
pin = 18 # The pin ID, edit here to change it
fanRunning = False

def setup():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)
logging(“Initializing.”)
return()

def getCPUtemperature():
temp = subprocess.check_output([‘vcgencmd’, ‘measure_temp’])[5:-3]
return temp
def fanON():
GPIO.output(pin, True)
return()
def fanOFF():
GPIO.output(pin, False)
return()
def checkTemp():
global fanRunning
CPUtemp = float(getCPUtemperature())
if fanRunning==False and CPUtemp>maxTemp:
fanRunning = True
fanON()
logging(“Temp=” + str(CPUtemp) + “C. Switching fan On.”)
if fanRunning==True and CPUtemp<minTemp:
fanRunning = False
fanOFF()
logging(“Temp=” + str(CPUtemp) + “C. Switching fan Off.”)
return()
def logging(message):
logfilehandle=open(logfile,’a’)
logfilehandle.write(time.strftime(“%c”) + ” :- ” + message + “\n”)
logfilehandle.close()
return();

try:
setup()
while True:
checkTemp()
time.sleep(sleepTime)

except KeyboardInterrupt: # trap a CTRL+C keyboard interrupt
logging(“Terminating.”)
GPIO.cleanup() # resets all GPIO ports used by this program

  • Añadir un transistor S8050 conectado al ventilador.  Se puede conseguir por Amazon por unos 2 euros y que dejo a continuación con mi enlace de afiliado:

amazon_transistor  10X Transistor S8050 40V 1,5A 1500mA TO-92

El conexionado del transistor con el ventilador sería el siguiente:

conexionado_raspberry_fan
En mi caso he reciclado un cable de audio interno de los antiguos CDROM de PC, quedando para las pruebas de la siguiente forma:

Una vez montado solo queda ver que funciona, para ello se puede monitorizar las entradas del log configurado en el script:

frambu2:~ # tail -f /storage/.kodi/temp/power.log

Wed Jun 27 15:43:49 2018 :- Temp=55.3C. Switching fan On.

Wed Jun 27 15:48:02 2018 :- Temp=44.5C. Switching fan Off.

Wed Jun 27 15:55:36 2018 :- Temp=55.3C. Switching fan On.

Wed Jun 27 15:59:49 2018 :- Temp=44.5C. Switching fan Off.

Wed Jun 27 16:06:53 2018 :- Temp=55.3C. Switching fan On.

Wed Jun 27 16:10:56 2018 :- Temp=44.5C. Switching fan Off.

Wed Jun 27 16:17:10 2018 :- Temp=55.3C. Switching fan On.

Wed Jun 27 16:20:42 2018 :- Temp=44.5C. Switching fan Off.

Wed Jun 27 16:28:26 2018 :- Temp=55.3C. Switching fan On.

Wed Jun 27 16:32:39 2018 :- Temp=44.5C. Switching fan Off.

Wed Jun 27 16:40:03 2018 :- Temp=55.3C. Switching fan On.

Wed Jun 27 16:45:06 2018 :- Temp=44.5C. Switching fan Off.

Con unas bridas pequeñas y silicona caliente se quedó al final así:

raspberrypi-control-fan-final

Fuentes:

Para instalar las RPi.GPIO y script en python se explica en foro de proyecto Libreelec:

https://forum.libreelec.tv/thread/9472-cooling-fan-control-raspberry-pi-libreelec/

Para el conexionado del transistor y ventilador:

https://github.com/KyleRoss/rpi-fan-controller

Para comprar el transistor S8050 por Amazon:

https://www.amazon.es/gp/product/B01M9CJ4CL/ref=as_li_tl?ie=UTF8&camp=3638&creative=24630&creativeASIN=B01M9CJ4CL&linkCode=as2&tag=ventanasolead-21&linkId=cea12262ce9864c330768f325049d993