Está en la página 1de 7

Diseo de un pndulo invertido por medio de las herramientas Matlab, Arduino y Simulink.

IMPLEMENTACION PNDULO INVERTIDO POR MEDIO DE LAS


HERRAMIENTAS MATLAB, ARDUINO Y SIMULINK

RESUMEN: El diseo de un pndulo invertido es


un prototipo tpico para control, en el cual se tiene en
cuenta controladores PD, PID, entre otros, los cuales se
pueden elaborar mediante herramientas de simulacin
como Arduino, y actualmente con diagramas de bloques
en Matlab y Simulink. Estos ltimos permiten elaborar
diagramas de bloques sin necesidad de elaborar lneas
de cdigo para el control del sistema.
PALABRAS CLAVE: Pndulo invertido, Matlab,
Arduino, Simulink, controlador PD.

1 INTRODUCCIN

Figura 2. Potenciometro industrial.


Carro de juguete

Figura 3. Carro para el diseo fsico.


Hardware Arduino UNO.

Figura 4. Arduino UNO.


Cable UTP.
Protoboard pequea.
Una antena de radio.

Este artculo muestra un modelo para un pndulo


invertido, con su diagrama de control PD. Para su diseo
en software se realiza mediante cdigo en Arduino, y
otro modelo por medio de bloques mediante Matlab y
Simulink implementado en Arduino UNO.

2 DISEO DE CONTROL
2.1 CARACTERSTICAS
Para realizar el sistema con las caractersticas
deseadas, se requiere un diseo del controlador que
tenga cierta estabilidad en un punto, es decir, un
equilibrio, el cual para este modelo que sea en el
momento en que el pndulo se encuentra perpendicular
a la superficie.

3 DISEO FSICO
Para el pndulo se utilizaron los siguientes
materiales:

Un circuito integrado L293D (puente H).

Figura 1. Puente H L293D


Un potencimetro industrial de 5K.

4 DISEO EN ARDUINO
Para la elaboracin del cdigo se tuvo en cuenta el
diseo de control del numeral 3. A continuacin se
presenta el cdigo especificando cada una de las lneas:

Diseo de un pndulo invertido por medio de las herramientas Matlab, Arduino y Simulink.

.
//Asignacin de pines y declaracin d
e variables

int sensorPin = A0; //Pin para


lectura analgica
int Pin2 = 9;
//Pin para PWM 1
int Pin1 = 10;
//Pin para PWM 2
float e=0;
//error
float e0=0;
//error pasado
float pd=0;
//variable de
control
float d=0;
//Diferencia
entre error pasado y error
float val=0;
//Valor analgico
ledo

Como se puede observar, se debe tener en cuenta


las salidas de los pines para que se realice la
transferencia correcta al Arduino UNO, adems tener en
cuenta los cdigos de lectura y escritura que puedan
realizar la conversin analgica del potencimetro a
seal digital. En el punto de estabilizacin ser le
referencia, es decir 512 en este caso.

