Laboratório N° 1. Sistema de medición de Nivel, Curva caracterı́sitica, Adquisición y conversión ADC con Arduino (ADC: 0-5V), y Graficador Matlab (GUI). 1st Lousiana Rojas Babativa 2nd Francisco Josse Rojas Rojas 3nd Carlos Andrés Galán Pérez Ingenierı́a Electrónica Universidad Nacional de Colombia Bogotá, Colombia lorojas@unal.edu.co Ingenierı́a Electrónica Universidad Nacional de Colombia Bogotá, Colombia frrojasr@unal.edu.co Ingenierı́a Electrónica Universidad Nacional de Colombia Bogotá, Colombia cgalanp@unal.edu.co Abstract—This paper aims to show the characterization of a water level plant, whose height variable will be translated to voltage by varying a potentiometer. It will work in the linear zone, to achieve a better characterization. The characteristic curve will be made using the Arduino IDE, taking a population of 10 voltage data per water level. Finally we will calibrate the plant using the MATLAB GUI, using the 5cm reference as the zero setting and with a range of 20 cm, so our maximum level will correspond to 25cm. Index Terms—IDE, GUI, Arduino, adjustment, calibration, reference, linearity. I. I NTRODUCCI ÓN Este documento pretende mostrar la construcción de un sistema de medición de nivel de agua. Este será caracterizado primeramente mediante la obtención de una curva que relaciona altura y voltaje, mediante la lectura de la caı́da de tensión de un potenciómetro de 10KΩ alimentado en los extremos con 5v. Se trabajará en la zona media del potenciómetro, para lograr una mejor caracterı́stica lineal. Posteriormente se llevará a cabo la calibración de nivel, con 5cm como la altura de referencia o ajuste a cero. La variación será de 20cm, por lo que nuestra altura máxima será de 25cm. Se mostrarán los resultados en el IDE de Arduino y en el GUI de Matlab. Para el ajuste de la lectura con IDE de Arduino, realizaremos un divisor de tensión con 10 resistencias de 10KΩ mediante una muestra estadı́sitica de 10 datos por medición. Lo mismo se realizará con el GUI de Matlab pero graficamente. Una vez hecho esto, se realizará la caracterización de la planta de nivel, traduciendo la variable de altura, en variable de tensión, seleccionando la zona con mayor linealidad. Una vez realizado esto, se calibrará la planta mediante el GUI de Matlab, mediante una variable denominada diferencia, la cuál medirá los valores de salida de tensión del puente Wheatstone. Figure 1. Esquema de la planta de medición de Nivel [1] La entrada del nivel de referencia mostrará un nivel de tensión en el GUI, al igual que la salida máxima. Ajustando estos valores, a los valores deseados de la variable de altura, obtenemos nuestra curva de calibración, para que de esta manera podamos mostrar la altura correspondiente en el tanque, en unidades de centı́metros correspondientemente, en función del tiempo en segundos. II. M ATERIALES & M ETODOLOG ÍA A. Materiales Los materiales empleados para esta practica fueron: • • • • • • • • • • Protoboard. Tanque diseñado por nosotros. Potenciómetro y Puente de Wheastone. Flotador. Multimetro true RMS. Fuente de alimentación de 5Vdc. Cables Banana-caimán. 10 resistencias de 1KΩ. Computador portátil. Arduino. B. Métodologı́a 1) Curva caracterı́stica: Se empezará por graficar la curva caracterı́sitica entre el voltaje en voltios mostrado por el IDE de Arduino, y la altura en cm medida por una regla colocada verticalmente, para medir el nivel del agua indicado a su vez por un flotador de icopor. Para esto se escoge la zona con mayor linealidad del potenciómetro, y después de tratar con una población de 20 muestras en distintos intervalos (Una por cada cm de variación) , escogemos la que menos alinealidad posee o la que mayormente se parece a la recta de calibración entre extremos. 2) Prueba década con convertidor ADC através del monitor serial IDE de Arduino: Por medio de una configuración de resistencias en serie de valor 1KΩ, conformando una resistencia total de 10KΩ y alimetada por una fuente de 5V , Realizamos la lectura entre cada nodo de extremo a extremo por medio del conversor ADC que posee Arduino, observando su valor mediante el monitor serial IDE. Para esto tomamos una población de 10 muestras por medida, para un mejor tratamiento estadı́stico de la incertidumbre o dispersión de datos. III. R ESULTADOS 1) Curva caracterı́stica: Antes de empezar con la curva caracterı́stica, se tomó la decisión de caracterizar el potenciómetro para mejores resultados Se realizaron una serie de 10 mediciones cada 10 grados (esto con ayuda del potenciómetro). Luego de promediar y comparar cada grupo de 4 resistencias, se obtiene una serie de resultados donde el potenciómetro era más lineal en esa zona. Ángulo[∠] 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 Rpromedio [kΩ] Ángulo[∠] 511 150 511 160 511 170 472 180 437 190 400 200 375 210 345 220 318 230 296, 1 240 274 250 235, 5 260 215, 8 270 235, 6 280 198, 4 290 Table I Rpromedio [kΩ] 181 165 150 137 123 190 96 83 71 59, 6 47, 1 36 15 10, 1 10, 1 TABLA DE C ARACTERIZACI ÓN DEL POTENCI ÓMETRO , A NGULO VS R ESISTENCIA 3) Prueba de adquisición ADC de la salida Vout de la planta de nivel: Mediante el método anterior, registramos la variable de altura en unidades de cm, utilizando el monitor serial IDE de Arduino. de esta forma calibramos el nivel del referencia que corresponde a 5cm variando hasta 25cm; obteniendo un alcance de 20 cm. 4) Prueba década con convertidor ADC através del graficador de Matlab GUI: De la misma forma anterior, empleamos la década de resistencias puestas en serie, midiendo nodo por nodo de extremo a extremo, obteniendo esta vez una población de 5 muestra por medición. Como el GUI de Matlab muestrea en función del tiempo, obtendremos una escalera descendente de 5V hasta los 0V . 5) Prueba de adqusición Vout convertido a Altura en función del tiempo a través del GUI de Matlab: Al tomar la diferencia entre los dos terminales de salida del puente de Wheatstone y variar la altura de nuestra planta de nivel de agua, inicialmente se grafica el voltaje vs el tiempo, por lo que tomando el voltaje de referencia mı́nimo y máximo de voltaje, restamos el mı́nimo de voltaje a la variable diferencia; finalmente multiplicamos por un factor que nos permite amplificar la diferencia máxima de voltaje, es decir V.max − Vmin a nuestro alcance de operación que corresponde a una variación de nivel de 20cm. Figure 2. Caracterización 170° y 200° Figure 3. Caracterización 180° y 210° Figure 4. Caracterización 190° y 200° Altura[cm] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Rpromedio [kΩ] 26, 91 24, 75 22, 09 20, 17 17, 97 16, 28 14, 71 13, 4 12, 10 11, 01 9, 78 8, 66 7, 51 6, 57 5, 52 4, 69 3, 74 2, 81 2, 00 1, 2 0, 59 Table II V oltaje[V ] 1, 315 1, 210 1, 080 0, 986 0, 878 0, 796 0, 719 0, 655 0, 591 0, 538 0, 478 0, 423 0, 367 0, 321 0, 270 0, 229 0, 183 0, 137 0, 098 0, 059 0, 029 TABLA DE VOLTAJE DIFERENCIAL DE SALIDA VS ALTURA Figure 5. Caracterización 200° y 210° A partir de esto, se eligió el rango adecuado para manejar el potenciómetro. Para la curva caracterı́stica con ayuda del arduino se realizó la medición del voltaje de salida del puente Wheatstone donde se tomó un total de 10 mediciones cada cm entre el Lmin=4cm y el Lmax=24 cm, para finalmente tener 20 juegos de 10 mediciones cada uno. Se realizó el promedio de cada una, y se calculó el voltaje de cada uno, para poder tener una relación entre el Voltaje diferencial de salida (Vout) Vs Altura-Nivel(H(mm)). Figure 6. Curva caracterı́stica 2) Prueba década convertidor ADC monitor IDE de Arduino : Usando 10 resistencias de 1KΩ se creó una d écada alimentada por 5V del arduino; de esta forma de procedió a realizar mediciones de voltaje con el mismo. Para ello se usó el código de medición de voltaje, y se realizaron mediciones comparando con el multı́metro como se ve en las figuras 2 y 3, consignando los resultados a medida que aumentaba la resistencia total sobre la que se aplican los 5V en la siguiente tabla: RL [KΩ] 1 2 3 4 5 6 7 8 9 10 M ultı́metro [V] 0.491 0.989 1.479 1.962 2.445 2.864 3.384 3.975 4.487 5.000 Arduino[V] 0.49 0.99 1.49 1.97 2.46 2.88 3.4 4.00 4.51 5.00 TABLA I. Valores de voltaje para cada suma de resistencias con Multı́metro y Arduino Figure 8. Medición multı́metro vs medición Arduino Figure 7. Medición de voltaje sobre cada suma de resistencias Comparando la tabla, se puede ver que el Arduino tiene buena precisión y exactitud con respecto a las medidas del multı́metro, principalmente en voltajes mayores a 1V , con incertidumbre de+ − 10mV , por lo que se reduce la exactitud en valores de voltaje bajos. 3) Prueba de adquisición ADC de la salida Vout de la planta de nivel : De la misma manera realizamos la medición de la salida de voltaje que registra el Arduino en el monitor IDE, mostrando una gran linealidad entre los valores intermedios y una variación de 10 puntos por centı́metro, tal y como se muestra a continuación para una variación de 20cm: 5) Prueba de adquisición Vout convertido a Altura (cm) en función del tiempo : Se registró un nivel mı́nimo de voltaje para el nivel de referencia como se ve a continuación: Figure 11. Voltaje de salida para el nivel de referencia de 5cm correspondiente a Vout = 0.493646V Posteriormente realizamos la misma dedición para el nivel máximo, correspondiente a 25cm, tal y como se muestra a continuación: Figure 9. Valor muestreado por el monitor IDE de Arduino al variar la entrada de nivel de altura del tanque de 25cm a 5cm Como se puede ver, se muestreó 10 veces para mayor certeza. 4) Prueba década con conversor ADC mediante graficador GUI de Matlab : Al igual que se probó la década con el monitor IDE de Arduino, esta vez graficamos 5 muestras por cada medición de forma descendente, de tal forma que observaremos una escalera que va desde los 5V hasta los 0V , como se ve a continuación: Figure 10. Medición descendente de la década de resistencias de 1KΩ en función del tiempo en segundos. Figure 12. Voltaje de salida para el nivel de referencia de 25cm correspondiente a Vout = 0.948192V De esta forma obtenemos una diferencia de ∆Vout = 0.454545V de tal forma que debemos multiplicar por un factor de 44, para registrar una variación de altura de ∆Hin = 20cm. Para la calibración se resta inicialmente el voltaje de salida mı́nimo, tal y como se muestra en el siguiente código de Matlab: a=arduino(); port=’A1’; portB=’A0’; height=[]; muestras=10000; cont=1; figure() title(’Divisor de tensión década de 1K’) hold on; xlabel(’Tiempo (seg)’) ylabel(’Voltaje (v)’) while cont¡=muestras lectura=readVoltage(a,port); lecturaB=readVoltage(a,portB); diferencia=lecturaB-lectura; height(cont)=44*(diferencia-0.493646); stem(height) drawnow; pause(2) cont=cont+1; end De esta manera pudimos caracterizar la carga del tanque a un flujo constante: Figure 14. Diseño circuito IV. A N ÁLISIS DE RESULTADOS A. Curva caracterı́stica Después de muestrar varias curvas en diferentes sectores del potenciómetro, se escogió la que mayor linealida mostraba, y se concluye que en la zona central de variación de ángulo del potenciómetro, este se comporta más lineal que en una zona cercana a los extremos del potenciómetro: Figure 13. Carga del tanque a flujo constante desde el nivel de referencia hasta su nivel máximo de altura. 6) Diseño de amplificador: De acuerdo a todas las mediciones obtenidas, se realizó un circuito de acondicionamiento de señal para el sistema de medición de nivel, basado en un amplificador de instrumentación y amplificador operacional. Se diseño un circuito el cual necesitaba de un restador que nos restara 1.315, seguido de un multiplicador donde su ganancia tiene que ser aprox de 3,89.Estos datos sa calcularon de acuerdo a la ecuación de recta de la curva. Restador para la calibración posterior de la planta: Figure 15. Distintas zonas del potenciómetro, Voltaje de salida vs ángulo del potenciómetro. B. Prueba década conversor ADC con monitor IDE de Arduino Se puede ver que las cifras significativas son mayores en el multı́metro que en el monitor IDE de Arduino, sin embargo, tanto el multı́meto como el Arduino poseen gran exactitud al momento de comparar las mediciones, por lo que podemos confiar en los resultados del monitor IDE de Arduino. C. Prueba de adquisición ADC de salida Vout de la planta de nivel Se puede observar que la manera más óptima de trabajar cualquier sensor o transductor es en su zona lineal, o con menor alinealidad posible. De esta forma se eligió la recta con R2 más próximo a 1, de tal forma que la curva entre voltaje nivel, se acercara más a la recta de calibración, tal y como se muestra a continuación: V. C ONCLUSIONES • • • Figure 16. Gráfica con ecuación sacada de Excel para obtener el voltaje vs la altura del tanque. • Teniendo entonces la expresión: y = −0.0615 V x + 1.1564V m (1) con un R2 = 0.9687. D. Prueba década con convertidor ADC de interfaz gráfica GUI de Arduino A comparación del monitor IDE de Arduino, el GUI de Matlab nos proporciona un muestreo dinámico en función del tiempo, lo cuál es más fácil de interpretar visualmente con una correcta escala de ejes coorden. • Podemos observar que es bueno escoger la zona de operación del sensor de trabajo, de tal forma que la caracterı́zación sea lo más lineal posible. El IDE del Arduino sirve bastante por su exactitud para el propósito de la calibración y la toma de datos o población de muestras por cada medición. La interfaz gráfica de GUI de Matlab para Arduino es dinámica, ya que nos permite muestrear en el tiempo, y nos muestra caracterı́siticas como las perturbaciones, lo que puede caracterizar mejor el sistema o la planta a medir. Es útil considerar los posible daños que pude tener el sensor, en nuestro caso fue el pegamento que se usó para adherir el potenciómetro a la pared del tanque. Este alteró la resistencia del potenciómetro debido a que es un ácido, proporcionando alteraciones en las mediciones de voltaje con el Arduino. Se esperó a que el efecto del ácido dejara de funcionar para la correcta toma de datos. Una parte importante del buen funcionamiento de las pruebas, es la buena manipulación de los elementos fı́sicos del proyecto a utilizar, por lo tanto para lograr más eficiencia del potenciómetro, fue necesario una caracterı́stica del mismo, teniendo en cuenta varios aspectos como sensibilidad y exactitud. R EFERENCES E. Prueba de adquisición Vout convertido a altura en función del tiempo a través del GUI de Matlab Como se mencionó anteriormente con la década leida con la interfaz que ofrece Matlab para Arduino, es bastante útil, para incluso observar las oscilaciones que presenta el agua, cuando esta se perturba, también es útil si se desea medir el flujo de agua que está saliendo por la manguera de suministro, e incluso para calcular otras variable fı́sicas, como la altura del tanque que está suministrando, por medio de la ley de Torricelli, debido a la facilidad de lectura del tiempo. Figure 17. Gráfica de Altura vs. Tiempo, donde se puede observar que la derivada nos proporciona una cantidad para medir el flujo de suministro. El sobre nivel es debido a la perturbación del agua, lo cuál nos indica que la interfaz de Matlab GUI para Arduino es bastante útil para aplicaciones dinámicas. [1] Manuales y Hojas de Datos de los equipos de laboratorio. [2] Ruiz Gutiérrez, J., Arduino: Manual de Programación. [online] Arduinobot.pbworks.com. Disponible en: https://arduinobot.pbworks.com/f/Manual+Programacion+Arduino.pdf [3] Aprendiendo Arduino, ”Puertos Analogicos Arduino Avanzado”, [online] ´ Disponible: https://aprendiendoarduino.wordpress.com/tag/adc/ [4] COOPER–HELFRICK, Instrumentación electrónica moderna y técnicas de medición. Prentice Hall Hispanoamérica S.A. México : Prentice-Hall Hispanoamericana, 1991. [5] COUGHLIN-DISCROLL, Amplificadores Operacionales y Circuitos integrados lineales. Prentice hall-pearson, 5th ed. México : Pearson Hall, 1999.