Si aún no eres usuario, puedes crear una cuenta o entrar
Arduino RSS Feed Arduino

QR Librería PID con Arduino

Publicado por Andoni Diaz Puerta en Arduino el 19/04/2011 (09:26)
Etiquetas: pid, arduino, lib, library, libreria, ide
. 11 comentarios
Librería PID con Arduino

Como ya sabrán la mayoría de los que leen este blog a diario, el algoritmo PID (o Proporcional Integral Derivativo), es un elemento bastante usado en sistemas autómatas (de una manera u otra), en los cuales este algoritmo cobra bastante importancia en las funciones de re-alimentación, además de provocar que la curva de respuesta sea mucho mas suave que si usamos un sistema alternativo.

La idea es haceros un poco de resumen sobre el panorama de librerías ya diseñadas que nos permitan crear un control PID sencillo (relativamente), sin tener que programarlo desde 0.

Arduino no se queda atrás!





El PID tiene una fórmula, ecuación, expresión, que nos permite calcular los parámetros de salida, a partir de unos dados, básicamente es esta:

Y ahora, vayámonos con la lib de arduino!

ARDUINO PID LIBRARY

Cita de wikipedia

"Un PID (Proporcional Integral Derivativo) es un mecanismo de control por realimentación que calcula la desviación o error entre un valor medido y el valor que se quiere obtener, para aplicar una acción correctora que ajuste el proceso."

Funciones

PID()

Compute()

SetMode()

SetOutputLimits()

SetTunings()

SetSampleTime()

SetControllerDirection()


Ejemplo básico:

/********************************************************
 * PID Basic Example
 * Reading analog input 0 to control analog PWM output 3
 ********************************************************/

#include 

//Define Variables we'll be connecting to
double Setpoint, Input, Output;

//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT);

void setup()
{
  //initialize the variables we're linked to
  Input = analogRead(0);
  Setpoint = 100;

  //turn the PID on
  myPID.SetMode(AUTOMATIC);
}

void loop()
{
  Input = analogRead(0);
  myPID.Compute();
  analogWrite(3,Output);
}

Enlaces

Descarga la última versión

Página de ejemplos

Página oficial en background de Arduino (Con 2 ejemplos mas!)

Explicacíon de la librería y el PID por el autor de dicha libreria


Comparte esto con tus amigos!

Comentarios:


Miguel ngel de Frutos Carro
Enviado el 19/04/2011 (11:45)
Muy buen aporte Andoni!

Andoni Diaz Puerta Andoni Diaz Puerta es un colaborador!
Enviado el 19/04/2011 (11:50)
Hola Miguel Angel,
Muchísimas gracias :)
Abro un poco de debate, creéis necesario un sistema PID en aplicaciones tales como Quadcopter o un robot casero?
Yo personalmente, para el quadcopter voy a intentar hacerlo de forma alternativa con un sistema casero.

Un saludo

Xoel Molejón Otero
Enviado el 19/04/2011 (12:19)
Creo que dependerá un poco de lo que queramos conseguir, así como del tipo de proyecto que tengamos entre manos.
Por ejemplo, sí lo veo útil en el caso de un quadcopter, ya que es una cosa altamente inestable, con cientos de lecturas por segundo, y cualquier mínima oscilación puede desestabilizarlo fácilmente.

Se me ocurre el caso opuesto, un proyecto que tengo parado desde hace meses, a causa de una pieza que no acaba de llegar: Controlar, por ejemplo, una caldera de leña, para avivar o apagar el fuego en función de la demanda de energía para la calefacción. Se realizan medidas aproximadamente cada 2 segundos, y el fuego tarda aproximadamente un minuto en reaccionar, por lo que, en este caso no es necesario en absoluto usar un PID, ya que el sistema tiende siempre a ser estable, incluso con alguna que otra lectura incorrecta.

Dicho esto, creo que un factor fundamental es el tiempo que tengamos para reaccionar desde que se detecta una desviación del objetivo hasta que la corrección se hace efectiva. En algunos casos será necesario anticiparse más, porque cuando llega la corrección ya es tarde, mientras que en otros tenemos tiempo de sobra para calcular, volver a medir, y volver a calcular.

Miguel ngel de Frutos Carro
Enviado el 19/04/2011 (13:21)
Hola!
Como alguno ya sabe, yo también ando enfangado en la construcción de un quadcopter (menudos vuelos me estoy pegando por Bierzo estos días!).
Al principio me hice esta misma pregunta, haste qué punto era necesario un control PID...¿Valdría un control PD solamente?¿qué tipo de filtros necesitaría usar?
Yo lo primero que hice fue construirme un robot "balancing". (con dos ruedas intenta mantenerse erguido). Al ser un sistema más simple pero "de concepto similar" al de un quadricóptero me permitió probar diferentes sistemas de control (el todo/nada, un pseudo PI, un PID...) y también estuve jugando con los filtros Kalman y pseudo Kalman.
Lo único que no pude probar fue la matriz de "cosenos directores vs los cuaterniones" (risas) ..Un robot equilibrista no da para tanto! :D

