0% encontró este documento útil (0 votos)
2 vistas5 páginas

Programa de Control Arduino

El documento presenta un proyecto de cátedra sobre el control de un robot utilizando Arduino, elaborado por estudiantes de la Universidad Don Bosco. Incluye un código en C++ para la programación del robot, que abarca la configuración de servomotores y la implementación de movimientos específicos para recoger y dejar objetos. Se detallan las funciones para calcular ángulos y mover las articulaciones del robot mediante cinemática inversa.

Cargado por

Francisco Montes
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas5 páginas

Programa de Control Arduino

El documento presenta un proyecto de cátedra sobre el control de un robot utilizando Arduino, elaborado por estudiantes de la Universidad Don Bosco. Incluye un código en C++ para la programación del robot, que abarca la configuración de servomotores y la implementación de movimientos específicos para recoger y dejar objetos. Se detallan las funciones para calcular ángulos y mover las articulaciones del robot mediante cinemática inversa.

Cargado por

Francisco Montes
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Universidad Don Bosco

Facultad de Ingeniería / Escuela de Electrónica

PROYECTO DE CATEDRA

Tema:
Programa de control del robot en arduino

Elaborado por:

Coto cañas, Walter Eliseo - CC212988.


Magaña Montes, Francisco Alexander - MM220174

Docente:

Ing. Oscar Wenceslao Rivas Zaldaña.

Modelado y Diseño de Robots (MDR101).


CICLO II

Soyapango, 31 - agosto – 2025.


Código por utilizar:

#include <Servo.h>

Servo servo1, servo2, servo3, servogrip;

// Longitudes de los eslabones en cm

float L1 = 18.5;

float L2 = 13.0;

float L3 = 12.2;

void setup() {

[Link](3);

[Link](4);

[Link](5);

[Link](6);

void loop() {

int hopen = 90;

int hclose = 0;

int espera = 50;

int pasos = 100;

// Posiciones a usar

float pxH = 20, pyH = 25.2, pzH = 30; // Home (PH)

float px1 = 0, py1 = 10, pz1 = 5; // Toma del objeto (P1)

float px2 = 0, py2 = -10, pz2 = 5; // Posicion finall (P2)


// Angulos de las articulaciones

float q1a, q2a, q3a;

float q1s, q2s, q3s;

// Moverse a PH

angulos(pxH, pyH, pzH, q1a, q2a, q3a);

moverArticulaciones(q1a, q2a, q3a, q1a, q2a, q3a, pasos, espera);

[Link](hopen);

// Moverse a P1 con posicion de acercamiento

angulos(px1, py1, pz1 + 5, q1s, q2s, q3s);

moverArticulaciones(q1a, q2a, q3a, q1s, q2s, q3s, pasos, espera);

// Bajar a P1

angulos(px1, py1, pz1, q1a, q2a, q3a);

moverArticulaciones(q1s, q2s, q3s, q1a, q2a, q3a, pasos, espera);

[Link](hclose);

// Moverse a P2 con acercamiento

angulos(px2, py2, pz2 + 5, q1s, q2s, q3s);

moverArticulaciones(q1a, q2a, q3a, q1s, q2s, q3s, pasos, espera);

// Bajar a P2 a dejar la carga

angulos(px2, py2, pz2, q1a, q2a, q3a);

moverArticulaciones(q1s, q2s, q3s, q1a, q2a, q3a, pasos, espera);


[Link](hopen);

// Moverse a PH y fin de la rutina

angulos(pxH, pyH, pzH, q1s, q2s, q3s);

moverArticulaciones(q1a, q2a, q3a, q1s, q2s, q3s, pasos, espera);

//Calculo de loo angulos mediante las ecuaciones de cinematica inversa

void angulos(float px, float py, float pz, float &q1, float &q2, float &q3) {

float r = sqrt(px * px + py * py);

float h = pz - L1;

float d = r*r+h*h;

float p = (d - L2 * L2 - L3 * L3) / (2 * L2 * L3);

q1 = atan2(py, px) * 180.0 / PI;

float beta = atan2(h, r);

float alfa = atan2(L3 * sin(q3 * PI / 180.0), L2 + L3 * cos(q3 * PI / 180.0));

q2 = (beta - alfa) * 180.0 / PI;

q3 = acos(p) * 180.0 / PI;

//Calculo de la trayectoria lineal

void moverArticulaciones(float q1start, float q2start, float q3start, float q1final, float q2final,
float q3final, int pasos, int espera) {

for (int i = 0; i <= pasos; i++) {

float t = (float)i / pasos;

float q1 = q1start + t * (q1final - q1start);

float q2 = q2start + t * (q2final - q2start);


float q3 = q3start + t * (q3final - q3start);

[Link](q1);

[Link](q2);

[Link](q3);

delay(espera);

También podría gustarte