Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Variometer Akustik (Barometer Ultra Sensitif)

Komponen dan persediaan

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

Tentang proyek ini

Pendahuluan:

Ini adalah instrumen yang digunakan oleh pilot selama penerbangan (pesawat layar, paraglider, hanglider, balon, dll.) untuk membantu menemukan inti termal dan memanjat udara lebih banyak dan lebih baik.

Deskripsi singkat:

Ini adalah barometer yang sangat sensitif yang mengeluarkan suara saat mendaki (naik) dan juga saat tenggelam (turun). Bunyinya adalah bip-bip sederhana, setiap detik, atau dua per detik atau lebih selama pendakian (lebih banyak tingkat pendakian =bip frekuensi yang lebih tinggi):sangat sensitif sehingga mulai berbunyi setelah beberapa sentimeter (!) per detik; Anda dapat mencoba mengangkat lengan Anda secara perlahan memegang di tangan Vario untuk mendapatkan suara. Dalam hal laju tenggelamnya, ia mengeluarkan bunyi beeeeeeeeps panjang (terus menerus) pada -1 m/dtk atau lebih.

Daftar komponen:

  • Arduino Pro Mini 3.3v 8 Mhz sebagai MCU
  • GY-63 (MS5611) sensor tekanan barometrik 3.3v
  • Dipswitch 8
  • Buzzer (aktif dengan osilator internal)
  • Multiplexer 8x1 4051 3.3v
  • Baterai LiPo 1s 3.7v 350mAh + kabel merah/hitam 10cm dan konektor M+F
  • Modul peningkatan tegangan + pengisi daya USB LiPo, TP5400 dari AZDelivery;
  • Beberapa resistor, resistansi jaringan 8x4.7k, 220, 2x10k, dan kapasitor 47uF, 470uF
  • Sekering 0,5A yang dapat disetel ulang
  • Kotak hitam ABS plastik kecil, ukuran 78x39x22 mm
  • Tombol geser on/off
  • Konektor perempuan header 6 pin (untuk FTDI)
  • 17 pin jantan (2x, 2x, 2x, 2x, 2x, 4x, 1x, 1x dan 1x)
  • 4 pin pria 90° untuk sirkuit sensor-P
  • Kabel kaku 30 cm, dilapisi plastik, untuk jumper dan sambungan
  • Kabel hijau

Skema Fritzing di atas menunjukkan segalanya Anda perlu membangun sirkuit. Harap perhatikan "kapasitor keramik" coklat, tepat di bawah sakelar hitam, adalah sekering yang dapat disetel ulang (saya belum menemukan desain yang tepat untuk itu). Sebagai ganti resistor 8 x saya menggunakan satu komponen, jaringan resistor, itu termasuk 8 x 4.7K ohm, semuanya di dalam; lihat gambar berikutnya untuk menemukannya, sulit ditemukan, yang hitam di bagian atas dipswitch biru, ada sembilan pin, satu umum, yang lain delapan untuk resistor. File skema Fritzing untuk diunduh tersedia di bawah ini.

Arti dari dipswitch:

Saya suka menggunakan tombol celup biru , 8 x sakelar hidup/mati yang sangat kecil dalam satu wadah berwarna, untuk memilih dan mengubah parameter untuk fungsi Vario. Ini adalah tabel untuk parameter yang ditunjukkan di atas dan dijelaskan di sini sebagai berikut:

  • 1 - tidak digunakan
  • 2 - volume rendah atau tinggi
  • 3 dan 4 - alarm tenggelam m/dtk:-999 -1 -2 -3
  • 5 dan 6 - frekuensi bip Hz:+1 +1,5 +2 +3
  • 7 dan 8 - sensitivitas m/dtk:+0,0 +0,1 +0,2 +0,5

Pin 1 tidak digunakan , posisi apa pun, hidup atau mati, tidak mengubah apa pun.

