Feb
03

Sensores en Arduino (I): Temperatura

En Configuración de Instalaciones Domóticas y Automáticas de 2º curso del CFGS de Sistemas Electrotécnicos y Automatizados estamos ahora dedicando unas horas a la semana a la configuración de sistemas domóticos, para lo cual estamos integrando diferentes tipos de sensores en placas Arduino y elaborando algunas aplicaciones de control domótico en sistemas no propietarios.

Un caso especialmente interesante son los sensores de temperatura, en los cuales nos centraremos especialmente en los termistores NTC y los sensores de unión semiconductora (LM35 y TMP36), dejando fuera los RTD y termopares, que integraremos en sistemas automatizados basados en autómata programable.

En el caso de los termistores NTC, estamos trabajando con termistores NTC de 10K, con un rango de medición de -80ºC a 150ºC (de sobra para las aplicaciones que queremos diseñar).

Termistor NTC 10K

El principal problema que plantean los termistores a la hora de emplearlos en aplicaciones de control de temperatura es sin duda la no linealidad de la curva R/T. Por contra, ofrecen gran sensibilidad, precisión y bajo coste frente a otro tipo de sensores. Su integración en sistemas domóticos, y en este caso en Arduino, exige una modelización de la curva R/T, teniendo en cuenta que en este tipo de sensores, una pequeña variación de la temperatura provoca una gran variación de la resistencia asociada. En este caso, al ser NTC, un aumento de temperatura provoca una gran disminución de la resistencia y viceversa.

El método más corriente para modelizar la curva R/T de los termistores NTC consiste en aplicar la ecuación de Steinhart-Hart, que relaciona la temperatura con la resistencia de la forma:

Steinhart-hart

a,b y c son parámetros específicos de cada tipo de sensor, y por tanto deben ser determinados o especificados por el fabricante. En el caso de sensores NTC como es nuestro caso, es posible simplificar la ecuación de Steinhart-Hart por:

Steinhart-Hart NTC B

donde el parámetro B (beta) es específico de cada material (y además varía con la temperatura), To es la temperatura base de referencia (25ºC o 298.15 ºK) y Ro es la resistencia a esa temperatura de nuestro sensor (10K en nuestro caso).

Naturalmente, para poder modelizar las ecuaciones necesitamos conocer los valores de a, b y c o bien los valores de B, sin lo cual no podemos hacer gran cosa. El fabricante para este caso nos ofrece diversa documentación que será necesario diseccionar para poder averiguar aquello que nos interesa. Para el caso de los termistores de 10K (tipo F), el fabricante nos ofrecen las características de los mismos, dentro de las cuales podemos ver:

Termistores tipo F 10K

es decir, el fabricante ha modificado ligeramente la ecuación de Steinhart-Hart y nos ofrece valores de a, b, c y d para su modelización R/T (que no es la misma que la original y por tanto los coeficientes no son trasladables). Introducir la ecuación ahora en un sketch para Arduino es sencillo. El único problema se presenta a la hora de conocer los valores de Rth/R25, ya que en función de ellos debemos seleccionar a, b, c y d y además hallar Rth.

Para solucionar el primer problema, el fabricante nos proporciona además en el mismo documento una tabla de Rth/R25 a diferentes temperaturas. Podemos ver cómo en el rango entre 0ºC y 50ºC, que es donde utilizaremos nuestro sensor, nos situamos entre 0.36036 y 3.274, por lo que los valores de a, b, c y d nos quedan fijados.

Rth/R25

Para solucionar el segundo problema (hallar Rth), es necesario transformar las variaciones de tensión en el pin analógico de Arduino en variaciones de resistencia. Podemos hacerlo con un montaje sencillo de la siguiente forma:

NTC 10K Arduino

De este modo, analizando de forma sencilla el circuito, podemos concluir que Rth= (1024 x 10000 / (lectura A0)) – 10000. La lectura de A0 variará entre 0 y 1023, de modo que 0 corresponde a 0V en A0, y 1023 corresponde a 5V. De este modo, podemos hallar el valor de Rth en función del valor de lectura en el pin analógico. Introducimos igualmente dicha ecuación en Arduino, de forma que nos queda algo como:

El código anterior nos devolverá cada medio segundo el valor en ºC medido por el termistor NTC 10K.

Es posible no obstante plantear el código empleando para ello el parámetro B para nuestro termistor NTC. En este caso, podemos fijarnos en la tabla que el fabricante nos adjunta para termistores tipo F, donde se detalla el valor de B para cada rango de temperaturas. A pesar de que B no es constante con la temperatura, es posible considerarla más o menos constante por rangos:

Valor de B con la temperatura

De este modo, para nuestro caso podemos considerar su valor como 3895, y plantear ahora el código anterior como:

Obteniendo de esta forma valores muy similares a los obtenidos con el código anterior, por lo que la modelización puede considerarse correcta. En otro artículo plantearemos la simplificación obtenida (con los consiguientes sacrificios) al emplear sensores basados en unión semiconductora como los LM35 o TMP36.

Dic
24

