Mundarija:

Arduino atmosfera tasmasi o'lchovi/ MS5611 GY63 GY86 Namoyish: 4 qadam (rasmlar bilan)
Arduino atmosfera tasmasi o'lchovi/ MS5611 GY63 GY86 Namoyish: 4 qadam (rasmlar bilan)

Video: Arduino atmosfera tasmasi o'lchovi/ MS5611 GY63 GY86 Namoyish: 4 qadam (rasmlar bilan)

Video: Arduino atmosfera tasmasi o'lchovi/ MS5611 GY63 GY86 Namoyish: 4 qadam (rasmlar bilan)
Video: АRDUINO в ближнем космосе. 27 000 метров над Землёй. Часть 4. Смотрим запись трека и видео с GoPro 2024, Iyul
Anonim
Arduino atmosfera tasmasi o'lchovi/ MS5611 GY63 GY86 namoyishi
Arduino atmosfera tasmasi o'lchovi/ MS5611 GY63 GY86 namoyishi

Bu haqiqatan ham barometr/altimetr, lekin siz videoni ko'rib sarlavha sababini ko'rasiz.

MS5611 bosim sensori, Arduino GY63 va GY86 sindiruvchi taxtalarida, ajoyib ishlashni ta'minlaydi. Tinch kunda u sizning balandligingizni 0,2 m gacha o'lchaydi. Bu sizning boshingizdan kosmosgacha bo'lgan masofani samarali o'lchash va uni oyoqlaringizdan kosmosgacha olib tashlash (bosimni o'lchash orqali - bu yuqoridagi havo og'irligi). Bu ajoyib qurilma Everest balandligini qulay o'lchaydigan diapazonga ega va bir necha dyuymgacha ham o'lchab beradi.

Bu loyiha: maktablar loyihasi, Arduino kodini o'zgartirish misoli va MS5611 sensori yordamida o'rganish uchun yaxshi joy. Sensor bilan bog'liq muammolarga duch kelganlardan ko'plab forum savollari bor. Bu erda yondashuv uni ishlatishni juda sodda qiladi. Ushbu loyihani amalga oshirgandan so'ng, siz bosim bilan bog'liq boshqa ilovalarni ishlab chiqish uchun yaxshi jihozlangan bo'lasiz.

Har bir sensorning o'z kalibrlash konstantalari bor, ularni o'qish va ma'lumotlarni to'g'rilash uchun ishlatish kerak. Bularni boshqarishga yordam beradigan kutubxona mavjud. Bu erda ko'rsatilgan kod o'qish uchun kutubxonadan foydalanadi, keyin ularni balandlikka aylantiradi va LCD ekranida ko'rsatadi.

Birinchidan, biz dastlabki sinovlar uchun ma'lumotlarni kompyuter/noutbukdagi ketma -ket monitorga yuboramiz. Bu shovqinni ko'rsatadi, shuning uchun biz ularni yumshatish uchun filtr qo'shamiz. Keyin biz LCD displeyni qo'shamiz, shunda qurilma mustaqil ishlashi mumkin va siz balandligingizni o'lchashga harakat qilishingiz mumkin.

E'tibor bering, GY63 taxtasida faqat MS5611 bosim sensori mavjud. GY86 10 graduslik erkinlik taxtasi deb ataladi, shuningdek, 3 o'qli akselerometr, 3 o'qli gyro va 3 o'qli magnitometrni o'z ichiga oladi.

Sizga kerak bo'ladi:

1. Arduino UNO (yoki standart pinoutli boshqa) va uning USB kabeli

2. GY63 kesish taxtasi yoki GY86

3. 4 Dupont erkak -ayol - yoki ulash simini olib keladi

4. Arduino LCD klaviatura qalqoni

5. 9v batareya va qo'rg'oshin

6. 2,54 mm soket tasmasi (ixtiyoriy, lekin tavsiya etiladi)

Tayyorgarlik