Pin 2 mengubah tingkat volume dari bel; ini beroperasi secara elektrik:ketika pin terpasang, hubung singkat resistor secara seri dengan bel dan biarkan mengalirkan lebih banyak arus untuk menghasilkan bunyi bip volume yang lebih tinggi.

Pin 3 dan 4 mengatur tingkat tenggelamnya (turun) di bawah mana Vario akan bermain beeeeeeeeep; pin digunakan sebagai kode biner, dua bit, 4 pengaturan:00=0, 01=1, 10=2 11=3; Anda dapat menyetel alarm tenggelam pada -999 m/dtk (artinya tidak ada batasan, tidak akan pernah berbunyi bip) dengan pin 3=mati dan pin 4=mati (biner 00); Anda dapat mengatur nilai lainnya ke -1, -2 atau -3 m/s masing-masing dengan pin 3=mati/4=on, 3=on/4=off dan 3=on/4=on. Misalnya pada posisi 2 Vario akan beeeeeeeeeep hanya pada kecepatan tenggelam lebih dari -2 m/dtk. Untuk pengujian sebaiknya coba menggunakan lift... turun dari lantai nomor 3 ke lantai nomor 0, atau lari cepat menaiki tangga...

Pin 5 dan 6 mengatur frekuensi bip , mereka bekerja bersama sebagai kode biner seperti yang dijelaskan di atas untuk pasangan pin lainnya; pada kecepatan pendakian yang sama, disetel pada +2Hz akan berbunyi bip-bip lebih cepat daripada pada +1Hz. Beberapa orang suka bunyi bip perlahan dan sedikit "stres" :-)

Pin 7 dan 8 mengatur sensitivitas instrumen :+0.0 berarti sensitivitas maksimum pada gerakan naik, dibutuhkan kecepatan kurang dari 10cm/dtk untuk berbunyi bip-bip; dalam posisi ini kadang-kadang instrumen berbunyi bip, bahkan tetap di tempatnya, menangkap perubahan tekanan yang sangat kecil (yaitu menutup pintu di dalam ruangan dapat sedikit meningkatkan tekanan udara); ia juga menangkap "suara" listrik normal tetapi cukup stabil dan berguna. Pada posisi ke-4 kami memiliki sensitivitas +0,5 m/dtk, secara signifikan kurang sensitif terhadap perubahan tekanan udara, Anda perlu "lebih" kecepatan naik untuk mendaki ketinggian untuk mendapatkan bip-bip. Untuk pengujian Anda harus mencoba menggunakan lift... dari lantai nomor 0 ke lantai nomor 3...

Dari sudut pandang sirkuit elektronik, pin 1 dan 3-8 dibaca secara analog dengan cara chip multiplexer 4051, kemudian perangkat lunak memutuskan apakah itu hidup atau mati, nilai> 512 atau tidak:ia mendapat 8 input ke 1 umum port yang terhubung ke Arduino sebagai input. Untuk memilih salah satu dari 8 port untuk membaca posisi on/off Dipswitch, MCU (Arduino) menyetel output 3 bit yang sudah Anda ketahui cara kerjanya:000, 001, 010, 011, 100, 101, 110, 111 (0, 1, 2, 3, 4, 5, 6, 7 =8 port =8 sakelar hidup/mati). Lihat kode fungsi "readDIPSwitch()".

Perhatikan baterainya:

Dua resistor 10k bersama dengan kapasitor 47uF berfungsi sebagai pembagi tegangan untuk menguji tegangan baterai. LiPo dikenal kritis saat dikosongkan di bawah 3,3v untuk alasan ini setiap 10 detik (BATTinterval) fungsi "checkBATT()" dipanggil dan jika tegangan rendah bel akan memberi tahu Anda dengan 6 bunyi bip pendek dalam satu detik. Jangan menunggu terlalu lama untuk mati, dan segera isi ulang!

Sangat PENTING Anda ingat untuk membuat setidaknya satu LUBANG di dalam kotak untuk membiarkan udara lewat untuk perubahan tekanan sensor. Saya membuat dua lubang seperti yang Anda lihat pada gambar:satu untuk mendengarkan bunyi bel dan satu untuk melihat led status pengisian daya saat terhubung ke kabel micro USB dan pengisi daya. Ah ya, itu adalah lubang lain untuk micro USB juga. Dengan lubang Variometer tidak tahan air lagi...

Kabel hijau adalah untuk mengaitkannya dengan aman di suatu tempat di papan:Anda tidak ingin kehilangannya, tentu saja!

PCB:

Digunakan PCB wajah tunggal karena alasan itu saya harus menyertakan beberapa jumper kawat (yang garis putus-putus) untuk memecahkan rute untuk seluruh sirkuit. Berikut wajah komponen tetapi di bawah ini Anda memiliki file, komponen dan wajah solder, cermin, untuk diunduh dan dicetak melalui printer laser pada lembaran "kuning" atau "biru". Saya menggunakan yang kuning tetapi mereka mengatakan yang biru lebih baik (harganya lebih tinggi). Saat mencetak ingatlah untuk menonaktifkan pengaturan hemat toner, gunakan resolusi 1200 dpi untuk mendapatkan hasil hitam pekat yang nyata. Proses transfer toner dari lembaran ajaib ke PCB dilakukan dengan menggunakan setrika panas... Mencetak kedua permukaan PCB menjadikan proyek "profesional".

Digunakan selusin pin Arduino. Tidak perlu menyolder pin yang tidak digunakan dan tidak wajib:biarkan mereka bebas. Tempatkan header perempuan 6 pin di bagian atas Mini Pro untuk memungkinkan, jika perlu di masa mendatang, antarmuka FTDI untuk dihubungkan untuk pembaruan perangkat lunak lebih lanjut.

Sirkuit daya step-up USB ditempatkan terbalik. Untuk menahannya gunakan dua pin kuat, pin jantan biasa digunakan untuk Arduino tetapi tanpa sabuk plastik, di samping konektor USB di mana tertulis "Power USB":gunakan solder untuk menyatukan semuanya, dua pin dan konektor USB. 3 kabel menghubungkan terminal Gnd-, Batt+ dan Out+ ke sirkuit ini.

Sensor barometrik:

Sensor tekanan barometrik GY-63 (MS5611), P-Sensor pada PCB, dilampirkan dalam papan sirkuit kecil dan Arduino berkomunikasi dengannya melalui bus i2c. Penggunaannya sederhana, termasuk juga sensor suhu yang belum pernah saya gunakan.

Program memanggil fungsi "readPSensor()" yang merupakan inti dari perangkat lunak. Yang kita butuhkan adalah perubahan relatif dari ketinggian, fungsi membaca berkali-kali per detik dan dikumpulkan di PrexTotal; setiap setengah detik (PrexInterval) menghitung perubahan ketinggian rata-rata dan melanjutkan dengan bunyi bip-bip atau beeeeeep panjang mempertimbangkan pengaturan dipswitch. Cara sederhana untuk memfilter data ini sudah cukup baik; Saya mencoba cara pemfilteran Kalman yang menarik, dan juga algoritma pemfilteran Madgwick dan Mahony yang rumit tanpa manfaat yang signifikan untuk tujuan proyek ini.

Pembaruan / Kiat:

Itu saja. Saya sangat menikmati proyek ini! Lakukan juga! :-)

Marco Zonca

Kode

  • Kode Variometer Akustik
Kode Variometer AkustikArduino
/* Sketsa ini berfungsi sebagai Variometer untuk paralayang, oleh Marco Zonca, 2020 Arduino MiniPro 3.3 sebagai CPU, sensor tekanan barometrik GY-63 (MS5611), 8 x dipswitch, buzzer, Mux 4051, lipo 1s 3.7v 350mA, 3.7 v -> 5v tegangan stepup + lipo usb charger; DipSwitch:1=tidak digunakan 2=hw volume buzzer rendah/tinggi 3=\ alarm wastafel:OFF -1.0 -2.0 -3.0 m/sec 4=/ 5=\ frekuensi beep:+1.0 +1.5 +2.0 +3.0 Hz 6=/ 7=\ sensibilitas:+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 =10.000;const int PrexInterval =500;const boolean isDebug =false;float sensibility[5 ];frekuensi float[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 adalah FirstCalc =true;MS5611 psensor; // pengaturan sensorvoid tekanan() { Serial.begin(9600); pinMode(muxbit0, OUTPUT); pinMode(muxbit1, OUTPUT); pinMode(muxbit2, OUTPUT); pinMode(buzzerPin, OUTPUT); kepekaan[4]=0; sensibilitas[3]=0,5; kepekaan[2]=0.2; kepekaan[1]=0.1; kepekaan[0]=0.0; frekuensi[4]=0; frekuensi[3]=3,0; frekuensi[2]=2.0; frekuensi[1]=1.5; frekuensi[0]=1.0; sinkalarm[4]=0; sinkalarm[3]=-3.0; sinkalarm[2]=-2.0; sinkalarm[1]=-1.0; sinkalarm[0]=-999.9; readDIPswitch(); psensor.mulai(); referencePressure =psensor.readPressure(); if (isDebug ==true) Serial.println("Vario aktif"); Nada Baru (Pin buzzer,4); penundaan (750); noNewTone();} // akhiri setup()void loop() { readPSensor(); if ((prevDIPSWmillis+DIPSWinterval) =PrexInterval) { avgAltitude =PrexTotal / PrexCounter; // rata-rata jika (isFirstCalc ==true) { avgPrevAltitude=avgAltitude; isFirstCalc=salah; } PrexVario=(avgAltitude-avgPrevAltitude) * (1000/PrexInterval); // vario mSec if ((PrexVario <=sensibility[4]) &&(PrexVario>=sinkalarm[4])) { noNewTone(); } if ((PrexVario> sensibility[4])) { // angkat beep beep + NewTone (buzzerPin,((int)(PrexVario+frequency[4]))); } if ((PrexVario  512) dipswitch[n]=false; // baca port yang dipilih else 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 (sakelar celup[7]==true) s =s + 2; if (dipswitch[8]==true) s =s + 1; sensibilitas[4]=sensibilitas[s]; if (isDebug ==true) { Serial.print("Sensibilitas="); Serial.println(sensibilitas[4]); } s=0; if (dipswitch[5]==true) s =s + 2; if (dipswitch[6]==true) s =s + 1; frekuensi[4]=frekuensi[s]; if (isDebug ==true) { Serial.print("Frekuensi="); Serial.println(frekuensi[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]); }} // end readDIPSwitch()void checkBATT() { // periksa tegangan baterai lipo/liion n1 =analogRead(vbattPin); n2=(((6,60 * n1) / 1023.00)); SensorVBatt=(n2 + ((n2 * 0.0) /100)); // koreksi arbitrer (tidak aktif =0,0%) if (SensorVBatt <=3,4) { NewTone (buzzerPin,6,1000); } if (isDebug ==true) { Serial.print("VBatt="); Serial.println(SensorVBatt); }} // akhiri checkBATT()

Suku cadang dan penutup khusus

Skema

vario_R1XzPifiX4.fzz

Proses manufaktur

  1. Simpan dan Kelola Data Sensitif Dengan Manajer Rahasia
  2. Barometer Aneroid
  3. Metode Sensitif untuk Mendeteksi Cacat Transistor
  4. Sensor Regangan Ultra Tipis dan Sangat Sensitif
  5. Penerima Optik Sensitif untuk Ruang
  6. Amstrong® Ultra 650MC
  7. Amstrong® Ultra 650MCT
  8. Amstrong® Ultra 700MC
  9. Amstrong® Ultra 700MCT
  10. Chromium Kemurnian Ultra Tinggi (UHP Cr)>99,95%