Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Balancing Robot

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

1

Balancing robot basado en Arduino


Cruz Mentor, Jaramillo Flavio
mentor.cruz@espoch.ed.ec
flavio.jaramillo@espoch.ed.ec

función para inferir el ángulo de inclinación de la plataforma. El


Resumen— Microcontroladores es una asignatura que se ángulo de inclinación se convierte al ángulo de rotación para que
imparte en Ingeniería Electrónica en Control y Redes industriales los servos actúen.
donde se adquiere la capacidad de desarrollar pequeños proyectos
basados en microcontrolador. En este artıculo se presenta uno de
estos proyectos: un robot auto-balanceado basado en Arduino. Se
II. DIAGRAMA DE BLOQUE Y DESCRIPCIÓN
describen los elementos principales a considerar en el diseño El diagrama de bloques consiste principalmente en:
hardware y software. La ventaja de esta configuración es que Microcontrolador Arduino Mega 2560
permite evaluar un sistema de control PID en tiempo real a partir Sensor MEMS MPU6050
de la información obtenida por un acelerómetro y un giroscopio
Motores
MPU6050.
Abstract-- Microcontrollers is a subject that is taught in Puente H
Electronic Engineering in Control and Industrial Networks where Todo el robot se equilibra en dos ruedas que tienen el agarre
the ability to develop small projects in microcontroller is acquired. requerido y proporcionan suficiente fricción. Para obtener la
In this article one of these projects is presented: a self-balanced verticalidad del robot, se deben hacer dos cosas, en una mano se
robot based on Arduino. The main elements to consider in the debe medir el ángulo de inclinación y, por otra parte, se debe
design of hardware and software were described. The advantage of controlar que los motores avancen o retrocedan para formar un
this is that it allows to evaluate a PID control system in real time
from the information obtained by an accelerator and an MPU6050 ángulo de 0˚, medidos por el MPU6050.
gyroscope. A. MPU6050
Circuito MEMS (Micro-Electro-Mechanical System) que
I. INTRODUCCIÓN
combina un acelerómetro de 3 ejes y un giroscopio de 3 ejes para
medir las inclinaciones y rotaciones e incluye un DMP (Digital
L os balancing robots de dos ruedas se basan en la Motion Processor). Esta unidad permite realizar complejos
cálculos con las medidas captadas por el chip, ahorrando tiempo
configuración de péndulo invertido que se basa en sistemas de
y trabajo al microcontrolador. Este elemento se encarga de la
equilibrio dinámico para equilibrar y maniobrar. Esta base de
captación de datos así como de procesar información de posibles
robot proporciona una robustez y capacidad excepcionales
magnetómetros externos.
debido a su menor tamaño y requisitos de potencia. Dichos
La Figura 1 muestra una pequeña placa con el MPU6050. El
robots encuentran sus aplicaciones en un propósito de vigilancia
chip va orientado de forma que su eje Y sea perpendicular al
y transporte. En particular, la atención se centra en los
robot, de modo que solo es necesaria medir la inclinación en ese
mecanismos electromecánicos y los algoritmos de control
eje. La conexión se realiza mediante I2C, los pines SDA (datos)
requeridos para permitir que el robot perciba y actúe en tiempo
y SCL (reloj), más los de alimentación y un pin de interrupción
real para un mundo dinámicamente cambiante. En el robot de
(INT0).
auto-equilibrio, si el robot se inclina en un ángulo, el centro de
Si se desea modificar la dirección I2C del dispositivo se
masa del bot experimentará una pseudo-fuerza que se aplicará al
dispone de otro pin (AD0), que modifica el último bit de dicha
torque opuesto a la dirección de inclinación. Esta tesis presenta
dirección, B110100X, donde X indica el estado de este pin. En
un robot móvil de autodesarrollo de desarrollo que utiliza un
nuestro sistema, captamos los datos de entrada del acelerómetro
controlador PID. La plataforma se ha diseñado utilizando kits de
en unas coordenadas conocidas como Yaw-Pitch-Roll (Figura
robots móviles que incluyen IMU y dos servos, y controlada por
2), que son usadas para medir rotaciones en aeronáutica.
un microcontrolador de fuente abierta con PID. Se han utilizado
De este modo, solo utilizamos la segunda coordenada (eje Y),
un microcontrolador Arduino, servos de grado de afición y un
que será nuestra señal de entrada. Este componente se encuentra
acelerómetro y giroscopio de seis grados de libertad (eje) para
en el nivel superior del robot, insertado en una protoboard con
crear la plataforma controlada. El controlador ha sido diseñado
más componentes, de manera que se reduce el cableado ya que
para mantener la plataforma en un ángulo inicialmente
la alimentación a 5V es común.
seleccionado cuando cambia la orientación de la estructura de
soporte. El valor de los parámetros PID, es decir, Kp, Ki y Kd,
se ha obtenido y aplicado al Arduino. El software se ha escrito
con lógica para convertir los datos digitales del acelerómetro en
un vector de magnitud de aceleración.

