Turinys:

„Arduino“atmosferos juostos matavimo priemonė/ MS5611 GY63 GY86 demonstracija: 4 žingsniai (su nuotraukomis)
„Arduino“atmosferos juostos matavimo priemonė/ MS5611 GY63 GY86 demonstracija: 4 žingsniai (su nuotraukomis)

Video: „Arduino“atmosferos juostos matavimo priemonė/ MS5611 GY63 GY86 demonstracija: 4 žingsniai (su nuotraukomis)

Video: „Arduino“atmosferos juostos matavimo priemonė/ MS5611 GY63 GY86 demonstracija: 4 žingsniai (su nuotraukomis)
Video: Winson WCS1800 WCS2750 WCS1500 Hall Effect Current Sensor with dispaly with over current protection 2024, Liepa
Anonim
„Arduino“atmosferos juostos matavimo priemonė/ MS5611 GY63 GY86 demonstracija
„Arduino“atmosferos juostos matavimo priemonė/ MS5611 GY63 GY86 demonstracija

Tai tikrai barometras/altimetras, tačiau pavadinimo priežastį pamatysite žiūrėdami vaizdo įrašą.

MS5611 slėgio jutiklis, esantis „Arduino GY63“ir „GY86“pertraukų plokštėse, užtikrina nuostabų našumą. Ramią dieną jis išmatuos jūsų aukštį iki 0,2 m. Tai veiksmingai matuoja atstumą nuo galvos iki kosmoso ir atima jį iš pėdų atstumo iki kosmoso (matuojant slėgį - tai yra aukščiau esančio oro svoris). Šis įspūdingas prietaisas turi diapazoną, kuris patogiai išmatuos Everesto aukštį ir gali būti iki kelių colių.

Šis projektas buvo skirtas: mokyklos projektas, „Arduino“kodo modifikavimo pavyzdys ir gera pradžia tyrinėti naudojant MS5611 jutiklį. Yra daug forumo klausimų iš tų, kuriems kyla sunkumų naudojant šį jutiklį. Taikant šį metodą, jo naudojimas yra labai paprastas. Atlikę šį projektą būsite gerai pasirengę kurti kitas su slėgiu susijusias programas.

Kiekvienas jutiklis turi savo kalibravimo konstantas, kurias reikia perskaityti ir panaudoti duomenims taisyti. Yra biblioteka, padedanti juos valdyti. Čia rodomas kodas naudoja biblioteką, kad gautų rodmenis, tada konvertuoja juos į aukštį ir rodo juos LCD skydelyje.

Pirmiausia mes nusiųsime duomenis į nuoseklųjį monitorių kompiuteryje/nešiojamame kompiuteryje, kad būtų atlikti pirminiai bandymai. Jie rodo tam tikrą triukšmą, todėl pridedame filtrą, kad juos išlygintume. Tada pridėsime skystųjų kristalų ekraną, kad įrenginys galėtų veikti savarankiškai, o jūs galite pabandyti išmatuoti savo aukštį - ar bet ką kitą.

Atkreipkite dėmesį, kad GY63 plokštėje yra tik MS5611 slėgio jutiklis. GY86 vadinama 10 laipsnių laisvės lenta, taip pat apima 3 ašių akselerometrą, 3 ašių giroskopą ir 3 ašių magnetometrą tik už keletą USD.

Jums reikės:

1. „Arduino UNO“(arba kitas su standartiniu kištuku) ir jo USB kabelis

2. GY63 pertraukimo lenta arba GY86

3. 4 Dupontas veda patiną -moterį - arba jungiamąjį laidą

4. „Arduino“LCD klaviatūros skydas

5. 9v baterija ir laidas

6. 2,54 mm lizdo juosta (neprivaloma, bet rekomenduojama)

Paruošimas

Atsisiųskite „Arduino IDE“(integruotą kūrimo aplinką) iš:

Keletas techninių detalių dėl susidomėjimo

MS5611 pasižymi puikiais rezultatais, vidutiniškai gaudamas daugybę matavimų. Jis gali atlikti 4096 3 baitų (24 bitų) analoginius matavimus vos per 8 ms ir pateikti vidutinę vertę. Jis turi matuoti ir slėgį, ir temperatūrą, kad būtų galima ištaisyti slėgio duomenis pagal vidinę temperatūrą. Taigi jis gali pateikti apie 60 porų slėgio ir temperatūros rodmenų per sekundę.

Duomenų lapą galite rasti čia:

Ryšiai vyksta per I2C. Taigi kiti I2C jutikliai gali bendrinti magistralę (kaip tai yra GY86 10DOF plokštėje, kurioje visi lustai yra ant I2C).

1 žingsnis: Gaukite MS5611 biblioteką

