Está en la página 1de 7

CONTROL PROPORCIONAL DE NIVEL DE

AGUA CON LABVIEW Y ARDUINO

Proyecto No. 1
Control de Procesos

 Miguel Alejandro Ponce de Leon Meza


 Edwin Trevizo Gonzáles
 José Enrique Saláis Sígala
 Jesús Miguel Aguayo Barrera

Instituto Tecnológico de Ciudad Juárez


Introducción

La instrumentación virtual es el uso de software personalizable y hardware de medición


modular para crear sistemas de medición definidos por el usuario, llamados instrumentos
virtuales.
Los sistemas de instrumentación de hardware tradicionales se componen de componentes
de hardware predefinidos, como multímetros digitales y osciloscopios que son
completamente específicos de su función de estímulo, análisis o medida. Debido a su
función codificada, estos sistemas tienen una versatilidad más limitada que los sistemas de
instrumentación virtual. La principal diferencia entre la instrumentación de hardware y la
instrumentación virtual es que el software se utiliza para reemplazar una gran cantidad de
hardware. El software permite que hardware complejo y costoso sea reemplazado por
hardware de computadora ya adquirido; por ejemplo. Un convertidor analógico-digital
puede actuar como un complemento de hardware de un osciloscopio virtual, un
potenciostato permite la adquisición y análisis de respuesta de frecuencia en espectroscopía
con instrumentación virtual.
El concepto de instrumento sintético es un subconjunto del concepto de instrumento virtual.
Un instrumento sintético es un tipo de instrumento virtual que está puramente definido por
software. Un instrumento sintético realiza una función específica de síntesis, análisis o
medición en hardware de medición completamente genérico. Los instrumentos virtuales
aún pueden tener hardware específico de medición y tienden a enfatizar los enfoques de
hardware modular que facilitan esta especificidad. El hardware que soporta los
instrumentos sintéticos es, por definición, no específico para la medición, ni necesariamente
(o por lo general) modular.
La instrumentación y control de procesos es una especialidad de la ingeniería que combina,
a su vez, distintas ramas, entre las que destacan: Sistemas de control, automatización,
electrónica e informática. Su principal aplicación y propósito es el análisis, diseño y
automatización de procesos de manufactura de la mayor parte de las áreas industriales.
LabVIEW (Laboratory Virtual Instrument Engineering Workbench) es un ambiente de
desarrollo basado en la programación gráfica. Utiliza terminología, iconos, e ideas
familiares a técnicos, científicos e ingenieros, y se basa en símbolos gráficos en lugar de
lenguaje textual para describir acciones de programación. LabVIEW está integrado
completamente en las comunicaciones con el hardware tal como GPIB, RS-232 Y DAQ.
Además cuenta con librerías para el manejo de redes TCP/IP y ActiveX.
Por su parte Arduino es una plataforma de hardware libre, basada en una placa con un
microcontrolador y un entorno de desarrollo (software), diseñada para facilitar el uso de la
electrónica en proyectos multidisciplinares. El hardware de Arduino consiste en una placa
con un microcontrolador generalmente Atmel AVR con puertos de comunicación y puertos
de entrada/salida.
Objetivo de la práctica
Se busca establecer un interfaz con ayuda del software de desarrollo LabVIEW mencionado
en la introducción, donde el usuario pueda observar el estado en tiempo real del nivel de un
depósito de agua, tanto gráfico como numérico, y le permita establecer un nivel deseado o
setpoint y una constante Kp de proporcionalidad para el llenado o vaciado de dicho
depósito. Por su parte, Arduino funcionara como controlador, será quien envié la lectura del
nivel de agua a la interfaz y procesara los datos recibidos por el usuario para arrojar una
salida PWM a las bombas de llenado y vaciado. Arduino calculara el error a partir del
setpoint para enviar una salida proporcional a las bombas, de esta manera entre más se
acerque el nivel de agua real al setpoint, la velocidad de estas ira disminuyendo. El
porcentaje mínimo que revivirá será de 30% con el fin de que las bombas realicen
correctamente su función, y el mayor será de 100%. Como valores iniciales se tomara un
setpoint de 7 cm, y un Kp unitario.

