Site icon AranaCorp

Controlar um controlador serial Maestro com Raspberry Pi

Quando se pretende controlar vários servomotores e são necessárias muitas entradas/saídas livres para operar o seu robô (para controlar o Hexana, por exemplo), é interessante usar um controlador serial para servomotor, como o Mini Maestro da Pololu..

Este tutorial mostra como configurar a placa Raspberry Pi 3 (ou Zero) para controlar o controlador serial Mini Maestro.

Pré-requisitos: Programar com Raspberry Pi, Controlar um servomotor com Raspberry Pi

Material

Introdução ao controlador serial Maestro

Quando utilizamos vários servomotores, especialmente quando o número de servomotores excede o número de saídas da placa eletrônica, é necessário usar um controlador de servomotor externo ao microcontrolador principal. Existem vários tipos, e alguns permitem pilotar até 32 servomotores ao mesmo tempo.

Vamos apresentar aqui a placa Maestro da Pololu. Ela existe em diferentes formatos, com 6, 12, 18 ou 24 saídas para servomotor.

Com esta solução, a placa principal (neste caso o Raspberry Pi) dá ordens ao controlador (placa slave) através de uma porta serial, que as transmite e fornece energia aos servomotores.

Isto permite :

As informações completas sobre o condutor serial Mini Maestro podem ser encontradas no site da Pololu.

Configuração e teste prévio do controlador serial Maestro

Para configurar o controlador serial Maestro, basta fazer o download do software e dos drivers para Windows (ou para Linux). Os procedimentos de instalação para Windows e para Linux estão disponíveis em inglês nos respectivos links.

Uma vez instalado o software Maestro Control Center e os drivers, conecte o controlador Maestro ao PC com o cabo USB.

Quando o controlador é ligado, o seu número de identificação aparece no canto superior esquerdo. As configurações podem ser acessadas pela aba “Serial Settings” (configurações seriais).

Utilize o software para testar o controlador serial Maestro e os servomotores, na aba “Status”. Não se esqueça de ligar uma fonte de alimentação ao bloco terminal do Mini Maestro, pois do contrário o servomotor não se moverá.

Os servomotores podem ter diferentes configurações de funcionamento. As configurações das saídas do controlador serial podem ser alteradas na aba “Channel Settings” (Configurações de Canal). Teste as configurações que se adaptam ao seu servomotor.

Esquema de ligação

O controlador Maestro é alimentado pela saída de 5V do Raspberry Pi. Os terminais 8 (GPIO14 / UART0_TXD) e 10 (GPIO15/ UART0_RXD) do Raspberry Pi são ligados aos terminais RX e TX da placa Maestro, respectivamente.

Este esquema de ligação é facilmente transponível para os controladores seriais Mini Maestro 6, 12 e 18 canais.

Configuração do Raspberry Pi

Certifique-se de que o módulo PySerial esteja instalado no seu Raspberry.

Num terminal do Raspberry, digite:

$ python -m pip install pyserial

Depois copie a pasta que contém a biblioteca do Maestro.

$ git clone https://github.com/FRC4564/Maestro

Para comunicar com a placa Maestro, será necessária uma porta serial. Pode haver diferentes portas seriais. Para encontrar as portas seriais disponíveis, digite:

$ dmesg | grep tty

No Raspberry Pi3, a porta serial /dev/ttyAMAO é utilizada pelo módulo Bluetooth. Utilizaremos a porta /dev/ttySO para comunicar com o controlador Maestro.

Código básico para controlar um controlador serial Maestro

Para controlar o controlador serial com a placa Raspberry Pi, é preciso enviar uma sequência de comandos através de uma porta serial. O programa a seguir permite enviar um comando de posição para os vários canais de um Mini Maestro utilizando um terminal do microcontrolador Raspberry Pi3.

Para isso, utilizamos o módulo Maestro.py previamente baixado (https://github.com/FRC4564/Maestro). Para utilizá-lo, basta copiar a pasta obtida para a pasta do programa.

Antes de tudo, inicializamos a porta serial utilizada para comunicar com a placa Maestro. Depois adicionamos um código para transformar os dados enviados através do terminal em comandos de servomotor.

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


import Maestro.maestro as maestro
import time

#define servo
servo = maestro.Controller(ttyStr='/dev/ttyS0')
min_imp=2000
max_imp=10000
step_imp=100

#infinite loop
while 1:
	  #user input
	  msg=raw_input("Enter servo id and command: YxZZZZ:  \n")

	  #convert msg into id and cmd
	  sep=msg.find("x")
	  m1=msg[:sep]
	  m2=msg[sep+1:]
	  servoId=int(m1)
	  servoCmd=int(m2)

	  #saturate input
	  servoId=min(max(0,servoId),6);
	  servoCmd=min(max(min_imp,servoCmd),max_imp);

	  print(msg)
	  print("servoId : {}    servoCmd : {} \n".format(servoId,servoCmd))

	  servo.setTarget(servoId,servoCmd)
	  time.sleep(0.1)

servo.close

Fique à vontade para comentar ou nos enviar uma mensagem se tiver dificuldades para controlar o seu controlador serial.

Aplicações

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Exit mobile version