Daugelis „Arduino“jutiklių naudoja standartinę biblioteką, kuri yra įtraukta į „Arduino IDE“, arba tiekiama su ZIP failu su biblioteka, kurią galima lengvai įdiegti. Tai dažniausiai nėra MS5611 jutiklių atveju. Tačiau buvo rasta paieška: https://github.com/gronat/MS5611, kurioje yra MS5611 biblioteka, įskaitant temperatūros korekciją.

1 variantas

Eikite į aukščiau esančią svetainę, spustelėkite „Klonuoti arba atsisiųsti“ir pasirinkite „Atsisiųsti ZIP“. Tai turėtų pristatyti MS5611-master.zip į atsisiuntimų katalogą. Dabar, jei norite, perkelkite jį į aplanką, kuriame galėsite jį rasti ateityje. Aš naudoju katalogą „duomenys“, pridėtą prie mano „Arduino“aplankų.

Deja, atsisiųstame.zip faile nėra jokių eskizų pavyzdžių ir būtų malonu pridėti biblioteką ir pavyzdžius prie „Arduino IDE“. Faile README.md yra minimalus pavyzdys, kurį galima nukopijuoti, įklijuoti į eskizą ir išsaugoti. Tai yra vienas iš būdų pradėti.

2 variantas

Kad būtų lengviau paleisti kodą šioje instrukcijoje, į biblioteką pridėjau minimalų pavyzdį ir čia pateiktus pavyzdžius ir žemiau pridėjau.zip failą, kuris bus įdiegtas į „Arduino IDE“.

Atsisiųskite zip failą žemiau. Jei norite, perkelkite jį į geresnį aplanką.

Paleiskite „Arduino IDE“. Spustelėkite Eskizas> Įtraukti biblioteką> Pridėti ZIP failą ir pasirinkite failą. Iš naujo paleiskite IDE. Dabar IDE bus įdiegta biblioteka ir visi čia pateikti pavyzdžiai. Patikrinkite spustelėdami Failas> pavyzdžiai >> MS5611-master. Reikėtų išvardyti tris eskizus.

2 veiksmas: prijunkite jutiklį prie „Arduino“ir išbandykite

Prijunkite jutiklį prie „Arduino“ir išbandykite
Prijunkite jutiklį prie „Arduino“ir išbandykite
Prijunkite jutiklį prie „Arduino“ir išbandykite
Prijunkite jutiklį prie „Arduino“ir išbandykite

GY63/GY86 plokštės paprastai būna su antraštėmis, bet ne lituojamos. Taigi jūs turite pasirinkti, ar lituoti antraštes vietoje, ir naudoti Dupont laidus-vyrus, arba (kaip nusprendžiau), litavimo laidus tiesiai prie plokštės ir pridėti kaiščius prie laido, kad prijungtumėte prie „Arduino“. Pastarasis variantas yra geresnis, jei manote, kad galbūt norėsite lituoti plokštę į projektą vėliau. Pirmasis yra geresnis, jei norite naudoti lentą eksperimentams. Išlydyti laidus yra daug lengviau nei kaiščių antraštę.

Reikalingi ryšiai yra šie:

GY63/GY86 „Arduino“

VCC - 5v maitinimas GND - GND įžeminimo SCL - A5 I2C laikrodis> SDA - A4 I2C duomenys

Pritvirtinkite jutiklio plokštę prie „Arduino“, kaip nurodyta aukščiau, ir prijunkite „Arduino“prie kompiuterio/nešiojamojo kompiuterio per USB laidą. Taip pat jutiklį padenkite nepermatoma/juoda medžiaga. Jutiklis yra jautrus šviesai (kaip ir daugumos šio tipo jutiklių atveju).

Paleiskite „Arduino IDE“. Spustelėkite:

Failas> pavyzdžiai >> MS5611-master> MS5611data2serial.

Kartu su eskizu pasirodys naujas IDE egzempliorius. Spustelėkite įkėlimo mygtuką (rodyklė į dešinę).

Tada paleiskite serijinį braižytuvą - spustelėkite Įrankiai> Serijinis braižytuvas ir, jei reikia, nustatykite baudą į 9600. Siunčiami duomenys yra slėgis paskaliais. Maždaug po sekundės jis vėl pakeis mastelį, o jutiklio pakėlimas ir nuleidimas, tarkime, 0,3 m, turėtų būti rodomas kaip pėdsako nuleidimas ir pakėlimas (mažesnis aukštis yra didesnis slėgis).

Duomenys turi šiek tiek triukšmo. Žiūrėkite pirmąjį siužetą aukščiau. Tai galima išlyginti naudojant skaitmeninį filtrą (tikrai naudingas įrankis).

Filtro lygtis yra tokia:

vertė = vertė + K (nauja vertė)