Materiales
 Computadora con LabVIEW y Arduino instalados.
 Placa Arduino UNO.
 Dos bombas de agua sumergibles de 9V.
 Protoboard.
 Cables de conexión.
 Dos transistores TIP31C.
 Manguera automotriz.
 Sensor Ultrasonico de Arduino.
 Fuente externa de 9V.
 Depósito de agua de 14 cm de profundidad.

Programación en LabVIEW.
Como es costumbre al programar en LabVIEW, cuenta con una estructura WhileLoop que
permite que nuestro programa este corriendo constantemente, únicamente fuera de esta
estructura se dejó la configuración del puerto serial y los valores iniciales del setpoint y Kp.
Una vez adentro se utilizó una estructura FlatSecuence para mantener un orden en las

acciones que la interfaz realiza. En la primera imagen se puede observar las primeras dos
secuencias, muy parecidas entre sí. Estas se encargan de enviar los valores setpoint y kp
únicamente al accionar los botones correspondientes a cada uno, esto con el fin de que
Arduino reciba solo un valor a la vez cuando sea necesario. Para el Kp se realizó un
pequeño ajuste el cual consiste en tomar el valor introducido por el usuario y multiplicarlo
por 100 antes de enviarlo al puerto serial, esto con el fin de que sea posible para Arduino
diferenciar uno del otro.
Por último, simplemente se recibe los datos enviados por Arduino que indican el nivel de
agua real del depósito. Como se mencionó anteriormente, LabVIEW únicamente funciona
como interfaz de usuario y no realiza ningún procesamiento.
A continuación se presenta la interfaz con la que interactúa el usuario directamente.

Programación en Arduino.

double num=0; pinMode(11,OUTPUT);


double setpoint=7; }
double kp=1;
double Error, Control, por1, por2, out1, void loop() {
out2; digitalWrite(tp, LOW);
char inChar; delayMicroseconds(2);
String string=""; digitalWrite(tp,HIGH);
int tp=2; delayMicroseconds(10);
int ep=3; digitalWrite(tp,LOW);
int T; T=(pulseIn(ep, HIGH)/2);
float D, N; D=float(T * 0.0343);
N=14-D;
void setup() { if (Serial.available()){
Serial.begin(9600);
pinMode(tp,OUTPUT); inChar = Serial.read();
pinMode(ep,INPUT);
if ( inChar != ',') {
pinMode(10,OUTPUT); string+=inChar;
} }
else { out1=255*por1;
num= string.toInt(); analogWrite(11,out1);
string=""; analogWrite(10,LOW);
} }
if (num<100){ if(Control>0){
setpoint=num; por2=Control;
} if (por2<0.30){
else { por2=0.30;
kp=num/100; }
} if (por2>1){
} por2=1;
Error=(setpoint-N)/14; }
Control=Error*kp; out2=255*por2;
analogWrite(10,out2);
if(Control<0){ analogWrite(11,LOW);
por1=Control*(-1); }
if (por1<0.30){ Serial.println(N);
por1=0.30; delay(10);
} }
if (por1>1){
por1=1;
El presentado anteriormente es el código que se le cargo a la placa Arduino. Después de la
declaración de variable y los puertos de entrada y salida, lo primero es accionar los pulsos
al sensor ultrasónico de Arduino para tomar la lectura del nivel de agua, la señal recibida se
procesa y para transformar la señal a centímetros. Una vez que se tiene el nivel actual se lee
el dato que está recibiendo por parte de LabVIEW si es que este está transmitiendo uno, lo
evalúa según su valor y establece si corresponde a setpoint o a Kp. Con estos tres valores y
conociendo el valor total de profundidad alcanzado por el depósito, se calcula el error y el
porcentaje de salida que se tendrá en cada bomba. Si el error es positivo, se accionara una
bomba y si es negativo, la otra.

Evidencia.
Se presentan las imágenes capturadas durante la evaluación del proyecto.
Conclusión y observaciones.
Durante la presentación del proyecto se presentó un error, al hacer un cambio de setpoint
que representaba una distancia muy grande al punto actual accionando gran potencia en un
instante, la fuente externa afectaba a placa de Arduino el cual realizaba un paro de
emergencia. Dicho problema se solucionó colocando resistencias a las salidas del Arduino.
El proyecto cumplió con su función exitosamente.

También podría gustarte