Está en la página 1de 12

ROBOTICA

ROBOT EQUILIBRISTA BASADO EN PLATAFORMA ARDUINO USANDO PID

ADIEL ARGUELLES PADILLA


DAVID ACOSTA PEA
LUIS FERNANDO HUERTAS SANCHEZ
INTEGRANTES

ING. LUIS ACOSTA GALVAN


DOCENTE

UNIVERSIDAD DEL MAGDALENA


FACULTAD DE INGENIERA
PROGRAMA DE INGENIERIA ELECTRONICA
SANTA MARTA D.T.C.H
NOVIEMBRE 2015

ROBOTICA

INTRODUCCIN.
En este documento se mostrara el funcionamiento de un robot equilibrista el cual
por medio de un controlador PID lograra encontrarse de forma vertical, esto
haciendo uso de un sensor acelermetro, el cual permitir saber la inclinacin del
robot y as poder realizar un control con el PID usando la plataforma Arduino,
haciendo que el robot se mueva siempre en la direccin de adelante, hasta que se le
indique otra.
.

ROBOTICA

OBJETIVO GENERAL.
Realizar un robot equilibrista basado en la plataforma Arduino, haciendo uso de un PID
discreto, sensor acelermetro.

OBJETIVOS ESPECFICOS.

Controlar la estabilidad del robot haciendo uso de un PID


Disear el programa en el entorno Arduino para el control de los moto reductores
para estabilizar el robot.
Disear una plataforma robtica.
Realizar la construccin de la plataforma robtica.
.Hacer el montaje de los motores, Arduino, sensor y bluethoot.

DESCRIPCION DEL PROYECTO


ROBOT EQUILIBRISTA
3

ROBOTICA

Este trabajo resuelve un problema similar al del pndulo invertido clsico en una pequea
regin lineal alrededor del punto de seteo, utilizando como estrategia de control un
algoritmo PID emprico y un ROBOT como plataforma para el proyecto.
El proyecto se basa fuertemente en la administracin conceptual del problema y de la
implementacin, basndose en la flexibilidad que otorga la programacin en general.
Pndulo clsico. En la siguiente figura podemos observar las fuerzas que intervienen en el
sistema de pndulo invertido clsico. Donde:
M masa del carro
m masa del pndulo
Bc friccin del carro
Bv friccin del pndulo
L longitud al centro de masa del pndulo
I inercia del pndulo

En primer lugar existe un setpoint que es ingresado por el usuario el cual es basado en la
inclinacin del robot siendo este el punto de estabilidad vertical, la diferencia entre l y la
lectura entregada por el sensor acelermetro nos da un error (e(t)) momento a momento. El
error se procesa indicndonos la inclinacin y la direccin en la cual debe moverse para
obtener la correccin a la salida, en el controlador PID se deben realizar la estimacin de 3
variables las cuales son.
El primer clculo es el de la constante de proporcionalidad, tambin denominado ganancia,
y bsicamente acta directamente sobre la salida proporcionalmente al error.

ROBOTICA

Luego existe constante de la accin integral, a veces llamada reset. Esta es proporcional a
la magnitud del error como as del tiempo de duracin del mismo. Sumando el error a cada
momento (integrando el error) acumulamos el offset2 que se fue corrigiendo previamente.
El trmino integral trabajando con el trmino proporcional, acelera la llegada del proceso al
setpoint y elimina los errores residuales que provoca el control proporcional. El problema
resulta cuando una acumulacin importante del error provoca un desborde de la respuesta.
Por ltimo, el trmino derivativo, trabaja sobre la razn de cambio del error sobre el
tiempo. Este trmino, a veces denominado tambin rate, contribuye a anticipar el posible
error futuro y actuar en consecuencia. El inconveniente radica en que de existir mediciones
espurias el aporte puede llevar a una oscilacin sobre el sistema.

El control PID trabaja gracias a tres trminos, el proporcional (P), el integral (I) y el
derivativo (D). Estos tienen la siguiente forma matemtica:

El PID resulta ser de vital importancia al momento de poder abstraer el problema, aunque
posee limitaciones como todo sistema de control. El PID puede ver a nuestro sistema
como slo una entrada, un proceso y una devolucin, y trabajar para lograr que la
devolucin se lo ms parecida posible a la entrada. En el caso del robot equilibrista, este
sistema es inestable por naturaleza como el pndulo invertido. El PID desconoce esta
inestabilidad y slo busca corregir la desviacin que se produce en el sistema. En este caso
particular, intenta llevar a la posicin deseada (la de equilibrio natural del cuerpo del robot
vertical, la cual deseamos). En este caso no debemos olvidarnos que esto es aplicable a
respuestas lineales, por lo tanto ngulo dentro del cual puede trabajar es limitado pero tal
vez suficiente.
Determinados a resolver el problema como se nos haba pedido en la ctedra, se opta por
enumerar las dificultades:
No conozco las constante del motor.
Falta de conocimiento y preparacin formal sobre sistemas de control.
Control digital de un sistema analgico.
5

ROBOTICA

Limitaciones de procesamiento por parte del cerebro del robot.


