Al igual que en el anterior post que puse un ventilador controlado a una raspberry pi con libreelec, en este post voy a realizar lo mismo pero con una orange pi zero con el sistema operativo retropie adaptado –> retrorangepi basado en armbian.
Lo primero es instalar el software de control de las entrada/salida GPIO. Hay un proyecto WiringOP que permitirá controlar por software la GPIO de la OrangePi y que se instala de la siguiente forma:
git clone https://github.com/zhaolei/WiringOP.git -b h3
cd WiringOP/
./build
A continuación ya se podrá leer el listado de los puertos GPIO de la OrangePi:
gpio readall
Los puertos a usar dependerá del tipo de ventilador, en mi caso el ventilador es un ENOKAY de tamaño 25x25x10 mm de 5V y 0.2 A.
Para una Orange Pi Zero con módulo de expansión y carcasa …
… se puede colocar el ventilador en la parte superior de la carcasa o en un lateral, para este caso lo he realizado en un lateral. Para ello hay que taladrar en el lado de la carcasa elegido para la disposición del ventilador. En mi caso he usado un minitaladro KKmon siguiente:
Quedando de la siguiente forma el ventilador:
Para este caso vamos a utilizar los puertos físicos 2(5V) 6 (0V) 3 (GPIO 8) y el 5 (GPIO 9)de control atendiendo al siguiente esquema:
He realizado la soldadura de solo los primeros pines de la siguiente forma:
Una implementación del circuito propuesto en placa protoboard de prueba se ve en el siguiente video, donde se ejecutan los comandos siguientes de prueba:
root@RetrOrangePi:~# gpio mode 8 out
root@RetrOrangePi:~# gpio mode 9 outroot@RetrOrangePi:~# gpio write 8 1
root@RetrOrangePi:~# gpio write 9 1
root@RetrOrangePi:~# gpio write 9 0
root@RetrOrangePi:~# gpio write 8 0
Se comprueba de esta forma el funcionamiento correcto del pineado y su control. Ejercicio didáctico que hay que ajustarlo a su foto final, le quitamos los leds, la placa protoboard y las resistencias, el conexionado GPIO9 y al final se nos queda en …
Se añade script de control:
root@RetrOrangePi:~/scripts# cat /root/scripts/fan-control.sh
#!/bin/bash
gpio mode 8 out
temperature=$(< /sys/devices/virtual/thermal/thermal_zone1/temp)
lineToLog=»FAN-«
if [ $temperature -gt 55 ]
then
lineToLog+=»ON-«
lineToLog+=»$temperature»
echo $lineToLog $(date) >> /root/scripts/logfan.txt
gpio write 8 1
else
# lineToLog+=»OFF-«
# lineToLog+=»$temperature»
# echo $lineToLog $(date) >> logfan.txt
gpio write 8 0
fi
Y ejecución cada minuto desde cron con limpieza de log de forma semanal:
root@RetrOrangePi:~/scripts# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use ‘*’ in these fields (for ‘any’).#
# Notice that tasks will be started based on the cron’s system
# daemon’s notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
* * * * * /root/scripts/fan-control.sh
0 0 * * 0 > /root/scripts/logfan.txt
Un ventilador supone una bajada de temperatura de 15 grados, dejo un pantallazo de OPi-Monitor cuando desactivo el ventilador:
Y cuando se deja activo mediante cron/script:
La observación de la temperatura durante el tiempo se mantiene constante en los 54/56 grados con este sistema:
Los dos picos que aparece se refieren a pequeños intervalos donde se ha desconectado el ventilador.
Fuentes:
Para el esquema del circuito del ventilador:
https://www.hackster.io/erhan9049/orange-pi-zero-fan-controller-f39e52
Para GPIO:
https://github.com/zhaolei/WiringOP