Daftar Isi:

Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)
Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)

Video: Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)

Video: Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)
Video: Break Me17 Is That a Router in Your Pocket or are You Trying to P0wn Me Michael Vieau Kevin Bong 2024, November
Anonim
Arduino Atmospheric Tape Measure/ Demonstrasi MS5611 GY63 GY86
Arduino Atmospheric Tape Measure/ Demonstrasi MS5611 GY63 GY86

Ini benar-benar barometer/altimeter tetapi Anda akan melihat alasan judulnya dengan melihat videonya.

Sensor tekanan MS5611, ditemukan pada papan breakout Arduino GY63 dan GY86, memberikan kinerja yang luar biasa. Pada hari yang tenang itu akan mengukur tinggi badan Anda dalam 0.2m. Ini secara efektif mengukur jarak dari kepala Anda ke luar angkasa dan mengurangkannya dari jarak kaki Anda ke luar angkasa (dengan mengukur tekanan – yaitu berat udara di atas). Perangkat spektakuler ini memiliki jangkauan yang nyaman mengukur ketinggian Everest - dan juga dapat mengukur hingga beberapa inci.

Proyek ini bertujuan sebagai: proyek sekolah, contoh modifikasi kode Arduino dan tempat awal yang baik untuk mengeksplorasi menggunakan sensor MS5611. Ada banyak pertanyaan forum dari mereka yang mengalami kesulitan dengan sensor ini. Pendekatan di sini membuatnya sangat mudah digunakan. Setelah melakukan proyek ini, Anda akan diperlengkapi dengan baik untuk mengembangkan aplikasi terkait tekanan lainnya.

Setiap sensor memiliki konstanta kalibrasinya sendiri yang perlu dibaca dan digunakan untuk mengoreksi data. Ada perpustakaan yang tersedia untuk membantu mendorong ini. Kode yang ditampilkan di sini menggunakan perpustakaan untuk mengambil bacaan dan kemudian mengubahnya menjadi tinggi dan menampilkannya pada LCD Shield.

Pertama kita akan mengirimkan data ke serial monitor di PC/laptop untuk pengujian awal. Ini menunjukkan beberapa noise, jadi kami menambahkan filter untuk menghaluskannya. Kemudian kami akan menambahkan layar LCD sehingga unit dapat berjalan secara independen dan Anda dapat mencoba mengukur tinggi badan Anda – atau yang lainnya.

Perhatikan papan GY63 hanya memiliki sensor tekanan MS5611. GY86 disebut papan kebebasan 10 derajat dan juga mencakup akselerometer 3 sumbu, gyro 3 sumbu, dan magnetometer 3 sumbu hanya dengan beberapa $ lebih.

Anda akan perlu:

1. Arduino UNO (atau lainnya dengan pinout standar) dan kabel USB-nya

2. Papan breakout GY63 atau GY86

3. 4 Dupont memimpin pria-wanita - atau kabel penghubung

4. Pelindung keypad LCD Arduino

5. Baterai dan timah 9v

6. Strip soket 2.54mm (opsional tetapi disarankan)

Persiapan

Unduh Arduino IDE (lingkungan pengembangan terintegrasi) dari:

Beberapa bit teknis untuk minat

MS5611 memberikan kinerja luar biasa dengan rata-rata sejumlah besar pengukuran. Itu dapat membuat 4096 3 byte (24bit) pengukuran analog hanya dalam 8ms dan memberikan nilai rata-rata. Itu harus mengukur tekanan dan suhu sehingga data tekanan dapat dikoreksi untuk suhu internal. Oleh karena itu dapat memberikan sekitar 60 pasang pembacaan tekanan dan suhu per detik.

Lembar data tersedia di:

Komunikasi melalui I2C. Jadi sensor I2C lainnya dapat berbagi bus (seperti halnya pada papan GY86 10DOF di mana semua chip berada di I2C).

Langkah 1: Dapatkan Perpustakaan MS5611

Banyak sensor Arduino baik menggunakan perpustakaan standar yang disertakan dengan Arduino IDE atau disertakan dengan file zip dengan perpustakaan yang dapat dengan mudah diinstal. Hal ini cenderung tidak terjadi pada sensor MS5611. Namun pencarian ditemukan: https://github.com/gronat/MS5611 yang memiliki perpustakaan untuk MS5611, termasuk melakukan koreksi suhu.

