Cuando se trata con varios servomotores y se necesita un número adicional de salidas para operar su robot (para controlar Hexana, por ejemplo), una solución práctica es usar un controlador en serie como el Mini Maestro de Pololu.
Prerrequisito: Programación en Raspberry Pi, Control de un servo con Raspberry Pi
Material
- Computadora
- Raspberry Pi3 (o Zero) + monitor + teclado
- Cable USB mini B para conectar Maestro a la computadora
- Cable de puente F / F x4
- Controlador en serie Mini Maestro x1
- Servomotor x1 o más
Descripción general del controlador serie Maestro
Cuando se utilizan varios motores en un proyecto, generalmente el número de salidas necesarias excede la capacidad de la placa Arduino. En ese caso, es necesario usar un controlador de servo (que puede controlar hasta 32 servomotores) que se comunican con Arduino mediante un puerto serie y transmiten el PWM a los servomotores.
El que utilizamos en este ejemplo es un tablero Maestro propuesto por Pololu. Existe en diferentes formatos 4,12, 18 y 24 canales.
Con esta solución, la placa principal (Arduino o Raspberry Pi) envía órdenes al controlador (Maestro) a través del puerto serie que aplica potencia y comandos a los servomotores.
Esto presenta varias ventajas:
- proteger el material separando el circuito de alta potencia del circuito lógico
- reducir el costo al reducir el número de entrada / salida del microcontrolador principal
- utilizando una placa diferente para comunicarse con el servocontrolador
Más información sobre el controlador serie Mini Maestro en el sitio web de Pololu.
Configuración y prueba del controlador serie Maestro
Para configurar el controlador serie Maestro, debe descargar los controladores y el software para Windows (o Linux). Puede encontrar la guía de instalación siguiendo los enlaces de Windows y Linux.
Una vez que el Centro de control Maestro y los controladores estén instalados, conecte el maestro a su computadora.
Cuando el controlador está conectado, su ID aparecerá en la parte superior derecha. Puede encontrar y modificar los parámetros de comunicación en la pestaña «Serial Settings».
Puede probar el controlador serie Maestro y sus servomotores en la pestaña «Status».No olvide alimentar sus servomotores con una fuente de alimentación externa.
Los servomotores pueden tener diferentes parámetros. Puede modificar los parámetros de salida de Maestro en la pestaña «Configuración de canales». Debe probar los parámetros que mejor se adaptan a sus servos.
Esquema
El controlador Maestro está alimentado por la salida 5V del Raspberry Pi. Los pines 8 (GPIO14 / UART0_TXD) y 10 (GPIO15 / UART0_RXD) del Raspberry están conectados al pin RX y TX del Maestro respectivamente.
El cableado se puede adaptar fácilmente a los otros miembros de la familia Mini Maestro siguiendo los esquemas de pines.
Configuración de Raspberry Pi
Compruebe que el módulo PySerial esté instalado en Raspberry
En la terminal, ingrese:
$ python -m pip install pyserial
Luego clone el repositorio del módulo Maestro:
$ git clone https://github.com/FRC4564/Maestro
Para comunicarse con la placa Maestro, necesita un puerto serie. Puede verificar los puertos disponibles ingresando el comando:
$ dmesg | grep tty
En la Raspberry Pi3, el módulo bluetooth incorporado utiliza el puerto serie /dev/ttyAMAO. Utilizamos el puerto serie /dev/ttySO para comunicarnos con el Mini Maestro.
Código
Para comandar el controlador en serie con Raspberry, se debe enviar una secuencia de bytes a través del puerto en serie. El siguiente código permite al usuario enviar un comando de posición a los diversos canales de un Mini Maestro con el terminal Raspberry.
Para esto utilizamos el módulo Maestro.py descargado previamente (https://github.com/FRC4564/Maestro). Copie y pegue la carpeta en la misma carpeta que el código.
Primero, el puerto serie para comunicarse con el Maestro está intiliazied. Luego, escribimos una función que recibe datos del monitor en serie y los convertimos en servocomando.
#!/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 if __name__ == '__main__' : #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
No dude en dejar un comentario o escribir un mensaje if you have any issue regarding your serial controller.
Aplicaciones
- Controle robots de múltiples patas como quadripode, hexapode or octopode
Fuentes
- guía del usuario maestrohttps://www.pololu.com/docs/0J40
- Port serie del Raspberry Pi3
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código