Icono del sitio AranaCorp

Comando un controlador serie Maestro con Raspberry Pi

0
(0)

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

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:

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

Fuentes

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Salir de la versión móvil