La magnitud se compara con una matemática predeterminada


2

Fig. 1 MPU6050 Fig. 4 Puente H

De Arduino) y 2 para el control del sentido de giro (Ambos


conectados, el motor se enclava, ninguno el motor se mueve
libremente en punto muerto, y uno solo determina el sentido de
giro). Podemos utilizar esta alimentación para alimentar la placa
de Arduino. Los motores y el controlador están en el nivel más
bajo del robot.
D. Alimentación
Para la alimentación se utiliza una batería de 11.3V que se
conecta directamente a la placa controladora de motores, de la
Fig. 2 Sistema de coordenadas cual se extrae la alimentación regulada a 5V para el resto del
B. Motores robot. La pila está situada en el nivel medio junto a la placa de
Arduino.
Permiten el movimiento de las ruedas del robot para
Su equilibrio y se controlan mediante salidas del
microcontrolador. En este diseño se utilizan dos motores con
sistema de reducción incorporado. Trabajan entre 3 y 9 V y dan
una velocidad de salida nominal de 281 rpm (a 6V). Es
fundamental que estos motores ofrezcan un gran torque, ya que
nuestro objetivo es que el robot ofrezca una respuesta rápida y
robusta ante cambios en la inclinación, para lo que es necesaria
bastante fuerza. Las ruedas utilizadas son de 8 cm de diámetro.

Fig. 5 Batería

