Control del ventilador RPi3 (RPM según temperatura)

¿Has creado algún proyecto genial con una Raspberry Pi? Este es tu lugar.
Avatar de Usuario
Dawn
Pi Master
Pi Master
Mensajes: 360
Registrado: 16 Dic 2016, 10:33
Agradecido: 0
Agradecimiento recibido: 0

glicerina escribió:Buenas noches una pregunta esto se podria montar en una raspi3 con sistema recalbox. Gracias de antemano a todos.
No creo que haya ningún problema en hacerlo

Enviado desde mi SM-G935F mediante Tapatalk
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Dawn escribió:Bueno, os traigo una actualización del script que controla la velocidad del ventilador. La gran novedad es que genera un fichero resumen log por cada sesión de funcionamiento de la máquina. Así podréis ver y comparar de un rápido vistazo como se ha comportado en cuanto a temperaturas vuestra raspberry. Aquí os dejo una muestra del log:
Hora de inicio del sistema: 16:54:59
 
          Rangos de temperatura de la CPU en % por tiempo
 
  < 40º ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 52% 

40º-50º ▓▓▓▓▓▓▓▓▓▓▓▓▓ 26%

50º-60º ▓▓▓ 7%

60º-70º ▓▓▓▓▓▓ 13%

  > 70º  0%
 
Velocidad media del ventilador: 49%
 
Temperatura mínima alcanzada: 32ºC
Temperatura máxima alcanzada: 64ºC
 
Última lectura: 20:49:16 | temp: 41ºC | ventilador: 39% | pausa: 5s
Y a continuación os dejo el código. Tened en cuenta que he sido muy agresivo con los parámetros del ventilador, ya que la tengo la rp overclokeada. Velocidad mínima del 25%, variable entre 35º y 55º, a partir de 55º el ventilador va al 100%.
#!/bin/bash
### BEGIN INIT INFO
# Provides: 		fancontrol
# 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

# Stadistic bar
function graphic()
{
	bar=""
	local cont=$1
	let cont=cont/2
	while [ $cont -gt 0 ]; do
		bar="$bar▓"
		let cont=cont-1
	done
	echo $bar
}


# Limits
MIN_TEMP=25
MIN_TEMP_FAN=35
MAX_TEMP=55
MIN_FAN=256
MAX_FAN=1024

# Start time log
START_TIME=$(date +"%T")

# Variables for stadistics
lt40=0
b4050=0
b5060=0
b6070=0
gt70=0
fan_sum=0
cont=0
temp_max=0
temp_min=100

# Variables for file name
FECHA=$(date +%y%m%d-%H%M%S)
FILE="fancontrol_$FECHA.log"