Arduino IDE -ni (integratsiyalashgan ishlab chiqish muhiti) bu erdan yuklab oling:

Qiziqish uchun ba'zi texnik bitlar

MS5611 ko'p sonli o'lchovlarni o'rtacha hisoblab, ajoyib ishlashini ta'minlaydi. U 4096 3 baytli (24bit) analog o'lchovlarni atigi 8 msda bajarishi va o'rtacha qiymatini berishi mumkin. U bosim va haroratni o'lchashi kerak, shuning uchun bosim ma'lumotlarini ichki harorat uchun tuzatish mumkin. Shunday qilib, u sekundiga 60 juft bosim va harorat ko'rsatkichlarini etkazib berishi mumkin.

Ma'lumotlar varag'i quyidagi manzilda mavjud:

Aloqa I2C orqali amalga oshiriladi. Shunday qilib, boshqa I2C datchiklari avtobusni ulashishi mumkin (GY86 10DOF kartasida bo'lgani kabi, barcha chiplar I2C da).

1 -qadam: MS5611 kutubxonasini oling

Arduino sensorlarining ko'pchiligi Arduino IDE -ga kiritilgan standart kutubxonadan foydalanadi yoki kutubxonasi osongina o'rnatiladigan zip -fayl bilan ta'minlanadi. MS5611 datchiklarida bunday bo'lmaydi. Ammo qidiruv topildi: https://github.com/gronat/MS5611, MS5611 kutubxonasi, shu jumladan haroratni to'g'rilash.

Variant 1

Yuqoridagi veb -saytga o'ting, "Klonlash yoki Yuklab olish" -ni bosing va "ZIP -ni yuklab olish" -ni tanlang. Bu MS5611-master.zip-ni yuklamalar katalogiga etkazib berishi kerak. Agar xohlasangiz, uni kelajakda topishingiz mumkin bo'lgan papkaga o'tkazing. Men Arduino papkalariga qo'shilgan "ma'lumotlar" katalogidan foydalanaman.

Afsuski, yuklangan.zip fayli hech qanday eskizlarni o'z ichiga olmaydi va kutubxona va misollarni Arduino IDE ga qo'shish yaxshi bo'lardi. README.md faylida eskizga nusxa ko'chirish va joylashtirish va saqlash mumkin bo'lgan minimal misol mavjud. Bu harakat qilishning bir usuli.

2 -variant

Kodni ishga tushirishni osonlashtirish uchun men yuqoridagi minimal misolni va bu erda ko'rsatilgan misollarni kutubxonaga qo'shdim va quyida Arduino IDE ga o'rnatiladigan.zip faylini biriktirdim.

Quyidagi zip faylini yuklab oling. Agar xohlasangiz, uni yaxshiroq papkaga o'tkazing.

Arduino IDE -ni ishga tushiring. Eskiz> Kutubxonani qo'shish> Zip faylini qo'shish -ni bosing va faylni tanlang. IDE -ni qayta ishga tushiring. Endi IDE -da kutubxona o'rnatilgan va bu erda ko'rsatilgan barcha misollar bo'ladi. Fayl> misollar >> MS5611-master-ni bosish orqali tekshiring. Uch eskiz ro'yxatga olinishi kerak.

2 -qadam: Sensorni Arduino -ga ulang va sinab ko'ring

Sensorni Arduino -ga ulang va sinab ko'ring
Sensorni Arduino -ga ulang va sinab ko'ring
Sensorni Arduino -ga ulang va sinab ko'ring
Sensorni Arduino -ga ulang va sinab ko'ring

GY63/GY86 taxtalari odatda sarlavhalar bilan birga keladi, lekin lehimlanmagan. Sarlavhalarni joyiga lehimlab, erkak-urg'ochi Dupont simlarini ishlatish, yoki (men qaror qilganimdek) lehim simlarini to'g'ridan-to'g'ri taxtaga qo'yish va Arduino-ga ulash uchun simga pin qo'shish sizning ixtiyoringizda. Agar siz taxtani keyinchalik loyihaga lehimlamoqchi deb o'ylasangiz, ikkinchi variant yaxshiroqdir. Agar siz tajriba uchun taxtadan foydalanmoqchi bo'lsangiz, avvalgisi yaxshiroqdir. Qo'rg'oshinlarni payvandlash pin sarlavhasiga qaraganda ancha oson.

Kerakli ulanishlar:

GY63/GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - A5 I2C soat> SDA - A4 I2C ma'lumotlari

Sensor panelini yuqoridagi kabi Arduino -ga ulang va Arduino -ni USB kabeli orqali kompyuter/noutbukga ulang. Sensorni shaffof bo'lmagan qora material bilan yoping. Sensor nurga sezgir (bu turdagi sensorlarning ko'pchiligida bo'lgani kabi).

Arduino IDE -ni ishga tushiring. Bosing:

Fayl> misollar >> MS5611-master> MS5611data2serial.

Eskiz bilan IDE ning yangi namunasi paydo bo'ladi. Yuklash tugmasini bosing (o'ng o'q).

Keyin ketma -ket chizgichni ishga tushiring - Asboblar> Serial Plotter -ni bosing va agar kerak bo'lsa, yukni 9600 ga o'rnating. Yuborilayotgan ma'lumotlar Paskaldagi bosimdir. Bir soniya o'tgach, u o'lchovni ko'taradi va datchikni 0,3 m ga ko'taradi, bu izning pasayishi va ko'tarilishini ko'rsatishi kerak (past balandlik-yuqori bosim).

Ma'lumotlar biroz shovqinli. Yuqoridagi birinchi rejaga qarang. Buni raqamli filtr yordamida tekislash mumkin (chindan ham foydali vosita).

Filtr tenglamasi:

qiymat = qiymat + K (yangi qiymat)

bu erda "qiymat" - filtrlangan ma'lumotlar, "yangi" - bu oxirgi o'lchov. Agar K = 1 bo'lsa, filtrlash yo'q. K ning pastroq qiymatlari uchun ma'lumotlar T/K vaqt konstantasi bilan tekislanadi, bu erda T - namunalar orasidagi vaqt. Bu erda T 17ms atrofida, shuning uchun 0,1 qiymati 170ms yoki 1/6s atrofida doimiylik beradi.

Filtrni qo'shish mumkin:

O'rnatishdan oldin filtrlangan ma'lumotlar uchun o'zgaruvchini qo'shing ():

filtrlangan suzuvchi = 0;

Keyin = = bosimidan keyin filtr tenglamasini qo'shing. chiziq

filtrlangan = filtrlangan + 0,1*(bosim bilan filtrlangan);

Filtrlangan qiymatni birinchi o'qishga boshlash yaxshidir. Shunday qilib, yuqoridagi satr atrofida "if" iborasini qo'shing, shunda u shunday ko'rinadi:

agar (filtrlangan! = 0) {

filtrlangan = filtrlangan + 0,1*(bosim bilan filtrlangan); } boshqa {filtrlangan = bosim; // birinchi o'qish, shuning uchun filtrlangan holda o'qiladi}

"! =" Testi "teng emas". Agar "filtrlangan" 0 ga teng bo'lmasa, filtr tenglamasi bajariladi, agar shunday bo'lsa, u bosim ko'rsatkichiga o'rnatiladi.

Nihoyat, biz "bosim" ni "filtrlangan" ga o'zgartirishimiz kerak, shunda biz filtrlangan qiymatni ko'ramiz.

Eng yaxshi o'rganishga yuqoridagi o'zgarishlarni qo'lda kiritish orqali erishiladi. Lekin men ularni MS5611data2serialWfilter misoliga kiritdim. Agar muammolar mavjud bo'lsa, misolni yuklash mumkin.

Endi kodni Arduino -ga yuklang va yaxshilanishini ko'ring. Yuqoridagi ikkinchi uchastkaga qarang va Y shkalasi x2 kengaytirilganligiga e'tibor bering.

Filtr sobitligi uchun pastroq qiymatni sinab ko'ring, 0,1 o'rniga 0,02 deb ayting va farqni ko'ring. Ma'lumotlar yumshoqroq, lekin sekinroq javob beradi. Bu oddiy filtrdan foydalanganda qidirish kerak bo'lgan murosadir. Xarakteristikasi elektron sxemalarda keng qo'llaniladigan RC (qarshilik va sig'im) filtri bilan bir xil.

3 -qadam: Mustaqil qiling

Endi biz LCD klaviatura qalqoni qo'shamiz, bosimni metrga balandlikka aylantiramiz va displeyda ko'rsatamiz. Shuningdek, biz "Tanlash" tugmachasini bosib, qiymatni nol qilish qobiliyatini qo'shamiz.

LCD qalqoni Arduino -da bo'lsa, sensor LCD ekranga ulangan bo'lishi kerak. Afsuski, LCD ekranlar, odatda, tegishli rozetkasiz keladi. Shunday qilib, lehim bilan ulanish yoki rozetkani olish mumkin. Soket tasmasi ebayda pochta xarajatlaridan ko'p bo'lmagan narxda mavjud. "2,54 mm soket tasmasi" ni qidiring va Arduino -dagi o'xshashlarni qidiring. Ular odatda 36 yoki 40 pin uzunlikda bo'ladi. Men burilgan pinlardan qochardim, chunki ular standart Dupont kabellari uchun etarlicha chuqur emas.

Soket tasmasini uzunligi kesilishi kerak va kesish pim bilan bir xil joyda amalga oshirilishi kerak. Shunday qilib, 6 -pinli tasma uchun - 7 -pinni ingichka qisqichlar bilan olib tashlang, so'ng o'sha erdagi arra yordamida kesing. Men ularni toza qilish uchun uchlarini yozaman.

Taxtaga lehimlashda lehim ko'prigi yo'qligiga ishonch hosil qiling.

Sensorni ulash to'g'risida tegishli qaror qabul qilinganda, LCD ekranni Arduino -ga ulang va sensorni xuddi shu pimlarga ulang - lekin hozir LCD ekranida.

Bundan tashqari, batareyani va simni tayyorlang. Men qo'rg'oshinni axlat qutisidagi qismlardan tayyorladim, lekin ular ebayda ham mavjud - akkumulyator qutisi va kalitni o'z ichiga olgan yaxshi variant. "PP3 2.1 mm qo'rg'oshin" ni qidiring.

Hozirgi iste'mol 80ma atrofida. Shunday qilib, agar siz bir necha daqiqadan ko'proq ishlashni xohlasangiz, PP3 ga qaraganda 9V kattaroq batareyani o'ylab ko'ring.

4 -qadam: Balandlik va LCD uchun kod qo'shing

Image
Image

Bosimni balandlikka aylantirish va displeyni haydash uchun biz biroz ko'proq kodlashimiz kerak.

Eskizning boshida ko'rgazma kutubxonasini qo'shing va qanday pinlar ishlatilishini ayting:

#qo'shing

// kutubxonani LiquidCrystal lcd (8, 9, 4, 5, 6, 7) interfeys pinlari raqamlari bilan ishga tushiring;

Keyin bizga klaviatura tugmachalarini o'qish uchun ba'zi o'zgaruvchilar va funksiya kerak bo'ladi. Bularning barchasi analogli A0 ga ulangan. Har bir tugma A0 ga har xil kuchlanishni beradi. "Arduino lcd qalqon tugmachalari kodi" bo'yicha qidiruv yaxshi kodni topdi:

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

O'rnatishdan oldin ushbu kodni qo'shing ():

// panel va tugmalar ishlatadigan ba'zi qiymatlarni aniqlang

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 // int read_LCD_buttons () {adc_key_in = analogRead (0); // sensordan qiymatni o'qing // o'qish paytida tugmalarim mana shu vodiylarda joylashgan: 0, 144, 329, 504, 741 // biz bu qiymatlarga taxminan 50 qo'shamiz va agar yaqin ekanligimizni tekshiramiz (adc_key_in> 1000) qaytarish btnNONE; // Biz buni tezlik sabablari uchun birinchi variant qilamiz, chunki bu (adc_key_in <50) btnRIGHT; agar (adc_key_in <250) btnUP qaytarsa; agar (adc_key_in <450) btnDOWN qaytsa; agar (adc_key_in <650) btnLEFT qaytarilsa; agar (adc_key_in <850) btnSELECT qaytarsa; qaytarish btnNONE; // hamma muvaffaqiyatsiz bo'lganda, buni qaytaring …}

Balandlik odatda boshlang'ich nuqtada nolga o'rnatiladi. Shunday qilib, balandlik va mos yozuvlar uchun o'zgaruvchilar kerak. O'rnatishdan oldin () va yuqoridagi funktsiyani qo'shing:

float mtr;

float ref = 0;

Paskaldagi bosimdan metrga aylanish deyarli dengiz sathida 12 ga bo'linadi. Bu formulalar er usti o'lchovlari uchun juda mos keladi. Yuqori balandlikda konvertatsiya qilish uchun ko'proq mos keladigan aniqroq formulalar mavjud. Agar siz undan balon parvozining balandligini yozish uchun foydalanmoqchi bo'lsangiz, ulardan foydalaning.

Malumot birinchi bosim ko'rsatkichiga o'rnatilishi kerak, shuning uchun biz nol balandlikda va SELECT tugmasi bosilganda boshlaymiz. Filtr kodidan keyin va Serial.println bayonotidan oldin qo'shing:

agar (ref == 0) {

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

Shundan so'ng balandlik hisobini qo'shing:

mtr = ref - filtrlangan/12.0;

Oxir -oqibat Serial.println iborasini "filtrlangan" o'rniga "mtr" yuborish uchun o'zgartiring va "mtr" ni LCDga yuborish uchun kod qo'shing:

Serial.println (mtr); // Bosimni ketma -ket (UART) orqali yuboring

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

Bu erdagi barcha o'zgarishlar MS5611data2lcd misolida keltirilgan. Buni 2 -qadamdagi kabi yuklang.

Oxirgi yordamchi usul bor. Displey soniyasiga 60 marta yangilanganida o'qish qiyin bo'ladi. Bizning filtrimiz 0,8 soniya atrofida doimiylik bilan ma'lumotlarni tekislaydi. Shunday qilib, displeyni har 0.3 soniyada yangilash etarli darajada ko'rinadi.

Shunday qilib, eskiz boshida boshqa barcha o'zgaruvchan ta'riflardan keyin hisoblagich qo'shing (masalan, float ref = 0; dan keyin):

int i = 0;

Keyin "i" va "if" iborasini 20 ga oshirganda ishga tushirish uchun kod qo'shing va keyin uni nolga qaytaring va "if" iborasida Serial va lcd buyruqlarini ko'chiring, shunda ular faqat har 20 -o'qishda bajariladi:

i += 1;

if (i> = 20) {Serial.println (mtr); // Bosimni ketma -ket (UART) lcd.setCursor (0, 1) orqali yuborish; // 2 -satr lcd.print (mtr); i = 0; }

O'qishga yordam beradigan kodni qo'lda kiritishni rag'batlantirish uchun men ushbu oxirgi o'zgartirish bilan misol keltirmadim.

Bu loyiha, masalan, raqamli barometr uchun yaxshi boshlanish nuqtasini berishi kerak. RC modellarida foydalanishni o'ylamoqchi bo'lganlar uchun - Frsky va Turnigy 9x telemetriya tizimlari uchun altimetr va variometrni yoqadigan kod uchun OpenXvario -ni qidiring.

Tavsiya: