Página 5 de 11
Re: RE: Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 09 Feb 2017, 21:40
por Dawn
Dawn escribió:No puedo montar el script -que buena pinta tiene :(-de
@fatfredycat porque no tengo esa ruta ni ese archivo gpio, entiendo que tengo el problema de versión que explican aquí
http://m.forocoches.com/foro/showthread.php?t=4978866
Sin embargo el bash si que me funciona. ¿Se puede programar éste bash para que lo ejecute en el arranque?
Muchas gracias!
Creo que el problema es que me falta
http://wiringpi.com/download-and-install/ por añadir al sistema. Mañana pruebo y confirmo.
Enviado desde mi T30 mediante Tapatalk
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 08:27
por Dawn
fatfredycat escribió:Bueno...ahi va:
https://dl.dropboxusercontent.com/u/280 ... control.sh
Aqui teneis el archivo que tengo actualmente. Este lo estoy provando y no me falla , lo e añadido a cron para lo ejecute al iniciar
#crontab -e
añadir al final del archivo
@reboot /etc/init.d/fancontrol.sh > /dev/null 2>&1
Aclaro que /etc/init.d es la ruta donde tengo el script con permisos de ejecución!Importante!
Luego para mantener limpito el transmission ejecuto en cron cada hora este script y asi...todo lo que vaya finalizando me lo remueve sin el coñazo de hacerlo manualmente
https://dl.dropboxusercontent.com/u/280 ... torrent.sh
#crontab -e
añadir al final del archivo
@hourly /etc/init.d/removetorrent.sh > /dev/null 2>&1
Y bueno...nada mas, un saludo!
Con la nueva versión de la libreria wiringpi he necesitado modificar tu código para que funcione. He eliminado la variable GPIO, y la he sustituido por la llamada directa a la función. Queda de la siguiente manera:
#!/bin/bash
### BEGIN INIT INFO
# Provides: blabla
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: fancontrol via Hardware
# Description:
#
# Fancontrol via Hardware PWM for RaspberryPi
### END INIT INFO
# Path
#GPIO=/usr/local/bin/gpio
# Limits
MIN_TEMP=49
MAX_TEMP=69
MIN_FAN=0
MEDIUM_FAN=512
MAX_FAN=1024
# Run forever
while [ 1 ]; do
# What's the CPU temp?
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
temp=$((temp/1000))
# Variable temperature control
if [ $temp -gt $MIN_TEMP ] && [ $temp -lt $MAX_TEMP ]; then
#fan=$(((temp - MIN_TEMP) * MAX_FAN / (MAX_TEMP - MIN_TEMP)))
fan=$MEDIUM_FAN
secs=1
# Maximum fan RPM
elif [ $temp -ge $MAX_TEMP ]; then
fan=$MAX_FAN
secs=1
# Switch off the fan
else
fan=$MIN_FAN
secs=60
fi
gpio -g mode 18 pwm
gpio -g pwm 18 $fan
# Show current state and pause for a while
echo "temp: $temp'C | fan: $((fan * 100 / MAX_FAN))% | pause: $secs""s"
sleep $secs
done
exit 0
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 09:17
por fatfredycat
Olé!! perfecto! Hoy también miraré de mejorar algunas cosas, por ejemplo, el tiempo de respuesta al llegar a 50º, ya que si sube y baja de 50 estará encendiendo y apagando el ventilador...lo suyo seria que si alcanza los 50º esté 10 min en marcha y luego compruebe...y si esta dentro de 35 a 49 se quede al 25%...no se, alguna idea?
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 09:47
por Dawn
Yo creo que una vez que se pone en marcha el ventilador no tiene mucho sentido que se pare completamente. Es ideal para comprobar que el sistema funciona, pero en la realidad es que una vez llegada a una cierta temperatura de funcionamiento le cuesta muchisimo bajar de ahí. Por ese motivo yo en vez de a 0, lo pondría a 10% o 25%. ¿Que te parece?
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 10:05
por fatfredycat
Si es lo que estaba pensando..lo único sería darle como mínimo un 25 % para asegurarse que el ventilador gira...si el voltaje esta por debajo me parece que se para...asi simplemente...cambiamos la variable MIN_FAN a 256
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 10:06
por fatfredycat
No se si será suficiente para mantener la RPI x debajo de 50º
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 10:09
por Dawn
Creo que siempre será mejor mantener el ventilador despacito y así evitar que coja temperatura la rp rápidamente que dejarlo a 0. Ahora, si ha de ser al 25 o al 30%, investigaremos.
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 10:24
por fatfredycat
A ver que te parece...
#!/bin/bash
### BEGIN INIT INFO
# Provides: blabla
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: fancontrol via Hardware
# Description:
#
# Fancontrol via Hardware PWM for RaspberryPi
### END INIT INFO
# Path
#GPIO=/usr/local/bin/gpio
# Limits
MIN_TEMP=49
MAX_TEMP=69
MIN_FAN=0
MIN_CONTROLFAN=256
MAX_FAN=1024
# Run forever
while [ 1 ]; do
# What's the CPU temp?
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
temp=$((temp/1000))
# Variable temperature control
if [ $temp -gt $MIN_TEMP ] && [ $temp -lt $MAX_TEMP ]; then
$MIN_FAN=$MIN_CONTROLFAN
ControlFan=$(((temp - MIN_TEMP) * MAX_FAN / (MAX_TEMP - MIN_TEMP)))
if [ $ControlFan -lt $MIN_CONTROLFAN ]; then
fan=$MIN_CONTROLFAN
else
fan=$ControlFan
fi
secs=1
# Maximum fan RPM
elif [ $temp -ge $MAX_TEMP ]; then
fan=$MAX_FAN
secs=1
# Switch off the fan
else
fan=$MIN_FAN
secs=60
fi
gpio -g mode 18 pwm
gpio -g pwm 18 $fan
# Show current state and pause for a while
echo "temp: $temp'C | fan: $((fan * 100 / MAX_FAN))% | pause: $secs""s"
sleep $secs
done
exit 0
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 10:27
por fatfredycat
Mmm...arranca el ventilador si la RPI supera los 49º...entonces mantiene simpre encendido el ventilador como mínimo a un 25% ...y si en el caso de que fuera aumentando la temperatura iria aumentando la RPM del ventilador...solo falta ver si rula :roll:
Me parece que se me a colado un $ delante de MIN_FAN al modificarla dentro del if
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 15:11
por Dawn
Bueno, modificando el código original simplemente cambiando MIN_FAN=0 por MIN_FAN=256 ya haría eso. Cuando tenga tiempo, y tenga la PSX-pi montada, creo que lo suyo es que el ventilador vaya al % exacto dependiendo de la tempertura exacta. Vamos, que si la temperatura sube 1% del mínimo, el ventilador suba 1% de revoluciones respecto a su mínimo y viceversa, así cada segundo.
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 15:43
por fatfredycat
Si ya lo he modificado y si la temperatura esta entre 49 y 69 el ventilador va subiendo y bajando RPM segun la temp. Con un minimo de 256 que seria el 25% que se queda siempre funcionando
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 16:40
por Dawn
Andá! Pues mirando el código por encima no me di cuenta de que era así. Voy a probarlo
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 16:56
por fatfredycat
Bueno...despues de estar 1 hora mirando el cmd como un inutil...(hasta mi mujer me ha preguntado que que hacia asi de embobado) he llegado a la conclusion que mantener el ventilador a 25, 33, 42 % es una tonteria...pues no refrigera casi nada...al ponerlo al 50% me ha mantenido la raspi entre 45 y 50º...asi que...creo que lo mejor es dejar que compruebe temperatura y si pasa de X que se encienda un rato al 100% y despues se mantenga al 50%...comprobando cada X tiempo si no sube de X grados para volver al 100 %...no se...creo que es lo mejor
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 10 Feb 2017, 16:57
por Dawn
Dawn escribió:Andá! Pues mirando el código por encima no me di cuenta de que era así. Voy a probarlo
Funciona -después de corregir los saltos de linea- muy bien! Gracias!! Ahí lo pongo corregido
#!/bin/bash
### BEGIN INIT INFO
# Provides: blabla
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: fancontrol via Hardware
# Description:
#
# Fancontrol via Hardware PWM for RaspberryPi
### END INIT INFO
# Path
#GPIO=/usr/local/bin/gpio
# Limits
MIN_TEMP=49
MAX_TEMP=69
MIN_FAN=0
MIN_CONTROLFAN=256
MAX_FAN=1024
# Run forever
while [ 1 ]; do
# What's the CPU temp?
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
temp=$((temp/1000))
# Variable temperature control
if [ $temp -gt $MIN_TEMP ] && [ $temp -lt $MAX_TEMP ]; then
MIN_FAN=$MIN_CONTROLFAN ControlFan=$(((temp - MIN_TEMP) * MAX_FAN / (MAX_TEMP - MIN_TEMP)))
if [ $ControlFan -lt $MIN_CONTROLFAN ];then
fan=$MIN_CONTROLFAN
else
fan=$ControlFan
fi
secs=1
# Maximum fan RPM
elif [ $temp -ge $MAX_TEMP ]; then
fan=$MAX_FAN
secs=1
# Switch off the fan
else
fan=$MIN_FAN
secs=60
fi
gpio -g mode 18 pwm
gpio -g pwm 18 $fan
# Show current state and pause for a while
echo "temp: $temp'C | fan: $((fan * 100 / MAX_FAN))% | pause: $secs""s"
sleep $secs
done
exit 0
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 13 Feb 2017, 08:50
por Dawn
fatfredycat escribió:Bueno...despues de estar 1 hora mirando el cmd como un inutil...(hasta mi mujer me ha preguntado que que hacia asi de embobado) he llegado a la conclusion que mantener el ventilador a 25, 33, 42 % es una tonteria...pues no refrigera casi nada...al ponerlo al 50% me ha mantenido la raspi entre 45 y 50º...asi que...creo que lo mejor es dejar que compruebe temperatura y si pasa de X que se encienda un rato al 100% y despues se mantenga al 50%...comprobando cada X tiempo si no sube de X grados para volver al 100 %...no se...creo que es lo mejor
Compañero, creo que tienes toda la razón. Estoy estudiando otro algoritmo, algo más complicado. ¿Sabes como ver los echo del script que se está ejecutando en el cron? Porque yo para ver el funcionamiento lo lanzo de nuevo y tener 2 scripts controlando el GPIO no creo que sea nada realista.
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 13 Feb 2017, 09:44
por Dawn
@fatfredycat ahora no tengo la rp3 aquí para probar y programar esta idea, pero la cuelgo aquí en pseudocódigo para ver que te parece.
constante Max_TEMP=69º # Temperatura a partir de la cual el ventilador irá a máx rpm
constante Min_TEMP=49º # Temperatura a partir de la cual el ventilador irá a min rpm
variable rpm = 100% # Iniciamos con el ventilador a máx rpm
variable temp_anterior = 0º # Iniciamos la temperatura
variable temp
Mientras [1] hacer:
temp=[consultamos temp CPU]
Si (temp < temp_anterior) entonces rpm = rpm - 5% #Si ha bajado la temperatura, bajamos las rpm de forma progresiva
Si (temp > temp_anterior) entonces rpm = rpm + 20% #Si ha subido la temperatura, subimos las rpm de forma agresiva
# Independientemente de los 'Si' anteriores, estas dos premisas prevalecen
Si temp >69º entonces rpm = 100% #mantenemos el ventilador a tope por encima de 69º
Si temp <49º entonces rpm = 25% #mantenemos el ventilador al mínimo de velocidad cuando la cpu esta fria
# Si la temperatura no sube, ni baja, ni está fuera de los límites máx y min, mantenemos las rpm y no tocamos la variable
# Tomamos la temperatura actual como futura referencia
temp_anterior = temp
GPIO 18 fan = rpm # Pasamos las rpm al ventilador
# La consulta se hace cada segundo, no varía su tiempo.
Sleep 1 #Aquí incluso pienso en la posibilidad de eliminar este tiempo de pausa, y este algoritmo se ejecute en tiempo/temp real
Repetir
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 13 Feb 2017, 13:15
por fatfredycat
Mira...al final lo he dejado bastante sencillo...
Si la temp esta por encima de 50º pongo el fan al 100% y sleep 5 minutos...
y a los 5 minutos vuelve a comprobar , si esta por debajo de 50º pone el fan a 50% y sleep 5 minutos...
Creo que es lo mejor , sencillo y siempre en marcha...
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 13 Feb 2017, 13:25
por fatfredycat
Compañero, creo que tienes toda la razón. Estoy estudiando otro algoritmo, algo más complicado. ¿Sabes como ver los echo del script que se está ejecutando en el cron? Porque yo para ver el funcionamiento lo lanzo de nuevo y tener 2 scripts controlando el GPIO no creo que sea nada realista.[/quote]
Para ver el echo comento # la linia de cron y reinicio ... entonces lanzo manualmente el sh y hago las pruebas.
Por cierto...yo he necesitado mantener el PATH de GPIO...si no no me rula... :lol:
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 13 Feb 2017, 14:56
por Dawn
Supongo que será cosa de la distribución que utilizamos. Yo uso Retropie.
Sobre mejorar el script. Lo cierto es que tal como está funciona bien. Solo queme parece mucho salto de diferencia de funcionamiento tener solo tres opciones: 0, 50 o 100%. Yo probaré una más dinámica a ver que pasa.
Por cierto, que ejecutas para que la raspberry se ponga calentita? jajajaja
Re: Control del ventilador RPi3 (RPM según temperatura)
Publicado: 13 Feb 2017, 18:49
por fatfredycat
Yo pongo a reproducir una peli y le añado a transmission algo para descargar...en el ultimo script ya cambia dinamicamente segun la temperatura de la raspi... pero estuve mirando y...por debajo de 50 % es tonteria tener el ventilador, pues no refrigera, o muy poco...yo ya te digo, le he hecho un if temp>50 fan=maxfan else fan=minfan que es el 50%