Isi kandungan:

Ukuran Pita Atmosfera Arduino / MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)
Ukuran Pita Atmosfera Arduino / MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)

Video: Ukuran Pita Atmosfera Arduino / MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)

Video: Ukuran Pita Atmosfera Arduino / MS5611 GY63 GY86 Demonstrasi: 4 Langkah (dengan Gambar)
Video: Крутейший 5 осевой ЧПУ фрезер - Pocket NC V2-50 2024, November
Anonim
Arduino Atmospheric Tape Measure / MS5611 GY63 GY86 Demonstrasi
Arduino Atmospheric Tape Measure / MS5611 GY63 GY86 Demonstrasi

Ini benar-benar barometer / altimeter tetapi anda akan melihat sebab tajuk dengan melihat video.

Sensor tekanan MS5611, yang terdapat di papan pelarian Arduino GY63 dan GY86, memberikan prestasi yang luar biasa. Pada hari yang tenang, ukuran ketinggian anda akan berada dalam jarak 0.2m. Ini dengan berkesan mengukur jarak dari kepala anda ke angkasa lepas dan mengurangkannya dari jarak kaki anda ke angkasa lepas (dengan mengukur tekanan - iaitu berat udara di atas). Peranti spektakuler ini mempunyai jangkauan yang dapat mengukur ketinggian Everest dengan selesa - dan juga dapat mengukur hingga beberapa inci.

Projek ini bertujuan sebagai: projek sekolah, contoh mengubah kod Arduino dan tempat permulaan yang baik untuk diterokai menggunakan sensor MS5611. Terdapat banyak soalan forum dari mereka yang menghadapi masalah dengan sensor ini. Pendekatan di sini menjadikannya sangat mudah. Selepas melakukan projek ini, anda akan dilengkapi dengan baik untuk mengembangkan aplikasi berkaitan tekanan lain.

Setiap sensor mempunyai pemalar kalibrasi sendiri yang perlu dibaca dan digunakan untuk membetulkan data. Terdapat perpustakaan yang tersedia untuk membantu mendorongnya. Kod yang ditunjukkan di sini menggunakan perpustakaan untuk mengambil bacaan dan kemudian mengubahnya menjadi tinggi dan memaparkannya pada Perisai LCD.

Pertama, kami akan menghantar data ke monitor bersiri pada PC / komputer riba untuk ujian awal. Ini menunjukkan sedikit kebisingan dan oleh itu kami menambah penapis untuk menghaluskannya. Kemudian kami akan menambah paparan LCD supaya unit dapat berjalan secara bebas dan anda boleh mencuba mengukur ketinggian anda - atau apa sahaja.

Perhatikan papan GY63 hanya mempunyai sensor tekanan MS5611. GY86 dipanggil papan kebebasan 10 darjah dan juga merangkumi akselerometer 3 paksi, giro 3 paksi dan magnetometer 3 paksi dengan hanya beberapa $ lagi.

Anda perlu:

1. Arduino UNO (atau yang lain dengan pinout standard) dan kabel USBnya

2. Papan pelarian GY63 atau GY86

3. 4 Dupont mengarah lelaki-perempuan - atau wayar penyambung

4. Perisai papan kekunci LCD Arduino

5. Bateri dan plumbum 9v

6. Jalur soket 2.54mm (pilihan tetapi disyorkan)

Persiapan

Muat turun Arduino IDE (persekitaran pembangunan bersepadu) dari:

Beberapa bit teknikal untuk minat

MS5611 memberikan prestasi hebat dengan rata-rata jumlah pengukuran yang besar. Ia boleh membuat pengukuran analog 4096 3 byte (24bit) hanya dalam 8ms dan memberikan nilai purata. Ia harus mengukur tekanan dan suhu sehingga data tekanan dapat diperbaiki untuk suhu internal. Oleh itu ia dapat memberikan sekitar 60 pasang bacaan tekanan dan suhu sesaat.

Lembaran data boleh didapati di:

Komunikasi adalah melalui I2C. Oleh itu, sensor I2C yang lain dapat berkongsi bas (seperti yang berlaku pada papan GY86 10DOF di mana semua cip berada di I2C).

Langkah 1: Dapatkan Perpustakaan MS5611

