Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Variômetro Acústico (Barômetro Ultra Sensível)

Componentes e suprimentos

SparkFun Arduino Pro Mini 328 - 3,3 V / 8 MHz
× 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.fzz

Processo de manufatura

  1. Armazene e gerencie dados confidenciais com o gerenciador secreto
  2. Barômetro Aneróide
  3. Método sensível para detectar defeitos no transistor
  4. Sensores de deformação ultrafinos e altamente sensíveis
  5. Receptores ópticos sensíveis para espaço
  6. Amstrong® Ultra 650MC
  7. Amstrong® Ultra 650MCT
  8. Amstrong® Ultra 700MC
  9. Amstrong® Ultra 700MCT
  10. Crômio de pureza ultra alta (UHP Cr)>99,95%