Está en la página 1de 6

Laboratorio Instrumentación electrónica 1

Preinforme IV – LIR (Level Indicator Recorder)

Indicador Registrador de Nivel.


Jiménez C. Nicolas A., Franco P. Cristian F., Calderón G. Luis D.
Universidad Pontificia Bolivariana , Facultad de Ingeniería Electrónica, Escuela de Ingeniería
nicolas.jimenez.2015@upb.edu.co cristian.franco.2017@upb.edu.co luis.calderon.2013@upb.edu.co

 Working Voltage: DC 3.3V


Abstract—A recorder is an instrument which purpose is to draw a  Working Current: 15mA
graph of a process variables over time. Recorders usually have
indications built into them for showing the instantaneous value of  Working Frequency: 40Hz
the instrument signals simultaneously with the historical values, and  Max Range: 4m
for this reason are usually designated as indicating recorders.  Min Range: 2cm
In this experiment you will have an opportunity to see the  Measuring Angle: 15 degree
instrumentation of a water level indicator and its use in industry.  Trigger Input Signal: 10µS TTL pulse
 Echo Output Signal Input TTL lever signal and the
I. OBJETIVO range in proportion

D iseñar e implementar un circuito LIR (Indicador
Registrador de nivel) que permita visualizar el cambio de
nivel en tiempo real (de 0 a 100%), registrándolo en una
Dimension 45 * 20 * 15mm[2]

pantalla por medio de una gráfica de temperatura vs tiempo (de


0 a -30s con tiempo de muestreo menor a 1 segundo).

II. FUNDAMENTO TERICO


La medición de nivel se define como la determinación de la
posición de la interfaz entre dos medios. Estos son usualmente
fluidos, pero pueden existir sólidos o combinación de ellos. La
interfaz puede existir entre un líquido y un gas, un líquido y su
vapor, dos líquidos, un sólido o sólido diluido y un gas. El
registro de esta medición de nivel resulta vital en la Figura. 1. Diagrama de tiempos del HC-SR04.
instrumentación electrónica ya que muchos procesos
industriales requieren llevar un registro de la medición de nivel
de algún fluido.
Las técnicas utilizadas de medición de nivel están presentes en
todos los campos entre los cuales se tienen: química,
petroquímica, alimentación, cervecería, tratamiento de aguas
blancas, tratamiento de aguas residuales, materiales para la
construcción, rocas y minerales, centrales de energía,
fabricación de papel, astilleros, industrias del automóvil y
aeronáutica. Las razones para medir el nivel de líquidos son
muy diversas, por lo general, una o más de las que se describen Figura. 2. Ultrasonic Ranging Module HC-SR04. Tomado de[3]
a continuación constituyen el motivo para la medición (y Para llevar el registro de las mediciones de nivel se utilizará una
frecuentemente, el control automático) del nivel de líquidos: pantalla TFT ILI9341, y para realizar el control, el
Mantenimiento de condiciones seguras de operación, la microcontrolador ESP8266, el cual se observa en la figura 3.
optimización y control de procesos, el ámbito de la
investigación y el desarrollo entre otros[1]

III. DISEÑO

Para este laboratorio, se realizará un diseño de un registro


indicador de temperatura utilizando un sensor ultrasónico HC-
SR04, el cual tiene las siguientes especificaciones y su
diagrama de tiempos se observa en la figura 1.
Laboratorio Instrumentación electrónica 2
Preinforme IV – LIR (Level Indicator Recorder)
IV. CONCLUSIONES
El indicador registrador de nivel es importante en la industria
para obtener parámetros de nivel de un tanque y así poder
obtener valor mínimos y máximos críticos que puedan afectar
un proceso.

En la práctica se genera un delay y/o adelanto al momento de


graficar los datos con líneas rectas. La causa se debe a que la
pantalla se demora en refrescar cada vez que se cumple el ciclo
dependiendo de la complejidad de lo mostrado. Si no se unen
los puntos de muestra por una recta, el delay y/o adelante se
puede eliminar, pero el tamaño de los pixeles es muy pequeño
para observar. Para esto se corrigió usando círculos rellenos.

Con una función de recta se puede hacer la transformación de


Figura. 3. ESP8266, distribución de pines. Tomado de[4] distancia a porcentaje de nivel. En este caso la mayor distancia
medida definida para el vacío es 0% y la menor distancia
El circuito dispondrá de una entrada de voltaje de 0 a 3.3 Vdc determinada para el llenado es el 100%.
que alimenta al sensor HC-SR04, el cual tiene un rango de
medición entre 2 cm y 4m; este sensor, a su vez estará V. BIBLIOGRAFÍA
conectado a una placa ESP8266, que se encargará de controlar
el sensor y recibir el dato de distancia; a su vez se encargará de
[1] O. O. C. S., “Medición de nivel de líquidos,” pp. 129–
controlar la pantalla TFT con el fin de mostrar el registro de 130.
porcentaje de nivel a medida que avanza el tiempo. Este circuito [2] Indoware, “Ultrasonic Ranging Module HC - SR04,”
se observa en la figura 4. Datasheet, pp. 1–4, 2013.
[3] diapositivas de clase Rueda Claudia, “Jostick.”
[4] diapositivas de clase Rueda Claudia, “Modulo WIFI
Nodemcu Esp8266,” 2018.

Figura. 4. Circuito registrador indicador de nivel.

La programación del ESP8266 es la misma que la de Arduino.


Se comenzará inicializando y visualizando de los datos en la
pantalla, y en un ciclo de lectura y almacenamiento de los datos
leídos por el sensor HC-SR04, el cual entrega valores
analógicos al microcontrolador y deben convertirse a datos
digitales. Para poder convertir el valor analógico en digital se
realiza mediante la siguiente ecuación.
𝑡𝑖𝑒𝑚𝑝𝑜 ∗ 𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑑𝑒𝑙 𝑠𝑜𝑛𝑖𝑑𝑜
𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 =
2
El anexo del código de programación estará al final del
documento (Anexo 1).
Se obtendrá el 100% con un valor de medida de 6.5cm y el 0%
con una medida superior a 16.5cm.
Laboratorio Instrumentación electrónica 3
Preinforme IV – LIR (Level Indicator Recorder)
Anexo 1. Código de programación LIR
//==========================================================
//Titulo:LIR (Indicador Registrador de Nivel)
//Programadores: Calderón L., Franco C., Jiménez N.
//Asignatura:Instrumentación Electrónica
//==========================================================

#include <ESP8266WiFi.h> //inclusión libreria controlador ESP8266


#include "SPI.h" //inclusión libreria spi
#include "Adafruit_GFX.h" //inclusión libreria graficos adafruit
#include "Adafruit_ILI9341.h" //inclusión libreria ili9341

#define TFT_RST 2 //Definición del PIN digital del arduino uno para RST (RESET)
#define TFT_DC 4 //Definición del PIN digital del arduino uno para RS (COMMAND, RS=0, O RS=1)
#define TFT_CS 15 //Definición del PIN digital del arduino uno para CS (CHIP SELECTION PIN)
#define TFT_MOSI 13 //Definición del PIN digital del arduino uno para SDI (MOSI, MASTER OUTPUT SLAVE IN)
#define TFT_CLK 14 //Definición del PIN digital del arduino uno para CLK (RELOJ)
#define TFT_MISO 12 //Definición pin miso

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

#define ECO 0
#define Triger 5

int d;

float distancia; //Definición del PIN analógico de entrada de la señal del LM35 (Sensor de temperatura)
int tiempo=0;
int i; //Variable auxiliar para iteración del bucle for
int sentido=4; //Variable que define el sentido de la pantalla (0=Vertical)
int pos[31]; //Inicialización del vector posición para dibujar el porcentajte de nivel en el eje Y
int disi=0; //Variable para almacenar la posición temporalmente
int porcentaje; //variable para almacenar la variable porcentaje temporalmente

void setup() {
tft.begin(); //Inicialización de la pantalla TFT
pinMode(Triger,OUTPUT); //definición del pin de disparo del sensor
pinMode(ECO,INPUT); //definición del pin que recibe la señal cuando regresó la onda
Serial.begin(115200); //Inicialización del puerto serial para comunicación entre el arduino y el computador
tft.fillScreen(ILI9341_BLACK); //se inicia la pantalla en color negro
Laboratorio Instrumentación electrónica 4
Preinforme IV – LIR (Level Indicator Recorder)
}

