Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos

Componentes y materiales

ComponenteCantidad
SparkFun Arduino Pro Mini 328 - 3.3V/8MHz1
Sensor barométrico GY-63 (MS5611) 3.3V1
Dipswitch de 8 posiciones1
Zumbador activo con oscilador interno1
Multiplexor 8x1 4051 3.3V1
Batería LiPo 1S 3.7V 350mAh con cables y conectores1
Módulo elevador de tensión + cargador USB LiPo TP54001
Resistencias: red de 8x4.7k, 220Ω, 2x10k; condensadores 47uF, 470uF1 juego
Fusible rearmeable 0.5A1
Caja plástica ABS negra 78x39x22 mm1
Interruptor deslizante on/off1
Conector hembra 6 pines (para FTDI)1
Pines macho varios (17 pines en distintas configuraciones)1 juego
Pines macho 90° 4 pines (para sensor de presión)1
30 cm alambre rígido forrado para puentes y conexiones1
Cordón verde1

Descripción del proyecto

Introducción

Este instrumento lo utilizan los pilotos durante el vuelo (planeadores, parapentes, alas delta, globos, etc.) para localizar el núcleo de las térmicas y ascender de forma más eficiente.

Descripción general

Se trata de un barómetro extremadamente sensible que emite señales acústicas tanto en ascenso como en descenso. Los sonidos son pitidos simples (beep-beep) a intervalos de un segundo, dos por segundo o más durante el ascenso (mayor tasa de ascenso = mayor frecuencia de pitidos). Su sensibilidad es tal que comienza a pitar con apenas unos centímetros por segundo de velocidad vertical; basta levantar lentamente el brazo sosteniendo el variometro para oírlo. En caso de descenso, emite pitidos largos y continuos (beeeeeep) a partir de -1 m/s.

Lista de componentes

Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos
Esquemático completo del circuito (formato Fritzing)

El esquemático Fritzing muestra todo lo necesario para construir el circuito. Atención: el condensador cerámico marrón debajo del interruptor negro es en realidad el fusible rearmeable (no encontré el símbolo adecuado). En lugar de 8 resistencias individuales usé una red de resistencias única que integra 8x4.7kΩ; es el componente negro de 9 pines encima del dipswitch azul (1 pin común + 8 resistencias). El archivo Fritzing está disponible para descarga.

Significado del dipswitch

El dipswitch azul (8 micro-interruptores en una carcasa) permite seleccionar y cambiar parámetros de funcionamiento:

Detalle de cada grupo:

Electrónicamente, pines 1 y 3-8 se leen analógicamente mediante el multiplexor 4051; el software decide si están on/off (valor >512). El Arduino selecciona cada uno de los 8 puertos mediante 3 bits de salida (000 a 111). Ver función readDIPswitch() en el código.

Cuidado con la batería

Los dos resistores de 10k y el condensador de 47uF forman un divisor de tensión para monitorizar la batería. Las LiPo son críticas si se descargan por debajo de 3.3V. Cada 10 segundos (BATTinterval) la función checkBATT() verifica la tensión; si es baja, el zumbador emite 6 pitidos cortos en un segundo. ¡Apaga y recarga pronto!

Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos
Circuito de monitorización de batería

IMPORTANTE: Haz al menos un AGUJERO en la caja para que el aire llegue al sensor de presión. Yo hice dos: uno para oír el zumbador y otro para ver el LED de carga al conectar el micro-USB. Con agujeros, el variometro ya no es estanco.

Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos
Caja con orificios para sensor de presión y conector USB
Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos
Montaje interior completo
Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos
Cordón verde para asegurar el dispositivo a bordo

El PCB

Se usa PCB de una sola cara, por eso incluye algunos puentes de alambre (líneas punteadas) para resolver el enrutamiento. Aquí se muestra la cara de componentes; abajo están ambos archivos (componentes y soldadura, espejados) para descargar e imprimir con láser en hojas "amarillas" o "azules" (estas últimas son mejores pero más caras). Al imprimir: desactivar ahorro de tóner, usar 1200 dpi para negro intenso. La transferencia de tóner se hace con plancha caliente. Imprimir ambas caras da acabado "profesional".

Se usan una docena de pines de Arduino. Soldar los pines no usados es innecesario: déjalos libres. Coloca el conector hembra 6 pines en la cara superior del Pro Mini para permitir futura conexión FTDI y actualizaciones de firmware.

El circuito step-up USB va boca abajo. Sujétalo con dos pines macho fuertes (sin carcasa plástica) junto al conector USB donde dice "Power USB": suelda pines y conector juntos. 3 cables conectan GND-, BATT+ y OUT+ a este circuito.

Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos
PCB cara de componentes (single-sided)

El sensor barométrico

El GY-63 (MS5611) va en una pequeña placa y se comunica por I2C. Incluye sensor de temperatura (no usado). El programa llama a readPSensor(), núcleo del software. Lo que necesitamos es el cambio relativo de altitud: la función lee muchas veces por segundo y acumula en PrexTotal; cada medio segundo (PrexInterval) calcula el cambio medio de altitud y genera los pitidos según ajustes del dipswitch. Este filtrado simple es suficiente; probé filtro de Kalman y algoritmos Madgwick/Mahony sin mejora significativa.

Actualizaciones / Consejos

¡Eso es todo! Disfruté mucho con este proyecto. ¡Tú también!

Marco Zonca

Código

Código del Variometro Acústico (Arduino)

/* Variometro para parapente - Marco Zonca 2020
   Arduino MiniPro 3.3V, GY-63 (MS5611), dipswitch 8, zumbador, Mux 4051,
   LiPo 1S 3.7V 350mA, step-up 3.7V->5V + cargador USB
   Dipswitch: 1=no usado 2=volumen hw low/high 3=\ alarma hundimiento: OFF -1.0 -2.0 -3.0 m/s 4=/
   5=\ freq pitidos: +1.0 +1.5 +2.0 +3.0 Hz 6=/ 7=\ sensibilidad: +0.0 +0.1 +0.2 +0.5 m/s 8=/ */
#include <MS5611.h>
#include <NewTone.h>

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 sensibility[5];
float frequency[5];
float sinkalarm[5];
long n=0;
boolean dipswitch[9];
String dips;
unsigned long prevDIPSWmillis = 0;
unsigned long prevBATTmillis = 0;
float n1=0, n2=0, SensorVBatt=0;
double referencePressure = 0;
unsigned long prevPrexMillis = 0, currPrexMillis = 0;
double realPressure = 0;
float absoluteAltitude = 0, relativeAltitude = 0;
float avgAltitude = 0, avgPrevAltitude = 0;
long PrexCounter = 0;
float PrexTotal = 0, PrexVario = 0;
boolean isFirstCalc = true;
MS5611 psensor;

void setup() {
  Serial.begin(9600);
  pinMode(muxbit0, OUTPUT);
  pinMode(muxbit1, OUTPUT);
  pinMode(muxbit2, OUTPUT);
  pinMode(buzzerPin, OUTPUT);

  sensibility[4]=0; sensibility[3]=0.5; sensibility[2]=0.2; sensibility[1]=0.1; sensibility[0]=0.0;
  frequency[4]=0; frequency[3]=3.0; frequency[2]=2.0; frequency[1]=1.5; frequency[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) Serial.println("Vario is on");
  NewTone(buzzerPin,4); delay(750); noNewTone();
}

void loop() {
  readPSensor();
  if ((prevDIPSWmillis+DIPSWinterval) < millis()) { readDIPswitch(); prevDIPSWmillis=millis(); }
  if ((prevBATTmillis+BATTinterval) < millis()) { checkBATT(); prevBATTmillis=millis(); }
}