Pilihan 1

Buka situs web di atas, klik 'Klon atau Unduh' dan pilih 'Unduh ZIP'. Ini akan mengirimkan MS5611-master.zip ke direktori unduhan Anda. Sekarang, jika Anda mau, pindahkan ke folder di mana Anda dapat menemukannya di masa mendatang. Saya menggunakan direktori bernama 'data' yang ditambahkan ke folder Arduino saya.

Sayangnya file.zip yang diunduh tidak menyertakan sketsa contoh apa pun dan akan menyenangkan untuk menambahkan pustaka dan contoh ke Arduino IDE. Ada contoh minimum dalam file README.md yang dapat disalin dan ditempelkan ke dalam sketsa dan disimpan. Ini adalah salah satu cara untuk pergi.

pilihan 2

Untuk mempermudah menjalankan kode dalam instruksi ini, saya telah menambahkan contoh minimum di atas dan contoh yang ditunjukkan di sini ke perpustakaan dan melampirkan file.zip di bawah ini yang akan diinstal ke Arduino IDE.

Unduh file zip di bawah ini. Pindahkan ini ke folder yang lebih baik jika Anda mau.

Mulai Arduino IDE. Klik Sketsa> Sertakan Perpustakaan> Tambahkan file zip dan pilih file. Mulai ulang IDE. IDE sekarang akan memiliki perpustakaan yang diinstal ditambah semua contoh yang ditampilkan di sini. Periksa dengan mengklik File>contoh>>MS5611-master. Tiga sketsa harus dicantumkan.

Langkah 2: Hubungkan Sensor ke Arduino dan Uji

Hubungkan Sensor ke Arduino dan Uji
Hubungkan Sensor ke Arduino dan Uji
Hubungkan Sensor ke Arduino dan Uji
Hubungkan Sensor ke Arduino dan Uji

Papan GY63/GY86 biasanya dilengkapi dengan header tetapi tidak disolder. Jadi itu adalah pilihan Anda untuk menyolder header di tempatnya dan menggunakan kabel Dupont pria-wanita, atau (seperti yang saya putuskan) solder mengarah langsung ke papan dan menambahkan pin ke kabel untuk dicolokkan ke Arduino. Opsi terakhir lebih baik jika Anda berpikir Anda mungkin ingin menyolder papan menjadi proyek nanti. Yang pertama lebih baik jika Anda ingin menggunakan papan untuk eksperimen. Unsoldering lead jauh lebih mudah daripada pin header.

Koneksi yang diperlukan adalah:

Arduino GY63/GY86

VCC - 5v Daya GND - GND Ground SCL - A5 I2C clock >SDA - A4 I2C data

Pasang papan sensor ke Arduino seperti di atas dan sambungkan Arduino ke PC/laptop melalui kabel USB-nya. Juga tutupi sensor dengan bahan buram/hitam. Sensor sensitif terhadap cahaya (seperti halnya kebanyakan sensor jenis ini).

Mulai Arduino IDE. Klik:

File>contoh>>MS5611-master>MS5611data2serial.

Sebuah contoh baru dari IDE akan muncul dengan sketsa. Klik tombol unggah (panah kanan).

Selanjutnya jalankan serial plotter – klik Tools>Serial Plotter dan jika perlu atur baud menjadi 9600. Data yang dikirim adalah tekanan dalam Pascals. Setelah satu atau dua detik itu akan kembali skala dan menaikkan dan menurunkan sensor dengan mengatakan 0,3 m harus menunjukkan sebagai menurunkan dan menaikkan jejak (ketinggian yang lebih rendah adalah tekanan yang lebih tinggi).

Data memiliki beberapa kebisingan. Lihat plot pertama di atas. Ini dapat dihaluskan menggunakan filter digital (alat yang sangat berguna).

Persamaan filternya adalah:

nilai = nilai + K(nilai baru)

di mana 'nilai' adalah data yang difilter, dan 'baru' adalah yang terbaru diukur. Jika K=1 tidak ada penyaringan. Untuk nilai K yang lebih rendah, data dihaluskan dengan konstanta waktu T/K di mana T adalah waktu antar sampel. Di sini T sekitar 17ms sehingga nilai 0,1 memberikan konstanta waktu 170ms atau sekitar 1/6s.

Filter dapat ditambahkan dengan:

Tambahkan variabel untuk data yang difilter sebelum penyiapan():

float disaring = 0;

Kemudian tambahkan persamaan filter setelah tekanan = …. garis.

disaring = disaring + 0,1*(difilter tekanan);

Sebaiknya inisialisasi nilai yang difilter ke pembacaan pertama. Jadi tambahkan pernyataan 'jika' di sekitar baris di atas yang melakukan ini sehingga terlihat seperti:

jika(difilter != 0){

disaring = disaring + 0,1*(difilter tekanan); } else { disaring = tekanan; // bacaan pertama jadi atur filter ke bacaan }

Tes '!=' adalah 'tidak sama'. Jadi jika 'difilter' tidak sama dengan 0 persamaan filter dijalankan tetapi jika sudah maka diatur ke pembacaan tekanan.

Terakhir kita perlu mengubah 'tekanan' menjadi 'difilter' dalam pernyataan Serial.println sehingga kita melihat nilai yang difilter.

Pembelajaran terbaik dicapai dengan melakukan perubahan di atas secara manual. Namun saya memasukkan ini dalam contoh MS5611data2serialWfilter. Jadi kalau ada masalah contoh bisa di-load.

Sekarang unggah kode ke Arduino dan lihat peningkatannya. Lihat plot kedua di atas dan perhatikan skala Y diperluas x2.

Coba nilai yang lebih rendah untuk konstanta filter, katakan 0,02 alih-alih 0,1, dan lihat perbedaannya. Data lebih halus tetapi dengan respons yang lebih lambat. Ini adalah kompromi yang harus dicari saat menggunakan filter sederhana ini. Karakteristiknya sama dengan filter RC (resistansi dan kapasitansi) yang banyak digunakan dalam rangkaian elektronik.

Langkah 3: Jadikan Itu Mandiri

Sekarang kita akan menambahkan pelindung LCD Keypad, mengubah tekanan menjadi tinggi dalam meter, dan menampilkannya di layar. Kami juga akan menambahkan kemampuan untuk nol nilai dengan menekan tombol tombol 'Pilih'.

Dengan pelindung LCD pada Arduino, sensor harus terhubung ke pelindung LCD. Sayangnya pelindung LCD biasanya datang tanpa soket yang sesuai. Jadi pilihannya adalah membuat sambungan solder atau mendapatkan soket strip. Soket strip tersedia di ebay tidak lebih dari biaya ongkos kirim. Lakukan pencarian di '2.54mm socket strip' dan cari yang mirip dengan yang ada di Arduino. Ini biasanya memiliki panjang 36 atau 40 pin. Saya akan menghindari pin yang diputar karena tidak cukup dalam untuk lead Dupont standar.

Strip soket harus dipotong memanjang dan potongan harus dibuat di tempat yang sama dengan pin. Jadi untuk strip 6 pin – lepaskan pin ke-7 dengan tang halus, lalu potong di tempat itu menggunakan gergaji besi junior. Saya mengarsipkan ujungnya untuk membuatnya rapi.

Pastikan tidak ada jembatan solder saat menyoldernya ke papan.

Dengan keputusan yang tepat untuk menghubungkan sensor, pasang pelindung LCD ke Arduino dan hubungkan sensor dengan pin yang sama – tetapi sekarang pada pelindung LCD.

Siapkan juga baterai dan timah. Saya membuat petunjuk saya dari bagian-bagian di tempat sampah saya tetapi mereka juga tersedia di ebay - termasuk opsi bagus yang mencakup kotak baterai dan sakelar. Cari di 'PP3 2.1mm lead'.

Konsumsi saat ini sekitar 80ma. Karenanya jika Anda ingin menjalankan lebih dari beberapa menit, pertimbangkan baterai 9v yang lebih besar daripada PP3.

Langkah 4: Tambahkan Kode untuk Ketinggian dan LCD

Image
Image

Kita perlu melakukan sedikit lebih banyak pengkodean untuk mengubah tekanan menjadi tinggi dan menggerakkan tampilan.

Di awal sketsa, tambahkan perpustakaan tampilan dan beri tahu ini pin apa yang digunakan:

#termasuk

// inisialisasi perpustakaan dengan nomor pin antarmuka LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Selanjutnya kita membutuhkan beberapa variabel dan fungsi untuk membaca tombol keypad. Ini semua terhubung ke input analog A0. Setiap tombol memberikan tegangan yang berbeda untuk A0. Pencarian pada 'kode tombol pelindung lcd arduino' menemukan beberapa kode bagus di:

www.dfrobot.com/wiki/index.php/Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)#Sample_Code

Tambahkan kode ini sebelum setup():

// menentukan beberapa nilai yang digunakan oleh panel dan tombol

int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // baca tombol int read_LCD_buttons() { adc_key_in = analogRead(0); // membaca nilai dari sensor // tombol saya saat membaca dipusatkan pada nilai berikut: 0, 144, 329, 504, 741 // kita menambahkan sekitar 50 ke nilai tersebut dan memeriksa untuk melihat apakah kita dekat (adc_key_in > 1000) kembalikan btnNONE; // Kami menjadikan ini opsi pertama untuk alasan kecepatan karena ini akan menjadi hasil yang paling mungkin jika (adc_key_in < 50) mengembalikan btnRIGHT; jika (adc_key_in <250) kembalikan btnUP; jika (adc_key_in <450) kembalikan btnDOWN; jika (adc_key_in <650) kembalikan btnLEFT; jika (adc_key_in <850) kembalikan btnSELECT; kembali btnNONE; // ketika semua yang lain gagal, kembalikan ini… }

Ketinggian biasanya dipusatkan pada titik awal. Jadi kita membutuhkan variabel untuk tinggi dan referensi. Tambahkan ini sebelum setup() dan fungsi di atas:

mtr mengambang;

mengambang ref = 0;

Konversi dari tekanan dalam Pascals ke meter hampir sama persis dengan pembagian 12 di permukaan laut. Rumus ini baik untuk sebagian besar pengukuran berbasis tanah. Ada formula yang lebih akurat yang lebih sesuai untuk konversi di ketinggian. Gunakan ini jika Anda akan menggunakan ini untuk merekam ketinggian penerbangan balon.

Referensi harus disetel ke pembacaan tekanan pertama sehingga kita mulai dari ketinggian nol dan saat tombol PILIH ditekan. Tambahkan, setelah kode filter, dan sebelum pernyataan Serial.println:

jika(ref == 0){

ref = disaring/12.0; } if(read_LCD_buttons() == btnSELECT) { ref = disaring/12.0; }

Setelah ini tambahkan perhitungan ketinggian:

mtr = ref - disaring/12.0;

Terakhir ubah pernyataan Serial.println untuk mengirim 'mtr' alih-alih 'difilter', dan tambahkan kode untuk mengirim 'mtr' ke LCD:

Serial.println(mtr); // Kirim tekanan melalui serial (UART)

lcd.setCursor(0, 1); // baris 2 lcd.print(mtr);

Semua perubahan di sini termasuk dalam contoh MS5611data2lcd. Muat ini seperti pada langkah 2.

Ada satu mod terakhir yang membantu. Tampilan sulit dibaca saat diperbarui 60 kali per detik. Filter kami menghaluskan data dengan konstanta waktu sekitar 0,8 detik. Jadi memperbarui tampilan setiap 0,3 detik tampaknya cukup banyak.

Jadi tambahkan penghitung setelah semua definisi variabel lain di awal sketsa (mis.

int saya = 0;

Kemudian tambahkan kode untuk menambah 'i' dan pernyataan 'jika' untuk dijalankan ketika mencapai 20 dan kemudian atur kembali ke nol dan pindahkan perintah Serial dan lcd dalam pernyataan 'jika' sehingga ini hanya dijalankan setiap pembacaan ke-20:

saya += 1;

if(i>=20) { Serial.println(mtr); // Kirim tekanan melalui serial (UART) lcd.setCursor(0, 1); // baris 2 lcd.print(mtr); saya = 0; }

Saya tidak menyertakan contoh dengan modifikasi terakhir ini untuk mendorong memasukkan kode secara manual yang membantu pembelajaran.

Proyek ini harus memberikan titik awal yang baik misalnya untuk barometer digital. Bagi mereka yang mungkin ingin mempertimbangkan untuk menggunakan model RC - cari OpenXvario untuk kode yang mengaktifkan altimeter dan variometer untuk sistem telemetri Frsky dan Turnigy 9x.

Direkomendasikan: