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
tenshide
Pi Beta
Pi Beta
Mensajes: 116
Registrado: 01 Mar 2017, 22:30
Agradecido: 0
Agradecimiento recibido: 0

gracias compañero, en cuanto tenga un ratito lo monto como dices. ;)
Imagen
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Haber si me podéis tirar un cable.
Llevo dos días como un tonto leyendo y repasando el hilo y no me acaba de chutar el invento.
Lo tengo todo montado en la placa de ensayo y funcionar funciona,pero no soy capaz de hacer que se ejecute al encender o reiniciar.Lo tengo que lanzar manualmente con ``bash fancontrol.sh´´.En crontab tengo lo siguiente:
@reboot /home/pi/fancontrol.sh > /dev/null 2>&1
Y la ruta del script es /home/pi, con permisos rwxr-xr-x (0755) por lo que creo que esta bien.
Si alguien me arroja un poco de luz se lo agradecería.
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Esta es una captura de la configuración del GPIO actualmente en mi raspberry pi 3.
Tabla del puerto GPIO
Tabla del puerto GPIO
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

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 .
Avatar de Usuario
Space
Pi Alpha
Pi Alpha
Mensajes: 16
Registrado: 02 Mar 2017, 21:25
Agradecido: 2 veces
Agradecimiento recibido: 0

Hola, he montado el ventilador de la RPi3 y funciona todo bien, lo único que no consigo es que se pare el ventilador cuando la temperatura es baja.
He puesto la variable MIN_FAN=256 a 0, dejándola así: MIN_FAN=0 y en el log aparece el ventilador al 0%

04-03-17 | 19:02:19 | temp: 39'C | fan: 0% | pause: 15s

pero el ventilador sigue girando, a baja velocidad pero sigue girando.
Alguien que lo tenga funcionando me podría decir si se para el ventilador poniéndolo asi.

Un saludo.
Avatar de Usuario
Dawn
Pi Master
Pi Master
Mensajes: 360
Registrado: 16 Dic 2016, 10:33
Agradecido: 0
Agradecimiento recibido: 0

Space escribió:Hola, he montado el ventilador de la RPi3 y funciona todo bien, lo único que no consigo es que se pare el ventilador cuando la temperatura es baja.
He puesto la variable MIN_FAN=256 a 0, dejándola así: MIN_FAN=0 y en el log aparece el ventilador al 0%

04-03-17 | 19:02:19 | temp: 39'C | fan: 0% | pause: 15s

pero el ventilador sigue girando, a baja velocidad pero sigue girando.
Alguien que lo tenga funcionando me podría decir si se para el ventilador poniéndolo asi.

Un saludo.
¿Has probado ha encender la RP sin iniciar el script? Si se pone en marcha el ventilador sin que el script funcione el problema es que tienes el cableado más puesto y el ventilador directo a corriente.
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Dawn escribió:
Space escribió:Hola, he montado el ventilador de la RPi3 y funciona todo bien, lo único que no consigo es que se pare el ventilador cuando la temperatura es baja.
He puesto la variable MIN_FAN=256 a 0, dejándola así: MIN_FAN=0 y en el log aparece el ventilador al 0%

04-03-17 | 19:02:19 | temp: 39'C | fan: 0% | pause: 15s

pero el ventilador sigue girando, a baja velocidad pero sigue girando.
Alguien que lo tenga funcionando me podría decir si se para el ventilador poniéndolo asi.

Un saludo.
¿Has probado ha encender la RP sin iniciar el script? Si se pone en marcha el ventilador sin que el script funcione el problema es que tienes el cableado más puesto y el ventilador directo a corriente.
Como dice Dawn revisa el cableado tanto en el GPIO como en las conexiones del transistor.Independientemente del script el ventilador se tiene que parar.Es mas, si esta bien conexionado y no funciona el script, el ventilador no funciona.
Otra cosa, la linea de " MIN_FAN=256" la he modificado a " MIN_FAN=563" por debajo de eso el ventilador no me gira.Es un ventilador de 0.16 A, tengo encargado uno de 0.20 A haber que tal.(este foro me va costar el divorcio).
Aprovecho para poner unas fotos de como evoluciona mi pequeño gracias a este hilo y a otros de esta genial comunidad.
Antes.jpg
Despues.jpg
Próximo proyecto led RGB de actividad y después portarlo todo a la caja de un router Thoson ono ,que tengo guardada.
Avatar de Usuario
Space
Pi Alpha
Pi Alpha
Mensajes: 16
Registrado: 02 Mar 2017, 21:25
Agradecido: 2 veces
Agradecimiento recibido: 0