void loop() {
tiempo=0;
for(i=0;i<31;i++){ //Primer for para incializar todo el vector en la posición 0%
pos[i]=259;
}
tft.setRotation(sentido); //Definición del sentido de la pantalla

tft.setCursor(80,10); tft.setTextColor(ILI9341_RED); tft.setTextSize(3);


tft.print("Nivel");
tft.setCursor(120,35); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(2);
tft.print("%");

tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
for(i=0;i<11;i++){ //for que permite escribir los valores de porcentaje en el eje y cada 10%
tft.setCursor(30,252-(20*i));
tft.print(i*10);
tft.print("%");
}
for(i=0;i<7;i++){ //for que permite escribir el tiempo cada 5 egundos
tft.setCursor(201-(i*25),263);
tft.print(i*-5);
tft.print("s");
}

tft.drawLine(49,60,49,280,ILI9341_RED); //Dibujo de linea recta para el eje y (TEMPERATURA),


//(POS_X_I,POS_Y_I,POS_X_F,POS_Y_F,COLOR_LINEA)
tft.drawLine(30,261,200,261,ILI9341_BLUE); //Dibujo de linea recta para el eje X (TIEMPO),
//(POS_X_I,POS_Y_I,POS_X_F,POS_Y_F,COLOR_LINEA)

for(i=0;i<10;i++){ //Dibujo de pixeles guía para lectura de nivel


tft.drawPixel(49,(241-(20*i)),ILI9341_WHITE);
}

for (i=0;i<7;i++){ //Dibujo de pixeles guía para lectura de tiempo


tft.drawPixel((51+(25*i)),261,ILI9341_WHITE);
}
Laboratorio Instrumentación electrónica 5
Preinforme IV – LIR (Level Indicator Recorder)
while (1){ //Se define un ciclo while infinito para obtener los datos
//y gráficarlos cada un segundo sin necesidad
//de volver a dibujar los ejes y/o titulos

digitalWrite(Triger,HIGH); //se envia la información de disparo en alto


delayMicroseconds(15); //se espera 15 us para realizar el disparo en bajo que
digitalWrite(Triger,LOW); //determina que el sensor envíe el pulso
delayMicroseconds(15); //espera 15us para leer el tiempo que demoro en ir y regresar el pulso
tiempo=pulseIn(ECO,HIGH); //lectura de tiempo del pulso
distancia=(tiempo*0.0343)/2; //conversión de tiempo en distancia
disi=-2*porcentaje+259; //conversión de porcentaje en posición
tft.setCursor(83,35); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(2);
tft.print(porcentaje); //graficación en pantalla de porcentaje

for (i=0; i<31; i++){ //Segundo for para borrar los datos anteriores
tft.drawPixel((201-5*i),(pos[i]),ILI9341_BLACK); //Como el fondo es negro, se deben borrar los datos anteriores
//pintandolos en la misma posición de negro
d=(i+1)*5;
tft.fillCircle((201-5*i),(pos[i]),1,ILI9341_BLACK);
//tft.drawLine((201-5*i),(pos[i]),(201-d),(pos[i+1]),ILI9341_BLACK);
}

for (i=30; i>0; i--){ //El objetivo de este tecer for es iterar para correr el regsitro
//actual en un posición (Valor en T=0 pasa a ser el de T=1 y así sucesivamente)
int posa=pos[i-1]; //la iteración se realiza desde el penultimo valor hacia adelante
pos[i]=posa; //Se asigna el valor que en el tiempo está más reciente, a un instante de tiempo después
}

pos[0]=disi; //Dependiendo el valor tomado, se asigna la posición en pixeles para graficarlo cuando T=0.

for (i=0;i<31;i++){ //El último for permite dibujar el valor del pixel que representa la temperatura.
//Dichos valores están en un vector que almacena la posición en y.
d=(i+1)*5;
tft.drawPixel((201-5*i),(pos[i]),ILI9341_MAGENTA);
tft.fillCircle((201-5*i),(pos[i]),1,ILI9341_MAGENTA); //gráfica un circulo en en la posición determinado de radio 1 pixel.
//tft.drawLine((201-5*i),(pos[i]),(201-d),(pos[i+1]),ILI9341_MAGENTA);
}
Laboratorio Instrumentación electrónica 6
Preinforme IV – LIR (Level Indicator Recorder)
if(distancia>=16.5)distancia=16.5; //limita el valor superior de distancia
if(distancia<=6.5)distancia=6.5; //limita el valor inferior de distancia
porcentaje=(-10*distancia)+165; // conversión de distancia en porcentaje
if (porcentaje<=0)porcentaje=0; //limitación del valor de porcentaje inferior
if (porcentaje>=100)porcentaje=100; //limitación del valor de porcentaje superior
delay(1000); //retardo que determina el tiempo de muestreo
tft.fillRect(83, 35, 34, 15, ILI9341_BLACK); //rectangulo que refresca el valor de porcentaje mostrado

}
}

También podría gustarte