Variómetro acústico (barómetro ultrasensible)
Componentes y suministros
| × | 1 |
Acerca de este proyecto
Introducción:
Es un instrumento utilizado por los pilotos durante los vuelos (planeador, parapente, ala delta, globo, etc.) para ayudar a encontrar el núcleo de las térmicas y escalar el aire más y mejor.
Breve descripción:
Es un barómetro muy sensible que emite sonidos al subir (subir) y también al hundir (bajar). Los sonidos son simples bip-bip, cada segundo, o dos por segundo o más durante el ascenso (más velocidad de ascenso =pitidos de mayor frecuencia):es tan sensible que comienza a emitir un pitido justo después de unos pocos centímetros (!) Por segundo; puede intentar levantar lentamente el brazo sosteniendo en la mano el Vario para obtener el sonido. En caso de velocidad de hundimiento, emite pitidos largos (continuos) a -1 m / seg o más.
Lista de componentes:
- Arduino Pro Mini 3.3v 8 Mhz como MCU
- Sensor de presión barométrica 3.3v GY-63 (MS5611)
- Dipswitch 8
- Zumbador (activo con oscilador interno)
- Multiplexor 8x1 4051 3.3v
- Batería LiPo 1s 3.7v 350mAh + 10cm cable rojo / negro y conectores M + F
- Módulo elevador de voltaje + cargador USB LiPo, TP5400 de AZDelivery;
- Algunas resistencias, resistencia de red de 8x4.7k, 220, 2x10k y condensadores 47uF, 470uF
- Fusible reiniciable 0.5A
- Caja negra pequeña de plástico ABS, tamaño 78x39x22 mm
- Interruptor deslizante de encendido / apagado
- Conector hembra de cabezal de 6 pines (para FTDI)
- 17 pines macho (2x, 2x, 2x, 2x, 2x, 4x, 1x, 1x y 1x)
- 4 pines macho 90 ° para circuito del sensor P
- 30 cm de alambre rígido, recubierto de plástico, para puentes y conexiones
- Cordón verde
El esquema de Fritzing anterior lo muestra todo necesitas construir el circuito. Por favor, preste atención al "condensador cerámico" marrón, justo debajo del interruptor negro, en su lugar es un fusible reiniciable (no he encontrado el diseño adecuado para él). En lugar de las 8 x resistencias usé un solo componente, una red de resistencias, incluye 8 x 4.7K ohmios, todas adentro; mire la siguiente imagen para encontrarlo, es difícil de encontrar, es el negro en la parte superior del interruptor azul, tiene nueve pines, uno común, los otros ocho para las resistencias. El archivo esquemático de Fritzing para descargar está disponible a continuación.
El significado del interruptor DIP:
Me gustó usar el conmutador azul , 8 interruptores de encendido / apagado muy pequeños en un estuche de color, para seleccionar y cambiar los parámetros para el funcionamiento del Vario. Es una tabla para estos parámetros que se muestran arriba y se explican aquí de la siguiente manera:
- 1 - no utilizado
- 2 - volumen bajo o alto
- 3 y 4 - alarma de hundimiento m / seg:-999-1-2-3
- 5 y 6 - frecuencia de pitido Hz:+1 +1.5 +2 +3
- 7 y 8 - sensibilidad m / seg:+0.0 +0.1 +0.2 +0.5
El pin 1 no se utiliza , cualquier posición, activada o desactivada, no cambia nada.
El pin 2 cambia el nivel de volumen del timbre; Funciona eléctricamente:cuando el pin está en cortocircuito la resistencia en serie con el zumbador y deja pasar más corriente para tener pitidos de mayor volumen.
Los pines 3 y 4 establecen el nivel de hundimiento (bajando) debajo del cual el Vario jugará beeeeeeeeep; los pines se utilizan como código binario, dos bits, 4 configuraciones:00 =0, 01 =1, 10 =2 11 =3; puede configurar la alarma de hundimiento a -999 m / seg (significa que no hay límite, nunca emitirá un pitido) con el pin 3 =apagado y el pin 4 =apagado (00 binario); puede establecer los otros valores en -1, -2 o -3 m / seg respectivamente con el pin 3 =apagado / 4 =encendido, 3 =encendido / 4 =apagado y 3 =encendido / 4 =encendido. Por ejemplo, en la posición 2, el Vario emitirá un pitido solo a una velocidad de hundimiento superior a -2 m / seg. Para las pruebas, debe intentar usar un ascensor ... descendiendo del piso número 3 al piso número 0, o correr rápidamente los escalones de la escalera ...
Los pines 5 y 6 establecen la frecuencia del pitido , funcionan juntos como código binario como se explicó anteriormente para el otro par de pines; a la misma velocidad de ascenso, ajustado a + 2Hz emitirá un bip-bip más rápidamente que a + 1Hz. A algunas personas les gusta tener pitidos lentos y menos "estrés" :-)
Los pines 7 y 8 establecen la sensibilidad del instrumento :+0.0 significa máxima sensibilidad al subir el movimiento, necesita menos de 10 cm / seg de velocidad para emitir un bip-bip; en esta posición, a veces el instrumento emite un pitido, incluso fijo en su lugar, detectando cambios de presión muy pequeños (es decir, cerrar una puerta en la habitación puede aumentar un poco la presión del aire); también capta "ruidos" eléctricos normales, pero es bastante estable y útil. En la 4ª posición tenemos una sensibilidad de +0,5 m / seg, significativamente menos sensible a los cambios de presión del aire, se necesita "mucha" más velocidad al subir la altitud para obtener bip-bip. Para realizar las pruebas, debería intentar utilizar un ascensor ... desde el piso número 0 hasta el piso número 3 ...
Desde el punto de vista de un circuito electrónico, los pines 1 y 3-8 se leen analógicamente por medio del chip multiplexor 4051, luego el software decide si está encendido o apagado, valores> 512 o no:tiene 8 entradas a 1 común puertos conectados al Arduino como entrada. Para seleccionar cuál de los 8 puertos leer las posiciones de encendido / apagado del Dipswitch, el MCU (Arduino) establece 3 bits en la salida que ya conoce como funciona:000, 001, 010, 011, 100, 101, 110, 111 (0, 1, 2, 3, 4, 5, 6, 7 =8 puertos =8 interruptores de encendido / apagado). Eche un vistazo al código de la función "readDIPswitch ()".
Cuidado con la batería:
Las dos resistencias de 10k junto con el condensador de 47uF funcionan como divisor de voltaje para probar el voltaje de la batería. Se sabe que las LiPo son críticas cuando se descargan por debajo de 3.3v por este motivo cada 10 segundos (BATTinterval) se llama a la función "checkBATT ()" y en caso de baja tensión el zumbador te informará con 6 pitidos cortos por segundo. ¡No espere demasiado para apagar y recargar pronto!
Es muy IMPORTANTE que recuerde hacer al menos un AGUJERO en la caja para permitir que el aire pase a través de los cambios de presión del sensor. Hice dos agujeros como ves en la imagen:uno es para escuchar los pitidos del zumbador y otro es para ver el led de estado de carga cuando está conectado al cable micro USB y al cargador. Ah, sí, también es otro agujero para el micro USB. Con los agujeros, el variómetro ya no es resistente al agua ...
El cordón verde sirve para engancharlo de forma segura en algún lugar a bordo:¡no querrás perderlo, absolutamente!
El PCB:
Se utiliza una placa de circuito impreso de una sola cara, por eso tuve que incluir algunos puentes de cables (los de la línea de puntos) para resolver las rutas de todo el circuito. Sigue aquí la cara de los componentes, pero a continuación tienes los archivos, los componentes y las caras de soldadura, reflejados, para descargar e imprimir mediante una impresora láser en hojas "amarillas" o "azules". Usé los amarillos pero dicen que los azules son mejores (el precio es más alto). Cuando imprima, recuerde desactivar la configuración de ahorro de tóner, utilice en su lugar una resolución de 1200 ppp para obtener un resultado de negro profundo real. El proceso de transferencia de tóner de las hojas mágicas a la PCB se realiza mediante el uso de una plancha caliente ... La impresión de ambas caras de la PCB hace que el proyecto sea "profesional".
Se utilizan una docena de pines Arduino. No es necesario soldar los pines no utilizados y no es obligatorio:déjalos en libertad. Coloque el conector hembra de 6 pines en la cara superior del Mini Pro para permitir que, si es necesario en el futuro, se conecte la interfaz FTDI para futuras actualizaciones del software.
El circuito de alimentación de aumento USB se coloca al revés. Para mantenerlo en su lugar, use dos pines fuertes, pines macho normales que se usan para Arduino pero sin el cinturón de plástico, al lado del conector USB donde está escrito "Power USB":use la soldadura para unir todo, dos pines y el conector USB. 3 cables conectan los terminales Gnd-, Batt + y Out + a este circuito.
El sensor barométrico:
El sensor de presión barométrica GY-63 (MS5611), P-Sensor en la PCB, está encerrado en una pequeña placa de circuito y Arduino se comunica con él a través del bus i2c. El uso es sencillo, incluye también un sensor de temperatura que no he usado.
El programa llama a la función "readPSensor ()" que es el núcleo del software. Lo que necesitamos es el cambio relativo de altitud, la función se lee muchas veces por segundo y se acumula en PrexTotal; cada medio segundo (PrexInterval) calcula el cambio medio de altitud y procede con bip-bip o un pitido largo considerando los ajustes de los interruptores DIP. Esta forma sencilla de filtrar datos es suficientemente buena; Probé la interesante forma de filtrado de Kalman, y también los complicados algoritmos de filtrado de Madgwick y Mahony sin beneficios significativos para el propósito de este proyecto.
Actualizaciones / Consejos:
Eso es todo. ¡Realmente disfruté con este proyecto! ¡Hazlo también! :-)
Marco Zonca
Código
- Código de variómetro acústico
Código del variómetro acústico Arduino
/ * Este boceto actúa como variómetro para parapente, de Marco Zonca, Arduino MiniPro 3.3 2020 como CPU, sensor de presión barométrica GY-63 (MS5611), 8 x conmutador, zumbador, Mux 4051, lipo 1s 3.7v 350mA, 3.7 v -> 5v aumento de voltaje + cargador usb lipo; DipSwitch:1 =no utilizado 2 =hw volumen de zumbador bajo / alto 3 =\ alarma de sumidero:OFF -1.0 -2.0 -3.0 m / seg 4 =/ 5 =\ pitidos de frecuencia:+1.0 +1.5 +2.0 +3.0 Hz 6 =/ 7 =\ sensibilidad:+0.0 +0.1 +0.2 +0.5 m / seg 8 =/ * / # incluir#include const int muxIOpin =15; const int vbattPin =14; const int muxbit0 =4; const int muxbit1 =5; const int muxbit2 =6; const int buzzerPin =7; const int DIPSWinterval =5000; const int BATTinterval =10000; const int PrexInterval =500; const boolean isDebug =false; float sensibilidad [5 ]; frecuencia de flotación [5]; alarma sinka de flotación [5]; n =0 largo; interruptor dips booleano [9]; caídas de cadena; prevDIPSWmillis =0; prevBATTmillis =0; prevBATTmillis =0; n1 =0; n2 =0; float SensorVBatt =0; double referencePressure =0; unsigned long prevPrexMillis =0; unsigned long currPrexMillis =0; double realPressure =0; float absoluteAltitude =0; float relativaAltitude =0; float avgAltitude =0; float avgPrevAltitude =0 =long PrexCounter 0; float PrexTotal =0; float PrexVario =0; booleano es FirstCalc =verdadero; psensor MS5611; // configuración de vacío del sensor de presión () {Serial.begin (9600); pinMode (muxbit0, SALIDA); pinMode (muxbit1, SALIDA); pinMode (muxbit2, SALIDA); pinMode (buzzerPin, SALIDA); sensibilidad [4] =0; sensibilidad [3] =0,5; sensibilidad [2] =0,2; sensibilidad [1] =0,1; sensibilidad [0] =0.0; frecuencia [4] =0; frecuencia [3] =3,0; frecuencia [2] =2,0; frecuencia [1] =1,5; frecuencia [0] =1.0; sinkalarm [4] =0; sinkalarm [3] =- 3,0; sinkalarm [2] =- 2,0; sinkalarm [1] =- 1,0; sinkalarm [0] =- 999,9; readDIPswitch (); psensor.begin (); referencePressure =psensor.readPressure (); if (isDebug ==true) Serial.println ("Vario está activado"); NewTone (buzzerPin, 4); retraso (750); noNewTone ();} // fin de setup () void loop () {readPSensor (); if ((prevDIPSWmillis + DIPSWinterval) =PrexInterval) {avgAltitude =PrexTotal / PrexCounter; // promedio if (isFirstCalc ==true) {avgPrevAltitude =avgAltitude; isFirstCalc =falso; } PrexVario =(avgAltitude-avgPrevAltitude) * (1000 / PrexInterval); // vario mSec if ((PrexVario <=sensibilidad [4]) &&(PrexVario> =sinkalarm [4])) {noNewTone (); } if ((PrexVario> sensibilidad [4])) {// bip bip bip + NewTone (buzzerPin, ((int) (PrexVario + frecuencia [4]))); } if ((PrexVario 512) interruptor dips [n] =falso; // leer el puerto seleccionado else dipswitch [n] =true; if (isDebug ==true) {if (dipswitch [n] ==false) Serial.print ("0"); else Serial.print ("1"); }} // fin de if (isDebug ==true) Serial.println (""); s =0; si (conmutador [7] ==verdadero) s =s + 2; si (conmutador [8] ==verdadero) s =s + 1; sensibilidad [4] =sensibilidad [s]; if (isDebug ==true) {Serial.print ("Sensibilidad ="); Serial.println (sensibilidad [4]); } s =0; if (interruptor dips [5] ==verdadero) s =s + 2; if (interruptor dips [6] ==verdadero) s =s + 1; frecuencia [4] =frecuencia [s]; if (isDebug ==true) {Serial.print ("Frecuencia ="); Serial.println (frecuencia [4]); } s =0; si (conmutador [3] ==verdadero) s =s + 2; if (interruptor dips [4] ==verdadero) s =s + 1; sinkalarm [4] =sinkalarm [s]; if (isDebug ==true) {Serial.print ("SinkAlarm ="); Serial.println (sinkalarm [4]); }} // finaliza readDIPswitch () void checkBATT () {// verifica el voltaje de la batería lipo / liion n1 =analogRead (vbattPin); n2 =(((6,60 * n1) / 1023,00)); SensorVBatt =(n2 + ((n2 * 0.0) / 100)); // corrección arbitraria (inactiva =0.0%) if (SensorVBatt <=3.4) {NewTone (buzzerPin, 6,1000); } if (isDebug ==true) {Serial.print ("VBatt ="); Serial.println (SensorVBatt); }} // finalizar checkBATT ()
Piezas y carcasas personalizadas
Esquemas
vario_R1XzPifiX4.fzzProceso de manufactura
- Almacene y administre datos confidenciales con Secret Manager
- Detector de voltaje sensible
- Barómetro aneroide
- Método sensible para detectar defectos de transistores
- Sensores de tensión ultradelgados y altamente sensibles
- Receptores ópticos sensibles para el espacio
- Amstrong® Ultra 650MC
- Amstrong® Ultra 650MCT
- Amstrong® Ultra 700MC
- Amstrong® Ultra 700MCT
- Cromo de ultra alta pureza (UHP Cr)>99,95 %