III. METODOLOGÍA
El algoritmo de control que se utiliza para mantener el
equilibrio en el robot es el controlador PID. El controlador
proporcional, integral y derivado (PID) es bien conocido como
un controlador de tres términos. La entrada al controlador es el
error del sistema. Kp, Ki y Kd se conocen como constantes
proporcionales, integrales y derivadas (los tres términos se
Fig. 3 Motor y llantas
multiplican por estas constantes) respectivamente. En el
controlador PID, el error se gestiona de tres maneras. El error se
C. Puente H utilizará en el controlador PID para ejecutar el término
Para el control de los motores se utiliza una placa con el proporcional, el término integral para la reducción de los errores
circuito integrado L298N (Figura 4). Este chip contiene puente de estado estacionario y el término derivado para manejar
H, que mediante una estructura simétrica de pares Darlington y rebasamientos. El algoritmo de control PID se puede modelar en
diodos permite el control de la velocidad y el sentido de giro de una representación matemática. La ecuación dada es calcular la
los motores. La placa necesita alimentación externa acorde con salida del controlador PID del sistema de equilibrio se simplifica
la necesaria para los motores, a través de la cual se extrae de la siguiente manera:
también la alimentación de 5V para toda la electrónica Error = Lectura del punto de ajuste - Lectura actual del
(mediante un regulador linear LM7805). Podemos controlar acelerómetro - Lectura del giroscopio actual (1)
ambos motores mediante 3 pines cada uno, 1 para la regulación Si solo se hubiera usado el primer término para calcular la
de velocidad (se utiliza el PWM Figura 4. Puente H basado en corrección, el robot habría reaccionado de la misma manera que
L298N. en el algoritmo clásico de seguimiento de línea. El segundo
término obliga al robot a moverse hacia la posición media más
rápido. El tercer término resiste un cambio repentino en la
3

desviación. Arduino Mega (evitando así bloquear funcionalidades de otro


El término proporcional aumenta la potencia del motor ya que Timer). Se han utilizado las bibliotecas EEPROM y
el sistema se inclina más y disminuye la potencia del motor a TimerThree.
medida que el sistema se acerca a la posición vertical. Un factor Para el control de motores se ha creado una biblioteca propia,
de ganancia, Kp, determina cuánta energía aplicar al motor para que se ha llamado LMotorController. Esta dispone de más
cualquier inclinación, de la siguiente manera: funcionalidades que las que usa el robot (ya que ´este solo hace
Término proporcional de salida = Kp * Error (2) un movimiento rectilíneo, y la biblioteca permite girar y mover
El término diferencial del algoritmo PID actúa como un ambas ruedas con velocidades diferentes), pero está pensada
amortiguador que reduce la oscilación. Otro factor de ganancia, para poder usarla de forma más genérica. Por último, se ha
Kd, determina cuánta potencia se aplica al motor de acuerdo con incorporado la configuración del watchdog, para lo que se utiliza
la siguiente ecuación: la biblioteca wdt, incorporada en la IDE de Arduino, y que con
Término diferencial de salida = KpKd * (Error - Último error) simples ´ordenes permite configurar el watchdog del sistema. En
/T (3) este caso se ha configurado para lanzar un reset si no se reinicia
= (KpKd / T) * (Error - Último error) (4) en 8 segundos.
Simplificado: Control PID
Término diferencial de salida = Kd * (Error - Último error) La placa de Arduino Mega 2560 se encuentra en el segundo
(5) nivel del robot, y es la encargada de hacer los cálculos para el
Finalmente, ni los términos proporcionales ni diferenciales procesamiento de la señal de entrada.
del algoritmo eliminarán toda la inclinación porque ambos Este procesamiento se hace mediante un control PID, para lo
términos van a cero ya que la orientación del sistema se que recurrimos a la biblioteca PIDv1, que se encuentra en la
establece cerca de la vertical. El término integral suma el error página oficial de Arduino. Para ajustar el control, se utilizan 3
acumulado (error sumado en el tiempo) y aplica la potencia en potenciómetros de 10k (uno para cada una de las constantes),
la dirección opuesta indicada por la suma para conducir el magro situados en la placa de prototipo. Se monitorizan los valores de
a cero, de la siguiente manera: las constantes por puerto serie, de forma que se pueda conocer
Término integral de salida = KpKi * Suma de error * T (6) = cuál es el valor
KpKiT * (Suma de error) (7) ´optimo.
Simplificado: Para realizar el primer ajuste, se ponen a cero los
Término Integral de Salida = Ki * (Suma del Error) (8) potenciómetros, por lo que el robot no hace nada (constantes
La salida del controlador PID para equilibrar el modelo es cero, no hay control PID), y se va aumentando el que
Motor PWM = Término proporcional + Término integral + corresponde a la constante proporcional Kp, hasta que
Término diferencial (9) alcanzamos un valor para el cual los motores del robot
responden a los datos del acelerómetro. En nuestro caso ha sido
Kp = 70. Una vez fijada, pasamos a variar el potenciómetro
correspondiente a la constante integral Ki. Esta se encarga de
reducir el error´ en estado estacionario, por lo que la
aumentamos hasta el valor para el cual la oscilación de los
motores es pequeña. En nuestro caso es Ki = 240. Finalmente
ajustamos la constante diferencial Kd, que reduce el sobre
disparo, hasta el punto en el que el movimiento del robot es
suave y no hay picos de fuerza. Kd = 1.9. Una vez ajustadas
Fig. 6 Controlador PID manualmente se introducen en el código las constantes
obtenidas para simplificar la ejecución del programa. En cada
bucle se llama a un método que implementa el algoritmo PID y
IV. SOFTWARE UTILIZADO nos da la señal de salida.
El MPU6050 se comunica por I2C, y su utilización es Descripción del código
compleja, por lo que se han usado dos bibliotecas, I2Cdevlib y Se comienza incluyendo las bibliotecas necesarias y
MPU6050 6Axis MotionApps20, desarrolladas por Jeff Robert, definiendo una serie de variables que nos permiten hacer una
que facilitan enormemente la captura de datos válidos para monitorización del sistema. Son 3 variables que dependiendo de
procesamiento. La biblioteca para I2C Wire también es si valen 1 ´o 0 habilitan ciertas partes del código (para ver los
necesaria para utilizar las dos anteriores. Por otro lado, para la valores del acelerómetro por puerto serie, para ver las constantes
monitorización del proceso se envían datos por puerto serie, PID si se están sintonizando de forma manual y para el propio
tanto el ángulo de inclinación del robot como las constantes del ajuste manual). A continuación se declaran los objetos mpu, pid
control PID mientras se está calibrando, siempre y cuando se y control Motores para las bibliotecas correspondientes, y se
seleccione la opción correspondiente al inicio del código. declaran las variables necesarias para el funcionamiento del
Además, cada 5 segundos se guardan los datos de inclinación sistema. Respecto al MPU6050, se incluyen variables para
del robot en la memoria EEPROM externa, por si es necesario detectar interrupciones mediante el pin de interrupción
hacer una gráfica a largo plazo de los niveles de inclinación. Para asignado, otras para comprobar el estado del dispositivo tras
ello se han utilizado interrupciones, mediante el Timer 3 de cada operación y otras más para trabajar con la memoria FIFO
4

que incorpora el sensor, la cual nos permite hacer un


almacenamiento de los datos para su lectura. Se ha configurado
también un buffer para almacenar los datos. El resto de variables
corresponden a los vectores necesarios para obtener los datos y
procesarlos.
Después se definen las variables utilizadas para el PID y el
controlador de motores y una variable de temporización para
almacenar valores de tiempo y ejecutar la captación de datos
para sintonización manual en ciertos intervalos (si ha sido
seleccionada previamente). En concreto compara Fig. 8 Pistola de Silicona
constantemente el tiempo mediante millis() y ejecuta la rutina
cada segundo.
En el setup, lo primero que se hace es iniciar el bus I2C y el
puerto serie, y después se realizan todas las inicializaciones y
conexiones necesarias en el sensor MPU6050. También se ha
incluido una rutina para detectar errores en el inicio, con su
correspondiente indicación en el monitor serie. Después se
configuran el control PID, el Timer para el envío de datos a la
EEPROM y el watchdog. En el loop lo primero que se hace es
el cálculo de los valores de salida del control PID y la actuación Fig. 9 Cautín y estaño
de los motores, así como el bucle correspondiente a la variable
de temporización señalada anteriormente. Tras ello se efectúa la
obtención de los datos, con una rutina para el desbordamiento
de la memoria FIFO (lo cual no debería ocurrir). Para obtener
los datos, primero se obtienen en cuaterniones, que son los
valores primarios (conocidos como raw values) que obtiene el
sensor. Estos valores son un tipo de coordenadas complejas para
medidas de rotaciones, previas a la invención de otras medidas
como los ´ángulos de Euler o las coordenadas Yaw-Pitch-Roll.
Por último se transforman a coordenadas YPR y se muestran
Fig. 9 Taladro
en tiempo real por el monitor serie si se ha seleccionado dicha
opción al comienzo del código. Tras ello se actualiza el valor de
entrada del control PID y se reinicia el watchdog. Una vez fuera
del loop, se define el método envìoDatos, que se ejecuta en cada
interrupción, y que cada 5 se guarda el valor del ´Angulo en la
memoria EEPROM. El hecho de que se configure cada 5 s es
porque la EEPROM tiene un número limitado de escrituras por
celda, que no queremos rebasar. También se declara el método
sintonizacionManual (correspondiente al bucle temporizado
anterior, y solo se ejecuta si hemos puesto a 1 la variable Fig. 10 MPU6050, Arduino Mega, Puente H
correspondiente al principio), que nos permite captar los datos
de las constantes PID a través de los potencio ‘metros en cada
iteración del bucle.

V. MATERIALES DE LA ESTRUCTURA
Los materiales han sido escogidos por su peso, pensando en el
menor peso posible para la estructura:
Madera 0.38 gr

Fig. 11 Motor y llantas

VI. IMPLEMENTACIÓN Y RESULTADOS


En este artículo se ha presentado un trabajo de prácticas de la
asignatura Microcontroladores. Este trabajo consiste en un robot
auto balanceado basado en Arduino. Uno de los principales
Fig. 7 Tabla triplex
5

problemas que plantea este diseño es la posición del


acelerómetro. Al estar insertado en una placa de prototipo, la
fijación no es tan exacta como si estuviera atornillado, por lo que
hay que asegurarse de que no se varía la inclinación del mismo
si el robot sufre alguna caída, ya que cualquier variación de la
inclinación supone el fin del equilibrio. En general, el
comportamiento del robot una vez calibrado es bastante estable.
Con los primeros valores asignados para los parámetros del
control el balanceo del robot no fue óptimo, al revisar la teoría
de controladores decidimos variar los valores de Kp, Ki y Kv de
acuerdo a intervalos de valores teniendo en cuenta q el valor de
Kd es el que ayuda a estabilizar rápidamente el sistema.
Una falla en la ubicación de la batería nos permitió ubicarla
cerca del puente H lo cual mejoró la estabilidad. Al ingresar los
nuevos valores verificamos q el robot tenia mejor equilibrio,
pero después de un momento se caía, decidimos aumentar los
valores, y a revisar las conexiones, observando q un cable no
estaba bien colocada a la salida de los terminales PMW

REFERENCIAS

[1] G. Eason, B. Noble, and I.N. Sneddon, “On certain integrals of Lipschitz-
Hankel type involving products of Bessel functions,” Phil. Trans. Roy.
Soc. London, vol. A247, pp. 529-551, April 1955.
[2] J. Clerk Maxwell, A Treatise on Electricity and Magnetism, 3rd ed., vol. 2.
Oxford: Clarendon, 1892, pp.68-73.
[3] I.S. Jacobs and C.P. Bean, “Fine particles, thin films and exchange
anisotropy,” in Magnetism, vol. III, G.T. Rado and H. Suhl, Eds. New
York: Academic, 1963, pp. 271-350.
[4] K. Elissa, “Title of paper if known,” no puplicado.
[5] R. Nicole, “Title of paper with only first word capitalized,” J. Name Stand.
Abbrev., en impresión.
[6] Y. Yorozu, M. Hirano, K. Oka, and Y. Tagawa, “Electron spectroscopy
studies on magneto-optical media and plastic substrate interface,” IEEE
Transl. J. Magn. Japan, vol. 2, pp. 740-741, August 1987 [Digests 9th
Annual Conf. Magnetics Japan, p. 301, 1982].
[7] M. Young, The Technical Writer’s Handbook. Mill Valley, CA: University
Science, 1989.

También podría gustarte