Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
FACULTAD DE INGENIERÍA,
ARQUITECTURA Y DISEÑO
METROLOGÍA E INSTRUMENTACIÓN
PROF. MANUEL MOISÉS MIRANDA VELASCO
PRÁCTICA NO. 1
MEDICIÓN DE
DESPLAZAMIENTO LINEAL
INTEGRANTES
Ingeniería Electrónica
GRUPO 361
Diseñar un sistema para medir un desplazamiento lineal, a través del uso de un potenciómetro angular.
Objetivos particulares:
Caracterización del potenciómetro angular.
Cálculo de la relación del movimiento lineal con respecto al angular en una polea con un
potenciómetro en su eje.
Diseño del sistema de adquisición.
Desarrollo del sistema de medición digital.
MATERIAL Y EQUIPO
Protoboard
Arduino Uno
Resistencia de 470KΩ
Potenciómetro de 1MΩ
Triplay 1/2in de 24x29cm
3.6m de madera de 3/4’’x8/4’’
Tornillos para madera 1/2in
Cartón
Pistola de silicón
6 barras de silicón
Rin de plástico de 6cm de diámetro
Estambre
Pieza de metal de 1x11x0.1cm
Legos
Escuadra de 30cm
Jumpers
Computadora con Visual Basic, Excel, IDE Arduino.
FUNDAMENTOS
Para poder utilizar con certeza un sensor, sea analógico o digital, se debe de caracterizar previamente.
Esto se refiere a que se deben aproximar curvas (llamadas características) que relacionen mediante una
ecuación matemática f(x) la variable física que se desea medir con la respuesta o salida del sensor. Para
que las mediciones sean correctas se debe cumplir que la relación entre las variables sea una función, es
decir, f(x) debe ser biunívoca para que dado un valor del conjunto A a este sólo le corresponda un
único valor en el conjunto B; esto debido a que la inversa de f(x) debe ser también una función.
2
Se sabe que en un potenciómetro angular la resistencia de este depende de la posición del cursor
deslizante (ver figura A1) esto es 𝑅𝑝 = 𝑓(𝜃).
Además, se conoce que la relación entre la posición angular y la longitud del arco sobre una
circunferencia es la siguiente:
𝐿(𝜃) = 𝑟𝑝 𝜃
Donde:
De modo que ya se hace evidente que existe una relación entre la resistencia y la longitud de arco o
distancia vertical recorrida ℎ𝑦 , que es la variable física que se medirá. Esto es:
ℎ𝑦 = 𝐿 = 𝑔[𝜃(𝑅𝑝 ), 𝑟𝑝 ]
Ahora, debido a que la variable eléctrica que está relacionada directamente con 𝜃 es la resistencia entre
las terminales del potenciómetro, esta se puede estimar mediante la medición de voltaje del potenció-
metro mediante el convertidor analógico-digital de Arduino y de esta forma realizar un programa que
obtenga la distancia ℎ𝑦 dada una lectura de voltaje cualquiera, mediante la utilización de las fórmulas
que describen la relación entre las variables ya mencionadas.
(𝑅1 )(𝑉𝑜𝑢𝑡 )
𝑅2 = 𝑅𝑝 =
𝑉𝑖𝑛 − 𝑉𝑜𝑢𝑡
Que es la ecuación que relaciona la variable medida (voltaje) con la variable que se quiere estimar
(distancia vertical), ya que:
4
DESARROLLO
Se inició soldando 2 alambres al potenciómetro, uno a la pata central y el otro a cualquiera de las dos
sobrantes. Y para poder medir el cambio en ángulo del potenciómetro se imprimió la figura M1, la cual
se pegó en un pedazo de cartón y se recortó, haciéndole un agujero en el centro indicado por la figura
M0 que fue donde se colocó el potenciómetro, pegando el cartón con silicón al potenciómetro y por
último se puso un pedazo de alambre recto sobre la rendija del potenciómetro. Véase en la figura M2.
1000000
900000 Multimeto1-M1
Multimeto1-M2
800000
Multimeto1-M3
700000
Multimeto2-M1
600000 Multimeto2-M2
Resistencia Potenciometro
Multimeto2-M3
500000
Multimeto2-M4
400000
Multimeto2-M5
Multimeto3-M1
300000
Multimeto3-M2
200000
Multimeto3-M3
100000 Multimeto3-M4
Multimeto3-M5
0
0 50 100 150 200 250 300 350
Angulo
Base
Nota: Se debe de aclarar que la base de madera fue creada originalmente para su uso en otro proyecto,
por lo que no es necesario recrearla como se muestra para hacer funcionar el mecanismo.
La base fue hecha de madera acomodando las maderas como se muestra en la figura M3.1 y M3.2.
Los barrotes fueron cortados de 60cm de largos y unidos a la tripay con tornillos que perforaban por
debajo del triplay y llegaban a cada barrote puesto. Resultando como se observa en la figura M4.
7
Figura M4. Base de madera terminada.
Se sacó un rin de un carro de control remoto con un diámetro de 6cm y se le hicieron unos orificios
rectos en la línea del diámetro en donde se insertó un pedazo metálico recto, el cual tenía la mayor
parte de el salido de un lado del rin. Con silicón se pegó el rin con el metal al potenciómetro de tal
manera que la perilla funcionara de eje y el pedazo de metal apuntara en 0o cuando el potenciómetro
daba el mínimo de resistencia, terminando con pegar al rin la punta del estambre, se le dio un par de
vueltas y se pegor un contrapeso (en este caso una pequeña barra metálica) al final del estambre con
silicón. Pegando esta parte del sistema en la parte superior de la base de madera.
Para terminar el sistema se pegaron unos legos a la base de manera para que al poner sobre estos la
escuadra, esta quedara a la altura del contrapeso y fuera más fácil el desplazamiento lineal.
Completando con esto el sistema mecánico para medir el desplazamiento lineal. Véase en la figura M5.
8
Figura M5. Sistema mecánico para medir el desplazamiento lineal.
Por ultimo en una cara lateral se pegó un protoboar donde se puso el Arduino Uno agarrado con unas
ligas, armando el circuito que se puede ver en la figura M6.
9
Figura M7. Sistema Físico Completo.
10
INTERFAZ GRÁFICA
Para poder desplegar las estimaciones correspondientes a la distancia vertical de forma más expositiva
se procedió a realizar una aplicación en visual C#. A continuación, se muestra la visualización de la
interfaz:
Para realizar la interfaz fue necesaria la colocación de los controles y posteriormente la programación
de estos. El parámetro que se le debe proporcionar a la aplicación es el puerto serie que la PC le
designó Arduino; si este puerto se encuentra disponible se mostrará el mensaje “PUERTO
ENCONTRADO”. Acto seguido la aplicación empezará a mostrar, por medio del espacio en blanco
junto a la etiqueta “cm”, los datos enviados por Arduino en tiempo real correspondientes a la variable
de distancia vertical. Para salir de la aplicación se debe dar click en el botón “SALIR” y el puerto se
cerrará y se dejará disponible para futuras acciones.
11
CÁLCULOS Y MEDICIONES
Para la caracterización del Potenciómetro se utilizó la plataforma de Microsoft Office Excel, que en
casos como éste permite la obtención rápida de una curva de tendencia (regresión lineal) basada en el
método de mínimos cuadrados (Fig. J1).
Ahora, se puede observar que, juntando todas las mediciones en un mismo gráfico, se observa una
curva no lineal que se puede seccionar en 3 partes, donde en una de ellas se tiene un comportamiento
lineal sumado a un error (una tendencia modelable con una recta), esto debido a que el potenciómetro
nos ofrece variaciones estables en un determinado rango de valores, pero al acercarse a sus posiciones
máxima y mínima éste tiende a variar de forma mínima. Ergo, es éste lo que limita el rango de valores
traducido en distancia que podemos medir.
Para obtener la gráfica de tendencia se requiere un solo grupo de valores sobre los cuales hacer las
operaciones, y dado que las muestras tomadas corresponden a una repetición múltiple (lo que supone
que en un valor de 𝜃 tenemos varios valores de 𝑅𝑥 en la misma gráfica) se decidió colocar una columna
extra en la cual se promedian los valores de todas las muestras correspondientes a cada medición de
una misma posición angular, y con esta realizar la tendencia (se obtendría una curva centrada).
12
Con esto en mente, ya podemos asegurar que la función es Bionívoca, o sea, tiene una relación directa
e inversa entre ambos valores (ojo: en la zona lineal de nuestro sensor) de modo que podemos obtener
con esa relación tanto 𝜃 en función de 𝑅𝑥 como 𝑅𝑥 en función de 𝜃, esto es:
𝜃 = 𝑓(𝑅𝑥 )
𝑅𝑥 = 𝑓 −1 (𝜃)
Y es esta nueva función la que se utiliza para el cálculo del desplazamiento lineal recorrido en base a la
medición de voltaje que involucra al potenciómetro en un arreglo de divisor de tensión (Fig. J2).
Una vez hecho el sistema, se procedieron a hacer mediciones que relacionaran directamente los pares
de variables que estuviesen relacionados directamente entre ellos, para observar el error del sistema
(Voltaje contra Resistencia, Resistencia contra Posición Angular y Posición Angular contra posición
lineal). En la relación final (𝜃 = ℎ(𝑑)) se encuentra un error que crece a medida que la medición se
hace más grande (error multiplicativo), por lo que se hace una serie de mediciones para observar la
diferencia entra las pendientes (Fig. J3).
13
Figura J3. Error de medición. Se puede observar que la pendiente de las rectas es ligeramente diferente.
Para compensar el error observado, se obtuvo la relación (cociente) entre las dos pendientes
observadas, y esta se utilizó como un factor añadido en el programa final del microcontrolador
utilizado, con lo que el error disminuyó notablemente (Véase el programa en la sección de Anexos).
14
RESULTADOS
Al final el sistema se diseñó para trabajar dentro de la zona lineal que correspondía en grados al rango
de 30o a 265o teniendo como valor inicial mínimo en desplazamiento los 12cm y como máximo 27cm.
Además, se le realizo una corrección de pendiente, para eliminar el error multiplicativo que presentaba,
eliminando la mayor parte del error del sistema, reduciéndolo de un error máximo de 1.8cm a 0.4cm
pudiendo atribuir 1mm de error al sistema mecánico.
En la siguiente tabla se puede ver la comparación de unas pruebas realizadas al sistema. Véase las
imágenes de las pruebas en las figuras M8 a M11.
Prueba Desplazamiento real Desplazamiento Medido Diferencia
(cm) (cm) ∆ = |𝑉𝑟𝑒𝑎𝑙 − 𝑉𝑀𝑒𝑑𝑖𝑑𝑜 |
1 12 12 0
2 16.9 17.2 0.3
3 22.6 22.8 0.2
4 26 26.2 0.2
Tabla M1. Comparación datos medidos contra reales.
15
Figura M8. Medición prueba 1.
16
Figura M9. Medición prueba 2.
17
Figura M10. Medición prueba 3.
18
Figura M11. Medición prueba 4.
CONCLUSIONES INDIVIDUALES
19
BIBLIOGRAFÍA
ANEXOS
#include <avr/sleep.h>
void setup()
{
Serial.begin(9600);
bangap();
}
void loop()
{
L = analogRead(0);
Vx = L_V(L);
Rx = V_R(Vx,R1);
Th = R_Th(Rx);
d = Th_d(Th);
dCorr = (599.0/514.0)*d+12; ** Corrección del error multiplicativo
String dist = String(dCorr);
Serial.println(dist);
delay(500);
}
void bangap()
{
int normADC[10];
int lowNoiseADC[10];
ADMUX = aVCC;
ADCSRA |= 1 << ADEN;
ADCSRA |= 1 << ADIE;
ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));
sleep_enable();
set_sleep_mode(SLEEP_MODE_ADC);
20
for (int i = 0; i < 10; i++)
{
sei();
sleep_cpu();
lowNoiseADC[i] = ADC;
}
Vcc = 0;
for (int j = 0; j < 10; j++)
{
Vcc = Vcc + convertToVolt(lowNoiseADC[j]);
}
Vcc = Vcc/10;
// Serial.print("Vcc = ");
// Serial.print(Vcc, 3);
// Serial.println(" V\n");
}
ISR(ADC_vect){}
Funciones de Conversión
22
CÓDIGO DE LA INTERFAZ GRÁFICA:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;
namespace Interfaz_prueba
{
public partial class Form1 : Form
{
string dato;
string puertoseleccionado;
public Form1()
{
InitializeComponent();
string[] puertos = SerialPort.GetPortNames();
foreach (string mostrar in puertos)
{
comboBox1.Items.Add(mostrar);
}
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort1.Dispose();
Close();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort1.Close();
serialPort1.Dispose();
puertoseleccionado = comboBox1.Text;
serialPort1.PortName = puertoseleccionado;
serialPort1.Open();
CheckForIllegalCrossThreadCalls = false;
if (serialPort1.IsOpen == true)
{
label3.Text = "PUERTO ENCONTRADO";
}
else
{
return;
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
23
{
dato = serialPort1.ReadLine();
label4.Text = dato;
}
}
}
24