Sebilangan besar sensor Arduino menggunakan perpustakaan standard yang disertakan dengan Arduino IDE atau dibekalkan dengan fail zip dengan perpustakaan yang dapat dipasang dengan mudah. Ini cenderung tidak berlaku untuk sensor MS5611. Namun carian dijumpai: https://github.com/gronat/MS5611 yang mempunyai perpustakaan untuk MS5611, termasuk melakukan pembetulan suhu.

Pilihan 1

Pergi ke laman web di atas, klik ‘Klon atau Muat turun’ dan pilih ‘Muat turun ZIP’. Ini akan memberikan MS5611-master.zip ke direktori muat turun anda. Sekarang, jika anda mahu, pindahkan ke folder di mana anda boleh mencarinya di masa hadapan. Saya menggunakan direktori yang disebut 'data' yang ditambahkan ke folder Arduino saya.

Sayangnya fail.zip yang dimuat turun tidak merangkumi lakaran contoh dan ada baiknya menambahkan perpustakaan dan contoh ke Arduino IDE. Terdapat contoh minimum dalam fail README.md yang dapat disalin dan ditampal ke dalam lakaran dan disimpan. Ini adalah salah satu cara untuk terus berjalan.

Pilihan 2

Untuk memudahkan menjalankan kod dalam arahan ini, saya telah menambahkan contoh minimum di atas dan contoh yang ditunjukkan di sini ke perpustakaan dan melampirkan fail.zip di bawah yang akan dipasang ke dalam Arduino IDE.

Muat turun fail zip di bawah. Pindahkan ini ke folder yang lebih baik jika anda mahu.

Mulakan Arduino IDE. Klik Sketsa> Sertakan Perpustakaan> Tambahkan fail zip dan pilih fail. Mulakan semula IDE. Kini IDE akan mempunyai perpustakaan yang dipasang serta semua contoh yang ditunjukkan di sini. Periksa dengan mengklik Fail> contoh >> MS5611-master. Tiga lakaran harus disenaraikan.

Langkah 2: Sambungkan Sensor ke Arduino dan Uji

Sambungkan Sensor ke Arduino dan Uji
Sambungkan Sensor ke Arduino dan Uji
Sambungkan Sensor ke Arduino dan Uji
Sambungkan Sensor ke Arduino dan Uji

Papan GY63 / GY86 biasanya dilengkapi dengan tajuk tetapi tidak disolder. Oleh itu, adalah pilihan anda untuk menyolder header di tempatnya dan menggunakan petunjuk Dupont lelaki-wanita, atau (seperti yang saya memutuskan) pateri pateri terus ke papan dan tambahkan pin ke plumbum untuk dipasang ke Arduino. Pilihan terakhir adalah lebih baik jika anda fikir anda mungkin ingin menyusun papan itu ke dalam projek kemudian. Yang pertama lebih baik jika anda ingin menggunakan papan untuk percubaan. Petunjuk yang tidak dapat diselesaikan jauh lebih mudah daripada header pin.

Sambungan yang diperlukan adalah:

GY63 / GY86 Arduino

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

Pasang papan sensor ke Arduino seperti di atas dan sambungkan Arduino ke PC / komputer riba melalui plumbum USBnya. Tutup juga sensor dengan sedikit bahan legap / hitam. Sensor sensitif terhadap cahaya (seperti kebanyakan sensor jenis ini).

Mulakan Arduino IDE. Klik:

Fail> contoh> MS5611-master> MS5611data2serial.

Contoh baru IDE akan muncul dengan lakaran. Klik butang muat naik (anak panah kanan).

Seterusnya mulakan plotter bersiri - klik Tools> Serial Plotter dan jika perlu tetapkan baud ke 9600. Data yang dihantar adalah tekanan di Pascals. Setelah satu saat atau lebih, ia akan skala semula dan menaikkan dan menurunkan sensor dengan mengatakan 0.3m harus ditunjukkan sebagai menurunkan dan menaikkan jejak (ketinggian yang lebih rendah adalah tekanan yang lebih tinggi).

Data mempunyai sedikit kebisingan. Lihat petak pertama di atas. Ini dapat dilancarkan dengan menggunakan penapis digital (alat yang sangat berguna).

Persamaan penapis adalah:

nilai = nilai + K (nilai baru)

di mana ‘nilai’ adalah data yang disaring, dan ‘baru’ adalah yang terbaru diukur. Sekiranya K = 1 tidak ada penapisan. Untuk nilai K yang lebih rendah data dilicinkan dengan pemalar masa T / K di mana T adalah masa antara sampel. Di sini T adalah sekitar 17ms jadi nilai 0.1 memberikan pemalar masa 170ms atau sekitar 1/6s.

