Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Proyecto Final
Robot Balancn
Integrantes:
3 Conclusiones............................................................................................. 24
4 Bibliografa ................................................................................................ 25
TABLA DE FIGURAS
equilibrio sobre sus dos ruedas. Esto se consigue empleando un sensor que
nos informa en tiempo real sobre el ngulo que forma el robot con respecto al
suelo. Se usa un filtro en los valores obtenidos del sensor. El ngulo obtenido
PALABRAS CLAVE
2.1 Objetivo:
se puede deslizar un carro, sobre este montado un pndulo que puede girar
libremente.
El sistema est instrumentado, de tal suerte que se puede medir el ngulo del
escaln o impulso.
2.2.2 PWM
La modulacin de ancho de pulso (PWM, por sus siglas en ingls) de una seal
es una tcnica que logra producir el efecto de una seal analgica sobre una
digital.
El ciclo de trabajo describe la cantidad de tiempo que la seal est en un
estado lgico alto, como un porcentaje del tiempo total que est, toma para
La frecuencia determina que tan rpido se completa un ciclo (por ejemplo: 1000
rpido se cambia entre los estados lgicos alto y bajo. Al cambiar una seal del
estado alto a bajo a una tasa lo suficientemente rpida y con un cierto ciclo de
aplicacin y del tiempo de respuesta del sistema que est siendo controlado.
2.2.3.1 Caractersticas
Microcontrolador ATmega328.
6 entradas anlogas.
(NAYLAMP , s.f.)
2.2.5 MPU-6050
Kp es la ganancia proporcional.
(Moyano)
fsicos:
1 Arduino UNO
1 Giroscopio/acelermetro (MPU6050)
1Lcd 2x16
1Protoboard
Cables de Conexin
Software:
IDE Arduino
ISIS PROTEUS
2.4 Procedimiento:
manera.
prototipo actual.
2.4.4 Programacin
despus habr que refinar (dividir por una constante) a fin de conseguir
el Acelermetro.
guarda en menos bits, hay que declarar las variables que almacenarn
int16_t AcX, AcY, AcZ, GyX, GyY son, pues, los raw_values de la IMU.
1 #include <Wire.h>
2
3 //Direccin I2C de la IMU
4 #define MPU 0x68
5
6 //Ratios de conversion
7 #define A_R 16384.0
8 #define G_R 131.0
9
10 //Conversin de radianes a grados 180/PI
11 #define RAD_A_DEG = 57.295779
12
//MPU-6050 da los valores en enteros de 16
13 bits
14 //Valores sin refinar
15 int16_t AcX, AcY, AcZ, GyX, GyY, GyZ;
16
17 //Angulos
18 float Acc[2];
19 float Gy[2];
20 float Angle[2];
Se declaran las variables utilizadas en el control y los pines de los motores.
como OUTPUT.
41 void setup()
42 {
43 Wire.begin();
44 Wire.beginTransmission(MPU);
45 Wire.write(0x6B);
46 Wire.write(0);
47 Wire.endTransmission(true);
48 pinMode(llantaI, OUTPUT);
49 pinMode(llantaD, OUTPUT);
50 pinMode(in1, OUTPUT);
51 pinMode(in2, OUTPUT);
52 pinMode(in3, OUTPUT);
53 pinMode(in4, OUTPUT);
55 }
mesura dan los tres ejes del acelermetro, por trigonometra es posible
RAD_TO_DEG.
primero deja pasar nicamente los valores por encima de un cierto lmite, al
contrario que el Low-pass filter, que slo permite a los que estn por debajo.
57 void loop() {
58
59 Wire.beginTransmission(MPU);
60 Wire.write(0x3B); //Pedir el registro 0x3B - corresponde al AcX
61 Wire.endTransmission(false);
62 Wire.requestFrom(MPU, 6, true); //A partir del 0x3B, se piden 6 registros
63 AcX = Wire.read() << 8 | Wire.read(); //Cada valor ocupa 2 registros
64 AcY = Wire.read() << 8 | Wire.read();
65 AcZ = Wire.read() << 8 | Wire.read();
66
67 //A partir de los valores del acelerometro, se calculan los angulos Y, X
68 //respectivamente, con la formula de la tangente.
Acc[1] = atan(-1 * (AcX / A_R) / sqrt(pow((AcY / A_R), 2) + pow((AcZ / A_R), 2))) *
69 RAD_TO_DEG;
Acc[0] = atan((AcY / A_R) / sqrt(pow((AcX / A_R), 2) + pow((AcZ / A_R), 2))) *
70 RAD_TO_DEG;
71 //Leer los valores del Giroscopio
72 Wire.beginTransmission(MPU);
73 Wire.write(0x43);
74 Wire.endTransmission(false);
Wire.requestFrom(MPU, 4, true); //A diferencia del Acelerometro, solo se piden 4
75 registros
76 GyX = Wire.read() << 8 | Wire.read();
77 GyY = Wire.read() << 8 | Wire.read();
78
79 //Calculo del angulo del Giroscopio
80 Gy[0] = GyX / G_R;
81 Gy[1] = GyY / G_R;
82
83 //Aplicar el Filtro Complementario
84 Angle[0] = 0.98 * (Angle[0] + Gy[0] * 0.010) + 0.02 * Acc[0];
2.4.4.4 PID:
2.4.4.5 Motores:
balancn se inclina as un lado, los motores van a girar hacia ese mismo
mismo tiempo)
2.4.5 Valores de Kp , Ki y Kd
Se inicia con Kp, Ki, Kd igual a 0 y al final del Void loop un delay de 4.00. Se
poco y cae, se debe reducir el valor del Kp. Si la respuesta del robot parece
lenta, se aumenta el valor del Kp. Una vez que el robot es capaz de
Kd. Intentar aumentar este valor hasta que se logre observar menos
significativo.
rpida en las llantas haciendo que este cayera, para ello se puso un rango de
las llantas.
3 Mejoras al Robot
describir a continuacin:
4 Conclusiones
al tener que integrar los valores del girscopo. Para poder obtener
Pendulo.
http://brettbeauregard.com/blog/wp-
content/uploads/2012/07/Gu%C3%ADa-de-uso-PID-para-Arduino.pdf
http://digital.ni.com/public.nsf/allkb/AA1BDEA4AA224E3E86257CE4007
07527
http://www.naylampmechatronics.com/blog/45_Tutorial-MPU6050-
Aceler%C3%B3metro-y-Giroscopio.html
http://www.naylampmechatronics.com/drivers/11-driver-puente-h-
l298n.html