La tarjeta controladora Orange Pi 5 plus es uno de los últimos modelos que ha sacado la firma Orange Pi, para hacer la competencia a Raspberry Pi, y es de las más potentes que hay en el mercado, haciéndola ideal para muchos proyectos de tecnología casera, que necesitan de un poco más de ‘energía’. El problema que tiene es que la documentación y el soporte no es de mucha calidad, como la mayoría de los productos que vienen de China.
En este tutorial explicaré brevemente cómo conectar un servo estándar a la tarjeta Orange Pi 5 plus y cómo hacerlo funcionar con un programa de Python.
En este ejemplo estoy usando una tarjeta con el sistema operativo Arch64, pero debería valer también para los demás.
1- Configuración de la librería WiringPi
Para poder usar el conector de la tarjeta con las patillas GPIO hay que usar la librería WiringPi, pero no la distribución oficial sino una adaptada para Orange Pi. En el enlace siguiente se encuentra información sobre cómo hacerlo:
https://forum.armbian.com/topic/32491-wiringop-python-on-orangepi-5-plus/
En el apartado 5 del enlace anterior aparecen las instrucciones que hay que ejecutar desde un terminal, que anoto a continuación:
sudo su
apt-get update
apt-get -y install git swig python3-dev python3-setuptools
git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next
cd wiringOP-Python
git submodule update --init --remote
python3 generate-bindings.py > bindings.i
sudo python3 setup.py install
Con esto ya se tiene la librería instalada en el sistema y se puede usar directamente con la instrucción import wiringpi.
2 – Programa para gestionar patillas con PWM
La librería WiringPi no tiene funciones para manejar directamente servos, que sería lo fácil, así que hay que controlar la salida PWM a nivel más bajo. Para ello nos fijamos en el siguiente enlace:
https://www.reddit.com/r/OrangePI/comments/18r8d56/orange_pi_5_plus_servo_control/
Aquí aparece una pregunta sobre las funciones SoftServoSetup y SoftServoWrite, que no funcionan bien, y se propone otro código. Tomando ese código y cambiando un poco, a continuación pongo el programa que permite cambiar una señal PWM para servo y por tanto, poder moverlo.
import wiringpi
from wiringpi import GPIO
pOUT = 2 #wPi pin
wiringpi.wiringPiSetup() # change the setup mode
wiringpi.pinMode(pOUT, GPIO.PWM_OUTPUT)
wiringpi.pwmSetMode(pOUT,GPIO.PWM_MODE_MS)
wiringpi.pwmSetClock(pOUT,472)
wiringpi.pwmSetRange(pOUT,1024)
while True:
num = int(input("Valor PWM: "))
if num == -1:
break
wiringpi.pwmWrite(pOUT, num)
print(num)
wiringpi.pwmWrite(pOUT, 0) # Set PWM to 0 before exiting
El valor 472 en la instrucción wiringpi.pwmSetClock(pOUT,472) se ha conseguido probando con un osciloscopio hasta conseguir la señal típica de 50 Hz para un servo.
Con este programa y siguiendo con la ayuda de un osciloscopio se pueden encontrar los valores para mover el servo de 0º a 180º.
En este ejemplo, el valor para 0º es 26 y para 180º es 127, que corresponden a 0,5 ms y 2,5 ms de onda respectivamente.
Para conectar el servo, teniendo en cuenta que es pequeño y se puede conectar directamente a la tarjeta Orange Pi,
Por último, para probar el movimiento suave del servo, he cambiado un poco el programa anterior y el equivalente al Sweep de Arduino es:
import wiringpi
from wiringpi import GPIO
pOUT = 2 #wPi pin
wiringpi.wiringPiSetup() # change the setup mode
wiringpi.pinMode(pOUT, GPIO.PWM_OUTPUT)
wiringpi.pwmSetMode(pOUT,GPIO.PWM_MODE_MS)
wiringpi.pwmSetClock(pOUT,472)
wiringpi.pwmSetRange(pOUT,1024)
for aa in range(26,128):
wiringpi.pwmWrite(pOUT, aa)
print(num)
for aa in range(127,25,-1):
wiringpi.pwmWrite(pOUT, aa)
print(num)
wiringpi.pwmWrite(pOUT, 0)
Y a continuación, una muestra del movimiento del servo.
Finalmente pongo el vídeo completo de la explicación.
Deja una respuesta