kur „vertė“yra filtruoti duomenys, o „naujas“- paskutinis išmatuotas. Jei K = 1, filtravimo nėra. Esant mažesnėms K reikšmėms, duomenys išlyginami naudojant laiko konstantą T/K, kur T yra laikas tarp mėginių. Čia T yra apie 17 ms, taigi 0,1 vertė suteikia 170 ms arba maždaug 1/6 s laiko konstantą.

Filtrą galima pridėti:

Prieš nustatydami pridėkite filtruotų duomenų kintamąjį ():

plūdė filtruojama = 0;

Tada pridėkite filtro lygtį po slėgio =…. linija.

filtruojamas = filtruojamas + 0,1*(filtruojamas slėgiu);

Patartina inicijuoti filtruotą vertę pirmam svarstymui. Taigi pridėkite teiginį „jei“aplink eilutę, kuri tai daro, kad atrodytų taip:

jei (filtruota! = 0) {

filtruojamas = filtruojamas + 0,1*(filtruojamas slėgiu); } else {filtruotas = slėgis; // pirmasis skaitymas, todėl filtruotas į skaitymą}

Testas „! =“Nėra „lygus“. Taigi, jei „filtruotas“nėra lygus 0, filtro lygtis vykdoma, bet jei taip, tada ji nustatoma į slėgio rodmenis.

Galiausiai sakinyje „Serial.println“turime pakeisti „slėgį“į „filtruotą“, kad pamatytume filtruotą vertę.

Geriausias mokymasis pasiekiamas aukščiau atliktais pakeitimais rankiniu būdu. Tačiau aš juos įtraukiau į pavyzdį MS5611data2serialWfilter. Taigi, jei kyla problemų, pavyzdį galima įkelti.

Dabar įkelkite kodą į „Arduino“ir pamatysite pagerėjimą. Žr. Antrą grafiką aukščiau ir atkreipkite dėmesį, kad Y skalė yra išplėsta x2.

Išbandykite mažesnę filtro konstantos vertę, tarkime 0,02, o ne 0,1, ir pamatysite skirtumą. Duomenys yra sklandesni, bet lėčiau reaguoja. Tai kompromisas, kurio reikia ieškoti naudojant šį paprastą filtrą. Charakteristika yra tokia pati kaip RC (pasipriešinimo ir talpos) filtras, plačiai naudojamas elektroninėse grandinėse.

3 žingsnis: padarykite jį savarankišką

Dabar mes pridėsime LCD klaviatūros skydą, konvertuosime slėgį į aukštį metrais ir parodysime jį ekrane. Mes taip pat pridėsime galimybę nulinę vertę paspausdami klaviatūros mygtuką „Pasirinkti“.

Jei „Arduino“yra LCD ekranas, jutiklis turės būti prijungtas prie LCD ekrano. Deja, LCD ekranai dažniausiai būna be atitinkamų lizdų. Taigi variantai yra prijungti litavimo jungtis arba gauti lizdo juostelę. Lizdų juostelę galima įsigyti „ebay“ne daugiau nei pašto išlaidos. Ieškokite „2,54 mm lizdo juostelės“ir ieškokite panašių į „Arduino“. Paprastai jie būna 36 arba 40 kaiščių ilgio. Aš vengčiau pasuktų kaiščių, nes jie nėra pakankamai gilūs standartiniams „Dupont“laidams.

Lizdo juostelė turi būti supjaustyta pagal ilgį, o pjūvis turi būti padarytas toje pačioje vietoje kaip ir smeigtukas. Taigi 6 kaiščių juostelės atveju - 7 kaištį nuimkite smulkiomis replėmis, tada toje vietoje supjaustykite naudodami jaunesnįjį metalo pjūklą. Aš padengiu galus, kad jie būtų tvarkingi.

Lituodami ant lentos įsitikinkite, kad nėra litavimo tiltų.

Priėmę atitinkamą sprendimą prijungti jutiklį, prijunkite LCD ekraną prie „Arduino“ir prijunkite jutiklį prie tų pačių kaiščių, bet dabar ant LCD skydo.

Taip pat paruoškite akumuliatorių ir laidą. Aš sudariau savo švino iš dalių, esančių mano laužo dėžėje, tačiau jas taip pat galima įsigyti „ebay“- įskaitant puikų variantą, kuriame yra akumuliatoriaus dėžutė ir jungiklis. Ieškokite „PP3 2.1 mm laido“.

Šiuo metu sunaudojama apie 80 mln. Taigi, jei norite veikti ilgiau nei kelias minutes, apsvarstykite didesnę 9 V bateriją nei PP3.

4 žingsnis: pridėkite aukščio ir LCD kodą

Image
Image

Turime šiek tiek daugiau koduoti, kad slėgis būtų paverstas aukščiu ir būtų rodomas ekranas.

Eskizo pradžioje pridėkite ekrano biblioteką ir pasakykite, kokie kaiščiai naudojami:

#įtraukti

// inicijuoti biblioteką sąsajos kaiščių numeriais LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Toliau mums reikia kai kurių kintamųjų ir funkcijos klaviatūros mygtukams nuskaityti. Visi jie yra prijungti prie analoginio įėjimo A0. Kiekvienas mygtukas suteikia skirtingą įtampą A0. Paieška pagal „arduino LCD skydo mygtukų kodą“rado gerą kodą:

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

Prieš nustatydami pridėkite šį kodą ():

// apibrėžti kai kurias skydo ir mygtukų naudojamas vertes

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 // skaityti mygtukus int read_LCD_buttons () {adc_key_in = analogRead (0); // skaityti reikšmę iš jutiklio // mano mygtukai skaitant yra centre ties šiomis reikšmėmis: 0, 144, 329, 504, 741 // prie tų verčių pridedame maždaug 50 ir patikriname, ar esame arti, jei (adc_key_in> 1000) grąžinti btnNONE; // Dėl greičio tai padarome 1 -uoju variantu, nes tai bus labiausiai tikėtinas rezultatas, jei (adc_key_in <50) grąžins btnRIGHT; if (adc_key_in <250) return btnUP; if (adc_key_in <450) return btnDOWN; if (adc_key_in <650) return btnLEFT; if (adc_key_in <850) return btnSELECT; return btnNONE; // kai visi kiti nepavyks, grąžinkite tai…}

Pradinis taškas paprastai yra nulis. Taigi mums reikia kintamųjų tiek aukščio, tiek atskaitos. Pridėkite juos prieš sąranką () ir aukščiau pateiktą funkciją:

plūdė mtr;

plūdės ref = 0;

Slėgio pakeitimas paskaliais į metrus yra beveik tiksliai padalintas iš 12 jūros lygio. Ši formulė tinka daugeliui matavimų ant žemės. Yra tikslesnių formulių, kurios labiau tinka konversijai dideliame aukštyje. Naudokite juos, jei ketinate tai naudoti skrydžio oro balionu aukščiui įrašyti.

Nuoroda turėtų būti nustatyta į pirmąjį slėgio rodmenį, kad pradėtume nuo nulio aukščio ir paspaudę mygtuką SELECT. Po filtro kodo ir prieš „Serial.println“pridėkite:

jei (nuoroda == 0) {

ref = filtruotas/12,0; } if (read_LCD_buttons () == btnSELECT) {ref = filtruotas/12.0; }

Po to pridėkite aukščio skaičiavimą:

mtr = ref - filtruotas/12,0;

Galiausiai pakeiskite „Serial.println“sakinį, kad vietoj „filtruoto“būtų siunčiamas „mtr“, ir pridėkite kodą, kad „LCD“būtų siunčiamas „mtr“:

Serial.println (mtr); // Siųsti slėgį per serijinį (UART)

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

Visi čia atlikti pakeitimai yra įtraukti į pavyzdį MS5611data2lcd. Įkelkite tai kaip 2 veiksme.

Yra paskutinis modas, kuris yra naudingas. Ekraną sunku perskaityti, kai jis atnaujinamas 60 kartų per sekundę. Mūsų filtras išlygina duomenis, kai laiko konstanta yra maždaug 0,8 s. Taigi pakanka atnaujinti ekraną kas 0,3 sekundės.

Taigi pridėkite skaitiklį po visų kitų kintamųjų apibrėžimų eskizo pradžioje (pvz., Po plūdės ref = 0;):

int i = 0;

Tada pridėkite kodą prie prieaugio „i“ir „if“sakinio, kad jis būtų paleistas, kai jis pasiekia 20, tada nustatykite jį atgal į nulį ir perkelkite serijos ir lcd komandas sakinyje „jei“, kad jos būtų vykdomos tik kas 20 -tą kartą:

i += 1;

jei (i> = 20) {Serial.println (mtr); // Siųsti slėgį per serijinį (UART) lcd.setCursor (0, 1); // 2 eilutė lcd.print (mtr); i = 0; }

Į šį paskutinį pakeitimą neįtraukiau pavyzdžio, kad paskatinčiau rankiniu būdu įvesti kodą, kuris padeda mokytis.

Šis projektas turėtų būti geras atspirties taškas, pavyzdžiui, skaitmeniniam barometrui. Tiems, kurie galbūt norėtų apsvarstyti galimybę naudoti RC modelius - ieškokite „OpenXvario“kodo, kuris įgalintų altimetrą ir varometrą „Frsky“ir „Turnigy 9x“telemetrijos sistemoms.

Rekomenduojamas: