Halo!
Di bagian sebelumnya, saya berhenti pada fakta bahwa roket saya lepas landas dan mendarat dengan sukses, dan bahkan ada yang memasang altimeter. Pada artikel ini saya akan memberi tahu Anda cara membuat altimeter sederhana berdasarkan STM32 Nucleo L031K6 dan sensor tekanan BMP 280 , yang juga menyimpan semua data di memori Flash.
Pemilihan besi
Persyaratan dasar untuk altimeter:
- Kecepatan pembacaan ketinggian tinggi, karena roket berada pada puncak tidak terlalu lama, dan saya ingin mengetahui ketinggian maksimum;
- Konsumsi daya rendah, agar tidak memasang baterai besar;
- Dimensi kecil dari seluruh struktur.
Berdasarkan mereka, saya mengambil STM32 Nucleo L031K6 sebagai mikrokontroler (kecepatan tinggi, konsumsi arus rendah, ukuran kecil). Saya memutuskan untuk mengukur ketinggian menggunakan barometer BMP280 (alasan yang sama dengan MK). Juga ditambahkan tombol yang bila ditekan akan mulai merekam ketinggian. Nah, semua elektronik ditenagai oleh baterai CR2032 yang terhubung melalui adaptor. Hasilnya, kami mendapatkan skema berikut:
Modul yang digunakan
STM32 Nucleo L031K6
BMP280
CR2032
STM32 Nucleo L031K6
BMP280
CR2032
Pengembangan kode
Anda dapat menemukan kode di github saya . Pin STM32 telah dikonfigurasi di CubeMX untuk IAR. Untuk bekerja dengan BMP280, saya menggunakan perpustakaan ini , menambahkan fungsi menghitung ketinggian di atas permukaan laut menggunakan rumus barometrik dan menginisialisasi sensor dengan parameter frekuensi pembacaan, penyaringan, dll. Yang saya butuhkan. Karena saya ingin mengukur ketinggian penerbangan relatif terhadap tanah, pertama - tama saya harus menghitung ketinggian di atas permukaan laut di wilayah saya , menganggapnya sebagai "nol" dan mengukur ketinggian penerbangan relatif terhadapnya. Frekuensi pengukuran adalah 10 Hz.
Penulisan ke memori Flash dilakukan sebagai berikut:
Organisasi memori di STM32 L031K6
- Untuk semua pengukuran, saya mengalokasikan 8 KB dari 0x08006000 ke alamat 0x08007FFF
- Mengalokasikan 2 byte untuk satu dimensi
- Saya menuliskan 4 byte dalam Flash, yaitu dua pengukuran sekaligus
- Jumlah pengukuran maksimum - 4096, ini cukup untuk merekam sekitar 7 menit penerbangan
- Ketinggian yang direkam dalam sentimeter untuk akurasi yang lebih baik
Dan perekaman berlangsung sebagai berikut :
- Jika iterator tulis genap, maka kita menyimpan ketinggian saat ini di bagian bawah kata ke dalam variabel dengan data untuk menulis ke Flash;
- Jika iterator tulis ganjil, tambahkan tinggi saat ini ke bagian atas kata ke variabel dengan data untuk menulis ke Flash dan simpan variabel ini ke sel Flash
Sebagai hasilnya, algoritma dari program ini adalah sebagai berikut:
- Setelah menyalakan, kami menunggu selama 5 detik untuk menekan tombol untuk memulai pengukuran ketinggian.
- Jika tombol tidak ditekan, maka kami menyalakan LED internal dan mulai mengirimkan data ketinggian yang direkam dalam memori Flash melalui UART
- , .
- ยซยป Flash- .
- UART , ;
- .
Ketika STM diberi daya dari CR2032 melalui pin 3.3V, saya menemukan bahwa kode tersebut tidak berfungsi . Masalahnya adalah ketika daya diterapkan melalui kaki ini, SB9 harus dilepas (terletak di sebelah pin RX dan TX di bagian belakang MK), jika tidak papan akan terus-menerus melakukan boot ulang.
Sekarang perlu untuk memeriksa keakuratan altimeter. Mengambil pita pengukur, saya mulai menaikkan altimeter ke ketinggian yang berbeda dan melihat apa yang diukurnya. Hasil tes ada di folder yang sesuai di github . File teks berisi data mentah dari STM, dan tabel Excel berisi grafik yang indah dari semua pengujian. Akurasi sesuai dengan yang dinyatakan - ยฑ 10 cm. Harus diingat bahwa saya mengukur tinggi dalam sentimeterjadi angka di tabel sangat besar.
Merakit altimeter
Karena roket dapat menghantam tanah dengan keras selama pendaratan, semua elektronik harus diperbaiki dengan baik agar kabel tidak jatuh saat berguncang, atau, lebih buruk lagi, modul itu sendiri. Altimeter ditempatkan di head fairing (ada cukup ruang di sana, dan stabilitas meningkat karena pergeseran pusat gravitasi ke head fairing) dalam dudukan yang dicetak 3D. STM'ka berdiri secara vertikal, BMP280 dengan kontak ke atas dan menempelkan adaptor untuk CR2032 di bawah dudukan. Karena fakta bahwa itu tidak cocok dengan badan roket, maka kontak minus perlu digiling sedikit. Di sebelah kontak di dinding samping dudukan yang dicetak 3D, saya membuat alur vertikal untuk meregangkan minus dari CR2032 melaluinya, dan di bawah plus saya mengebor lubang dan memasukkan kabel ke dalamnya. Saya berpikir untuk memasang altimeter ke head fairing menggunakan sekrup self-tapping, jadi ada lubang di case,tapi kemudian dia meninggalkan ide ini.
Model dudukan cetak 3D
Blok altimeter rakitan
Saya menempelkan tombol di sebelah BMP280, memasang modul lainnya di tempatnya, menyolder semua kabel dan
Altimeter dimasukkan dengan erat ke dalam roket fairing. Agar tidak terbang ke mana pun setelah benturan, saya menarik karet gelang melalui lubang di dudukan, menghubungkan badan roket dan fairing.
Altimeter rakitan.
Tampak depan Tampak belakang. Anda dapat melihat karet gelang yang menghubungkan altimeter ke roket.
Altimeter sudah siap! Sekarang saya harus mengujinya, yang berarti saya pergi ke tempat latihan lagi!
Peluncuran Altimeter dan Hasil Pengukuran
Sayangnya, permulaan pertama adalah dengan mesin yang rusak, yang saya tulis di artikel terakhir.
Hasilnya, grafiknya menjadi seperti ini:
Horizontal - bilangan pengukuran. Setiap 10 pengukuran - 1 detik. Vertikal - tinggi dalam sentimeter
Roket lepas landas 15m, lalu meluncur ke tanah. Setelah melewati apogee, setelah 1 detik , beberapa jenis anomali dimulai : setelah nilai 12m, untuk beberapa alasan, pembacaan turun menjadi -8m. Ini terjadi pada saat mesin dihidupkan kedua (yang seharusnya tidak terjadi), jadi saya tidak mengecualikan bahwa mesin yang rusak entah bagaimana memengaruhi altimeter. Di semua tes lainnya, ini bekerja dengan baik, jadi ini jelas bukan masalah elektronik. Secara umum, pengujian altimeter tersebut hanya separuh berhasil, karena anomali terjadi pada paruh kedua penerbangan. Anda dapat menemukan grafik itu sendiri di github , itu disebut rocket_flight_fall_test .
Setelah memperbaiki roket, saya kembali ke lokasi pengujian dan kali ini pengujian berhasil. Penerbangannya sangat bagus, pembacaan altimeter stabil dan konsisten dengan penerbangan. Jadwal penerbangan ternyata seperti ini:
Horizontal - nomor pengukuran. Setiap 10 pengukuran - 1 detik. Vertikal - tinggi dalam sentimeter
Roket naik 150m dan berhasil mendarat.Jadi, tes ini berhasil sepenuhnya. Saya memastikan bahwa altimeter berfungsi dan mulai mengembangkan peralatan onboard baru.
Kesimpulan
Pada akhirnya, saya merakit altimeter ringkas yang cocok dengan model roket kecil. Tes berhasil, perangkat elektronik selamat dari lepas landas dan pendaratan dan mengukur ketinggian penerbangan. Di sinilah saya menyelesaikan proyek untuk pengembangan altimeter, mungkin kedepannya saya akan menggunakannya di salah satu roket, karena mengetahui ketinggian penerbangan terkadang sangat berguna (misalnya jika Anda meluncurkan roket untuk mencapai ketinggian maksimum atau beberapa ketinggian tertentu). Sekarang, seperti yang saya katakan, saya sedang mengembangkan kamera terpasang dengan pemancar radio, karena saya tidak berniat kehilangan roket dengan peralatan elektronik yang begitu serius.
Terima kasih atas perhatian Anda!