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);