fbpixel
Etiquetas: , ,

O ServoHat é um shield para Raspberry Pi que se baseia no controlador PCA9685. O módulo PCA9685 é um controlador de 16 canais que permite controlar 16 saídas PWM através de comunicação I2C. Ele possibilita entre outras coisas liberar entradas saídas do seu microcontrolador e controlar até 16 LEDs ou servomotores (ou qualquer outro módulo que tome um sinal PWM como entrada) usando dois pinos (SCL e SDA), enquanto mantém os pinos do seu microcontrolador livre para outros módulos, como sensores.

raspberrypi-zero-servohat Utilizar um ServoHat com Raspberry Pi

Material

  • Computador
  • Rapsberry Pi 3B+
  • ServoHAT

Princípio de funcionamento

O módulo é baseado no controlador PCA9685 que permite controlar saídas PWM usando comunicação I2C e um relógio embutido. Este módulo contém 6 pontes que permitem selecionar o endereço da placa e colocar, no mesmo barramento, até 62 controladores, para um total de 992 servomotores (endereços disponíveis de 0x40 a 0x7F). É possível controlar saídas PWM com uma frequência ajustável e uma resolução de 12 bits.

Esquema

O ServoHAT é colocado diretamente sobre o conector do Raspberry Pi. É preferível utilizar espaçadores para fixar o shield ao microcontrolador sem danificar os pinos de ligação. O ServoHAT utiliza o barramento I2C do RaspberryPi, nos pinos GPIO2 e 3 (SDA e SCL, respectivamente).

raspberrypi-servohat-schematics_bb Utilizar um ServoHat com Raspberry Pi
raspberrypi-gpio-wiringpi-pinout Utilizar um ServoHat com Raspberry Pi

Código

O ServoHAT é utilizado da mesma forma que o módulo PCA9685 com a 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()



Aplicações

  • Controlar o robô Quadrina6

Fontes