Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Akoestische variometer (ultragevoelige barometer)

Componenten en benodigdheden

SparkFun Arduino Pro Mini 328 - 3.3V/8MHz
× 1

Over dit project

Inleiding:

Het is een instrument dat door piloten wordt gebruikt tijdens vluchten (zweefvliegtuig, paraglider, hanglider, ballon, enz.) om de kern van de thermiek te helpen vinden en steeds beter in de lucht te klimmen.

Korte beschrijving:

Het is een zeer gevoelige barometer die geluiden afgeeft bij klimmen (omhoog gaan) en ook bij zinken (dalen). Geluiden zijn eenvoudige piep-piep, elke seconde, of twee per seconde of meer tijdens het klimmen (meer klimsnelheid =piepjes met hogere frequentie):het is zo gevoelig dat het net na een paar centimeter (!) per seconde begint te piepen; u kunt proberen uw arm langzaam op te tillen de Vario in de hand houden om het geluid te verkrijgen. In het geval van zinksnelheid zendt het lange (ononderbroken) piepjes uit met -1 m/sec of meer.

Onderdelenlijst:

  • Arduino Pro Mini 3.3v 8 Mhz als MCU
  • GY-63 (MS5611) luchtdruksensor 3.3v
  • Dipschakelaar 8
  • Zoemer (actief met interne oscillator)
  • Multiplexer 8x1 4051 3.3v
  • LiPo-batterij 1s 3.7v 350mAh + 10cm rood/zwarte draad en M+F-connectoren
  • Voltage step-up module + USB LiPo-oplader, TP5400 van AZDelivery;
  • Een paar weerstanden, 8x4.7k netwerkweerstand, 220, 2x10k en condensatoren 47uF, 470uF
  • Resetbare zekering 0,5A
  • Kleine plastic ABS zwarte doos, afmeting 78x39x22 mm
  • Verschuifbare aan/uit-schakelaar
  • 6-pins vrouwelijke connector (voor FTDI)
  • 17 pinnen mannelijk (2x, 2x, 2x, 2x, 2x, 4x, 1x, 1x en 1x)
  • 4 pinnen mannelijk 90° voor P-sensor circuit
  • 30 cm stijve draad, met plastic omhuld, voor jumpers en verbindingen
  • Groen snoer

Het bovenstaande Fritzing-schema laat alles zien je moet het circuit bouwen. Let op, de bruine "keramische condensator", net onder de zwarte schakelaar, is in plaats daarvan een resetbare zekering (ik heb er niet het juiste ontwerp voor gevonden). In plaats van de 8 x weerstanden heb ik een enkele component gebruikt, een weerstandsnetwerk, het bevat 8 x 4,7K ohm, allemaal binnenin; kijk naar de volgende foto om het te vinden, is moeilijk te vinden, is de zwarte bovenaan de blauwe dipswitch, deze heeft negen pinnen, één gemeenschappelijk, de andere acht voor de weerstanden. Het Fritzing-schemabestand om te downloaden is hieronder beschikbaar.

De betekenis van de dipswitch:

Ik gebruikte graag de blauwe dipswitch , 8 x zeer kleine aan/uit schakelaars in een gekleurde behuizing, om de parameters voor de Vario werking te selecteren en te wijzigen. Het is een tabel voor deze parameters die hierboven wordt getoond en hier als volgt wordt uitgelegd:

  • 1 - niet gebruikt
  • 2 - volume laag of hoog
  • 3 en 4 - zinkend alarm m/sec:-999 -1 -2 -3
  • 5 en 6 - piepfrequentie Hz:+1 +1,5 +2 +3
  • 7 en 8 - gevoeligheid m/sec:+0.0 +0.1 +0.2 +0.5

Pin 1 wordt niet gebruikt , elke positie, aan of uit, verandert niets.

Pin 2 wijzigt het volumeniveau van de zoemer; het werkt elektrisch:wanneer de pin erop zit, wordt de weerstand in serie met de zoemer kortgesloten en wordt meer stroom doorgelaten voor pieptonen met een hoger volume.

