Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Akustisches Variometer (ultraempfindliches Barometer)

Komponenten und Verbrauchsmaterialien

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

Über dieses Projekt

Einführung:

Es ist ein Instrument, das von Piloten während Flügen verwendet wird (Segelflugzeug, Gleitschirm, Drachenflieger, Ballon usw.), um den Kern der Thermik zu finden und die Luft besser und besser zu erklimmen.

Kurzbeschreibung:

Es ist ein sehr empfindliches Barometer, das Töne ausgibt beim Steigen (nach oben) und auch beim Sinken (nach unten). Töne sind einfache Piep-Pieps, jede Sekunde oder zwei pro Sekunde oder mehr während des Steigflugs (mehr Steigrate =höhere Frequenzen):Es ist so empfindlich, dass es bereits nach wenigen Zentimetern (!) pro Sekunde anfängt zu piepen; Sie können versuchen, Ihren Arm langsam anzuheben Vario in der Hand halten, um den Ton zu erhalten. Bei Sinkgeschwindigkeit gibt es lange (kontinuierliche) Piepse mit -1 m/sec oder mehr ab.

Komponentenliste:

  • Arduino Pro Mini 3.3v 8 Mhz als MCU
  • GY-63 (MS5611) Luftdrucksensor 3,3 V
  • Dipschalter 8
  • Summer (aktiv mit internem Oszillator)
  • Multiplexer 8x1 4051 3,3 V
  • LiPo Akku 1s 3,7V 350mAh + 10cm rot/schwarzes Kabel und M+F Stecker
  • Spannungserhöhungsmodul + USB-LiPo-Ladegerät, TP5400 von AZDelivery;
  • Einige Widerstände, 8x4,7k Netzwerkwiderstand, 220, 2x10k und Kondensatoren 47uF, 470uF
  • Rückstellbare Sicherung 0,5A
  • Kleine schwarze Plastikbox aus ABS, Größe 78x39x22 mm
  • Ein/Aus-Schiebeschalter
  • 6-poliger Buchsenstecker (für FTDI)
  • 17-poliger Stecker (2x, 2x, 2x, 2x, 2x, 4x, 1x, 1x und 1x)
  • 4 Pins Stecker 90° für P-Sensor-Schaltung
  • 30 cm starrer Draht, kunststoffummantelt, für Jumper und Anschlüsse
  • Grüne Schnur

Der obige Fritzing-Schema zeigt alles Sie müssen die Schaltung aufbauen. Bitte beachten Sie, dass der braune "Keramikkondensator", direkt unter dem schwarzen Schalter, stattdessen eine rückstellbare Sicherung ist (ich habe nicht die richtige Ausführung dafür gefunden). Anstelle der 8 x Widerstände habe ich eine einzelne Komponente, ein Widerstandsnetzwerk, verwendet, es enthält 8 x 4,7K Ohm, alle im Inneren; Schauen Sie sich das nächste Bild an, um es zu finden, ist schwer zu finden, ist der schwarze oben am blauen Dipschalter, er hat neun Pins, einen gemeinsamen, die anderen acht für die Widerstände. Die Fritzing-Schemadatei zum Herunterladen ist unten verfügbar.

Die Bedeutung des Dipschalters:

Ich habe gerne den blauen Dipswitch verwendet , 8 x sehr kleine Ein-/Ausschalter in einem farbigen Gehäuse, zum Auswählen und Ändern der Parameter für die Vario-Funktion. Es ist eine Tabelle für diese Parameter, die oben gezeigt und hier wie folgt erklärt wird:

  • 1 - nicht verwendet
  • 2 - Lautstärke niedrig oder hoch
  • 3 und 4 - Sinkalarm m/sec:-999 -1 -2 -3
  • 5 und 6 - Tonfrequenz Hz:+1 +1,5 +2 +3
  • 7 und 8 - Empfindlichkeit m/s:+0,0 +0,1 +0,2 +0,5

Pin 1 wird nicht verwendet , jede Position, an oder aus, ändert nichts.

Pin 2 ändert die Lautstärke des Summers; Es funktioniert elektrisch:Wenn der Pin auf ihm liegt, schließt er den Widerstand in Reihe mit dem Summer und lässt mehr Strom durch, um höhere Signaltöne zu erhalten.

Pin 3 und 4 legen das Sinkniveau fest (nach unten) unterhalb dessen das Vario beeeeeeeeep spielt; Pins werden als Binärcode verwendet, zwei Bits, 4 Einstellungen:00=0, 01=1, 10=2 11=3; Sie können den Sinkenalarm auf -999 m/sek einstellen (das bedeutet keine Begrenzung, er piept nie) mit Pin 3 =Aus und Pin 4 =Aus (binär 00); Sie können die anderen Werte auf -1, -2 bzw. -3 m/sec mit Pin 3=off/4=on, 3=on/4=off und 3=on/4=on einstellen. Zum Beispiel wird das Vario auf Position 2 nur bei Sinkgeschwindigkeiten von mehr als -2 m/sek beeeeeeeeeep. Zum Testen sollten Sie versuchen, einen Aufzug zu benutzen ... von Etage 3 bis Etage 0 herunterzufahren oder schnell die Leiterstufen zu laufen ...

Pin 5 und 6 legen die Signaltonfrequenz fest , arbeiten sie als Binärcode zusammen, wie oben für die anderen Pins erklärt; bei gleicher Steiggeschwindigkeit, eingestellt auf +2 Hz, ertönt ein Piepton schneller als bei +1 Hz. Manche Leute mögen langsames Piepen und weniger "Stress" :-)

Pin 7 und 8 stellen die Instrumentenempfindlichkeit ein :+0.0 bedeutet maximale Sensibilität bei der Aufwärtsbewegung, es braucht weniger als 10cm/s Geschwindigkeit um Piep-Piep zu erzeugen; in dieser Position piept das Instrument manchmal, auch wenn es an Ort und Stelle bleibt, und fängt sehr kleine Druckänderungen auf (d. h. das Schließen einer Tür im Raum kann den Luftdruck etwas erhöhen); Es fängt auch normale elektrische "Geräusche" ein, ist aber ziemlich stabil und nützlich. An der 4. Position haben wir eine Empfindlichkeit von +0,5 m/s, deutlich weniger empfindlich gegenüber Luftdruckänderungen, Sie benötigen "viel" mehr Geschwindigkeit, um die Steighöhe zu erreichen, um einen Piepton zu erhalten. Zum Testen sollten Sie versuchen, einen Aufzug zu benutzen... von Stockwerk 0 bis Stockwerk 3...

Aus elektronischer Sicht werden die Pins 1 und 3-8 analog über den Multiplexer 4051-Chip gelesen, dann entscheidet die Software, ob er an oder aus ist, Werte> 512 oder nicht:er hat 8 Eingänge auf 1 Masse Ports, die mit dem Arduino als Eingang verbunden sind. Um auszuwählen, welcher der 8 Ports die Ein-/Aus-Positionen des Dipschalters lesen soll, setzt die MCU (Arduino) 3 Bits in die Ausgabe, die Sie bereits kennen, wie es funktioniert:000, 001, 010, 011, 100, 101, 110, 111 (0, 1, 2, 3, 4, 5, 6, 7 =8 Ports =8 Ein/Aus-Schalter). Sehen Sie sich den Code der Funktion "readDIPswitch()" an.

Achten Sie auf die Batterie:

Die beiden 10k-Widerstände zusammen mit dem 47uF-Kondensator arbeiten als Spannungsteiler zum Testen der Batteriespannung. LiPo sind bekanntermaßen kritisch, wenn sie unter 3,3 V entladen werden Aus diesem Grund wird alle 10 Sekunden (BATTinterval) die Funktion "checkBATT()" aufgerufen und bei Unterspannung informiert Sie der Summer mit 6 kurzen Pieptönen pro Sekunde. Warten Sie nicht zu lange mit dem Ausschalten und laden Sie bald wieder auf!