Esto llevo a tomar la decisin sobre el tipo de estrategia.
Puede utilizarse de forma de abstraer el problema base y as, disminuir drsticamente la
complejidad del sistema a resolver. Puede llegar a funcionar a prueba de concepto.
Aunque es necesario hallar los coeficientes de los trminos PID, no est estrictamente
ligado a modelos complicados, y se puede utilizar un seteo emprico. Esta estrategia es
bastante utilizada, y se hallan muchos proyectos de diferente ndole que as lo demuestran.
Trabajo a realizar. Entender las limitaciones de velocidad de procesamiento del cerebro
del robot. Establecer un control proporcional y mejorar el mismo refinando su
comportamiento. Comprender los inconvenientes que apareja controlar un sistema
analgico a travs de un control digital. Escribir el control PID completo

ROBOTICA

ROBOTICA

ROBOTICA

CONCLUSIN
El sistema termino realizando equilibrio y a medida que el control progresaba en
funcionalidad como en tunning8 fue mostrando una clara mejora. No se pudo implementar
un sistema que permitiera cotejar las mejoras ms que por el mtodo de la observacin.
Eventualmente el equilibrio en torno a la posicin de equilibrio se obtuvo y demostr ser
significativamente mejor de las primeras pruebas utilizando un control proporcional.
El programa de control PID logr el objetivo, permiti realizar el proyecto en tiempo y
forma, adems de sortear una gran cantidad de inconvenientes.
Aunque el objetivo inicial de lograr un pndulo invertido no se alcanz, esta aproximacin
es evidentemente un claro progreso hacia la resolucin del mismo. Aunque el trabajo podra
haber sido ms exitoso, en lo personal fue satisfactorio lograr una solucin, y que adems
la misma es bastante aceptable.
La estrategia de control PID dejo en evidencia ser a prueba de concepto, y logr un
importante objetivo a un costo de tiempo, dinero y conocimientos10 muy bajos.

ANEXO CDIGO
#include <math.h>
#include <AcceleroMMA7361.h>
AcceleroMMA7361 accelero;
int x; int y; int z;
double angleYZ = 0;
double angleXZ = 0;
int maximumRange = 200;
int minimumRange = 0;

float actual, sp=35.4, error, previous_error, drive, derivative=0, integral=0, kp=99, kd=0.0001,
ki=0.3, salida, xx;
int M1 = 6; // Pin 2 puente H Motor Derecho A1
int M2 = 7; // Pin 7 puente H Motor Izquierdo A1
int var_pwm = 11; // Pin 1 punte H entrada PWM
int value;
void setup()
{
TCCR2B = TCCR2B & 0b11111000 | 0x07; // prescalador para pines 11 y 3 en 1024 freq = 30 hz con 0x07
y
488hz con 0x04 para pulso pwm
Serial.begin (9600);
accelero.begin(13, 12, 9, 10, A1, A0, A2);

ROBOTICA
accelero.setARefVoltage(3.3); //sets the AREF voltage to 3.3V
accelero.setSensitivity(LOW); //sets the sensitivity to +/-6G
accelero.calibrate();
pinMode(M1,OUTPUT); //
pinMode(M2,OUTPUT); //
pinMode(var_pwm,OUTPUT); //salida del PWM
}
void loop()
{
x = accelero.getXRaw();
y = accelero.getYRaw();
z = accelero.getZRaw();
angleXZ = atan((double)x / (double)z);
angleXZ = angleXZ*(57.2958);
angleYZ = atan((double)y / (double)z);
angleYZ = angleYZ*(57.2958);
//se define para un mejor control
if (angleXZ >= maximumRange || angleXZ <=minimumRange)
{
/*se envia -1 para indicar el fuera de rango*/
Serial.println ("-1");
}
else
{
if(drive > -5 && drive < 5)
{
error = sp - actual;
integral = integral + (error); //se calcula el integral
derivative = (error - previous_error);// se calcula el deriativo
drive = (error*kp) + (integral*ki) + (derivative*kd);//ecuaciones del PID
previous_error = error;
}
else
{
error= sp- actual;
drive = (error*kp) + (integral*ki) + (derivative*kd);
previous_error = error;
}
if (drive > 4)
{
drive = drive*5; // para que drive no se pase de 5 y asi controlar el plso PWM
}
else if (drive < -4)
{
drive = drive*5;
}
if (drive > 3)

10

ROBOTICA
{
digitalWrite(M1,LOW);
digitalWrite(M2,HIGH);// el carro se mueve para la izquierda
xx=map(drive,-5,0,200,0);// se mapea drive para que el pulso pwm se maneje dentro del rango
analogWrite(var_pwm,xx);
}
else if (drive < -3)
{
digitalWrite(M1,HIGH);//el carro se mueve para la derecha
digitalWrite(M2,LOW);
xx=map(drive,0,5,0,200);
analogWrite(var_pwm,xx);
}
else
{
digitalWrite(M1,LOW);//el carro se mueve para la derecha
digitalWrite(M2,LOW);
//
xx=map(drive,0,5,0,200);
//
analogWrite(var_pwm,xx);
}
Serial.print("\n\nx: ");
Serial.print(x);
Serial.print(" \ty: ");
Serial.print(y);
Serial.print(" \tz: ");
Serial.print(z);
Serial.print("\n");
delay(300);
Serial.print ("\nactual: ");
Serial.print (actual);
Serial.print ("\terror: ");
Serial.print (error);
Serial.print ("\tdrive: ");
Serial.print (drive);
Serial.print ("\tangulozx: ");
Serial.print (angleXZ);
Serial.print ("\tanguloyx: ");
Serial.print (angleYZ);
actual = angleXZ ;
}
delay(10);
}

11

ROBOTICA

12

También podría gustarte