Pen 3 en 4 stellen het zinkniveau in (naar beneden) waaronder de Vario beeeeeeeep zal spelen; pinnen worden gebruikt als binaire code, twee bits, 4 instellingen:00=0, 01=1, 10=2 11=3; je zou het zinkende alarm kunnen instellen op -999 m/sec (het betekent geen limiet, het zal nooit piepen) met pin 3=uit en pin 4=uit (binair 00); u kunt de andere waarden instellen op respectievelijk -1, -2 of -3 m/sec met pin 3=uit/4=aan, 3=aan/4=uit en 3=aan/4=aan. Op positie 2 zal de Vario bijvoorbeeld alleen piepen bij een zinksnelheid van meer dan -2 m/sec. Voor het testen moet je proberen een lift te gebruiken... die afdaalt van verdieping 3 naar verdieping nummer 0, of snel de laddertrappen loopt...

Pen 5 en 6 stellen de piepfrequentie in , ze werken samen als binaire code zoals hierboven uitgelegd voor de andere paar pinnen; bij dezelfde klimsnelheid, ingesteld op +2Hz, piept-piep sneller dan op +1Hz. Sommige mensen willen graag langzame piepjes en minder "stress" :-)

Pen 7 en 8 stellen de gevoeligheid van het instrument in :+0.0 betekent maximale gevoeligheid bij opgaande beweging, het heeft minder dan 10 cm/sec snelheid nodig om te piepen-piepen; in deze positie piept het instrument soms, zelfs stabiel op zijn plaats, waarbij het zeer kleine drukveranderingen opvangt (d.w.z. het sluiten van een deur in de kamer kan de luchtdruk een beetje verhogen); het vangt ook normale elektrische "geluiden" op, maar is behoorlijk stabiel en nuttig. Op de 4e positie hebben we een gevoeligheid van +0,5 m/sec, beduidend minder gevoelig voor luchtdrukveranderingen, je hebt "veel" meer snelheid nodig om omhoog te klimmen om een ​​piep-piep te krijgen. Probeer voor het testen een lift te gebruiken... van verdieping 0 naar verdieping 3...

Vanuit het oogpunt van elektronische schakelingen worden pinnen 1 en 3-8 analoog gelezen via de multiplexer 4051-chip, waarna de software beslist of deze aan of uit staat, waarden> 512 of niet:hij heeft 8 ingangen op 1 gemeenschappelijke poorten aangesloten op de Arduino als ingang. Om te selecteren welke van de 8 poorten de aan/uit-posities van de dipswitch moet lezen, stelt de MCU (Arduino) 3 bits in de output in die je al kent zoals het werkt:000, 001, 010, 011, 100, 101, 110, 111 (0, 1, 2, 3, 4, 5, 6, 7 =8 poorten =8 aan/uit schakelaars). Bekijk de code van de "readDIPswitch()"-functie.

Let op de batterij:

De twee 10k-weerstanden samen met de 47uF-condensator werken als spanningsdeler om de batterijspanning te testen. Het is bekend dat LiPo kritiek is bij ontlading onder 3,3v om deze reden wordt elke 10 seconden (BATTinterval) de functie "checkBATT()" aangeroepen en in geval van lage spanning zal de zoemer u informeren met 6 korte pieptonen per seconde. Wacht niet te lang met uitschakelen en laad snel weer op!

Het is erg BELANGRIJK dat u eraan denkt om ten minste één GAT in de doos te maken om lucht door te laten voor veranderingen in de sensordruk. Ik heb twee gaten gemaakt zoals je op de afbeelding ziet:een is voor het luisteren van de zoemerpiepjes en een voor het zien van de oplaadstatus-led wanneer deze is aangesloten op een micro-USB-kabel en oplader. Ah ja, het is ook een ander gat voor de micro-USB. Met gaten is de Variometer niet meer waterdicht...

