Etiquetas: , ,
5
(2)

El módulo PCA9685 es un controlador de 16 canales que puede controlar 16 salidas PWM a través de la comunicación I2C. Permite, entre otras cosas, liberar las entradas y salidas de su microcontrolador y manejar hasta 16 LEDs o servomotores (o cualquier otro módulo que tome una señal PWM como entrada) usando dos pines (SCL y SDA) mientras mantiene los pines de su microcontrolador para otros módulos como los sensores. El Pi de Frambuesa es un microcontrolador con módulos Bluetooth y Wifi integrados. Es muy fácil de usar, es ligero y tiene una capacidad de memoria y de cálculo mayor que el Arduino. Veremos en este tutorial cómo manejar varios servomotores con un Raspberry Pi y un módulo PCA9685.

Prerrequisito : Configurando Raspberry Pi en I2C

Hardware

  • Computadora
  • Rapsberry Pi 3B+
  • PCA9685 Module
  • Fuente de alimentación externa

Principio de funcionamiento

El módulo se basa en el controlador PCA9685, que permite controlar las salidas PWM mediante la comunicación I2C y un reloj integrado. Este módulo tiene 6 puentes para seleccionar la dirección de la placa y así colocar en el mismo bus hasta 62 controladores para un total de 992 actuadores (direcciones disponibles 0x40 a 0x7F).
Puede manejar salidas PWM con frecuencia ajustable y resolución de 12 bits. El módulo es compatible con microcontroladores de 5V y 3.3V.

Esquema

El Raspberry Pi tiene pines dedicados para la comunicación I2C (GPIO2/GPIO3).
El módulo está equipado con un bus I2C y una entrada de energía. El bus I2C está conectado de la siguiente manera:

  • GPIO3 o el pin SCL al pin SCL del módulo
  • GPIO2 o SDA a la clavija SDA del módulo
  • Clavija de 5V a clavija de Vcc del módulo
  • De clavija GND a clavija GND del módulo
    En este tutorial usamos la tarjeta Raspberry Pi Zero pero puede ser adaptada a otros microcontroladores. Para ello, sólo tenemos que adaptar los pines de I2C disponibles en el microcontrolador en cuestión y posiblemente el código.

Code

Instalación de la biblioteca

Para usar el módulo PCA9685 utilizamos la biblioteca adafruit_servokit.h. Esta biblioteca no está presente por defecto en la instalación de Python. Para instalarlo, basta con abrir un terminal e introducir la siguiente línea de comandos.

sudo pip3 install adafruit-circuitpython-servokit

Script Python

Los anchos de los PWM suelen darse en microsegundos durante un período de 20ms (50Hz), pero estos valores pueden cambiar de un actuador a otro y entre proveedores. Tendrá que modificar los valores del código para que se adapten a su actuador.
En nuestro caso, usamos el actuador MG90S con anchos de pulso entre 500 y 2500µs en 20ms.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#Libraries
import time	#https://docs.python.org/fr/3/library/time.html
from adafruit_servokit import ServoKit	#https://circuitpython.readthedocs.io/projects/servokit/en/latest/

#Constants
nbPCAServo=16 

#Parameters
MIN_IMP  =[500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500]
MAX_IMP  =[2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500]
MIN_ANG  =[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
MAX_ANG  =[180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180]

#Objects
pca = ServoKit(channels=16)

# function init 
def init():

	for i in range(nbPCAServo):
		pca.servo[i].set_pulse_width_range(MIN_IMP[i] , MAX_IMP[i])


# function main 
def main():

	pcaScenario();


# function pcaScenario 
def pcaScenario():
	"""Scenario to test servo"""
	for i in range(nbPCAServo):
		for j in range(MIN_ANG[i],MAX_ANG[i],1):
			print("Send angle {} to Servo {}".format(j,i))
			pca.servo[i].angle = j
			time.sleep(0.01)
		for j in range(MAX_ANG[i],MIN_ANG[i],-1):
			print("Send angle {} to Servo {}".format(j,i))
			pca.servo[i].angle = j
			time.sleep(0.01)
		pca.servo[i].angle=None #disable channel
		time.sleep(0.5)




if __name__ == '__main__':
	init()
	main()

Solicitudes

  • Pilotaje del robot Quadrina6

Fuentes

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 2

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?