void readPSensor() {
  realPressure = psensor.readPressure();
  absoluteAltitude = psensor.getAltitude(realPressure);
  relativeAltitude = psensor.getAltitude(realPressure, referencePressure);
  PrexCounter++;
  PrexTotal += relativeAltitude;
  currPrexMillis = millis();

  if (currPrexMillis - prevPrexMillis >= PrexInterval) {
    avgAltitude = PrexTotal / PrexCounter;
    if (isFirstCalc) { avgPrevAltitude=avgAltitude; isFirstCalc=false; }
    PrexVario = (avgAltitude-avgPrevAltitude) * (1000/PrexInterval); // m/s

    if ((PrexVario <= sensibility[4]) && (PrexVario >= sinkalarm[4])) noNewTone();
    if (PrexVario > sensibility[4]) NewTone(buzzerPin, (int)(PrexVario+frequency[4])); // ascenso
    if (PrexVario < sinkalarm[4]) NewTone(buzzerPin, 0.1); // descenso

    avgPrevAltitude = avgAltitude;
    prevPrexMillis = currPrexMillis;
    PrexTotal=0; PrexCounter=0;
    if (isDebug) { Serial.print("Vario="); Serial.println(PrexVario); }
  }
}

void readDIPswitch() {
  int s=0;
  for (n=1; n<9; n++) {
    dips="0000"+String(n-1, BIN);
    dips=dips.substring(dips.length()-3,dips.length());
    digitalWrite(muxbit0, dips.substring(2,3)=="0"?LOW:HIGH);
    digitalWrite(muxbit1, dips.substring(1,2)=="0"?LOW:HIGH);
    digitalWrite(muxbit2, dips.substring(0,1)=="0"?LOW:HIGH);
    dipswitch[n] = (analogRead(muxIOpin) > 512) ? false : true;
    if (isDebug) Serial.print(dipswitch[n]?"1":"0");
  }
  if (isDebug) Serial.println();

  s=0; if (dipswitch[7]) s+=2; if (dipswitch[8]) s+=1; sensibility[4]=sensibility[s];
  if (isDebug) { Serial.print("Sensibility="); Serial.println(sensibility[4]); }

  s=0; if (dipswitch[5]) s+=2; if (dipswitch[6]) s+=1; frequency[4]=frequency[s];
  if (isDebug) { Serial.print("Frequency="); Serial.println(frequency[4]); }

  s=0; if (dipswitch[3]) s+=2; if (dipswitch[4]) s+=1; sinkalarm[4]=sinkalarm[s];
  if (isDebug) { Serial.print("SinkAlarm="); Serial.println(sinkalarm[4]); }
}

void checkBATT() {
  n1 = analogRead(vbattPin);
  n2 = ((6.60 * n1) / 1023.00);
  SensorVBatt = n2 + ((n2 * 0.0) /100);
  if (SensorVBatt <= 3.4) NewTone(buzzerPin,6,1000);
  if (isDebug) { Serial.print("VBatt="); Serial.println(SensorVBatt); }
}

Piezas personalizadas y envolventes

Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos Variometro Acústico Ultra‑Sensible: Barómetro de Precisión para Pilotos

Esquemáticos

Archivo Fritzing: vario_R1XzPifiX4.fzz

Proceso de manufactura

  1. Barómetro Aneroide: Diseño, Historia y Futuro de la Medición de Presión
  2. Detector de voltaje sensible: construye un detector de señal de audio de alta sensibilidad
  3. Técnica Avanzada de Detección Identifica Defectos en Transistores con Sensibilidad Sin Precedentes
  4. Sensores de tensión ultra-delgados MXene revolucionarios mejoran precisión y seguridad de brazos robóticos
  5. Receptores Ópticos Avanzados para Comunicaciones Espaciales
  6. Almacene y gestione datos sensibles de forma segura con Google Cloud Secret Manager
  7. Amstrong® Ultra 650MC – Acero de Alta Resistencia y Bajo Carbono para una Soldabilidad Superior
  8. Amstrong® Ultra 650MCT – Acero de Alta Resistencia y Bajo Carbono para una Soldabilidad Superior
  9. Amstrong® Ultra 700MC – Acero de Grano Fino de Alta Resistencia para Soldadura Superior
  10. Amstrong® Ultra 700MCT – Acero de Ultra Alto Límite Elástico, Bajo Carbono y Grano Fino para Soldabilidad Excepcional
  11. Cromo de Ultra Alta Pureza (UHP Cr) – Calidad 99,95%+ para Aplicaciones Críticas