Altímetro


Este es un proyecto que se me dio por hacer porque estaba tomando el curso de ESP32 dictado por el profesor Andrés Raúl Bruno Saravia de Microelectrónica Componentes SRL y durante el temario se analiza como comunicarse con el sensor de presión barométrica BMP180 a través del bus I2C. Como en todo curso se arma un prototipo con el funcionamiento mínimo necesario para constatar los conocimientos obtenidos y queda ahí. Unos cuantos días después, conversando con uno de los instructores de la escuela donde estoy tomando clases para piloto privado de avión le pregunto si puedo llevar a bordo el prototipo para compararlo con el instrumento del avión y constatar así su correcto funcionamiento. Es ahí cuando me comenta que su papá construye aviones experimentales en forma artesanal y que andaba a la búsqueda de un altímetro que quería que le hiciera uno para el. Dadas las pertinentes explicaciones de la diferencia existente entre un prototipo  sin demasiado desarrollo y sólo construido en forma rudimentaria como ven en las fotos mas abajo y un producto final listo para ser colocado en el tablero de un avión acepta esperarme a que avance con el curso puesto que entre el curso de ESP32, el curso de piloto y mi trabajo que mantiene todo esto no me quedaba casi tiempo para nada mas que dormir y hacerme cargo de mi familia. En otro ámbito conversando con personas que tienen el paracaidismo como hobby me comentan que les vendría muy bien un instrumento así fácil de usar, que todo lo que hay por ahí es tosco, no es fácil de calibrar y hasta poco amigable con personas relativas al vuelo. En ese aspecto corro con una franca ventaja, se que pretender del instrumento y soy yo mismo quien lo está llevando a cabo. Así que terminado el curso me decidí a pasarlo a Arduino.

Aquí está el prototipo funcional ya migrado a Arduino, use un Nano que es exactamente lo mismo que un Uno sólo que apropiado para protoboards de este tipo. Como no me servía de nada usar el Uno para luego ir con cables a un protoboard y que quede todo colgante y sin ninguna seguridad preferí optar por esta versión de Arduino que al usar el mismo micro es el mismo programa para uno o para otro. Como escribí mas arriba en el texto este desarrollo nació durante la prosecución de un curso de capacitación, si bien fue durante la clase dedicada al sensor barométrico de presión que en esta foto apenas se ve detrás del encoder rotativo o perilla lo cierto es que durante el curso todo lo que pudiera aprender extra podría servirme como conocimiento extra y no hay mejor oportunidad para hacerlo, con seguridad, que bajo el ala de un buen maestro como Andrés Raúl. Tenía en una de esas cajas del taller donde uno guarda todo lo que le va gustando comprar cuando está barato un montón de displays de celulares Nokia de la primera generación de los GSM, el famoso 1100 que tenía el juego de la viborita. Nunca había usado esa pantalla y por ende antes que nada debía aprender a hacerlo puesto que en la clase los datos provenientes del sensor barométrico los mandábamos a PC vía terminal serie a través del emulador USB de Arduino.

Rev. 1 - Control de una pantalla Nokia

Así que el primer intento en una clase dedicada a un sensor barométrico no fue detectar la presión sino lograr que en la pantalla aparezca algo. Este programa en particular hace aparecer Pablin! Luego de este primer logro entendí que tendría que poder calibrar el instrumento, en cada vuelo al escuchar por radio la información del QNH o presión atmosférica al nivel medio del mar en ese momento en esa estación se debe calibrar dicho valor en el altímetro por medio de la perilla de reglaje alterando el valor mostrado en la ventana de Kollsman. Pensé en pulsadores, pensé en un potenciómetro pensé y pensé y pensé y me decidí por un encoder o codificador rotativo primero porque son mucho mas fiables que los potenciómetros, segundo porque además de girar hacia un lado o hacia el otro también tienen un pulsador incorporado a presionar su eje hacia adentro y tercero porque tenía ganas de aprender a utilizarlos!

Rev. 2 - Detectando el giro de un codificador rotativo

Y así fue como llegué a la segunda revisión del programa, buscando en internet abundantes datos sobre como funciona uno de estos dispositivos y dando a luz este programa que ahora no sólo controla la pantalla sino que además detecta el giro horario o anti horario y de esa forma suma o resta 1 al número presente en pantalla. Recién en este momento del desarrollo es que incorporé el sensor de presión atmosférica BMP180 al proyecto.

Rev. 3 - Incorporando el sensor BMP180