Gracias por la respuesta, el problema creo que viene del transistor ya que utlilizé otro diferente al que se menciona en este hilo, concretamente le monté un CBC369 que vi por otra página.
Mañana a ver si compro el 2N3904 que pone en el primer post y lo monto.

Un saludo
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Ese es un transistor PNP no un NPN como se especifica en el tuto.Tendrias que montarlo en el positvo(Que no sé si se puede) y cambiar en el GPiO la señal de salida a entrada o viceversa. Que alguien me corrija si me equivoco, tengo la electrónica oxidada desde hace unos veinte años.
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Vale me auto corrijo. Es un NPN solo que los pines van en distinto orden. El que se muestra aquí van :emisor(E),Base(B)y colector (C) y el que tienes tu van:base(B),colector (C) y emisor (E).Ahora aplicando el orden correcto de vería funcionar. Prueba y nos cuentas.
Avatar de Usuario
Space
Pi Alpha
Pi Alpha
Mensajes: 16
Registrado: 02 Mar 2017, 21:25
Agradecido: 2 veces
Agradecimiento recibido: 0

Llevo toda la tarde de pruebas y no hay manera de que funcione, por hoy lo dejo aunque ya no se que hacerle.

Hoy compre el 2N3904 (menos mal que compre 2, por que el primero lo soldé y con termoretráctiles :alterado ),

Nada, no funciona
butarda66 escribió:Vale me auto corrijo. Es un NPN solo que los pines van en distinto orden. El que se muestra aquí van :emisor(E),Base(B)y colector (C) y el que tienes tu van:base(B),colector (C) y emisor (E).Ahora aplicando el orden correcto de vería funcionar. Prueba y nos cuentas.
Gracias butarda66, tambien he probado el CBC369 conexionándolo como dices pero tampoco funciona.
Mañana lo intentaré de nuevo.

Un saludo
Avatar de Usuario
Space
Pi Alpha
Pi Alpha
Mensajes: 16
Registrado: 02 Mar 2017, 21:25
Agradecido: 2 veces
Agradecimiento recibido: 0

No funciona, hice todas las pruebas posibles y no va, incluso lo monté en una RPi2 y tampoco funciona.
Será porque el ventilador es de 0.15A?
Avatar de Usuario
Dawn
Pi Master
Pi Master
Mensajes: 360
Registrado: 16 Dic 2016, 10:33
Agradecido: 0
Agradecimiento recibido: 0

Space escribió:No funciona, hice todas las pruebas posibles y no va, incluso lo monté en una RPi2 y tampoco funciona.
Será porque el ventilador es de 0.15A?
Descarta cosas:

- Has probado el ventilador directo a 5v para comprobar que funcione?

- Has comprobado que la entrada y la salida del transistor está correctamente? no lo habrás intercambiado?

- Te da voltaje el pin 12? Te funciona el script? coge un voltimetro y verifica que el 12 te da tensión con el script en marcha.
Avatar de Usuario
Space
Pi Alpha
Pi Alpha
Mensajes: 16
Registrado: 02 Mar 2017, 21:25
Agradecido: 2 veces
Agradecimiento recibido: 0

Dawn escribió:
Space escribió:No funciona, hice todas las pruebas posibles y no va, incluso lo monté en una RPi2 y tampoco funciona.
Será porque el ventilador es de 0.15A?
Descarta cosas:

- Has probado el ventilador directo a 5v para comprobar que funcione?

- Has comprobado que la entrada y la salida del transistor está correctamente? no lo habrás intercambiado?