Het groene koord is om hem veilig ergens aan boord te haken:je wilt hem absoluut niet kwijt!

De printplaat:

Wordt een enkelzijdige PCB gebruikt, daarom moest ik een paar draadjumpers toevoegen (de stippellijnen) om routes voor het hele circuit op te lossen. Volgt hier het gezicht van de componenten, maar hieronder heb je beide bestanden, componenten en soldeervlakken, gespiegeld, om te downloaden en af ​​​​te drukken via een laserprinter op "gele" of "blauwe" vellen. Ik heb de gele gebruikt, maar ze zeggen dat de blauwe beter zijn (de prijs is hoger). Denk er bij het afdrukken aan de tonerbesparingsinstellingen uit te schakelen, maar gebruik in plaats daarvan een resolutie van 1200 dpi voor een echt diepzwart resultaat. Het toneroverdrachtsproces van magische vellen naar PCB wordt gemaakt door het gebruik van een heet strijkijzer... Het printen van beide PCB-vlakken maakt het project "professioneel".

Er worden een tiental Arduino-pinnen gebruikt. Het solderen van de ongebruikte pinnen is niet nodig en niet verplicht:laat ze vrij. Plaats de 6-pins vrouwelijke header op de bovenzijde van de Mini Pro om, indien nodig in de toekomst, een FTDI-interface te kunnen aansluiten voor verdere updates van de software.

Het USB step-up stroomcircuit ondersteboven wordt geplaatst. Om het op zijn plaats te houden, gebruikt u twee sterke pinnen, normale mannelijke pinnen die worden gebruikt voor Arduino maar zonder de plastic riem, naast de USB-connector waar "Power USB" staat:gebruik het soldeer om alles samen te voegen, twee pinnen en een USB-connector. 3 draden verbinden Gnd-, Batt+ en Out+ aansluitingen met dit circuit.

De barometrische sensor:

GY-63 (MS5611) luchtdruksensor, P-sensor op de print, is ingesloten in een kleine printplaat en Arduino communiceert ermee via de i2c-bus. Het gebruik is eenvoudig, het bevat ook een temperatuursensor die ik niet heb gebruikt.

Het programma roept de "readPensor()"-functie aan die de kern van de software is. Wat we nodig hebben is de relatieve verandering van hoogte, de functie leest vele malen per seconde en verzamelt in PrexTotal; elke halve seconde (PrexInterval) berekent het de gemiddelde hoogteverandering en gaat verder met piep-piep of lang bieeeeeep gezien de dipswitch-instellingen. Deze eenvoudige manier om gegevens te filteren is goed genoeg; Ik heb de interessante Kalman-filtermethode geprobeerd, en ook de ingewikkelde filteralgoritmen van Madgwick en Mahony zonder noemenswaardige voordelen voor dit projectdoel.

Updates / Tips:

Dat is alles. Ik heb echt genoten van dit project! Doe het ook! :-)

Marco Zonca

Code

  • Akoestische variometercode
