Icono del sitio AranaCorp

Uso de un ServoHat con Raspberry Pi

El ServoHat es un shield para Raspberry Pi que se basa en el controlador PCA9685. El módulo PCA9685 es un controlador de 16 canales que permite accionar 16 salidas PWM mediante comunicación I2C. Permite, entre otras cosas, liberar entradas y salidas de tu microcontrolador y accionar hasta 16 LEDs o servomotores (o cualquier otro módulo que tome una señal PWM como entrada) utilizando dos pines (SCL y SDA) mientras mantienes los pines de tu microcontrolador para otros módulos como sensores.

Material

Principio de funcionamiento

El módulo se basa en el controlador PCA9685, que permite controlar las salidas PWM mediante comunicación I2C y un reloj incorporado. Este módulo dispone de 6 puentes que permiten seleccionar la dirección de la placa y colocar en el mismo bus hasta 62 controladores para un total de 992 servomotores (direcciones disponibles 0x40 a 0x7F). Permite controlar las salidas PWM con una frecuencia ajustable y con una resolución de 12 bits.

Esquema

El ServoHAT se coloca directamente en el conector de la Raspberry Pi. Es preferible utilizar separadores para fijar la pantalla al microcontrolador y no dañar los pines del conector. El ServoHAT utiliza el bus I2C de la RaspberryPi en los pines GPIO2 y 3 (SDA y SCL, respectivamente).

Código

El ServoHAT se utiliza de la misma manera que el módulo PCA9685 con la biblioteca adafruit_servokit.

#!/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/

#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()



Aplicaciones

Fuentes

Salir de la versión móvil