void setup() {
// Se declara the ledPin como
OUTPUT:
pinMode(Pin1, OUTPUT); //PIN1
salida PWM
pinMode(Pin2, OUTPUT); //PIN2
salida PWM
}
void loop() {

5 PREPARAR LA COMUNICACIN ENTRE SIMULINK

Para el caso de la condicional en que pd<0, se


deben dejar valores absolutos, ya que si toman valores
negativos, la polaridad ser negativa, y el dispositivo
slo acepta valores con polaridad positiva, en caso
contrario, se puede daar.

Y ARDUINO
Para poder realizar la implementacin de bloques en
Matlab con la herramienta simulink, se debe tener la
librera Arduino, en este caso se tiene Arduino IO, el cual
permite implementar bloques de control para realizar la
comunicacin con el hardware, sin necesidad de utilizar
cdigo para todo el sistema. Esta interaccin permite
una obtener grficas que muestran el comportamiento
del sistema en tiempo real en Matlab.

val = analogRead(sensorPin); //lee


entrada del sensor
e=val-512;
//error= valor ledo menos
referencia, el cual es tomado en la
mitad del potencimetro (2.5K)
teniendo en cuenta la mitad de los
bits que soporta el hardware Arduino
d=e0-e; //diferenciacin discreta
e0=e; //error pasado

Para el caso del pndulo se tiene una implementacin


en bloques de la figura 5.
Arduino Analog Read= Leer la salida analgica del
potencimetro
.
Data double convertion= Convierte la entrada para el
tipo de datos y la escala de salida.
Constant= Referencia del sistema.

//control del pndulo


pd= (43*e) + (25*d); // constantes
multiplicando a e y a d
pd = constrain(pd, -255, 255);
//Limitar pd

Sum= Sumadora de la referencia con respecto a la


entrada analgica. Se debe tener en cuenta que sea +-,
ya que por defecto el sistema utiliza ++.
MATLAB Funtion= En este bloque, es donde se realiza
la programacin del control de los motores, el cual para
este caso, es de inversin de giro, con el siguiente
cdigo:

//Condiciones de posicin
if (pd>0)
{
analogWrite(Pin1, pd);//activar
pin1
analogWrite(Pin2, 0);
//desactivar pin2
}
if (pd<0)
{
analogWrite(Pin2 abs(pd));
//activar pin2
analogWrite(Pin1, 0);
//Descativar pin1

Saturation= Permite delimitar el sistema, ya que el


hardware soporta hasta 255 bits.

Arduino Analogic Write= Son los bloques donde se


escribe la seal procesada para enviarla al integrado del
puente H.
Discrete Derivate: Bloque de control del sistema, en
este caso, un PD derivativo.

Diseo de un pndulo invertido por medio de las herramientas Matlab, Arduino y Simulink.

.
Gain= Ganancia del sistema.

5.1 INSTALACION SOFTWARE ARDUINO UNO EN


SIMULINK (MATLAB 2012B)
En este apartado se muestra como aadir el hardware
Arduino en Simulink.Una vez completado esta proceso
se podran ejecutar los modelos que tiene Simulink en
nuestro Arduino
El proceso de instalacin aade los siguientes tems al
pc
- librera de bloques de simulink para configurar y
acceder a los sensores actuadores e interfaces de
comunicacin del Arduino
-Demos para empezar y aprender acerca de las
caractersticas especficas
-Herramientas para el desarrollo de software tales como
el software Arduino

En Internet .esta es la opcin seleccionada por defecto.


El instalador de la tarjeta descarga e instala el paquete
de apoyo de compatibilidad y software a travs de
Internet.

Para comprobar si haya actualizaciones, repita el


proceso cuando una nueva versin de Matlab sea
liberada. Tambin se puede comprobar si haya
actualizaciones entre versiones. Adems se puede usar
en ordenadores con versiones de Windows de 32 bits y
de 64 bits

Carpeta. El instalador obtiene el paquete de apoyo de la


carpeta especfica. Usted debe tener los privilegios de
escritura para esta carpeta.

5.2. PASOS DE INSTALACIN DEL SOFTWARE DE


SIMULINK PARA NUESTRA TARJETA ARDUINO UNO
Comienza la instalacin de la tarjeta usando uno de los
siguientes mtodos:
-En la ventana de comandos de Matlab insertando la
instruccin targetinstaller
5.2.1. En un archivo model de simulink, haga click en
tool
Men
y
seleccione
Run
on
Target
Hardware>Install/Update Support Package
5.2.3. Elija como conseguir el paquete de apoyo desde
internet o desde la carpeta

Diseo de un pndulo invertido por medio de las herramientas Matlab, Arduino y Simulink.

.
5.2.4. El instalador de la tarjeta confirma que la estas
instalando y listas de software que se instalaran.

5.2.7. haga click en Finish.

5.2.5. Revise la informacin, incluyendo los acuerdos de


la licencia y haga click en instalar.

La ayuda muestra las demos apropiados para su


Hardware
Para encontrar estos demos ms tarde, introduzca doc
en la ventana de comandos de Matlab. En la ventana de
ayuda, busque other Demos y pulse ele botn para ver el
contenido de la lista.
5.2.6. El instalador muestra una barra de progreso
mientras se descarga e instala el software.

6. LIBRERIAS DE BLOQUES DE SIMULINK


Se puede abrir la Liberia de bloques para la tarjeta
Arduino desde la ventana de comandos de Matlab o
desde el buscador de la librera de bloques de Simulink.
Los bloques de esta librera proporcionan soporte
conectar sistemas perifricos a la tarjeta.
Despus de la instalacin del soporte para su hardware,
usted puede abrir la librera de bloques desde la ventana
de comandos de Matlab escribiendo arduinolib. El
software abre la librera de bloques correspondiente.
Para abrir la librera de bloques desde simulink
introduzca simulink en la ventana de comandos de
Matab o haga click en el icono en Matlab
Una vez pulse el anterior icono haga click en Target for
use with Arduino Hardware

Para ver los demos de las tarjetas, dejar el Launch


target demos checkbox seleccionada

Diseo de un pndulo invertido por medio de las herramientas Matlab, Arduino y Simulink.

.
SALIDAS PWM

Sample Time: especifique la frecuencia con la que este


bloque lee el valor del pin; en segundos. Este valor viene
predeterminado con 1 segundo. El valor mnimo es de
0.000001 segundos.
Librera de simulink

Los valores ms pequeos requieren el procesador para


completar el mismo nmero de tareas en menos tiempo.
Lo que puede dar errores en exceso de tareas.

ENTRADA ANALOGICA

Genera una onda PWM en el pin de salida analgica


El uso de ancho de pulso (PWM) para cambiar de ciclo
de trabajo de la onda cuadrada de salida. Este tipo de
salidas permite proporcionar una gama de diferentes
niveles de potencia similares a la de una salida
analgica.
El valor que se enva al bloque determina la anchura de
la onda cuadrada, llamado ciclo de trabajo. El rango de
valores es de 0 a 255.
Mide la tensin de entrada analgica

Enviando el valor mximo. La entrada del bloque


produce un ciclo de trabajo del 0% en la salida PWM

Mide la tensin de un pin de la tarjeta relativo a una


entrada analgica. El valor que se obtiene a la salida es
un valor de 10 bits que va de 0 a 1023

Enviando un valor intermedio a la entrada del bloque se


conseguir a la salida un ciclo de trabajo proporcional a
dicha enrada . por ejemplo si se enva un 192 a la
entrada del bloque , el ciclo de trabajo que se consigue
es del 75% (192/255=0,75)

Si la medida de tensin es cero voltios el bloque dar


una salida de valor 0.
Si la medida de tensin es la mxima, el bloque dar
una salida de 1023. Le valor de la entrada analgica por
defecto es de 0 a 5v . para cambiar el valor de voltaje
referencia de la entrada analgica se har click en tool
>runo
n
target
Hardware>Options>voltaje
source:external

Si el dato a la entrada del bloque esta fuera del rango,


como 500 0 -500, se obtendr en la salida el valor
mximo o mnimo respectivamente.
La frecuencia de onda cuadrada es de 490Hz
La entrada de este bloque hereda el tipo de datos del
bloque que se encuentra aguas arriba e e internamente
la convierte en unit8

Si se simula el modelo sin la tarjeta Arduino este bloque


dar 0.
Pin number: Introduzca el nmero del pin a asignar
No se asignara el mismo nmero de pines a mltiples
bloques en el mismo modelo. Para Arduino UNO
introduzca el nmero de pines desde 0 a 5

Diseo de un pndulo invertido por medio de las herramientas Matlab, Arduino y Simulink.

.
7.

DISEO EN MATLAB Y SIMULINK

La seal de entrada constante ser una seal tipo


escaln cuyo valor tiene que ir de 5 a -5v para
asegurarnos que la seal de entrada este comprendida
entre este rango se utiliza el bloque saturation. Este
bloque dispone de dos valores, que en este caso sern
255 y -255v. Si la entrada al bloque saturation se
encuentra en este rango el valor de entrada no se ver
afectado. Sin embargo si la entrada es mayor a 255 este
bloque mantendr la salida del bloque y si la entrada es
menor de -255 este bloque mantendr tambin la salida.
Antes de explicar para que sirve las 2 seales PWM se
comenta cmo funciona el bloque switch.
El bloque switch que se ve en la anterior ilustracin tiene
tres patillas. El funcionamiento es el siguiente: a la patilla
central le llega un valor y este tiene que cumplir la
condicin del switch que en este caso es que el valor
que le llega sea mayor que 0. Sis cumple esta condicin
el switch hace pasar a la salida de este lo que haya ene
la patilla de arriba, mientras que si la condicin no se
cumple , es decir que el valor que se introduce por la
patilla central es menor que cero se pasa a la salida del
switch lo que haya en la patilla inferior
Pin9 (entrada puente H 1) Y Pin 10 (entrada puente H2).
Se encarga de discernir si el motor gira en un sentido o
en otro. Para que el motor gire, una de las dos entradas
tiene que tener un valor de 255 y la otra de 0. Por tanto
como hay 2 entradas cuando el pin 10 tenga un valor de
255 y el pin 9 un 0 el motor girara en un sentido y si el
pin 10 tiene un 0 y el pin 9 un 255 el girara en un
sentido contrario. Si ambos estn a 255 o a 0 el motor
se mantendr parado.
Para conseguir eso se introduce una seal constante en
un primer Switch que dependiendo de si esta es positiva
o negativa nos pasara un 255 o un 0 respectivamente a
la salida PWM. Al segundo Switch le llega la misma
entrada pero multiplicada por -1 (invertida) por medio de
un bloque Gain.

8.

CONCLUSIONES

Para este proyecto se implementaron dos controles


(PD-PID) y con pruebas de laboratorio se observ
que el PD responda mucho mejor que el PID.

Cuando se est implementado la planta se debe tener


en consideracin. Peso del pndulo, el tipo de
potencimetro lineal (industrial) ya que este permite
ser sometido a grandes esfuerzos y no tendremos el
inconveniente
de
estar
reemplazando
potencimetros.

Una vez implementado el control en simulink es


necesario configurar la tarjeta a utilizar en este caso
Arduino Uno, simplemente (tools-prepare to run) y
configuramos nuestra tarjeta con el fin que la
comunicacin entre matlab y arduino sea fluida y no
tenga inconvenientes.

Este proyecto puede ser utilizado como gua para la


implementacin y mejoramiento del pndulo
invertido.

El mayor inconveniente de este proyecto es la


velocidad del motor ya que al momento de realizar el
levantamiento del pndulo cuando se inestabilidad
(cuando sale del rango de estabilidad), no lo hace
con suficiente rapidez. Para proyectos a futuro este
puede ser el punto de partida, garantizar una buena
respuesta del motor ante la lectura del
potencimetro.

Como se observa en el documento hay dos formas de


implementar el control del pndulo, un mtodo es
con cdigo ejecutado directamente en arduino, con
este mtodo el sistema responde de una manera ms
estable su respuesta es mas rpida. Y el otro mtodo
es utilizando los bloques de simulink el cual queda
como aporte y para su mejoramiento.

Diseo de un pndulo invertido por medio de las herramientas Matlab, Arduino y Simulink.

Figura 5. Diagrama de bloques con Matlab y simulink para el diseo del pndulo invertido.

9.

REFERENCIAS

[1] Ogata, Katsuhiko W. (1996). Sistemas de control en tiempo


discreto. Segunda Edicin. Mxico: Prentice Hall.
[2] Rodriguez, O., Cely, H. E., Riao, J. A. 2011. Diseo e
implementacin de un pndulo invertido sobre un carro
aplicando estrategias de control basado en LMI.
Universidad Pedaggica y Tecnolgica de Colombia Sede
Sogamoso.
[3] Sanabria, C., Hernndez, O. 2009. Control de un pndulo
invertido simple por mtodo de realimentacin de estados.

También podría gustarte