fbpixel
Etiquetas: , ,
0
(0)

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.

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).

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

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?