Akoestische variometercodeArduino
/* Deze schets fungeert als Variometer voor paragliding, door Marco Zonca, 2020 Arduino MiniPro 3.3 als CPU, GY-63 (MS5611) luchtdruksensor, 8 x dipswitch, zoemer, Mux 4051, lipo 1s 3.7v 350mA, 3.7 v -> 5v spanningsverhoging + lipo usb-oplader; DipSwitch:1=niet gebruikt 2=hw laag/hoog zoemervolume 3=\ sink alarm:OFF -1,0 -2,0 -3,0 m/sec 4=/ 5=\ frequentie piepjes:+1,0 +1,5 +2,0 +3,0 Hz 6=/ 7=\ gevoeligheid:+0.0 +0.1 +0.2 +0.5 m/sec 8=/ */#include #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 gevoeligheid[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;float n2=0; float SensorVBatt=0;double referencePressure =0;unsigned long prevPrexMillis =0;unsigned long currPrexMillis =0;double realPressure =0;float absoluteAltitude =0;float relativeAltitude =0;float avgAltitude =0;float avgPrevAltitude =0;long PrexCounter =0;float PrexTotal =0;float PrexVario =0;boolean is FirstCalc =waar; MS5611 psensor; // druksensorvoid setup () {Serial.begin (9600); pinMode (muxbit0, UITGANG); pinMode (muxbit1, UITGANG); pinMode (muxbit2, UITGANG); pinMode (zoemerPin, UITGANG); gevoeligheid[4]=0; gevoeligheid[3]=0,5; gevoeligheid [2]=0,2; gevoeligheid[1]=0,1; gevoeligheid[0]=0,0; frequentie[4]=0; frequentie[3]=3.0; frequentie[2]=2.0; frequentie[1]=1,5; frequentie[0]=1,0; gootsteenalarm[4]=0; zinkalarm[3]=-3,0; gootsteenalarm [2]=-2.0; zinkenalarm[1]=-1.0; gootsteenalarm[0]=-999,9; leesDIPschakelaar(); psensor.begin(); referencePressure =psensor.readPressure(); if (isDebug ==true) Serial.println("Vario staat aan"); NewTone (buzzerPin,4); vertraging (750); noNewTone();} // end setup()void loop() { readPensor(); if ((prevDIPSWmillis+DIPSWinterval) =PrexInterval) { avgAltitude =PrexTotal / PrexCounter; // gemiddelde if (isFirstCalc ==true) {avgPrevAltitude=avgAltitude; isFirstCalc=false; } PrexVario=(avgAltitude-avgPrevAltitude) * (1000/PrexInterval); // vario mSec if ((PrexVario <=gevoeligheid [4]) &&(PrexVario>=sinkalarm[4])) { noNewTone(); } if ((PrexVario> gevoeligheid [4])) { // til piep piep + NewTone (buzzerPin,((int)(PrexVario+frequentie[4]))); } if ((PrexVario  512) dipswitch[n]=false; // lees geselecteerde poort anders dipswitch[n]=true; if (isDebug ==true) { if (dipswitch[n]==false) Serial.print("0"); else Serial.print("1"); } } // end for if (isDebug ==true) Serial.println(""); s=0; if (dipswitch[7]==true) s =s + 2; if (dipswitch[8]==true) s =s + 1; gevoeligheid[4]=gevoeligheid[s]; if (isDebug ==true) { Serial.print("Sensibility="); Serial.println(gevoeligheid[4]); } s=0; if (dipswitch[5]==true) s =s + 2; if (dipswitch[6]==true) s =s + 1; frequentie[4]=frequentie[s]; if (isDebug ==true) { Serial.print("Frequency="); Serial.println(frequentie[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]); }} // einde readDIPswitch () void checkBATT () { // check lipo / liion-batterijspanning n1 =analogRead (vbattPin); n2=(((6,60 * n1) / 1023,00)); SensorVBatt=(n2 + ((n2 * 0,0) /100)); // willekeurige correctie (niet actief =0,0%) if (SensorVBatt <=3,4) { NewTone (buzzerPin,6,1000); } if (isDebug ==true) { Serial.print("VBatt="); Serial.println(SensorVBatt); }} // einde checkBATT()

Aangepaste onderdelen en behuizingen

Schema's

vario_R1XzPifiX4.fzz

Productieproces

  1. Bewaar en beheer gevoelige gegevens met Secret Manager
  2. Gevoelige spanningsdetector
  3. Aneroïde Barometer
  4. Gevoelige methode voor het detecteren van transistordefecten
  5. Ultradunne en zeer gevoelige reksensoren
  6. Gevoelige optische ontvangers voor ruimte
  7. Amstrong® Ultra 650MC
  8. Amstrong® Ultra 650MCT
  9. Amstrong® Ultra 700MC
  10. Amstrong® Ultra 700MCT
  11. Ultra High Purity Chroom (UHP Cr)>99,95%