# Run forever
while [ 1 ]; do

	# What's the CPU temp?
	temp=$(cat /sys/class/thermal/thermal_zone0/temp)
	temp=$((temp/1000))

	if [ $temp -lt $temp_min ]; then
		let temp_min=temp
	fi

	if [ $temp -gt $temp_max ]; then
                let temp_max=temp
        fi

	# What's the CPU speed?
	freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
	freq=$((freq/1000))

	# Variable temperature control
	if [ $temp -gt $MIN_TEMP_FAN  ] && [ $temp -lt $MAX_TEMP ]; then
		fan=$(((temp - MIN_TEMP) * (MAX_FAN - MIN_FAN) / (MAX_TEMP - MIN_TEMP)))
		secs=5

	# Maximum fan RPM
	elif [ $temp -ge $MAX_TEMP ]; then
		fan=$MAX_FAN
		secs=5

	# Minimun fan RPM
	else
		fan=$MIN_FAN
		secs=5
	fi

	# Send fan RPM to fan
        gpio -g mode 18 pwm
        gpio -g pwm 18 $fan

	# Stadistics
	NOW=$(date +"%T")

	if [ $temp -le "40" ]; then
		let lt40=lt40+1
	fi
	if [ $temp -gt "40" ] && [ $temp -le "50" ]; then
		let b4050=b4050+1
	fi
	if [ $temp -gt "50" ] && [ $temp -le "60" ]; then
		let b5060=b5060+1
	fi
	if [ $temp -gt "60" ] && [ $temp -le "70" ]; then
		let b6070=b6070+1
	fi
	if [ $temp -gt "70" ]; then
		let gt70=gt70+1
	fi

	# Show stadistics
	echo " " > $FILE
	echo "Hora de inicio del sistema: $START_TIME" >> $FILE
	echo " " >> $FILE
	let cont=lt40+b4050+b5060+b6070+gt70
	echo "          Rangos de temperatura de la CPU en % por tiempo" >> $FILE
	echo " " >> $FILE
	echo "  < 40º $( graphic $((lt40 * 100 / cont)) 4) $((lt40 * 100 / cont))% " >> $FILE
       	echo "40º-50º $( graphic $((b4050 * 100 / cont)) 2 ) $((b4050 * 100 / cont))%" >> $FILE
	echo "50º-60º $( graphic $((b5060 * 100 / cont)) 3 ) $((b5060 * 100 / cont))%" >> $FILE
	echo "60º-70º $( graphic $((b6070 * 100 / cont)) 5 ) $((b6070 * 100 / cont))%" >> $FILE
	echo "  > 70º $( graphic $((gt70 * 100 / cont)) 1 ) $((gt70 * 100 / cont))%" >> $FILE

	let fan_sum=fan_sum+fan*100/MAX_FAN
	echo " " >> $FILE
	echo "Velocidad media del ventilador: $((fan_sum / cont))%" >> $FILE
	echo " " >> $FILE
	echo "Temperatura mínima alcanzada: $temp_minºC" >> $FILE
	echo "Temperatura máxima alcanzada: $temp_maxºC" >> $FILE

	echo " " >> $FILE
	echo "Última lectura: $NOW | temp: $tempºC | ventilador: $((fan * 100 / MAX_FAN))% | pausa: $secs""s " >> $FILE
	echo " " >> $FILE

	sleep $secs

done
exit 0
Gracias por el aporte.
Aprovechando que he comprado un par de led RGB , estoy maquinando como portar alguno de los script para colocar el led y que valla cambiando de color. Bien en función de la velocidad del ventilador o del rango de temperatura.¿Que os parece la idea?¿Creéis que es factible?.Estoy recopilando información de como hacerlo,si lo consigo ya lo pondré con un pequeño tuto.
Avatar de Usuario
glicerina
Pi Omega
Pi Omega
Mensajes: 45
Registrado: 15 Ene 2017, 12:19
Agradecido: 0
Agradecimiento recibido: 0

butarda66 escribió:Vale, al final lo he conseguido haciendo algo parecido a lo que decía Aerz en la primera pagina del hilo.
Lo resumo por si a alguien mas le pasa:
1º- borramos la linea de cron con:
crontab -e
vamos donde pone: @reboot /ruta/delscript/nombre_script.sh> /dev/null 2>&1 y lo borramos.
Guardamos con Ctrl - x.
2º Movemos el script donde lo tengamos a la carpeta /etc/init.d/ con el comando:
sudo mv / ruta/delscript /nombre_script.sh /etc/init.d/
3º Le damos permiso de ejecución con el comando:
sudo chmod +x /etc/init.d/nombre_script.sh
4º Luego, actualizamos el rc.d con el comando:
sudo update-rc.d nombre_script.sh defaults
PD: Si lo queremos desinstalar, ejecutamos:
sudo update-rc.d -f nombre_script.sh remove
rm /etc/init.d/nombre_script.sh
Cambia nombre_script.sh por el nombre de tu script.
Eso es todo ,gracias a todos por vuestro trabajo y espero que esto le sirva a alguien mas de ayuda.
Un saludo .
buenas tardes una pregunta estoy intentado esto con el sistema recalbox y me surge el mismo problema que te pasaba a ti que si lo activo con bash fancontrol.sh el ventilador se pone en marcha pero si no lo activo se queda parado me podrias echar una mano o ponerme un mini tuto de como poder activarlo como tu porque por mucho que intente cambiar el archivo me dice que no puedo cambiarlo o no encuentra el archivo. Muchas gracias de antemano
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

No se si soy el mas apropiado para ayudarte,pero lo intentaremos.
Donde tienes guardado el script?
Avatar de Usuario
glicerina
Pi Omega
Pi Omega
Mensajes: 45
Registrado: 15 Ene 2017, 12:19
Agradecido: 0
Agradecimiento recibido: 0