Si bien en clase ya había aprendido a utilizar el sensor lo cierto es que sólo nos limitamos a hacerlo funcionar recibiendo de el un valor compatible con una altura vaya uno a saber cuan real o no, al no estar calibrada la presión atmosférica a nivel del mar de ese momento en el instrumento el dato mostrado difícilmente sea certero. Esta tercer revisión del programa se dedicó precisamente a ello, además de interactuar con el BMP180 calibrarlo por medio del selector o perilla y conseguir así tener en pantalla un valor real de la altura según el QNH calibrado. Terminado esto decidí avanzar sobre la memoria EEPROM interna del microcontrolador ATMega para poder memorizar y no perder cuando se apaga el altímetro el valor de calibración.

Rev. 4 - Usando la memoria EEPROM interna del micro

Esta, por ahora la última revisión disponible, contempla el poder memorizar el QNH calibrado para que al volver a encender el instrumento el QNH ajustado permanezca, lo mismo sucede con el contraste de la pantalla el cual es ajustable y la unidad de medida de altura que prefiera el piloto (metros o pies). La forma de hacerlo es por demás simple, empleando la única perilla y sólo dependiendo de cuanto tiempo se tenga presionado su eje o botón! Con pulsaciones que duren menos de 2 segundos se cambia la unidad de visualización y por supuesto se memoriza esta nueva selección. Presionando el botón de la perilla y manteniendo el mismo presionado durante un tiempo de entre 2 y 5 segundos queda memorizado el QNH calibrado en ese momento. Si en cambio el pulsador se mantiene presionado entre 5 y 8 segundos se podrá ajustar el contraste de la pantalla mas claro o mas oscuro respecto del giro de dicha perilla hacia la izquierda o derecha respectivamente.  Superado los ocho segundos con el dedo puesto en la perilla aparece SALIR en pantalla sin hacerse cambio alguno. Hay que tener presente que al girar la perilla ya sea en sentido horario o anti horario se incrementa o decrementa el valor del QNH pero no queda grabado en memoria hasta que se pulsa el eje del encoder entre 2 y 5 segundos.

En una futura versión quisiera incorporar QNE y QFE como opciones independientes del QNH así como una manera fácil de tarar el intrumento en 0 metros (0 cero pies) adoptando la presión actualmente detectada como calibración; una opción muy buscada por los paracaidistas o por pilotos de aeródromos particulares o no controlados sin servicio de ATIS.

En cuanto a la electrónica el circuito es por demás simple tenemos un Arduino que bien puede ser un Nano por su tamaño mas cómodo para el protoboard o un Uno si se lo tiene bien se lo puede usar. La pantalla Nokia LCD es del tipo gráfica de 84 x 48 pixeles de muy bajo consumo por su uso en teléfonos celulares los cuales no se pueden dar el lujo de derrochar energía. El tema es que esta pantalla funciona a 3.3V y el Arduino funciona a 5V. Por suerte al menos en esta etapa del desarrollo el Arduino dispone de una salida marcada como 3V3 la cual puede alimentar la pantalla perfectamente pero los cinco terminales de comunicación entre la pantalla y el Arduino deben ser adaptados mutuamente. Con poner en serie en cada vía una resistencia de 10Kohms es mas que suficiente! El conexionado entre el Arduino y la pantalla es el siguiente:

ARDUINO PANTALLA
Pin 8 Terminal CLK
Pin 9 Terminal DIN
Pin 10 Terminal D/C
Pin 11 Terminal CS
Pin 12 Terminal RST
Pin 3V3 Terminal VCC
Pin GND Terminal GND

Una vez conectada la pantalla LCD es hora de conectar el codificador rotativo o encoder. Este componente tiene sólo cinco patas y deben ser conectadas de la siguiente manera:

ARDUINO ENCODER
Pin 2 Terminal CLK
Pin 4 Terminal DT
Pin 5 Terminal SW
Pin VIN Terminal +
Pin GND Terminal GND

Hay que tener presente que el encoder va conectado, al igual que el sensor barométrico a 5V y el terminal VIN del arduino está cableado directamente a los 5V del USB cuando la placa es alimentada por este medio pero cuando se alimenta por medio del conector barrilito dicha tensión va derecho al terminal VIN pudiendo pasar 9 o incluso 12V si alimentamos con esas tensiones al Arduino, por favor prestar atención respecial en este tema! A continuación conectar los cuatro cables que val al sensor de presión de la siguiente forma:

ARDUINO BMP180
Pin VIN Terminal VIN
Pin GND Terminal GND
Pin A4 Terminal SDA
Pin A5 Terminal SCL

Terminado esto abrir el archivo correspondiente a la revisión 4 en el IDE de Arduino, teniendo la placa Arduino conectada a la PC presionar el botón de la flecha para que suba el código luego de compilarlo y estará listo para usarse.

 

 

Pablo Canello, 25/03/2020