Finalmente, estoy utilizando un control PID "de manual"...y menuda lata me dio sacar unas contantes "volables"!! :)


Miguel ngel de Frutos Carro
Enviado el 19/04/2011 (20:08)
Un video recién hecho! ;P
http://www.youtube.com/watch?v=wLoExbpwyZs&feature=channel_video_title

Al final le ato al patín derecho una llave inglesa, para comprobar cómo le afecta una carga descentrada...
Por aquí el día está lluvioso y con poca luz, además la cámara del móvil no es gran cosa...


Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 19/04/2011 (23:02)
Realmente impresionante Miguel! Tienes más info? Me gustaría publicar mas detalles si me lo permites. Andoni también anda cerca de hacerlo volar :)
Si quieres, enviame más info a: contacto - arroba - bricogeek.com

Saludos y enhorabuena!

Andoni Diaz Puerta Andoni Diaz Puerta es un colaborador!
Enviado el 19/04/2011 (23:13)
Me uno a lo que dice Oscar!

Saludos

Miguel ngel de Frutos Carro
Enviado el 20/04/2011 (00:30)
Me alegra que os haya gustado el video!
La verdad es que, verlo volar, ha costado sangre, sudor y hélices! ;P
En el vídeo, todavía hago mucho trabajo de "dedos" para mantenerlo cerca. Aún requiere más trim para poder soltar completamente los mandos.
Lo malo es que, tras los golpes y pruebas, he ido perdiendo la ortogonalidad de la estructura que ya tiene algunas holguras indeseadas, y en esto, todo contribuye al vuelo estacionario.
Como he ido dando palos de ciego, hasta comprender bien cada parte, tengo un gran desorden y un sin fin de "parches". (felicito encarecidamente a Andoni, por ser organizado y haber elaborado la wiki para poder seguir los avances del proyecto..)
Ahora estoy a ver si hago un "trabajo" completo (para la Uni) y de una vez por todas aglutino toda la información, pruebas y ajustes que he ido desarrollando estos meses...(debería meter alguna simulación en simulink..) :S
De todos modos, como ya he dicho alguna vez, (y comparto principio con Andoni) me he basado muchísimo en el trabajo de ArduIMU, MultiWii, Arducopter y Mikuadricoptero.
Han sido la base necesaria para que comprendiera que elementos componen éstos aparatos...luego añadimos horas de google, algunas meteduras de pata, paciencia, prueba-error, mi super bancada de pruebas y preguntar muchas cosas a mucha gente, algo de suerte y...se elevó del suelo! :)
Ahora estoy con LabView, haber si me puedo hacer mi propia Terminal de ajuste (hasta ahora utilizaba he estado utilizando la de Arducopter, siguiendo su esquema de comunicaciones seriales).
También acabo de comprar (ya me llegó, viva Bricogeek!) un Arduino mega para añadir más líneas de código al programa (el 2009 está al borde)

Un abrazo!
Nos mantenemos en contacto...y buenos vuelos!

Juan Padrón Martín
Enviado el 21/04/2011 (18:22)
Miguel Ángel de Frutos, podrías darme info sobre el proyecto que hiciste de un robot "balancing". (con dos ruedas intenta mantenerse erguido), es mi siguiente proyecto antes de aventurarme en un quadcopter y toda información que consiga es bien recibida. Te agradecería todo lo que me puedas aportar esquema código etc... gracias de antemano, espectacular el vídeo del cuadcopter y un saludo para todos.

Miguel ngel de Frutos Carro
Enviado el 22/04/2011 (00:25)
Hola Juan Padrón!
Cómo siempre, mi completo desastre me imposibilita enviarte un "buen y completo" archivo con el diseño de la estructura, electrónicas, código etc...
Como lo utilice para trastear, probé con varios sistemas...de hecho el primer modelo utilizaba un sensor por ultrasonido (de poca utilidad para el control del quadricóptero, pero una buena práctica para temas de control básicos..)
Posteriormente, utilicé un acelerómetro (2 ejes..) y un giróscopo (mínimo un eje ;) y dos servomotores (respuesta, algo lenta y no del todo precisa..) y una plaquita basada en arduino.
La estructura era bastante simple. Foto: http://dl.dropbox.com/u/7085078/IMAG0053.jpg

Aunque
mi código degeneró, y ahora tendría que intentar recomponerlo, te paso a continuación los enlaces en los que yo me basé:
- http://www.societyofrobots.com/member_tutorials/node/185
-
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1225283209
-
http://www.barello.net/Papers/Balancing%20Robot%20Seminar.pdf

Espero
ser de ayuda.
Un saludo!

Juan Padrón Martín
Enviado el 22/04/2011 (13:26)
OK, a mi me está pasando lo mismo una vez probado el proyecto y que funciona despues no lo documentas, de todas maneras gracias por los link.


Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Manuel Jiménez
Colaborador
Pablo Toimil
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:

Páginas amigas:

Aqui tienes una selección de las páginas que más nos gusta visitar


© BricoGeek.com 2005-2012

Demuestra lo que sabes hacer!