Penapis boleh ditambah dengan:

Tambahkan pemboleh ubah untuk data yang ditapis sebelum persediaan ():

apungan ditapis = 0;

Kemudian tambahkan persamaan penapis selepas tekanan =…. garisan.

disaring = ditapis + 0.1 * (tekanan-disaring);

Adalah idea yang baik untuk memulakan nilai yang ditapis hingga bacaan pertama. Oleh itu, tambahkan pernyataan ‘if’ di sekitar garis di atas yang melakukannya sehingga kelihatan seperti:

jika (ditapis! = 0) {

disaring = ditapis + 0.1 * (tekanan-disaring); } lain {ditapis = tekanan; // bacaan pertama jadi tetapkan ditapis untuk membaca}

Ujian ‘! =’ Adalah ‘tidak sama’. Oleh itu, jika 'disaring' tidak sama dengan 0, persamaan penapis dijalankan tetapi jika demikian maka diset ke bacaan tekanan.

Terakhir kita perlu menukar 'tekanan' menjadi 'disaring' dalam pernyataan Serial.println sehingga kita melihat nilai yang disaring.

Pembelajaran terbaik dicapai dengan membuat perubahan di atas secara manual. Walau bagaimanapun, saya memasukkannya ke dalam contoh MS5611data2serialWfilter. Jadi jika ada masalah, contohnya boleh dimuat.

Sekarang muat naik kod ke Arduino dan lihat peningkatannya. Lihat petak kedua di atas dan perhatikan skala Y diperluas x2.

Cuba nilai yang lebih rendah untuk pemalar penapis, katakan 0.02 dan bukannya 0.1, dan lihat perbezaannya. Data lebih lancar tetapi dengan tindak balas yang lebih perlahan. Ini adalah kompromi yang harus dicari ketika menggunakan penapis sederhana ini. Karakteristiknya sama dengan penapis RC (rintangan dan kapasitansi) yang banyak digunakan dalam litar elektronik.

Langkah 3: Jadikannya Berdiri

Sekarang kita akan menambahkan perisai Keypad LCD, menukar tekanan ke ketinggian dalam meter, dan menunjukkannya pada paparan. Kami juga akan menambahkan kemampuan untuk memusatkan nilai dengan menekan butang ‘Select’ keypad.

Dengan pelindung LCD di Arduino, sensor harus disambungkan ke pelindung LCD. Malangnya pelindung LCD biasanya datang tanpa soket yang sesuai. Oleh itu, pilihannya ialah membuat sambungan solder atau mendapatkan jalur soket. Jalur soket boleh didapati di ebay dengan harga tidak lebih daripada kos pos. Cari di ‘jalur soket 2.54mm’ dan cari yang serupa dengan yang ada di Arduino. Ini biasanya mempunyai panjang 36 atau 40 pin. Saya akan mengelakkan pin berpusing kerana tidak cukup mendalam untuk petunjuk Dupont standard.

Jalur soket harus dipotong panjang dan potongan harus dibuat di tempat yang sama dengan pin. Jadi untuk jalur 6 pin - lepaskan pin ke-7 dengan beberapa tang halus, kemudian potong di tempat itu menggunakan gergaji besi junior. Saya memfailkan hujung untuk menjadikannya kemas.

Pastikan tidak ada jambatan solder semasa menyoldernya ke papan.

Dengan keputusan yang tepat untuk menyambungkan sensor pasangkan pelindung LCD ke Arduino dan sambungkan sensor pin yang sama - tetapi sekarang pada pelindung LCD.

Sediakan bateri dan plumbum. Saya memperoleh petunjuk dari beberapa bahagian di tong sampah saya tetapi ia juga tersedia di ebay - termasuk pilihan bagus yang merangkumi kotak bateri dan suis. Cari di ‘PP3 2.1mm plumbum’.

Penggunaan semasa adalah sekitar 80ma. Oleh itu, jika anda ingin menjalankan lebih dari beberapa minit, pertimbangkan bateri 9v yang lebih besar daripada PP3.

Langkah 4: Tambahkan Kod untuk Ketinggian dan LCD

Image
Image

Kita perlu melakukan pengekodan sedikit lagi untuk menukar tekanan ke ketinggian dan mendorong paparan.

Pada permulaan lakaran, tambahkan pustaka paparan dan beritahu pin apa yang digunakan:

#sertakan

// memulakan perpustakaan dengan nombor pin antara muka LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Seterusnya kita memerlukan beberapa pemboleh ubah dan fungsi untuk membaca butang papan kekunci. Ini semua disambungkan ke input analog A0. Setiap butang memberikan voltan yang berbeza untuk A0. Pencarian di ‘kod butang perisai lcd arduino’ menemui beberapa kod yang baik di:

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

Tambahkan kod ini sebelum persediaan ():

// tentukan beberapa nilai yang digunakan oleh panel dan butang

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 butang int read_LCD_buttons () {adc_key_in = analogRead (0); // baca nilai dari sensor // butang saya ketika dibaca berpusat pada nilai-nilai ini: 0, 144, 329, 504, 741 // kita menambah kira-kira 50 pada nilai-nilai tersebut dan periksa untuk melihat apakah kita dekat jika (adc_key_in> 1000) mengembalikan btnNONE; // Kami menjadikan ini pilihan pertama untuk alasan kepantasan kerana akan menjadi hasil yang paling mungkin jika (adc_key_in <50) mengembalikan btnRIGHT; jika (adc_key_in <250) kembali btnUP; jika (adc_key_in <450) kembali btnDOWN; jika (adc_key_in <650) kembali btnLEFT; jika (adc_key_in <850) kembali btnSELECT; kembali btnNONE; // apabila semua yang lain gagal, kembalikan ini …}

Ketinggian biasanya sifar pada titik permulaan. Oleh itu, kita memerlukan pemboleh ubah untuk ketinggian dan rujukan. Tambahkan ini sebelum persediaan () dan fungsi di atas:

terapung mtr;

float ref = 0;

Penukaran dari tekanan di Pascals ke meter hampir sama dengan pembahagian dengan 12 di permukaan laut. Formula ini baik untuk kebanyakan ukuran tanah. Terdapat formula yang lebih tepat yang lebih sesuai untuk penukaran pada ketinggian tinggi. Gunakan ini jika anda akan menggunakannya untuk merakam ketinggian penerbangan belon.

Rujukan harus ditetapkan pada bacaan tekanan pertama sehingga kita mulai pada ketinggian nol dan ketika tombol SELECT ditekan. Tambahkan, selepas kod penapis, dan sebelum pernyataan Serial.println:

jika (ref == 0) {

ref = ditapis / 12.0; } jika (read_LCD_buttons () == btnSELECT) {ref = ditapis / 12.0; }

Selepas ini tambahkan pengiraan ketinggian:

mtr = ref - ditapis / 12.0;

Terakhir menukar pernyataan Serial.println untuk menghantar ‘mtr’ dan bukannya ‘disaring’, dan tambahkan kod untuk menghantar ‘mtr’ ke LCD:

Serial.println (mtr); // Hantar tekanan melalui siri (UART)

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

Semua perubahan di sini disertakan dalam contoh MS5611data2lcd. Muatkan ini seperti pada langkah 2.

Terdapat satu mod terakhir yang berguna. Paparannya sukar dibaca ketika dikemas kini 60 kali sesaat. Penapis kami melancarkan data dengan pemalar masa sekitar 0.8s. Oleh itu, mengemas kini paparan setiap 0.3 nampaknya cukup.

Oleh itu, tambahkan pembilang selepas semua definisi pemboleh ubah lain pada permulaan lakaran (mis., Selepas float ref = 0;):

int i = 0;

Kemudian tambahkan kod untuk kenaikan 'i' dan pernyataan 'if' untuk dijalankan apabila mencapai 20 dan kemudian tetapkan kembali ke sifar dan pindahkan perintah Serial dan lcd dalam pernyataan 'if' sehingga ini hanya dilaksanakan setiap bacaan ke-20:

i + = 1;

jika (i> = 20) {Serial.println (mtr); // Hantar tekanan melalui lcd.setCursor bersiri (UART) (0, 1); // baris 2 lcd.print (mtr); i = 0; }

Saya tidak memasukkan contoh dengan pengubahsuaian terakhir ini untuk mendorong memasukkan kod secara manual yang membantu pembelajaran.

Projek ini harus memberi titik permulaan yang baik misalnya untuk barometer digital. Bagi mereka yang mungkin ingin mempertimbangkan penggunaan model RC - cari OpenXvario untuk kod yang membolehkan altimeter dan variometer untuk sistem telemetri Frsky dan Turnigy 9x.

Disyorkan: