You are on page 1of 19

Medidor de Velocidad

Vertical aplicado a
Viscosmetro
septiembre 17, 2014 Antony Garca Gonzlez Proyectos con Arduino

El medidor de velocidad vertical, un proyecto basado


en un Arduino Nano para medir la velocidad de
desplazamiento de un baln magntico en un tubo de
acrlico, con el propsito de determinar la viscosidad
del fluido en el tubo.

El siguiente proyecto nace de una idea del grupo de


estudiantes
de
tercer
ao
de
Ingeniera
Electromecnica, de la Universidad Tecnolgica de
Panam, sede Azuero.
Como estudiante y empleado en la Universidad, estoy
directamente involucrado en proyectos en los
diferentes niveles de ingeniera en la Facultad de
Elctrica de la UTP en Azuero.
Para el proyecto de fin de semestre de Mecnica de
Fluidos I, los muchachos decidieron que queran
construir un viscosmetro. Este dispositivo permite
medir la viscosidad en fluidos Newtonianos, es decir,
con viscosidad constante en todo su volumen.

El procedimiento utilizado para mediciones de


viscosidad consiste en dejar caer un baln sobre un
fluido y medir el tiempo que tarda en atravesarlo.
Dividiendo la distancia entre el tiempo transcurrido se
obtiene una aproximacin de la velocidad del baln.
Se decidi automatizar el proceso de recoleccin de
datos de velocidad, al establecer una distancia fija y
medir el tiempo que toma el baln en recorrer dicha
distancia. Para detectar el movimiento del baln entre
un punto y otro se decidi utilizar sensores de campo
magntico, especficamente el modelo A1302
(datasheet).
Este sensor fue escogido para este diseo debido a
que proporciona una salida analgica, es decir,
entrega un voltaje que vara en funcin del campo
magntico. Segn pruebas, el campo magntico
mayor se detecta cuando el baln se encuentra
perpendicular a la superficie plana del encapsulado
del sensor. El baln, como era de esperarse, debe
estar magnetizado.
El proyecto no ha sido diseado para el clculo de la
viscosidad, sino para medir el tiempo que el baln
tarda en desplazarse de un punto a otro, de una
forma ms precisa de lo que se lograra con un
cronmetro y la observacin de los alumnos.
A continuacin
propuesto.

algunas

imgenes

del

diseo

La sustancia en el interior del tubo de acrlico es gel


para el cabello diluida en agua. El tubo est montado
sobre una base de madera. Los sensores han sido
colocados a una distancia de 30 cm entre s.
Se utiliz 4 sensores, un par por cada punto de
control, con el objetivo de que se calcule el promedio
de los 2 sensores para detectar el paso del baln.

Los sensores estn conectados a una placa que


incluye un Arduino Nano y una pantalla LCD, con un
botn para desplazarse a travs de los distintos
mens.

El dispositivo funciona de forma independiente de una


computadora, por lo que se puede utilizar con slo
alimentar con 5 voltios.
A continuacin se muestra el diagrama de conexiones
de este proyecto:

La lista de materiales es la siguiente:


o

1x Arduino Nano

1x Pantalla LCD

1x Trimmer (Potencimetro)

4x Sensores de campo magntico A1302

1x Push button

1x Resistencia > 10K

1x Placa perforada

El cdigo que le da funcionalidad a este proyecto es el


siguiente:

/*

Prototipo de Viscosmetro basado en medidor de


Velocidad Vertical - By PanamaHitek.com

Proyecto llevado a cabo por Antony Garca G. y el


grupo de Ingeniera Electromecnica III
Universidad Tecnolgica de Panam, sede Azuero. Ao
2014.

Para mayor informacin sobre este proyecto, visita


http://panamahitek.com

*/

#include <LiquidCrystal.h>

//Variables para el campo magntico


int Field1 = 0;
int Field2 = 0;

int Field3 = 0;
int Field4 = 0;

//Etapas de deteccin
int Stage1 = 0;
int Stage2 = 0;

//Valores mximos
int Max1 = 0;
int Max2 = 0;

//Tiempo de cada etapa


int Tiempo1 = 0;
int Tiempo2 = 0;

//Tiempo total entre un punto y otro


int Tiempo = 0;

//Tiempo en segundos
double TiempoReal = 0;

//Distancia entre dos puntos


double distancia = 0;

//Velocidad del baln


double velocidad = 0;

//Variables para la impresin en pantalla


int PrintTime1 = 0;
int PrintTime2 = 0;

//Detector de botn
int Push = 0;

//Variable de inicio de ejecucin


boolean start = false;

LiquidCrystal lcd(4, 2, 6, 7, 8, 9);

void setup() {
//30 CM de distancia
distancia = 0.3;

lcd.begin(16, 2);

//El pin 13 alimenta la luz de la pantalla


pinMode(13, OUTPUT);
digitalWrite(13, HIGH);

//En el pin 19 va el botn


pinMode(19, INPUT);

void loop() {

//Lectura del estado del botn


if (digitalRead(19) == 1) {
delay(500);
Push++;
if (Push > 7) {
Push = 4;
}
}

//Lecturas de campo magntico


if (start == true) {
Field1 = abs(510 - analogRead(A3));
Field2 = abs(510 - analogRead(A2));

Field3 = abs(510 - analogRead(A1));

Field4 = abs(510 - analogRead(A0));

//Clculo de los promedios del campo magntico


Stage1 = (Field1 + Field2) / 2;
Stage2 = (Field3 + Field4) / 2;

//Deteccin de los tiempos de deteccin del


mximo campo
if (Stage1 > Max1) {
Max1 = Stage1;
Tiempo1 = millis();
}

if (Stage2 > Max2) {


Max2 = Stage2;
Tiempo2 = millis();
}

//Clculos de tiempo y velocidd

Tiempo = Tiempo2 - Tiempo1;


TiempoReal = Tiempo * 0.001;
velocidad = distancia / TiempoReal;

}
PrintTime2 = millis();

//Se imprime en pantalla


if ((PrintTime2 - PrintTime1) > 500) {
LCD_print();
PrintTime1 = PrintTime2;
}

/*Mtodo diseado para controlar lo que se imprime.


Le da funcionalidad al men.

Cuando se presiona el botn, el valor de Push


aumenta y cambia lo mostrado en la pantalla.
*/

void LCD_print() {
switch (Push) {
case 0:
lcd.clear();
lcd.print("UTP Azuero");
lcd.setCursor(0, 1);
lcd.print("Mec. de Fluidos");

break;

case 1:
lcd.clear();

lcd.print("Facultad de");

lcd.setCursor(0, 1);
lcd.print("Ing. Electrica");

break;

case 2:
lcd.clear();

lcd.print("Ingenieria");
lcd.setCursor(0, 1);
lcd.print("Electromecanica");

break;

case 3:
lcd.clear();

lcd.print("Proyecto:");

lcd.setCursor(0, 1);
lcd.print("Viscosimetro");

break;

case 4:
Tiempo = 0;
Tiempo1 = 0;
Tiempo2 = 0;
velocidad = 0;

lcd.clear();
lcd.print("Iniciar Prueba");
break;
case 5:
start = true;
lcd.clear();
lcd.print("Prueba en Curso");

break;
case 6:
start = false;
lcd.clear();
lcd.print("RESULTADOS");
lcd.setCursor(0, 1);
lcd.print("OBTENIDOS");

break;
case 7:
lcd.clear();
lcd.print("V= ");
lcd.print(velocidad);
lcd.print(" m/s");
lcd.setCursor(0, 1);
lcd.print("Tiempo= ");
lcd.print(Tiempo);
lcd.print(" ms");

break;
}
}

You might also like