Es ist sehr WICHTIG, dass Sie daran denken, mindestens ein LOCH in der Box zu machen, um Luft für Sensordruckänderungen durchzulassen. Ich habe zwei Löcher gemacht, wie Sie auf dem Bild sehen:eines zum Anhören der Summertöne und eines zum Anzeigen des Ladestatus-LED, wenn er an ein Micro-USB-Kabel und ein Ladegerät angeschlossen ist. Ah ja, es ist auch ein weiteres Loch für den Micro-USB. Mit Löchern ist das Variometer nicht mehr wasserdicht...

Die grüne Schnur soll es irgendwo an Bord sicher einhaken:Du willst es auf keinen Fall verlieren!

Die Platine:

Wird eine Single-Face-Platine verwendet, musste ich ein paar Drahtbrücken einbauen (die gepunkteten Linien), um Routen für die gesamte Strecke zu lösen. Hier folgt die Bauteilfläche, aber unten haben Sie beide Dateien, Bauteile und Lötflächen, gespiegelt, zum Herunterladen und Drucken mit einem Laserdrucker auf "gelben" oder "blauen" Blättern. Ich habe die gelben verwendet, aber sie sagen, die blauen sind besser (der Preis ist höher). Denken Sie beim Drucken daran, die Tonerspareinstellungen zu deaktivieren, verwenden Sie stattdessen eine Auflösung von 1200 dpi, um ein wirklich tiefes Schwarz zu erhalten. Der Tonertransferprozess von Magic Sheets auf PCB erfolgt mit einem heißen Bügeleisen... Das Drucken beider PCB-Flächen macht das Projekt "professionell".

Verwendet werden ein Dutzend Arduino-Pins. Das Anlöten der unbenutzten Pins ist unnötig und nicht erforderlich:lassen Sie sie frei. Platzieren Sie die 6-polige Buchsenleiste auf der Oberseite des Mini Pro, um bei Bedarf in Zukunft die FTDI-Schnittstelle für weitere Updates der Software anschließen zu können.

Der USB-Aufwärtsstromkreis wird auf den Kopf gestellt. Um es an Ort und Stelle zu halten, verwenden Sie zwei starke Stifte, normale Stifte, die für Arduino verwendet werden, aber ohne den Plastikgürtel, neben dem USB-Anschluss, auf dem "Power USB" steht:Verwenden Sie das Lötmittel, um alle zusammenzufügen, zwei Stifte und den USB-Anschluss. 3 Drähte verbinden Gnd-, Batt+ und Out+ mit diesem Stromkreis.

Der barometrische Sensor:

GY-63 (MS5611) barometrischer Drucksensor, P-Sensor auf der Platine, ist in einer kleinen Platine eingeschlossen und Arduino kommuniziert mit ihm über den i2c-Bus. Die Verwendung ist einfach, es enthält auch einen Temperatursensor, den ich nicht verwendet habe.

Das Programm ruft die Funktion "readPSensor()" auf, die den Kern der Software bildet. Was wir brauchen, ist die relative Veränderung von Höhe, die Funktion liest viele Male pro Sekunde und sammelt in PrexTotal; jede halbe Sekunde (PrexInterval) berechnet es die durchschnittliche Höhenänderung und fährt mit Piep-Piep fort oder lange beeeeeeep unter Berücksichtigung der Dipswitch-Einstellungen. Diese einfache Methode zum Filtern von Daten ist gut genug; Ich habe die interessante Kalman-Filtermethode ausprobiert und auch die komplizierten Madgwick- und Mahony-Filteralgorithmen ohne wesentliche Vorteile für diesen Projektzweck.

Updates / Tipps:

Das ist alles. Ich habe dieses Projekt wirklich genossen! Mach es auch! :-)

Marco Zonca

Code

  • Akustischer Variometer-Code
Akustischer VariometercodeArduino
/* Diese Skizze dient als Variometer für Paragliding, von Marco Zonca, 2020 Arduino MiniPro 3.3 als CPU, GY-63 (MS5611) barometrischer Drucksensor, 8 x Dipswitch, Summer, Mux 4051, Lipo 1s 3.7v 350mA, 3.7 v -> 5V Spannungserhöhung + Lipo-USB-Ladegerät; DipSwitch:1=nicht verwendet 2=hw low/high Summerlautstärke 3=\ Sinkalarm:OFF -1,0 -2,0 -3,0 m/sec 4=/ 5=\ Frequenztöne:+1,0 +1,5 +2,0 +3,0 Hz 6=/ 7=\ Empfindlichkeit:+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 Sensibilität[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 =true;MS5611 psensor; // Drucksensorvoid setup () { Serial.begin (9600); pinMode (muxbit0, AUSGANG); pinMode (muxbit1, AUSGANG); pinMode (muxbit2, AUSGANG); pinMode (SummerPin, AUSGANG); Sensibilität[4]=0; Sensibilität[3] =0,5; Sensibilität [2] =0,2; Sensibilität[1]=0,1; sensibilität[0]=0.0; Frequenz[4]=0; Frequenz [3] =3,0; Häufigkeit [2] =2,0; Häufigkeit[1]=1,5; Häufigkeit[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 ist eingeschaltet"); NewTone (SummerPin,4); Verzögerung (750); noNewTone();} // Setup beenden()void loop() {readPSensor(); if ((prevDIPSWmillis+DIPSWinterval) =PrexInterval) { avgAltitude =PrexTotal / PrexCounter; // Durchschnitt if (isFirstCalc ==true) { avgPrevAltitude=avgAltitude; isFirstCalc=false; } PrexVario=(avgAltitude-avgPrevAltitude) * (1000/PrexInterval); // vario mSec if ((PrexVario <=Sensibilität[4]) &&(PrexVario>=sinkalarm[4])) { noNewTone(); } if ((PrexVario> Sensibilität[4])) {// heben Beep Beep + NewTone (buzzerPin,((int)(PrexVario+Frequenz[4]))); } if ((PrexVario  512) dipswitch[n]=false; // Ausgewählten Port lesen else dipswitch[n]=true; if (isDebug ==true) { if (dipswitch[n]==false) Serial.print("0"); sonst Serial.print ("1"); } } // Ende für if (isDebug ==true) Serial.println (""); s =0; if (dipswitch[7]==true) s =s + 2; if (dipswitch[8]==true) s =s + 1; Sensibilität[4]=Empfindlichkeit[en]; if (isDebug ==true) {Serial.print("Sensibility="); Serial.println (Sensibilität[4]); } s=0; if (dipswitch[5]==true) s =s + 2; if (dipswitch[6]==true) s =s + 1; Frequenz[4]=Frequenz[s]; if (isDebug ==true) {Serial.print ("Frequency="); Serial.println (Frequenz[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]); }} // Ende readDIPswitch ()void checkBATT () { // Lipo / Liion-Batteriespannung überprüfen n1 =analogRead (vbattPin); n2=((((6,60 * n1) / 1023.00)); SensorVBatt=(n2 + ((n2 * 0,0)/100)); // willkürliche Korrektur (nicht aktiv =0.0 %) if (SensorVBatt <=3.4) { NewTone (buzzerPin,6,1000); aufrechtzuerhalten. Wenn (isDebug ==true) {Serial.print ("VBatt="); Serial.println (SensorVBatt); }} // checkBATT() beenden

Kundenspezifische Teile und Gehäuse

Schaltpläne

vario_R1XzPifiX4.fzz

Herstellungsprozess

  1. Sensible Daten mit Secret Manager speichern und verwalten
  2. Aneroidbarometer
  3. Empfindliche Methode zur Erkennung von Transistordefekten
  4. Ultradünne und hochempfindliche Dehnungssensoren
  5. Empfindliche optische Empfänger für den Weltraum
  6. Amstrong® Ultra 650MC
  7. Amstrong® Ultra 650MCT
  8. Amstrong® Ultra 700MC
  9. Amstrong® Ultra 700MCT
  10. Ultrahochreines Chrom (UHP Cr)>99,95 %