Ayuda con control PID.

Hola a todos,

¡Saludos de un completo novato!

Estoy haciendo un proyecto de química industrial a pequeña escala y necesito un control de temperatura al inicio del dispositivo. Habíamos pensado en utilizar una placa Arduino UNO, una placa Peltier y el transistor necesario. La placa iría acoplada a un intercambiador de calor que está pendiente de diseño.

He empezado a estudiar automática -que no es mi campo- y a informarme sobre controles PID y PI. Me encuentro con el problema de que no sé por donde empezar. He visto otros proyectos realizados con Simulink de Matlab e implementados con un pack que se llama Arduino IO, ¿alguien sabe algo de ésto?

Me da la sensación de que para hacerlo así, primero debería montar todo el dispositivo y después, con ello en marcha, diseñar el PID con simulink. ¿Es así?

El proyecto en el que me estoy fijando es éste: https://uvadoc.uva.es/bitstream/10324/3407/2/PFC-P-78%3B79.pdf

Como el intercambiador todavía no está preparado... ¿puedo ir haciendo algo al respecto? ¿Puedo calcular la función de transferencia o sólo me recomendáis trastear un poco con Matlab? Ahora mismo todo lo que tengo a mi alcance es el ordenador y la placa Arduino UNO.

Un saludo y muchísimas gracias por adelantado.

Aprender Control no es para leer un par de páginas y ya lo comprendes. Requiere un buen tiempo y la comprensión de varias cosas. Desde mi punto de vista estas dando los pasos apropiados.
Siempre hay que estudiar lo que se desea hacer ante de encarar la idea original. Si te pones a estuidar Control intenta hacer los ejercicios que te propongan los libros. No leas cosas rápidas por Internet porque salvo excepciones son superficiales.
Trabajar con Simulink tampoco es fácil, porque como antes dije requiere de tener los conocimientos para entender que se hace.
Pero en ambos casos ve probando y practicando con ambos.

Que buen manual PID con Arduino!!. Muy recomendable.

Edita y usa los tags para que se pueda direccionar correctamente.

Hola para un control de temperatura no necesitas usar simulink, se utiliza para controles mas avanzados como el DMC

En tu caso si te has planteado usar una placa pertier para calentar debe ser un proyecto de escala diminuta, no pequeña, asi que con una placa de arduino, la sonda de temperatura y el peltier con su transistor ya tendrías bastante

No se de que tiempo de proyecto me estas hablando pero tendrías que tener en cuenta temas de ATEX/EX y de descargas electroestáticas

Por otro lado me interesa el proyecto si me pudieras dar mas información te podría colaborar, trabajo en en una gran industria petroquimica :grin:

Gracias a los dos por vuestros comentarios.

GO_zalo, el proyecto es a una escala muy pequeña, estamos probando unos caudales entre un ml/min a 5 ml/min. De momento con reactores en cascada -flow chemistry- de diseño propio. Están funcionando muy bien y tratamos de buscar la manera de poder extaer productos sólidos también de manera continua, pero esto va para más largo.

De momento, se han hecho los cálculos de que a 35º la velocidad de algunas reacciones prácticamente se doblaría. Es por eso que necesitamos el calentamiento / enfriamiento con la Peltier.

Dices que no es necesario utilizar Simulink. Entonces, ¿qué me recomiendas? ¿programar directamente en el lenguaje Arduino? Seguro qeu hay muchos ejemplos por ahí, he visto una PID library y una de autotune, pero no sé usarlas. ¿Cómo haría para ajustar las constantes Kp, Ki, Kd y afinarlas a mano al final?

¿Podría obtener la temperatura real frente a la referencia en una gráfica haciéndolo de esta manera?

No tengo ninguna referencia así que toda la información que puedas facilitarme será bienvenida.

Y sobre todo, para hacerlo, ¿necesito el experimento montado antes?

Un saludo.

Claro que puedes hacerlo directamente, para ellos usas el PID negando la parte integral diferencial o simplemente usas el AutoTUNE.
Yo te recomiendo la librería PID sin ninguna duda.

Arma tu sistema, de manera simple, prueba que caliente y corte a una temperatura dada con un simple

temp = analogRead(A0) * 5.0/1023;  // ajustar esto a tu sensor de temperatura

If (temp < 35.0) { 
   digitalWrite(pin1, HIGH);
else
   digitalWrite(pin1, LOW);
}

si esto funciona, calienta y enfria manteniendo a 35.0°C o la temperatura que gustes.
Luego que verificas esto, cambia el sketch por la libreria PID.

Muchas gracias surbyte,

Cuando tenga tiempo me voy a hacer simplemente un pequeño depósito para ir probando. Creo que seré capaz de montar todo y chequear si el código funciona.

¿Cómo puedo sacar por pantalla los datos de temperatura que tome el Arduino para hacer una gráfica temperatura/tiempo?

He leído por ahí que necesitaría usar gobetwino e incluir algún comando en el programa que permita exportar los datos a excel y luego hacer la gráfica. ¿Se ha de hacer así?

Muchas gracias por tu ayuda, no sabes cuánto te lo agradezco.

gatocosmico:
Muchas gracias surbyte,

Cuando tenga tiempo me voy a hacer simplemente un pequeño depósito para ir probando. Creo que seré capaz de montar todo y chequear si el código funciona.

¿Cómo puedo sacar por pantalla los datos de temperatura que tome el Arduino para hacer una gráfica temperatura/tiempo?

He leído por ahí que necesitaría usar gobetwino e incluir algún comando en el programa que permita exportar los datos a excel y luego hacer la gráfica. ¿Se ha de hacer así?

Muchas gracias por tu ayuda, no sabes cuánto te lo agradezco.

Hola mira nose si es la manera más efectiva , seguro hay mucho mejores pero como no se sobre otros lenguajes de programación , yo lo que hice una vez fue enviar los datos recogidos por un sensor mediante arduino por comunicación serial ,y en la pc hice un Programa en JAVA para graficarlos

los envias por serial y lo tomas con processing y lo puedes graficar.
O bien lo envias por serial y lo muestras con programas dedicados para eso como MakerPlot

Una pregunta gatocosmico : Es muy exotérmica la reacción? porque la mayoría de las placas Peltier rondan los 2 a 5 j/s por cm cuadrado de calor intercambiado. Con el volumen que tienes, casi seguro que te obligaría a utilizar intercambiadores de calor de placa con una película muy delgada.

Si tendrías que detallar por que quieres usar una peltier en vez de una resistencia eléctrica común,

Que productos y que reacción estas haciendo?

5ml/min? Que volumen tienen los tanques en los que almacenas los rectivos y loa productos? El tema atex no se puede tomar a la ligera

Hola a todos y muchas gracias de nuevo,

De momento no he hecho nada salvo estudiarlo. Cuando tenga los elementos os iré comentando.

Gonzalo, en cuanto a lo de la reacción exotérmica, de momento no hace falta que nos centremos en eso, más bien en calentar/enfriar agua, pero gracias por tu consejo, lo tendré muy en cuenta.

Entonces, una vez montado todo el dispositivo, con sensor de temperatura, triac, batería, peltier, etc. debería identificar el sistema metiendole una entrada escalón y a partir de las gráficas determinar mi 'planta'. Podría hacer esto metiendo por ejemplo 10 voltios y sacando el gráfico por pantalla.

Una vez con mi planta, que sería del tipo K/(Ts+1), podría diseñar mi PID y luego implementarlo con Arduino, ¿voy bien?

El caso es que para obtener esta gráfica, puedo hacerlo bastante fácil para la temperatura usando coolterm.exe, que toma las lecturas de la plaquita Arduino, pero no estoy seguro de que pueda obtener en la misma gráfica la lectura de la diferencia de potencial que llega a la Peltier, cosa que es importante para medir el tiempo de retardo Td que necesito para sacar la susodicha ecuación de la planta.

Vamos, que estoy hecho un lío, jejeje. No sé por donde tirar, si estudiar Matlab y cómo hacer las cosas con ArduinoIO para matlab o si tirar directamente con librerías, Autotune, etc.

Pero por lo que estoy leyendo primero habría que identificar el sistema metiéndole un escalón de voltaje a la peltier.

A ver si me podeis aconsejar con los primeros pasos, espero que luego pueda ir sorteando yo solo las dificutades.

Y muchas gracias de nuevo por vuestros aportes.

El ejemplo del pdf que pusiste en tu post #1 esta muy bueno y entendible.
Siguelo y no hace falta Matlab para nada.

Buenas. Muchas gracias de nuevo por los comentarios.

En lo que me llegan el resto de piezas lo que quiero ir haciendo es un menú para seleccionar la temperatura mediante una pantalla LCD con botones.

Tengo esta LCD LCD & Keypad Shield Quickstart Guide | Freetronics

No he programado nunca, así que cualquier información será muy agradecida. Si sabéis donde puedo encontrar ejemplos de cómo hacerlo no dudéis en postear.

Un saludo!