Julian Barrero / Mbed 2 deprecated programa_servo

Dependencies:   mbed

You are viewing an older revision! See the latest version

PROGRAM MOVIMIENTO SERVOMOTORES

Movimiento de servo-motores con la tarjeta de programación NUCLEO-F411RE

Creación y Uso de la cuenta Mbed

Selección de la Tarjeta de Programación

Descripción del programa

Este programa se trabajó en la plataforma online MBED, por medio de un lenguaje de programación c++ orientado a objetos. Se pretende mover un brazo robótico que consta de 4 servomotores, el cuál se explica con detalle a continuación.

  1. include "mbed.h" libreria de MBED

Serial command(USBTX, USBRX); es la comunicación serial entre la tarjeta y el PC PwmOut myservo1(PB_4); asigno PWM al pin PB_4 (D5)para el servomotor #1 PwmOut myservo2(PB_5); asigno PWM al pin PB_5 (D4)para el servomotor #2 PwmOut myservo3(PB_10); asigno PWM al pin PB_10 (D6)para el servomotor #3 PwmOut myservo4(PB_3); asigno PWM al pin PB_3 (D3)para el servomotor #4

  1. define INITCMD 0xFF es una varíable global para inicializar el programa

uint8_t N_parametro; asigno variable de 8 bits, al número de parámetros que voy a leer uint8_t N_tipocomando; asigno variable de 8 bits, al número de comando que voy a leer

void setup_uart(); función para determinar la velocidad de comunicación void setup_servo(); función para modificar el periodo y el ancho de pulso del PWM, asignados a los servos void leer_datos(); función para leer datos ingresados desde el PC

void posicion(uint8_t tipocomando, uint8_t parametro); defino función para mover los servos

int main() función principal { setup_uart(); llamo a la función setup_uart setup_servo(); llamo a la función setup_servo

while(1) { leer_datos(); llamo la función leer datos posicion(N_tipocomando, N_parametro); asigno los valores de tipo de comande y parámetro a la clase posición } }

void leer_datos() se crea la función datos { while(command.getc()!= INITCMD); si el comando enviado lleva el valor de inicio de programa se leen los demás parámetros N_tipocomando=command.getc(); asigna el valor introducido en tipocomando a la variable N_tipocomando N_parametro=command.getc(); asigna el valor introducido en tipoparametro a la variable N_parametro }

void setup_uart() se crea la función setup_uart { command.baud(115200); se establece la velocidad a la que manejaré la comunicación entre la PC y la tarjeta }

void setup_servo() se crea la función setup_servo { myservo1.period_ms(20); se modifica el periodo en ms de los motores myservo1.pulsewidth_us(1000); se modifica el ancho de pulso en us de los motores myservo2.period_ms(20); myservo2.pulsewidth_us(1000); myservo3.period_ms(20); myservo3.pulsewidth_us(1000); myservo4.period_ms(20); myservo4.pulsewidth_us(1000); }

void posicion(uint8_t tipocomando,uint8_t parametro) se crea la función posición y se asignan los valores leídos a las variables tipocomando y parametro { if (tipocomando == 1) se crea un if para saber que tipo de comando se desea ingresar { if (parametro == 1) se crea un if para saber que parámetro se desea usar { uint32_t dpulse=0; es una variable para asignar los us del ancho de pulso del motor dpulse=(700+0*1700/180); en la variable dpulse, se crea una fórmula para pasar de grados a us myservo1.pulsewidth_us(dpulse); se carga el valor de la variable dpulse al servo motor en us wait(0.5); se espera 0.5 ms para ejecutar el siguiente movimiento

dpulse=0; es importante cargar el valor dpulse con 0 para que se reinicie la variable en 0 dpulse=(700+0*1700/180); myservo2.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+0*1700/180); myservo3.pulsewidth_us(dpulse); wait(0.5); }

if (parametro == 2) mover a posición material { uint32_t dpulse=0; dpulse=(700+90*1700/180); myservo1.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+90*1700/180); myservo2.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+90*1700/180); myservo3.pulsewidth_us(dpulse); wait(0.5); }

if (parametro == 3) mover a posición celda 1 { uint32_t dpulse=0; dpulse=(700+180*1700/180); myservo1.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo2.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo3.pulsewidth_us(dpulse); wait(0.5); }

if (parametro == 4) mover a posición celda 2 { uint32_t dpulse=0; dpulse=(700+180*1700/180); myservo1.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo2.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo3.pulsewidth_us(dpulse); wait(0.5); }

if (parametro == 5) mover a posición celda 3 { uint32_t dpulse=0; dpulse=(700+180*1700/180); myservo1.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo2.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo3.pulsewidth_us(dpulse); wait(0.5); }

if (parametro == 6) mover a posición celda 4 { uint32_t dpulse=0; dpulse=(700+180*1700/180); myservo1.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo2.pulsewidth_us(dpulse); wait(0.5);

dpulse=0; dpulse=(700+180*1700/180); myservo3.pulsewidth_us(dpulse); wait(0.5); } }

if(tipocomando==2) if del comando abrir y cerrar pinza { if (parametro==1) abrir pinza { uint32_t dpulse=0; dpulse=(700+180*1700/180); myservo4.pulsewidth_us(dpulse); wait(0.5); } if (parametro==2) cerrar pinza { uint32_t dpulse=0; dpulse=(700+180*1700/180); myservo4.pulsewidth_us(dpulse); wait(0.5); } } }

Descarga del Programa CoolTerm

Conexión y Características de los Motores

Planos del Brazo Robótico


All wikipages