Variômetro Acústico (Barômetro Ultra Sensível)
Componentes e suprimentos
| × | 1 |
Sobre este projeto
Introdução:
É um instrumento usado pelos pilotos durante os voos (planador, parapente, hanglider, balão, etc.) para ajudar a encontrar o núcleo das térmicas e subir mais e melhor no ar.
Breve descrição:
É um barômetro muito sensível que emite sons ao subir (subir) e também ao afundar (descer). Os sons são simples bip-bip, a cada segundo, ou dois por segundo ou mais durante a subida (mais taxa de subida =bipes de frequência mais alta):é tão sensível que começa a bipar logo após alguns centímetros (!) Por segundo; você pode tentar levantar o braço lentamente segurando na mão o Vario para obter o som. Em caso de taxa de afundamento, ele emite beeeeeeeps longos (contínuos) a -1 m / seg ou mais.
Lista de componentes:
- Arduino Pro Mini 3.3v 8 Mhz como MCU
- GY-63 (MS5611) sensor de pressão barométrica 3,3v
- Dipswitch 8
- Buzzer (ativo com oscilador interno)
- Multiplexador 8x1 4051 3.3v
- Bateria LiPo 1s 3,7v 350mAh + 10cm fio vermelho / preto e conectores M + F
- Módulo de aumento de tensão + carregador USB LiPo, TP5400 da AZDelivery;
- Alguns resistores, resistência de rede 8x4,7k, 220, 2x10k e capacitores 47uF, 470uF
- Fusível reajustável 0,5A
- Pequena caixa preta de plástico ABS, tamanho 78x39x22 mm
- Botão deslizante liga / desliga
- Conector fêmea do cabeçalho de 6 pinos (para FTDI)
- 17 pinos machos (2x, 2x, 2x, 2x, 2x, 4x, 1x, 1x e 1x)
- 4 pinos machos 90 ° para circuito do sensor P
- 30 cm de fio rígido, coberto de plástico, para jumpers e conexões
- cordão verde
O esquema do Fritzing acima mostra tudo você precisa construir o circuito. Por favor, preste atenção que o "capacitor de cerâmica" marrom, logo abaixo da chave preta, é um fusível reinicializável (não encontrei o design certo para ele). No lugar dos 8 x resistores usei um único componente, uma rede de resistores, que inclui 8 x 4,7K ohms, todos dentro; olhe a próxima foto para achar, é difícil achar, é a preta no topo da dipswitch azul, ela tem nove pinos, um comum, os outros oito para os resistores. O arquivo esquemático do Fritzing para download está disponível abaixo.
O significado da dipswitch:
Eu gostava de usar o dip-switch azul , 8 x interruptores liga / desliga muito pequenos em uma caixa colorida, para selecionar e alterar os parâmetros de funcionamento do Vario. É uma tabela para esses parâmetros mostrados acima e explicados aqui da seguinte forma:
- 1 - não usado
- 2 - volume baixo ou alto
- 3 e 4 - alarme de afundamento m / seg:-999 -1 -2 -3
- 5 e 6 - frequência do bipe Hz:+1 +1,5 +2 +3
- 7 e 8 - sensibilidade m / s:+0,0 +0,1 +0,2 +0,5
Pino 1 não é usado , qualquer posição, ligada ou desligada, não muda nada.
O pino 2 altera o nível de volume da campainha; ele opera eletricamente:quando o pino está colocado, ele causa um curto-circuito no resistor em série com a campainha e deixa passar mais corrente para ter bipes de volume mais alto.
Pinos 3 e 4 definem o nível de afundamento (descendo) abaixo do qual o Vario vai jogar beeeeeeeeep; os pinos são usados como código binário, dois bits, 4 configurações:00 =0, 01 =1, 10 =2 11 =3; você poderia definir o alarme de afundamento em -999 m / s (significa sem limite, nunca emitirá bipes) com pino 3 =desligado e pino 4 =desligado (binário 00); você pode definir os outros valores para -1, -2 ou -3 m / seg respectivamente com pino 3 =off / 4 =on, 3 =on / 4 =off e 3 =on / 4 =on. Por exemplo, na posição 2, o Vario seráeeeeeeeeep apenas na taxa de afundamento superior a -2 m / seg. Para o teste, você deve tentar usar um elevador ... descendo do andar número 3 para o andar 0, ou correr rapidamente pelos degraus da escada ...
Pinos 5 e 6 definem a frequência do bipe , eles funcionam juntos como código binário conforme explicado acima para os outros pinos; na mesma velocidade de subida, definida em + 2 Hz, emitirá bipe-bipe mais rapidamente do que em + 1 Hz. Algumas pessoas gostam de bipes lentos e menos "estresse" :-)
Pinos 7 e 8 definem a sensibilidade do instrumento :+0,0 significa sensibilidade máxima no movimento de subida, precisa de menos de 10cm / s de velocidade para bip-bip; nesta posição, por vezes, o instrumento emite um sinal sonoro, mesmo estável no lugar, captando mudanças de pressão muito pequenas (ou seja, fechar uma porta na sala pode aumentar um pouco a pressão do ar); ele também capta "ruídos" elétricos normais, mas é bastante estável e útil. Na 4ª posição temos sensibilidade de +0,5 m / seg, significativamente menos sensível às mudanças de pressão do ar, você precisa de "muito" mais velocidade subindo para subir a altitude para obter beep-beep. Para o teste, você deve tentar usar um elevador ... do andar número 0 ao andar 3 ...
Do ponto de vista do circuito eletrônico, os pinos 1 e 3-8 são lidos analogicamente por meio do chip multiplexador 4051, então o software decide se está ligado ou desligado, valores> 512 ou não:tem 8 entradas para 1 comum portas conectadas ao Arduino como entrada. Para selecionar qual das 8 portas ler as posições liga / desliga do Dipswitch, o MCU (Arduino) define 3 bits na saída que você já conhece como funciona:000, 001, 010, 011, 100, 101, 110, 111 (0, 1, 2, 3, 4, 5, 6, 7 =8 portas =8 interruptores liga / desliga). Dê uma olhada no código da função "readDIPswitch ()".
Cuidado com a bateria:
Os dois resistores de 10k junto com o capacitor de 47uF funcionam como divisor de tensão para testar a tensão da bateria. LiPo são conhecidos por serem críticos quando descarregados abaixo de 3.3v por isso a cada 10 segundos (intervalo BATT) é chamada a função "checkBATT ()" e em caso de baixa tensão a campainha avisa com 6 bips curtos por segundo. Não espere muito para desligar e recarregue logo!
É muito IMPORTANTE lembrar de fazer pelo menos um FURO na caixa para permitir a passagem de ar para alterações de pressão do sensor. Eu fiz dois furos como você pode ver na imagem:um é para ouvir os bipes da campainha e o outro para ver o LED de status de carregamento quando conectado ao cabo micro USB e ao carregador. Ah sim, é outro buraco para o micro USB também. Com orifícios, o Variômetro não é mais à prova d'água ...
O fio verde é para prendê-lo com segurança em algum lugar a bordo:você não quer perdê-lo, com certeza!
O PCB:
É usado um PCB de face única, por isso tive que incluir alguns jumpers de fio (os de linha pontilhada) para resolver rotas para todo o circuito. Segue aqui a face dos componentes, mas abaixo você tem os dois arquivos, componentes e faces de solda, espelhados, para download e impressão por meio de uma impressora a laser em folhas "amarelas" ou "azuis". Usei os amarelos mas dizem que os azuis são melhores (o preço é mais caro). Ao imprimir, lembre-se de desativar as configurações de economia de toner, em vez disso, use a resolução de 1200 dpi para obter um resultado de preto profundo real. O processo de transferência do toner das folhas mágicas para o PCB é feito com o uso de um ferro quente ... Imprimir ambas as faces do PCB torna o projeto "profissional".
São usados uma dezena de pinos do Arduino. Soldar os pinos não usados é desnecessário e não obrigatório:deixe-os livres. Coloque o conector fêmea de 6 pinos na face superior do Mini Pro para permitir, se necessário no futuro, a interface FTDI ser conectada para futuras atualizações do software.
O circuito de alimentação USB step-up é colocado de cabeça para baixo. Para prendê-lo no lugar use dois pinos fortes, pinos machos normais usados para Arduino mas sem o cinto de plástico, ao lado do conector USB onde está escrito "Power USB":use a solda para juntar tudo, dois pinos e o conector USB. 3 fios conectam os terminais Gnd-, Batt + e Out + a este circuito.
O sensor barométrico:
O sensor de pressão barométrica GY-63 (MS5611), P-Sensor no PCB, é colocado em uma pequena placa de circuito e o Arduino se comunica com ele por meio de um barramento i2c. O uso é simples, inclui também um sensor de temperatura que não usei.
O programa chama a função "readPSensor ()" que é o núcleo do software. O que precisamos é da mudança relativa de altitude, a função lê muitas vezes por segundo e coleta no PrexTotal; a cada meio segundo (PrexInterval) ele calcula a mudança média de altitude e prossegue com bip-bip ou long beeeeeeep considerando as configurações do dipwitch. Essa maneira simples de filtrar dados é boa o suficiente; Eu tentei a interessante forma de filtragem de Kalman e também os complicados algoritmos de filtragem Madgwick e Mahony sem benefícios significativos para o propósito deste projeto.
Atualizações / dicas:
Isso é tudo. Gostei muito deste projeto! Faça isso também! :-)
Marco Zonca
Código
- Código do variômetro acústico
Código do variômetro acústico Arduino
/ * Este esboço atua como variômetro para parapente, por Marco Zonca, 2020 Arduino MiniPro 3.3 como CPU, GY-63 (MS5611) sensor de pressão barométrica, 8 x dipswitch, buzzer, Mux 4051, lipo 1s 3.7v 350mA, 3.7 v -> 5v tensão stepup + lipo usb carregador; DipSwitch:1 =não usado 2 =alto / baixo volume da campainha 3 =\ alarme de coletor:OFF -1,0 -2,0 -3,0 m / seg 4 =/ 5 =\ bipes de frequência:+1,0 +1,5 +2,0 +3,0 Hz 6 =/ 7 =\ sensibilidade:+0,0 +0,1 +0,2 +0,5 m / s 8 =/ * / # inclui#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; sensibilidade flutuante [5 ]; frequência de flutuação [5]; alarme de afundamento de flutuação [5]; longo n =0; interruptor de imersão booleano [9]; Quedas de string; prevDIPSWmillis longo sem sinal =0; prevBATTmillis longo sem sinal =0; flutuante n1 =0; flutuante n2 =0; float SensorVBatt =0; double referencePressure =0; float long prevPrexMillis =0; float long currPrexMillis =0; double realPressure =0; float absoluteAltitude =0; float relativeAltitude =0; float avgAltitude =0; float avgPrevAltitude =0; float PrexCounter longo =0; float prexCounter 0; float PrexTotal =0; float PrexVario =0; booleano é FirstCalc =true; MS5611 psensor; // configuração do sensorvoid de pressão () {Serial.begin (9600); pinMode (muxbit0, OUTPUT); pinMode (muxbit1, OUTPUT); pinMode (muxbit2, OUTPUT); pinMode (buzzerPin, OUTPUT); sensibilidade [4] =0; sensibilidade [3] =0,5; sensibilidade [2] =0,2; sensibilidade [1] =0,1; sensibilidade [0] =0,0; frequência [4] =0; frequência [3] =3,0; frequência [2] =2,0; frequência [1] =1,5; frequência [0] =1,0; alarme dissipador [4] =0; sinkalarm [3] =- 3,0; sinkalarm [2] =- 2,0; sinkalarm [1] =- 1,0; alarme dissipador [0] =- 999,9; readDIPswitch (); psensor.begin (); referencePressure =psensor.readPressure (); if (isDebug ==true) Serial.println ("Vario está ligado"); NewTone (buzzerPin, 4); atraso (750); noNewTone ();} // fim da configuração () void loop () {readPSensor (); if ((prevDIPSWmillis + DIPSWinterval) =PrexInterval) {avgAltitude =PrexTotal / PrexCounter; // média if (isFirstCalc ==true) {avgPrevAltitude =avgAltitude; isFirstCalc =false; } PrexVario =(avgAltitude-avgPrevAltitude) * (1000 / PrexInterval); // vario mSec if ((PrexVario <=sensibilidade [4]) &&(PrexVario> =sinkalarm [4])) {noNewTone (); } if ((PrexVario> sensibilidade [4])) {// levantar beep beep + NewTone (buzzerPin, ((int) (PrexVario + frequência [4]))); } if ((PrexVario 512) dipswitch [n] =false; // lê a porta selecionada, senão dipswitch [n] =true; if (isDebug ==true) {if (dipswitch [n] ==false) Serial.print ("0"); senão Serial.print ("1"); }} // fim para if (isDebug ==true) Serial.println (""); s =0; if (dipswitch [7] ==true) s =s + 2; if (dipswitch [8] ==true) s =s + 1; sensibilidade [4] =sensibilidade [s]; if (isDebug ==true) {Serial.print ("Sensibility ="); Serial.println (sensibilidade [4]); } s =0; if (dipswitch [5] ==true) s =s + 2; if (dipswitch [6] ==true) s =s + 1; frequência [4] =frequência [s]; if (isDebug ==true) {Serial.print ("Frequency ="); Serial.println (frequência [4]); } s =0; if (dipswitch [3] ==true) s =s + 2; if (dipswitch [4] ==true) s =s + 1; sinkalarm [4] =sinkalarm [s]; if (isDebug ==true) {Serial.print ("SinkAlarm ="); Serial.println (sinkalarm [4]); }} // fim readDIPswitch () void checkBATT () {// verificar a tensão da bateria lipo / liion n1 =analogRead (vbattPin); n2 =((((6,60 * n1) / 1023,00)); SensorVBatt =(n2 + ((n2 * 0,0) / 100)); // correção arbitrária (não ativa =0,0%) if (SensorVBatt <=3.4) {NewTone (buzzerPin, 6,1000); } if (isDebug ==true) {Serial.print ("VBatt ="); Serial.println (SensorVBatt); }} // fim do checkBATT ()
Peças personalizadas e gabinetes
Esquemas
vario_R1XzPifiX4.fzzProcesso de manufatura
- Armazene e gerencie dados confidenciais com o gerenciador secreto
- Barômetro Aneróide
- Método sensível para detectar defeitos no transistor
- Sensores de deformação ultrafinos e altamente sensíveis
- Receptores ópticos sensíveis para espaço
- Amstrong® Ultra 650MC
- Amstrong® Ultra 650MCT
- Amstrong® Ultra 700MC
- Amstrong® Ultra 700MCT
- Crômio de pureza ultra alta (UHP Cr)>99,95%