Referencias de multivelocidad desde terminal en Siemens Micromaster 440

Una de las prácticas que estamos llevado a cabo estos días implica definir referencias de multivelocidad con el variador de frecuencia Micromaster 440 de Siemens desde el terminal, teniendo que parametrizar previamente el mismo.

Siemens Micromaster 440

De esta forma, empleando 3 entradas digitales podemos establecer 3 consignas de frecuencia diferentes para 3 velocidades distintas. El proceso es un poco tedioso, ya que hay que echar mano de los parámetros BiCo (Binary Connectors) del variador de frecuencia, y que básicamente permiten programar de forma flexible funciones más o menos complejas, relacionando para nuestro caso sets de parámetros a estados de entradas digitales. El procedimiento viene bastante bien documentado en la página de soporte de Siemens, pero con objeto de proporcionar una pequeña ayuda adicional, podemos hacer un resumen general del procedimiento.

La posibilidad de definir 3 consignas diferentes de frecuencia, cada una de ellas activada mediante una entrada digital del terminal, se basa en los parámetros indexados del MM440 frente al MM420: es posible almacenar diferentes valores de parámetros, cada uno de ellos bajo un índice (In000, In001 e In002), de forma que sea posible cambiar entre los valores de los parámetros ante, por ejemplo, como es nuestro caso, el cambio de una entrada digital.

Hay dos tipos de sets de parámetros en el MM440/MM430: CDS (Command Data Set o Juego de datos de comando) y DDS (Drive Data Set o Juego de datos de accionamiento). Los parámetros indexados pueden pertenecer bien al CDS o bien al DDS. La mayor parte de los parámetros tiene 3 índices diferentes (In000, In001 e In002) que pueden ser habilitados. Por defecto, el índice In000 es el que está activo.

La forma más cómoda de definir valores de índice para los parámetros es programar todos los parámetros para In000, y luego copiar estos valores a los índices In001 e In002, modificando posteriormente los valores deseados.

Para ello se emplean los parámetros P0809 [3] y P0819 [3], que permiten copiar el CDS/DDS de un índice a otro.

En este caso trabajaremos con los parámetros:

Parámetros_1

Parámetros_2

El mejor modo de ver el proceso completo es ilustrarlo mediante un ejemplo. De cara a hacerlo todo más sencillo, lo haremos con el mismo ejemplo de la página de Siemens Support. Supongamos que un motor tiene que funcionar con 3 frecuencias diferentes, cada una de ellas con diferentes rampas de aceleración / deceleración, y que deseamos activar estas 3 frecuencias empleando 3 entradas digitales, por ejemplo:

Entrada Digital Frecuencia Rampa aceleracion Rampa deceleracion
DIN1 20 Hz 10 s 10 s
DIN2 30 Hz 5 s 5 s
DIN3 40 Hz 1 s 1 s

Para poder conseguirlo será necesario definir 3 juegos de parámetros, cada uno de ellos en los 3 índices diferentes de diversos parámetros, cambiando entre ellos según la entrada digital activada. Programaremos en primer lugar los parámetros normales del In000 activados mediante DIN1, y programaremos posteriormente DIN2 y DIN3 mediante configuración BiCo.

1. Supongamos que los valores referidos al motor ya han sido configurados en sus respectivos parámetros y se ha realizado una puesta en marcha rápida. Deberemos ahora establecer el control desde el terminal (P0700[0]=2) y trabajar mediante frecuencias fijas (P1000[0]=3). Podemos también establecer los valores correspondientes a In000:

Parámetro / Valor Comentario
P1120[0]= 10s Rampa de aceleración de DIN1 = 10s
P1121[0]= 10s Rampa de deceleración de DIN1 = 10s
P1001[0]= 20 Hz Frecuencia fija 1 activada mediante DIN1 = 20Hz
P0701[0]= 16 DIN1 configurada como frecuencia fija + RUN

2. Preparamos ahora las entradas DIN2 y DIN3 para configuración BiCo, es decir, para poder descargar en ellas todo el juego de parámetros definido para DIN1, copiando posteriormente el In000 en los In001 e In002. Configuramos para ellos P0702[0] y P0703[0] a 99.

3. A continuación, para operar de la forma más cómoda posible, copiaremos el juego de parámetros definidos con el índice In000 en los índices In001 e In002. Dado que los parámetros frecuencia fija (P1001, P1002, P1003…), tiempo de aceleración (P1120) y tiempo de deceleración (P1121) pertenecen al DDS, copiaremos el juego de parámetros DDS del In000 (Set 0) al In001 (Set 1) e In002 (Set 2) de la siguiente forma:

Copiar DDS del Set 0 al Set 1: realizamos en orden las operaciones…

Parámetro / Valor Comentario
P0819[0]= 0 Copia el set DDS desde el Set 0
P0819[1]= 1 Pega el set DDS en el Set 1
P0819[2]= 2 Inicia la copia (tras realizar la copia vuelve otra vez a 0)

Copiar DDS del Set 0 al Set 2: realizamos en orden las operaciones…

Parámetro / Valor Comentario
P0819[0]= 0 Copia el set DDS desde el Set 0
P0819[1]= 2 Pega el set DDS en el Set 2
P0819[2]= 2 Inicia la copia (tras realizar la copia vuelve otra vez a 0)

4. Como se han configurado las DIN2 y DIN3 como BiCo en el paso 2, es posible ahora configurar en P0820 y P0821 la fuente de órdenes desde la cual se leen los sets 1 y 2 previamente configurados. Deberán aparecer los valores 722.1 y 722.2, de forma que configuramos:

Parámetro / Valor Comentario
P0820 = 722.1 Configuramos DIN2 (722.1) como fuente de órdenes para el Set 1
P0821 = 722.2 Configuramos DIN3 (722.2) como fuente de órdenes para el Set 2

5. Procedemos a configurar las diferentes rampas de aceleración / deceleración:

Parámetro / Valor Comentario
P1120[1] = 5 Aceleración de 5 segundos para In001 (Set 2 activado mediante DIN2)
P1121[1] = 5 Deceleración de 5 segundos para In001 (Set 2 activado mediante DIN2)
P1120[2] = 1 Aceleración de 1 segundos para In002 (Set 3 activado mediante DIN3)
P1121[2] = 1 Deceleración de 1 segundos para In002 (Set 3 activado mediante DIN3)

6. Establecemos por último las frecuencias fijas a las que funcionará el Set 1 y el Set 2:

Parámetro / Valor Comentario
P1001[1] = 30 Hz Frecuencia fija de Set 1 = 30 Hz y posterior RUN
P1001[2] = 40 Hz Frecuencia fija de Set 2 = 40 Hz y posterior RUN

Tenemos ya configurados los sets 1 y 2 de parámetros, activados respectivamente con DIN2 y DIN3, por lo que podemos ya, en función de la DIN activada, hacer funcionar a nuestro motor a consignas de frecuencia distintas, cada una de ellas con sus respectivas rampas de aceleración / deceleración. Es muy importante tener en cuenta que los parámetros CDS pueden cambiarse con el motor funcionando, y su cambio tendrá un efecto inmediato, pero por contra los parámetros DDS (como es nuestro caso) normalmente (con algunas excepciones) sólo pueden ser cambiados con el motor parado. Podemos comprobarlo intentando cambiar de forma directa de DIN1 a DIN2 o DIN3 sin desactivar previamente la entrada de origen.

 

Nov
03

Otro curso más y nueva organización

Ha llegado a tal punto el abandono del blog que esta entrada dista casi un año de la anterior. No tenía tal sensación de dejadez. A pesar de no haber actualizado el mismo y no haber creado nuevos posts en tan largo periodo, la actividad en otros canales ha sido más que movida: nuevos blogs de aula como el de TermOeficiencia que usé el curso pasado en el IES San Roque, nuevos videotutoriales en YouTube y Vimeo y el sinfín de preparación de materiales de cada curso. Y por fin, la finalización de materiales de Formación Profesional a Distancia que ha sido un auténtico calvario.

Después de dos años en el IES San Roque de Badajoz más dedicado a las instalaciones térmicas y de fluidos y a la eficiencia energética, cambio este año al IES Javier García Téllez de Cáceres con el experimento de los Ciclos Formativos Bilingües. No es en absoluto sarcasmo. Es un experimento de verdad. Nos movemos con unas directrices muy laxas con las que cada uno de los 6 centros de Formación Profesional que este año empiezan la experiencia brega como puede. Supongo que como con todo lo que empieza, al cabo del tiempo uno depura las técnicas, los contenidos y las formas. Y se adapta. Pero la inercia al movimiento de una maquinaria formada por profesores y alumnos es grande, y cuesta coger el movimiento. La experiencia de estos dos primeros meses de curso es muy buena, pero la base de partida es baja, y costará subir los peldaños.

De momento, dado que durante este curso y supongo que el que viene me encontraré lejos de mi casa laboral, seguir empleando el portal FPSanRoque como alojamiento de contenidos para módulos profesionales alejados de la automatización y sistemas electrotécnicos se me antoja poco menos que inadecuado. De todas las alternativas que he barajado, la más adecuada por razones de funcionamiento de centro / departamento es seguir empleando esta página como referencia personal y reservar un portal (en este caso elaborado de forma muy simple con Joomla 2.5) para el alojamiento de contenidos para los alumnos. El alojamiento de contenidos no implica necesariamente la centralización de los mismos, pero sí la construcción de un índice de referencia para ellos. El espacio de almacenamiento en servidor es escaso, por lo que muchos de ellos los distribuiré entre mis en exceso explotados Dropbox, 4Shared y por supuesto, Evernote, al que reservo un post especial.

Hemos creado por último un Blog especial para el grupo Bilingüe del CFGS de Sistemas Electrotécnicos y Automatizados que trataremos de emplear colaborativamente como blog de aula, con el tratamiento especial que requiere la característica particular del ciclo formativo. Veremos qué tal resulta.

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Spain
This work by José María Delgado is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Spain.