BARÓMETRO Y ALTÍMETRO DIGITAL CON EL SENSOR MOTOROLA MPX4115 POR _PABLO_ Introducción. El método más habitual para determinar la altitud es por el uso de la presión barométrica. Sin embargo, no se hace tan fácilmente.La relación de altitud-presión no es lineal, es en realidad bastante compleja y depende de varios factores,incluso de la temperatura y la humedad del aire.Esta es la ecuación para calcular la altitud: Altitud = (10 ^ (Log (P/P_0) / 5,2558797) -1) / -6,8755856 * 10 ^ -6. Donde P es la presión a una altura desconocida, y P_0 es la presión a nivel del mar (cero metros = 1013 milibares en condiciones normales). P y P_0 puede expresarse en cualquier unidad, ya que se calculan como relación.Pero que no nos asuste este "despliegue" de matemáticas. Para mi propósito ,que era construir un altímetro digital de precisión,necesitaba un sensor de presión atmosférica suficientemente sensible para detectar variaciones del orden de décimas de milibar.Despues de una corta búsqueda invocando a San Google,apareció el Motorola MPX4115.Está diseñado para esta tarea como anillo al dedo. . Este sensor funciona en un rango desde 1.151 milibares hasta 0.15 milibares.O sea que funciona desde unas decenas de metros mas abajo del nivel del mar (ojo:no debajo del mar :-)),suponiendo que el nivel del mar esté a 1013 milibares,hasta miles de metros de altura.Y su salida puede variar desde 0.2 volts. a 4.8 volts por lo que es ideal para atacar el conversor A/D de cualquier microcontrolador,como el BX-24 en mi caso. Esta aplicación será un altímetro TERRESTRE,para montar en un coche..Por lo tanto en este caso no se requiere un rango de 0 a miles de metros de altura,si fuera para ir en un globo,ultraligero etc entonces la cosa cambiaría.Ganamos algo importante haciendo que trabaje en un rango limitado de 0 a 2000 metros: precisión. ¿Porqué? Si tenemos un conversor A/D de 10 bits ,el rango de medida está limitado de 0 a 1023 puntos.Podríamos hacer con esto un altímetro que mida p.ejm. de 0 a 10.000 mts,por supuesto,pero no nos quedaría más remedio que tener una resolución de unos10 metros por punto.Esto significa que el display cambiará bruscamente de 10 a 20 metros,y a 30 metros etc, sin termino medio.Pero analicemos...¿cuantas veces cruzaremos un puerto de montaña a 10.000 ,8.000,5.000,o incluso 2.500 mts de altura? seguramente nunca,al menos en la Península Ibérica.Yo ,que me la he recorrido de Tarifa a Cabo Peñas y de Finisterre a Cabo Creus,solo he estado en coche a más de 2.400 mts en el Port de Envalira,(Pirineos,frontera de Andorra con Francia) Por este motivo mi altímetro está diseñado para un rango desde unos 1030 milibares (unos -20 metros) hasta 768 milibares (unos 2.300 metros). Y siempre añado "..unos" porque como he dicho la relacion milibares-metros no es exacta:depende de varios factores como el tiempo atmosférico y la temperatura del aire.Despues veremos como corregirlos. Quedamos que vámos a medir hasta 2300 metros,como tengo un conversor A/D de 1023 puntos,obtenemos una resolución de unos 2 metros/punto.Bastante aceptable.Podría reducir aún más el rango y hacerlo sólo hasta 1000 metros,con lo que tendría una resolución de 90 cmts/punto (muy bueno) pero... hay muchos puertos de montaña que superan esta altura, verdad? Mejor sacrificar resolución en aras de poder llegar más alto. ¿Como incrementamos la sensibilidad del sensor y acondicionamos la señal para meterla en el micro? Las entradas A/D van de 0 a 5 volts. Veamos,el MPX4115 produce una tensión de 4,084 voltios a 0 mts y 2,66 voltios a 3.048 mts... Ouch! no necesitamos tanta altura! Tomamos la salida del MPX4115 y le restamos 2,5 voltios: Ahora tenemos un rango de voltaje de 0.16 a 1.58 voltios. Tomemos esta tensión y multipliquemosla por 3 : terminamos con un rango de 0,48 voltios a 4.74 voltios - aprovechamos casi toda la escala disponible de nuestro conversor A/D que es de 0 a 5 volts - y por lo tanto aprovechamos casi toda su resolucion que es de 0 a 1023 puntos. Para hacer esto en la práctica (al fin la práctica) ,se usa el doble amplificador operacional LM358:uno resta 2.5 volts y el otro coge esta salida y la multiplica por 3 :
La señal que sale por "Vout" es la que se conecta directamente al pin del conversor A/D.Ahora queda el procesamiento digital de esta señal. Como decía antes,la presión no varía de forma lineal con la altura,esto es: cuando estamos al nivel del mar, un milibar equivale a subir unos 8 metros ,pero a 2000 metros de altura habrá que subir 10 metros para bajar un milibar.La curva de la relación presion-altura se ve claramente si la llevamos hasta los 11.000 metros: Por lo tanto el micro tiene que corregir esta desviación de alguna manera,si queremos que nuestro altímetro no pierda un ápice de precision cuando vayamos altos.Hay una ecuación que hace un muy buen trabajo: MetrosAltitud = (-7990.6368 * Log(milibares / 1013)) No me preguntes que hace cada cosa,el tema es que funciona.Y la remarco porque la maldita cosa esta me llevó bastante trabajo.Uno que suspendía matemáticas. Ya tenemos la curva corregida,pero falta algo más: La meteorología.La presión atmosférica sube y baja, y no hay forma de corregir automáticamente esta desviación más que manualmente.Por eso es preciso calibrar los altímetros con respecto a una altura conocida.Los aviones lo hacen según la altura del aeropuerto,nosotros podemos hacerlo con respecto al mar o a una altura conocida.El error introducido por el cambio de presion atmosférica de un día a otro no suele ser mas que de unos cuantos metros,pero si hay un cambio brusco en el tiempo (borrasca profunda,anticiclon potente) puedes ver como variará unas decenas de metros. Por esto a la hora de programar el altímetro,hay que añadir un factor de corrección manual que se pueda grabar en la eprom o memoria no volátil y puede ser algo así:
Este es el modelo de rutina para medir presión atmosférica y altitud en metros usando el MPX4115. No importa el lenguaje de programacion que uses,estas son las fórmulas que hay que emplear.Se supone que el conversor A/D es de 10 bits: -------------------------------------------------------------------------------------------- volts = (volt / 3)+ 512 'dividimos entre 3 y sumamos 2,5 voltios al resultado(esto deshace el acondicionamiento de señal hecho por los operacionales)
milibares = ((1.085 * volts) + 105.55) 'imprime
resultado en el display ---------------------------------------------------------- BUEN VIAJE!!!! _Pablo_ 30-Oct-2007 perropinto@ya.com
|