butarda66 escribió:No se si soy el mas apropiado para ayudarte,pero lo intentaremos
Donde tienes guardado el script?
Lo tengo en home/pi y otra duda en En crontab tengo esto @reboot /home/pi/fancontrol.sh > /dev/null 2>&1 sin la# delante de@reboot
Avatar de Usuario
Dawn
Pi Master
Pi Master
Mensajes: 360
Registrado: 16 Dic 2016, 10:33
Agradecido: 0
Agradecimiento recibido: 0

butarda66 escribió:
Dawn escribió:Bueno, os traigo una actualización del script que controla la velocidad del ventilador. La gran novedad es que genera un fichero resumen log por cada sesión de funcionamiento de la máquina. Así podréis ver y comparar de un rápido vistazo como se ha comportado en cuanto a temperaturas vuestra raspberry. Aquí os dejo una muestra del log:
Hora de inicio del sistema: 16:54:59
 
          Rangos de temperatura de la CPU en % por tiempo
 
  < 40º ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 52% 

40º-50º ▓▓▓▓▓▓▓▓▓▓▓▓▓ 26%

50º-60º ▓▓▓ 7%

60º-70º ▓▓▓▓▓▓ 13%

  > 70º  0%
 
Velocidad media del ventilador: 49%
 
Temperatura mínima alcanzada: 32ºC
Temperatura máxima alcanzada: 64ºC
 
Última lectura: 20:49:16 | temp: 41ºC | ventilador: 39% | pausa: 5s
Y a continuación os dejo el código. Tened en cuenta que he sido muy agresivo con los parámetros del ventilador, ya que la tengo la rp overclokeada. Velocidad mínima del 25%, variable entre 35º y 55º, a partir de 55º el ventilador va al 100%.
#!/bin/bash
### BEGIN INIT INFO
# Provides: 		fancontrol
# 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

# Stadistic bar
function graphic()
{
	bar=""
	local cont=$1
	let cont=cont/2
	while [ $cont -gt 0 ]; do
		bar="$bar▓"
		let cont=cont-1
	done
	echo $bar
}


# Limits
MIN_TEMP=25
MIN_TEMP_FAN=35
MAX_TEMP=55
MIN_FAN=256
MAX_FAN=1024

# Start time log
START_TIME=$(date +"%T")

# Variables for stadistics
lt40=0
b4050=0
b5060=0
b6070=0
gt70=0
fan_sum=0
cont=0
temp_max=0
temp_min=100

# Variables for file name
FECHA=$(date +%y%m%d-%H%M%S)
FILE="fancontrol_$FECHA.log"

# Run forever
while [ 1 ]; do

	# What's the CPU temp?
	temp=$(cat /sys/class/thermal/thermal_zone0/temp)
	temp=$((temp/1000))

	if [ $temp -lt $temp_min ]; then
		let temp_min=temp
	fi

	if [ $temp -gt $temp_max ]; then
                let temp_max=temp
        fi

	# What's the CPU speed?
	freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
	freq=$((freq/1000))

	# Variable temperature control
	if [ $temp -gt $MIN_TEMP_FAN  ] && [ $temp -lt $MAX_TEMP ]; then
		fan=$(((temp - MIN_TEMP) * (MAX_FAN - MIN_FAN) / (MAX_TEMP - MIN_TEMP)))
		secs=5

	# Maximum fan RPM
	elif [ $temp -ge $MAX_TEMP ]; then
		fan=$MAX_FAN
		secs=5

	# Minimun fan RPM
	else
		fan=$MIN_FAN
		secs=5
	fi

	# Send fan RPM to fan
        gpio -g mode 18 pwm
        gpio -g pwm 18 $fan

	# Stadistics
	NOW=$(date +"%T")

	if [ $temp -le "40" ]; then
		let lt40=lt40+1
	fi
	if [ $temp -gt "40" ] && [ $temp -le "50" ]; then
		let b4050=b4050+1
	fi
	if [ $temp -gt "50" ] && [ $temp -le "60" ]; then
		let b5060=b5060+1
	fi
	if [ $temp -gt "60" ] && [ $temp -le "70" ]; then
		let b6070=b6070+1
	fi
	if [ $temp -gt "70" ]; then
		let gt70=gt70+1
	fi

	# Show stadistics
	echo " " > $FILE
	echo "Hora de inicio del sistema: $START_TIME" >> $FILE
	echo " " >> $FILE
	let cont=lt40+b4050+b5060+b6070+gt70
	echo "          Rangos de temperatura de la CPU en % por tiempo" >> $FILE
	echo " " >> $FILE
	echo "  < 40º $( graphic $((lt40 * 100 / cont)) 4) $((lt40 * 100 / cont))% " >> $FILE
       	echo "40º-50º $( graphic $((b4050 * 100 / cont)) 2 ) $((b4050 * 100 / cont))%" >> $FILE
	echo "50º-60º $( graphic $((b5060 * 100 / cont)) 3 ) $((b5060 * 100 / cont))%" >> $FILE
	echo "60º-70º $( graphic $((b6070 * 100 / cont)) 5 ) $((b6070 * 100 / cont))%" >> $FILE
	echo "  > 70º $( graphic $((gt70 * 100 / cont)) 1 ) $((gt70 * 100 / cont))%" >> $FILE

	let fan_sum=fan_sum+fan*100/MAX_FAN
	echo " " >> $FILE
	echo "Velocidad media del ventilador: $((fan_sum / cont))%" >> $FILE
	echo " " >> $FILE
	echo "Temperatura mínima alcanzada: $temp_minºC" >> $FILE
	echo "Temperatura máxima alcanzada: $temp_maxºC" >> $FILE

	echo " " >> $FILE
	echo "Última lectura: $NOW | temp: $tempºC | ventilador: $((fan * 100 / MAX_FAN))% | pausa: $secs""s " >> $FILE
	echo " " >> $FILE

	sleep $secs

done
exit 0
Gracias por el aporte.
Aprovechando que he comprado un par de led RGB , estoy maquinando como portar alguno de los script para colocar el led y que valla cambiando de color. Bien en función de la velocidad del ventilador o del rango de temperatura.¿Que os parece la idea?¿Creéis que es factible?.Estoy recopilando información de como hacerlo,si lo consigo ya lo pondré con un pequeño tuto.
Yo tengo un led RGB puesto que es rojo al encenderse la rp y cambia a verde con la actividad.

Enviado desde mi SM-G935F mediante Tapatalk
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

glicerina escribió:
butarda66 escribió:No se si soy el mas apropiado para ayudarte,pero lo intentaremos
Donde tienes guardado el script?
Lo tengo en home/pi y otra duda en En crontab tengo esto @reboot /home/pi/fancontrol.sh > /dev/null 2>&1 sin la# delante de@reboot
El símbolo # se pone delante de la linea para indicar un comentario sobre lo que se esta haciendo.
vamos a intentar ayudarte prueba esto:
1º- Habre un terminal y ejecuta:
crontab -e
borra la linea @reboot /home/pi/fancontrol.sh > /dev/null 2>&1
pulsamos"Ctrl+x" para guadar los cambios,pulsamos "y". Y después enter para salir de nuevo al terminal.

2º Para mover el script a la carpeta /etc/init.d/ tu comando seria :
sudo mv /home/pi/fancontrol.sh /etc/init.d/

3º Le damos los permisos con el comando:
sudo chmod +x /etc/init.d/fancontrol.sh

4º actualizamois el rc.d con el comando:
sudo update-rc.d fancontrol.sh defaults

5º reinicia y prueba haber ahora.

Espero que te ayude esto .
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Dawn escribió:
butarda66 escribió:
Dawn escribió:Bueno, os traigo una actualización del script que controla la velocidad del ventilador. La gran novedad es que genera un fichero resumen log por cada sesión de funcionamiento de la máquina. Así podréis ver y comparar de un rápido vistazo como se ha comportado en cuanto a temperaturas vuestra raspberry. Aquí os dejo una muestra del log:
Hora de inicio del sistema: 16:54:59
 
          Rangos de temperatura de la CPU en % por tiempo
 
  < 40º ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 52% 

40º-50º ▓▓▓▓▓▓▓▓▓▓▓▓▓ 26%

50º-60º ▓▓▓ 7%

60º-70º ▓▓▓▓▓▓ 13%

  > 70º  0%
 
Velocidad media del ventilador: 49%
 
Temperatura mínima alcanzada: 32ºC
Temperatura máxima alcanzada: 64ºC
 
Última lectura: 20:49:16 | temp: 41ºC | ventilador: 39% | pausa: 5s
Y a continuación os dejo el código. Tened en cuenta que he sido muy agresivo con los parámetros del ventilador, ya que la tengo la rp overclokeada. Velocidad mínima del 25%, variable entre 35º y 55º, a partir de 55º el ventilador va al 100%.
#!/bin/bash
### BEGIN INIT INFO
# Provides: 		fancontrol
# 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

# Stadistic bar
function graphic()
{
	bar=""
	local cont=$1
	let cont=cont/2
	while [ $cont -gt 0 ]; do
		bar="$bar▓"
		let cont=cont-1
	done
	echo $bar
}


# Limits
MIN_TEMP=25
MIN_TEMP_FAN=35
MAX_TEMP=55
MIN_FAN=256
MAX_FAN=1024

# Start time log
START_TIME=$(date +"%T")

# Variables for stadistics
lt40=0
b4050=0
b5060=0
b6070=0
gt70=0
fan_sum=0
cont=0
temp_max=0
temp_min=100

# Variables for file name
FECHA=$(date +%y%m%d-%H%M%S)
FILE="fancontrol_$FECHA.log"

# Run forever
while [ 1 ]; do

	# What's the CPU temp?
	temp=$(cat /sys/class/thermal/thermal_zone0/temp)
	temp=$((temp/1000))

	if [ $temp -lt $temp_min ]; then
		let temp_min=temp
	fi

	if [ $temp -gt $temp_max ]; then
                let temp_max=temp
        fi

	# What's the CPU speed?
	freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
	freq=$((freq/1000))

	# Variable temperature control
	if [ $temp -gt $MIN_TEMP_FAN  ] && [ $temp -lt $MAX_TEMP ]; then
		fan=$(((temp - MIN_TEMP) * (MAX_FAN - MIN_FAN) / (MAX_TEMP - MIN_TEMP)))
		secs=5

	# Maximum fan RPM
	elif [ $temp -ge $MAX_TEMP ]; then
		fan=$MAX_FAN
		secs=5

	# Minimun fan RPM
	else
		fan=$MIN_FAN
		secs=5
	fi

	# Send fan RPM to fan
        gpio -g mode 18 pwm
        gpio -g pwm 18 $fan

	# Stadistics
	NOW=$(date +"%T")

	if [ $temp -le "40" ]; then
		let lt40=lt40+1
	fi
	if [ $temp -gt "40" ] && [ $temp -le "50" ]; then
		let b4050=b4050+1
	fi
	if [ $temp -gt "50" ] && [ $temp -le "60" ]; then
		let b5060=b5060+1
	fi
	if [ $temp -gt "60" ] && [ $temp -le "70" ]; then
		let b6070=b6070+1
	fi
	if [ $temp -gt "70" ]; then
		let gt70=gt70+1
	fi

	# Show stadistics
	echo " " > $FILE
	echo "Hora de inicio del sistema: $START_TIME" >> $FILE
	echo " " >> $FILE
	let cont=lt40+b4050+b5060+b6070+gt70
	echo "          Rangos de temperatura de la CPU en % por tiempo" >> $FILE
	echo " " >> $FILE
	echo "  < 40º $( graphic $((lt40 * 100 / cont)) 4) $((lt40 * 100 / cont))% " >> $FILE
       	echo "40º-50º $( graphic $((b4050 * 100 / cont)) 2 ) $((b4050 * 100 / cont))%" >> $FILE
	echo "50º-60º $( graphic $((b5060 * 100 / cont)) 3 ) $((b5060 * 100 / cont))%" >> $FILE
	echo "60º-70º $( graphic $((b6070 * 100 / cont)) 5 ) $((b6070 * 100 / cont))%" >> $FILE
	echo "  > 70º $( graphic $((gt70 * 100 / cont)) 1 ) $((gt70 * 100 / cont))%" >> $FILE

	let fan_sum=fan_sum+fan*100/MAX_FAN
	echo " " >> $FILE
	echo "Velocidad media del ventilador: $((fan_sum / cont))%" >> $FILE
	echo " " >> $FILE
	echo "Temperatura mínima alcanzada: $temp_minºC" >> $FILE
	echo "Temperatura máxima alcanzada: $temp_maxºC" >> $FILE

	echo " " >> $FILE
	echo "Última lectura: $NOW | temp: $tempºC | ventilador: $((fan * 100 / MAX_FAN))% | pausa: $secs""s " >> $FILE
	echo " " >> $FILE

	sleep $secs

done
exit 0
Gracias por el aporte.
Aprovechando que he comprado un par de led RGB , estoy maquinando como portar alguno de los script para colocar el led y que valla cambiando de color. Bien en función de la velocidad del ventilador o del rango de temperatura.¿Que os parece la idea?¿Creéis que es factible?.Estoy recopilando información de como hacerlo,si lo consigo ya lo pondré con un pequeño tuto.
Yo tengo un led RGB puesto que es rojo al encenderse la rp y cambia a verde con la actividad.

Enviado desde mi SM-G935F mediante Tapatalk
Ya lo he estado viendo en tu proyecto que por cierto es muy chulo pero quiero darle unas vueltas y que se ilumine de un color determinado cuando se encuentre entre cierto rango de temperaturas por ejemplo:
30cº-40cº color azul
40cº-45cº color celeste
45cº-50cº color verde
50cº-55cº color pistacho
55cº-60cº color naranja
60cº-70cº color amarillo
70cº-90cº color rojo
asi tendríamos un monitor de temperatura por colores en tiempo real.
de momento estoy aprendiendo como hacerlo.Lo tengo muy verde ,solo el concepto general de lo que quiero hacer.Ademas los led RGB me llegan a mediados de esta semana, ya comentare .
Avatar de Usuario
glicerina
Pi Omega
Pi Omega
Mensajes: 45
Registrado: 15 Ene 2017, 12:19
Agradecido: 0
Agradecimiento recibido: 0

mv: can't rename '/home/pi/fancontrol.sh': No such file or directory esto es lo que me sale al intentar cambiar el archivo y otr cosa en recalbox no puedo usrar sudo
Avatar de Usuario
Space
Pi Alpha
Pi Alpha
Mensajes: 16
Registrado: 02 Mar 2017, 21:25
Agradecido: 2 veces
Agradecimiento recibido: 0

glicerina escribió:
butarda66 escribió:No se si soy el mas apropiado para ayudarte,pero lo intentaremos
Donde tienes guardado el script?
Lo tengo en home/pi y otra duda en En crontab tengo esto @reboot /home/pi/fancontrol.sh > /dev/null 2>&1 sin la# delante de@reboot
- En Raspbian con crontab -e si tienes el archivo fancontrol.sh en tu HOME

Código: Seleccionar todo

@reboot sh $HOME/fancontrol.sh
a mi me funciona asi, cada vez que se inicia la Raspberry arranca fancontrol.sh
Avatar de Usuario
Dawn
Pi Master
Pi Master
Mensajes: 360
Registrado: 16 Dic 2016, 10:33
Agradecido: 0
Agradecimiento recibido: 0

butarda66 escribió:
Dawn escribió:
butarda66 escribió:
Gracias por el aporte.
Aprovechando que he comprado un par de led RGB , estoy maquinando como portar alguno de los script para colocar el led y que valla cambiando de color. Bien en función de la velocidad del ventilador o del rango de temperatura.¿Que os parece la idea?¿Creéis que es factible?.Estoy recopilando información de como hacerlo,si lo consigo ya lo pondré con un pequeño tuto.
Yo tengo un led RGB puesto que es rojo al encenderse la rp y cambia a verde con la actividad.

Enviado desde mi SM-G935F mediante Tapatalk
Ya lo he estado viendo en tu proyecto que por cierto es muy chulo pero quiero darle unas vueltas y que se ilumine de un color determinado cuando se encuentre entre cierto rango de temperaturas por ejemplo:
30cº-40cº color azul
40cº-45cº color celeste
45cº-50cº color verde
50cº-55cº color pistacho
55cº-60cº color naranja
60cº-70cº color amarillo
70cº-90cº color rojo
asi tendríamos un monitor de temperatura por colores en tiempo real.
de momento estoy aprendiendo como hacerlo.Lo tengo muy verde ,solo el concepto general de lo que quiero hacer.Ademas los led RGB me llegan a mediados de esta semana, ya comentare .

Ya contarás, puede resultar muy interesante.
Avatar de Usuario
Pirossi
Pi Destroyer
Pi Destroyer
Mensajes: 503
Registrado: 24 Ene 2017, 03:16
Agradecido: 0
Agradecimiento recibido: 1 vez

Os dejo aqui un par de scripts en python que sirve para esto que buscais , que cambie de color una tira o un led rgb segun temperatura, ME PARECE UN TEMA INTERESANTE, quien pueda ir probando..
ademas en cada script viene especificado que hace cada linea de codigo, asi que se puede personalizar sin volvernos locos..

Código: Seleccionar todo

#!/usr/bin/python
from sense_hat import SenseHat
import time
while True:
    ap = SenseHat()
    temp = ap.get_temperature()
    print("Temp: %s C" % temp)               # Show temp on console

    ap.set_rotation(180)        # Set LED matrix to scroll from right to left

    ap.show_message("%.1f C" % temp, scroll_speed=0.10, text_colour=[0, 255, 0])
    time.sleep(10)
Aqui otro distinto, lo que cambia creo que es la foma en la que se muestra en el led o el la tira rgb, yo lo dejo para que hagamos nuestras pruebas.

Código: Seleccionar todo

import time
import colorsys
from sense_hat import SenseHat

sense = SenseHat()

#The limits of the temperature scale
MAXTEMP = 40.0
MINTEMP = 0.0
#The limits of the HLS hue scale 0.0=red, 0.9=violet 
MAXHUE = 0.0
MINHUE = 0.90

while 1:
    # reading temp and correcting for sensor bias
    temp = sense.get_temperature()
    calctemp = 0.0071*temp*temp+0.857*temp-10.0 

    #Calculating hue from temp and limit to scale range
    hue = MINHUE-(calctemp-MINTEMP)/(MAXTEMP-MINTEMP)*(MINHUE-MAXHUE)
    hue = min(hue,MINHUE)
    hue = max(hue,MAXHUE)
    
    #translating HLS to RGB and displaying with LEDs
    rgbfloat=colorsys.hls_to_rgb(hue, 0.5, 1)
    rgb=(int(rgbfloat[0]*255), int(rgbfloat[1]*255), int(rgbfloat[2]*255))
    sense.clear(rgb)

    #Debug stuff
    #print calctemp
    #print hue
    
    time.sleep(1)
Imagen
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Pirossi escribió:Os dejo aqui un par de scripts en python que sirve para esto que buscais , que cambie de color una tira o un led rgb segun temperatura, ME PARECE UN TEMA INTERESANTE, quien pueda ir probando..
ademas en cada script viene especificado que hace cada linea de codigo, asi que se puede personalizar sin volvernos locos..

Código: Seleccionar todo

#!/usr/bin/python
from sense_hat import SenseHat
import time
while True:
    ap = SenseHat()
    temp = ap.get_temperature()
    print("Temp: %s C" % temp)               # Show temp on console

    ap.set_rotation(180)        # Set LED matrix to scroll from right to left

    ap.show_message("%.1f C" % temp, scroll_speed=0.10, text_colour=[0, 255, 0])
    time.sleep(10)
Aqui otro distinto, lo que cambia creo que es la foma en la que se muestra en el led o el la tira rgb, yo lo dejo para que hagamos nuestras pruebas.

Código: Seleccionar todo

import time
import colorsys
from sense_hat import SenseHat

sense = SenseHat()

#The limits of the temperature scale
MAXTEMP = 40.0
MINTEMP = 0.0
#The limits of the HLS hue scale 0.0=red, 0.9=violet 
MAXHUE = 0.0
MINHUE = 0.90

while 1:
    # reading temp and correcting for sensor bias
    temp = sense.get_temperature()
    calctemp = 0.0071*temp*temp+0.857*temp-10.0 

    #Calculating hue from temp and limit to scale range
    hue = MINHUE-(calctemp-MINTEMP)/(MAXTEMP-MINTEMP)*(MINHUE-MAXHUE)
    hue = min(hue,MINHUE)
    hue = max(hue,MAXHUE)
    
    #translating HLS to RGB and displaying with LEDs
    rgbfloat=colorsys.hls_to_rgb(hue, 0.5, 1)
    rgb=(int(rgbfloat[0]*255), int(rgbfloat[1]*255), int(rgbfloat[2]*255))
    sense.clear(rgb)

    #Debug stuff
    #print calctemp
    #print hue
    
    time.sleep(1)
OSTRAS.Mil gracias.
Llevo días volviéndome loco, buscando por Internet información y manuales para hacerlo y la única conclusión a la que había llegado, era que tenia que ser en python. Y como no tengo ni papa de programación estaba buscando un tuto sobre python para hacerlo.
Esta semana la tengo algo complicada. pero intentare sacar algo de tiempo para probar .
Gracias por la ayuda.
Avatar de Usuario
Pirossi
Pi Destroyer
Pi Destroyer
Mensajes: 503
Registrado: 24 Ene 2017, 03:16
Agradecido: 0
Agradecimiento recibido: 1 vez

De nada , aqui estamos.para ayudarnos, he encontrado este link tambien muy interesante en el.que comentan como hacerlo y con que materiales, el.script viene mas completo, y comcretan a que pines conectarlo todo, eso. Si, toman la temperatura de un sensor de temperatura conectado, yo creo que seria hacer.una adaptacion de este proyecto.para que tomase la.twmperatura de.la cpu gpu, o para que cambiase color segun las rpms del ventilador.

http://www.scienceexposure.com/raspberr ... pberry-pi/
Imagen
Avatar de Usuario
Dawn
Pi Master
Pi Master
Mensajes: 360
Registrado: 16 Dic 2016, 10:33
Agradecido: 0
Agradecimiento recibido: 0

He detectado un bug del script.

Había detectado que el video splashscreen del arranque perdía el audio al poco de comenzar. Después de mucho buscar cual podía ser el motivo resulta que las consultas que hace el script fancontrol.sh interfiere de alguna manera con la reproducción del vídeo.

La solución sencilla que he encontrado es añadir un
sleep 15
antes del while.
lakio
Pi Omega
Pi Omega
Mensajes: 70
Registrado: 23 Ene 2017, 05:45
Agradecido: 0
Agradecimiento recibido: 0

interesante tema, aunque yo lo tengo siempre conectado para evitar problemas.

Me lo apunto para futuros "experimentos"
Avatar de Usuario
caracolgeek
Pi Omega
Pi Omega
Mensajes: 70
Registrado: 16 May 2016, 15:20
Agradecido: 0
Agradecimiento recibido: 0

Al ejecutar el script me a el siguiente error y no tengo ni idea de por que

pi@retropie:~ $ bash fanControl.sh
. Should be in/out/pwm/clock/up/down/tri
fanControl.sh: line 43: syntax error: unexpected end of file

He dado permisos de ejecucion con:
sudo chmod 777 /home/pi/fanControl.sh

El codigo es el del primer post lo vuelvo a poner por si lo he copiado mal.

#!/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
Orange Pi PC en camino.
Kekoha
Pi Alpha
Pi Alpha
Mensajes: 19
Registrado: 26 Dic 2016, 14:35
Agradecido: 1 vez
Agradecimiento recibido: 0

¿alguien me aconseja una tienda donde comprar transistores sin tener que comprar 50?
Avatar de Usuario
caracolgeek
Pi Omega
Pi Omega
Mensajes: 70
Registrado: 16 May 2016, 15:20
Agradecido: 0
Agradecimiento recibido: 0

Me auto respondo a mi mismo. El script funciona perfectamente, el problema fue al hacer copia/pega con windows que pone caracteres especiales que no se ven y dan error al ejecutar el codigo.

Espero le sirva de ayuda a alguien
caracolgeek escribió:Al ejecutar el script me a el siguiente error y no tengo ni idea de por que

pi@retropie:~ $ bash fanControl.sh
. Should be in/out/pwm/clock/up/down/tri
fanControl.sh: line 43: syntax error: unexpected end of file

He dado permisos de ejecucion con:
sudo chmod 777 /home/pi/fanControl.sh

El codigo es el del primer post lo vuelvo a poner por si lo he copiado mal.

#!/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
Orange Pi PC en camino.
droman
Pi Alpha
Pi Alpha
Mensajes: 11
Registrado: 09 Abr 2017, 20:14
Agradecido: 0
Agradecimiento recibido: 0

Lo mismo ya lo habéis puesto, pero a estas horas, leerme 9 páginas... me cuesta XD
Cuando querais mantener una aplicación en segundo plano, tan solo tenéis que añadir el caracter & al final. es decir:

# ./fancontrol &
Responder