- Te da voltaje el pin 12? Te funciona el script? coge un voltimetro y verifica que el 12 te da tensión con el script en marcha.
Todas las pruebas están OK, el problema es el ventilador y los 0.15A, como le pasa a butarda66 con su ventilador de 0.16A que no gira por debajo de MIN_FAN=563, yo lo tengo que poner a MIN_FAN=1024 y entonces funciona, está claro que el ventilador ha de ser de 0.20A como pone el primer post, ya he encargado uno, cuando lo reciba ya contaré para ver como va.

Un saludo
lipeju
Pi Alpha
Pi Alpha
Mensajes: 14
Registrado: 13 Feb 2017, 18:30
Agradecido: 0
Agradecimiento recibido: 0

:| madre mia que currada, y encima explicado bastante sencillo, lo intento esta noche :victoria :adios
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

Space escribió:Llevo toda la tarde de pruebas y no hay manera de que funcione, por hoy lo dejo aunque ya no se que hacerle.

Hoy compre el 2N3904 (menos mal que compre 2, por que el primero lo soldé y con termoretráctiles :alterado ),

Nada, no funciona
butarda66 escribió:Vale me auto corrijo. Es un NPN solo que los pines van en distinto orden. El que se muestra aquí van :emisor(E),Base(B)y colector (C) y el que tienes tu van:base(B),colector (C) y emisor (E).Ahora aplicando el orden correcto de vería funcionar. Prueba y nos cuentas.
Gracias butarda66, tambien he probado el CBC369 conexionándolo como dices pero tampoco funciona.
Mañana lo intentaré de nuevo.

Un saludo
Perdona por el retraso en responder. si estas utilizando el transistor que pusiste mas arriba(CBC369), mirando tu foto y suponiendo que vemos la parte plana del transistor de frente las conexiones son las siguientes:
la primera patilla(la de la izquierda del todo)va al pin 12 de la placa . La segunda patilla (la del medio) va a masa en la placa. Y la tercera patilla( a la derecha del todo)va al negativo del ventilador.
Un saludo.
Avatar de Usuario
Space
Pi Alpha
Pi Alpha
Mensajes: 16
Registrado: 02 Mar 2017, 21:25
Agradecido: 2 veces
Agradecimiento recibido: 0

butarda66 escribió:Perdona por el retraso en responder. si estas utilizando el transistor que pusiste mas arriba(CBC369), mirando tu foto y suponiendo que vemos la parte plana del transistor de frente las conexiones son las siguientes:
la primera patilla(la de la izquierda del todo)va al pin 12 de la placa . La segunda patilla (la del medio) va a masa en la placa. Y la tercera patilla( a la derecha del todo)va al negativo del ventilador.
Un saludo.
El que se ve en la imagen es el 2N3904, estoy a la espera del ventilador de 0.20A que creo es la causa del problema.

Un saludo
butarda66
Pi Alpha
Pi Alpha
Mensajes: 37
Registrado: 08 Dic 2016, 07:22
Agradecido: 0
Agradecimiento recibido: 0

El que se ve en la imagen es el 2N3904, estoy a la espera del ventilador de 0.20A que creo es la causa del problema.

Un saludo[/quote]
Si todavía no gira bien, edita la linea :
MIN_FAN=563
Por:
MIN_FAN=675
Eso establece la velocidad del ventilador mínimo como si estuviera conectado al pin de 3,3v. Hay debería girar bien, después ir bajando el valor poco a poco, asta que vuelva a dar problemas para establecer el MIN_FAN al que puede funcionar tu ventilador.
Avatar de Usuario
Dawn
Pi Master
Pi Master
Mensajes: 360
Registrado: 16 Dic 2016, 10:33
Agradecido: 0
Agradecimiento recibido: 0

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
Avatar de Usuario
glicerina
Pi Omega
Pi Omega
Mensajes: 45
Registrado: 15 Ene 2017, 12:19
Agradecido: 0
Agradecimiento recibido: 0

Buenas noches una pregunta esto se podria montar en una raspi3 con sistema recalbox. Gracias de antemano a todos.
Responder