Uso de PWM y un transistor NPN
Permítanme comenzar diciendo que no soy ingeniero eléctrico. Si alguien que sabe más ve un problema con lo que presento, ¡por favor comente !
Encontré un excelente artículo para hacer esto con un Arduino aquí. Yo también, sin embargo, estoy usando una RaspberryPi (RPi3). Una preocupación que he visto señalada es que extraer energía de GPIO18 para hacer funcionar el ventilador puede tener consecuencias adversas. En cambio, lo que propongo a continuación es sacar el 5v de un pin RPi de 5v. Luego use PWM y cambie para controlar el paso del 5v al ventilador.
Esto es lo que usé: resulta que vivo en China, y el costo total, con envío, para estas partes (múltiplo de cada una) fue menos de $ 2 (USD). Tal vez busque en Alibaba.
- 1x ventilador de 5v
- 1x resistencia de 330 ohmios
- 1x transistor NPN (2N4401)
- 1x diodo (1N4001)
- 1x Raspberry Pi
Conecta el ventilador a la Raspberry Pi usando el siguiente circuito:
Prepárate para soldar. Pude soldar todos los componentes juntos, envolverlos alrededor del ventilador y aún así poner el ventilador dentro de mi carcasa RPi. La descripción del caso dice que el ventilador está silencioso. ¡Eso es mentira y por eso lo ejecuto a 65% de velocidad!
simular este circuito - Esquema creado usando CircuitLab
- 5v se conecta al pin 2 o 4
- tierra se conecta al pin 6
- PWM se conecta al pin 12 (GPIO 18)
Lea el enlace a las instrucciones de Arduino anteriores para obtener información más detallada de lo que está sucediendo.
Instalación de software:
Para ejecutar el ventilador, instalé la biblioteca pigpio. Puede instalar esta biblioteca desde la terminal de la siguiente manera:
- Dependencias:
sudo apt-get install build-essential
- Descargar pigpio: wget abyz.me.uk/rpi/pigpio/pigpio.zip
- Descomprimir:
descomprimir pigpio.zip && cd PIGPIO
- Construir e instalar:
make && sudo make install
Ahora tenemos el programa que usaremos para controlar el ventilador a través de PWM.
Ejecutando el ventilador:
puede crear un nuevo script de bash con el siguiente contenido. Y configúrelo para ejecutar @reboot
en el crontab de root. Modifica las variables al principio del script a tu gusto. Si desea ver lo que está sucediendo, configure DEBUG = 1
y la información se escribirá en / tmp / debug
. Sin embargo, no dejaría esto encendido una vez que haya confirmado que todo está funcionando, ya que esto realizaría escrituras innecesarias en su tarjeta SD. Esta secuencia de comandos asume que tienes Python instalado.
Descargo de responsabilidad: he estado ejecutando mi RPi3 con esta secuencia de comandos durante más de 17 meses a partir de enero de 2019. Si estas configuraciones o cualquier configuración que utilices, quema tu ventilador o causar daño a su Raspberry Pi, no me hago responsable. ¡Utilice y realice cambios bajo su propio riesgo!
#! / Bin / bashfanSpeed = 65 # haga funcionar el ventilador al 65% de velocidad; el mío era demasiado ruidoso al 100%. ¡Tenga cuidado de no configurar esto demasiado bajo, o su ventilador puede no girar! UmbralF = 135 # Encienda el ventilador cuando estemos por encima de este umbral de temperaturaC = $ (/ usr / bin / python -c "print ($ umbralF-32) /1.8")DEBUG=0function debug {[$ DEBUG -eq 1] && echo "[$ (fecha +% m% d.% H% M% S)] $ 0: $ @" >> / tmp / debug} función set_fan {porcentaje = $ 1 # valor entero GPIO = 18 # número de pin GPIO; 18 es frecuencia PWM de hardware = 25000 # Esta es la frecuencia de la señal PWM; aumenta si escuchas un quejido de depuración "configurando PWM en GPIO $ GPIO en $ {percent}%" [$ percent -gt 0] && / usr / local / bin / pigs hp $ GPIO $ freq 1000000 # enciende el ventilador antes de arrancar dormir atrás 1 / usr / local / bin / pigs hp $ GPIO $ freq $ (/ usr / bin / python -c "imprimir 10000 * $ percent")} función get_temp {echo "$ (/ opt / vc / bin / vcgencmd medir_temp | grep -oP "\ d +. \ d") "}
# devuelve 1 si estamos por encima de nuestro umbral o 0 si no tenemos la función is_too_hot {echo $ (/ usr / bin / python -c "print 1 if $resholdC< $ (get_temp) else 0")} debug "iniciado el script del ventilador "# iniciar el demonio pigpiod si aún no se está ejecutando [$ (pidof pigpiod | wc -l) -eq 0] && / usr / local / bin / pigpiod && debug" el servicio pigpiod inició "debug" umbral F: $ umbralF "debug C: $ umbralC "# inicia un ciclo para continuar verificando la temperatura de la CPU y cambiando el ventilador según sea necesariostate = off while: do while [$ (is_too_hot) -eq 1] do if [" $ state "==" off "]; luego depurar "encender el ventilador: $ (get_temp) (temperatura de la CPU) > $ umbralC (umbral)" set_fan $ fanSpeed && state = "on" # encender el ventilador fi sleep 300 # hacer funcionar el ventilador durante 5 minutos antes de verificar la temperatura de nuevo hecho si ["$ state" == "on"]; luego depura "apagando el ventilador: $ (get_temp) (temperatura de la CPU) < = $ umbralC (umbral)" set_fan 0 && state = "off" fi sleep 60 # espera un minuto antes de volver a comprobar la temperatura
No es difícil imaginar cómo se podría modificar este script para hacer funcionar el ventilador a diferentes velocidades para diferentes temperaturas.