Tartalomjegyzék:

Arduino légköri mérőszalag/ MS5611 GY63 GY86 bemutató: 4 lépés (képekkel)
Arduino légköri mérőszalag/ MS5611 GY63 GY86 bemutató: 4 lépés (képekkel)

Videó: Arduino légköri mérőszalag/ MS5611 GY63 GY86 bemutató: 4 lépés (képekkel)

Videó: Arduino légköri mérőszalag/ MS5611 GY63 GY86 bemutató: 4 lépés (képekkel)
Videó: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, Július
Anonim
Arduino légköri mérőszalag/ MS5611 GY63 GY86 bemutató
Arduino légköri mérőszalag/ MS5611 GY63 GY86 bemutató

Ez valóban barométer/magasságmérő, de a videó okán látni fogja a cím okát.

Az MS5611 nyomásérzékelő, amely megtalálható az Arduino GY63 és GY86 törőlapokon, elképesztő teljesítményt nyújt. Nyugodt napon 0,2 méteren belül méri a magasságát. Ez hatékonyan méri a fej és a világűr közötti távolságot, és levonja a lábfej és a világűr közötti távolságból (a nyomás mérésével - ez a fenti levegő súlya). Ennek a látványos eszköznek olyan tartománya van, amely kényelmesen méri az Everest magasságát - és néhány hüvelykig is mérhető.

Ennek a projektnek a célja a következő volt: iskolai projekt, példa az Arduino kód módosítására, és jó kiindulópont az MS5611 érzékelő használatával történő felfedezéshez. Rengeteg fórum kérdése van azoktól, akiknek nehézségei vannak ezzel az érzékelővel. Az itt alkalmazott megközelítés nagyon egyszerűvé teszi a használatát. A projekt elvégzése után jól felkészült lesz más nyomással kapcsolatos alkalmazások fejlesztésére.

Minden érzékelő saját kalibrálási állandóval rendelkezik, amelyeket ki kell olvasni és használni kell az adatok kijavításához. Van egy könyvtár, amely segíti ezeket. Az itt látható kód a könyvtárat használja a leolvasások leolvasásához, majd magasságra konvertálja és megjeleníti az LCD pajzson.

Először elküldjük az adatokat a PC/laptop soros monitorára a kezdeti tesztekhez. Ezek némi zajt mutatnak, ezért szűrőt adunk hozzá, hogy kiegyenlítsük őket. Ezután hozzáadunk egy LCD -kijelzőt, hogy az egység önállóan működjön, és megpróbálhatja mérni a magasságát - vagy bármi mást.

Vegye figyelembe, hogy a GY63 kártyán csak az MS5611 nyomásérzékelő található. A GY86 -ot 10 szabadságfokú táblának hívják, és tartalmaz egy 3 tengelyes gyorsulásmérőt, 3 tengelyes giroszkópot és egy 3 tengelyes magnetométert, mindössze néhány dollárért.

Szükséged lesz:

1. Arduino UNO (vagy más szabványos pinout -al) és annak USB -kábele

2. GY63 kitörőtábla vagy GY86

3. 4 A Dupont férfi -nő vezetékeket vezet - vagy összekötő vezetéket

4. Arduino LCD billentyűzetpajzs

5. 9V -os akkumulátor és ólom

6. 2,54 mm -es foglalat (opcionális, de ajánlott)

Készítmény

Töltse le az Arduino IDE -t (integrált fejlesztői környezet) innen:

Érdeklődésképpen néhány technikai részlet

Az MS5611 nagy teljesítményt nyújt nagyszámú mérés átlagolásával. 4096 3 bájtos (24 bites) analóg mérést végezhet mindössze 8 ms -ban, és megadhatja az átlagos értéket. Meg kell mérnie a nyomást és a hőmérsékletet is, így a nyomásadatok korrigálhatók a belső hőmérséklethez. Így másodpercenként körülbelül 60 pár nyomás- és hőmérsékleti értéket képes leadni.

Az adatlap a következő címen érhető el:

A kommunikáció az I2C -n keresztül történik. Így más I2C érzékelők is megoszthatják a buszt (ahogy a GY86 10DOF kártyán, ahol az összes chip az I2C -n van).

1. lépés: Szerezzen be egy MS5611 könyvtárat

Sok Arduino -érzékelő vagy szabványos könyvtárat használ, amely az Arduino IDE -hez tartozik, vagy zip fájllal van ellátva, amely könnyen telepíthető könyvtárat tartalmaz. Ez általában nem jellemző az MS5611 érzékelőkre. A keresés azonban megtalálta: https://github.com/gronat/MS5611, amely rendelkezik az MS5611 könyvtárával, beleértve a hőmérséklet -korrekciót is.

1.opció

Lépjen a fenti webhelyre, kattintson a „Klónozás vagy letöltés” gombra, és válassza a „Letöltés ZIP” lehetőséget. Ennek el kell juttatnia az MS5611-master.zip fájlt a letöltési könyvtárba. Most, ha szeretné, helyezze át egy mappába, ahol a jövőben megtalálhatja. Az „adatok” nevű könyvtárat használom az Arduino mappáimhoz.

Sajnos a letöltött.zip fájl nem tartalmaz példavázlatokat, és jó lenne hozzáadni a könyvtárat és a példákat az Arduino IDE -hez. A README.md fájlban van egy minimális példa, amely másolható, vázlatba illeszthető és menthető. Ez az egyik módja az indulásnak.

2. lehetőség

Az utasításban szereplő kód futtatásának megkönnyítése érdekében hozzáadtam a fenti minimális példát és az itt látható példákat a könyvtárhoz, és csatoltam egy.zip fájlt, amely települ az Arduino IDE -be.

Töltse le az alábbi zip fájlt. Ha szeretné, helyezze át ezt egy jobb mappába.

Indítsa el az Arduino IDE -t. Kattintson a Vázlat> Könyvtár felvétele> Zip fájl hozzáadása elemre, és válassza ki a fájlt. Indítsa újra az IDE -t. Az IDE -ben most mindkettő telepítve lesz a könyvtárral, valamint az itt látható példákkal. Ellenőrizze a Fájl> példák >> MS5611-master elemre kattintva. Három vázlatot kell felsorolni.

Lépés: Csatlakoztassa az érzékelőt az Arduino -hoz és tesztelje

Csatlakoztassa az érzékelőt az Arduino -hoz és tesztelje
Csatlakoztassa az érzékelőt az Arduino -hoz és tesztelje
Csatlakoztassa az érzékelőt az Arduino -hoz és tesztelje
Csatlakoztassa az érzékelőt az Arduino -hoz és tesztelje

A GY63/GY86 táblák általában fejlécekkel érkeznek, de nem forrasztva. Tehát az Ön döntése, hogy vagy a helyére forrasztja a fejléceket, és férfi-női Dupont vezetékeket használ, vagy (ahogy eldöntöttem), a forrasztóvezetékeket közvetlenül a táblához, és csapokat ad hozzá a vezetékhez az Arduino csatlakoztatásához. Az utóbbi lehetőség jobb, ha úgy gondolja, hogy később érdemes lehet a táblát egy projektbe forrasztani. Az előbbi jobb, ha a táblát kísérletezésre szeretné használni. A vezetékek forrasztása sokkal könnyebb, mint a csapfej.

A szükséges kapcsolatok a következők:

GY63/GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - A5 I2C óra> SDA - A4 I2C adatok

Csatlakoztassa az érzékelő táblát az Arduino -hoz a fentiek szerint, és csatlakoztassa az Arduino -t a számítógéphez/laptophoz az USB -kábellel. Fedje le az érzékelőt is átlátszatlan/fekete anyaggal. Az érzékelő fényérzékeny (mint a legtöbb ilyen típusú érzékelő esetében).

Indítsa el az Arduino IDE -t. Kattintson:

Fájl> példák >> MS5611-master> MS5611data2serial.

A vázlattal együtt megjelenik az IDE új példánya. Kattintson a feltöltés gombra (jobbra mutató nyíl).

Ezután indítsa el a soros plottert - kattintson az Eszközök> Soros plotter elemre, és szükség esetén állítsa a baud értékét 9600 -ra. Az elküldött adatok a Pascal -ban megadott nyomás. Körülbelül egy másodperc múlva újra skálázódik, és az érzékelőt mondjuk 0,3 m-rel megemelve és leengedve a nyomvonal leengedéseként és emeléseként kell megjeleníteni (az alacsonyabb magasság nagyobb nyomás).

Az adatok némi zajt tartalmaznak. Lásd fent az első cselekményt. Ezt egy digitális szűrővel (igazán hasznos eszköz) lehet elsimítani.

A szűrőegyenlet a következő:

érték = érték + K (új érték)

ahol az „érték” a szűrt adatok, az „új” pedig a legutóbb mért érték. Ha K = 1, akkor nincs szűrés. Alacsonyabb K értékek esetén az adatokat T/K időállandóval simítjuk, ahol T a minták közötti idő. Itt T körülbelül 17 ms, tehát a 0,1 érték 170 ms -os vagy 1/6s körüli időállandót ad.

A szűrő hozzáadható:

A beállítás előtt adjon hozzá egy változót a szűrt adatokhoz ():

úszó szűrt = 0;

Ezután adja hozzá a szűrőegyenletet a nyomás után…. vonal.

szűrt = szűrt + 0,1*(nyomásszűrés);

Érdemes a szűrt értéket első olvasásra inicializálni. Tehát adjon hozzá egy "ha" utasítást a fenti sor körül, amely ezt teszi, így néz ki:

ha (szűrt! = 0) {

szűrt = szűrt + 0,1*(nyomásszűrés); } else {szűrt = nyomás; // első olvasás, így szűrve olvasásra}

A „! =” Teszt „nem egyenlő”. Tehát ha a „szűrt” nem egyenlő 0 -val, akkor a szűrőegyenlet végrehajtásra kerül, de ha igen, akkor a nyomás leolvasására van állítva.

Végül meg kell változtatnunk a „nyomást” „szűrt” értékre a Serial.println utasításban, hogy lássuk a szűrt értéket.

A legjobb tanulást a fenti módosítások manuális elvégzése érheti el. Ezeket azonban beillesztettem az MS5611data2serialWfilter példába. Tehát ha problémák merülnek fel, a példa betölthető.

Most töltse fel a kódot az Arduino -ba, és nézze meg a javulást. Lásd a fenti második ábrát, és vegye figyelembe, hogy az Y skála x2 -re bővül.

Próbáljon ki egy alacsonyabb értéket a szűrőállandóhoz, mondjuk 0,02 helyett 0,1, és nézze meg a különbséget. Az adatok simábbak, de lassabban reagálnak. Ezt az egyszerű szűrőt használva kompromisszumra kell törekedni. A jellemző ugyanaz, mint az elektronikus áramkörökben széles körben használt RC (ellenállás és kapacitás) szűrő.

3. lépés: Legyen önálló

Most hozzáadunk egy LCD billentyűzetpajzsot, átalakítjuk a nyomást magasságra méterben, és megjelenítjük a kijelzőn. A billentyűzet „Kiválasztás” gombjának megnyomásával hozzáadjuk az érték nullázásának lehetőségét is.

Az Arduino LCD -pajzsával az érzékelőt csatlakoztatni kell az LCD -pajzshoz. Sajnos az LCD pajzsok általában a megfelelő foglalatok nélkül vannak. Tehát a lehetőségek forrasztási kapcsolatok készítése vagy valamilyen aljzatcsík beszerzése. Socket csík elérhető az ebay -en, nem sokkal többet, mint a postaköltség. Keresse meg a „2,54 mm -es foglalatcsíkot”, és keressen olyanokat, amelyek hasonlóak az Arduino -hoz. Ezek általában 36 vagy 40 tű hosszúságúak. Kerülném az esztergált csapokat, mivel nem elég mélyek a szabványos Dupont vezetékekhez.

Az aljzatszalagot hosszúra kell vágni, és a vágást ugyanabban a helyen kell elvégezni, mint a csapot. Tehát egy 6 tűs csík esetén - távolítsa el a 7. tűt néhány finom fogóval, majd vágja le azon a helyen egy junior fűrész segítségével. Reszelem a végeket, hogy szépek legyenek.

Győződjön meg arról, hogy nincsenek forrasztóhidak, amikor a táblára forrasztja őket.

Az érzékelő csatlakoztatásáról szóló megfelelő döntéssel csatlakoztassa az LCD -pajzsot az Arduino -hoz, és csatlakoztassa az érzékelőt ugyanazokhoz a csapokhoz - de most az LCD -pajzshoz.

Készítse elő az akkumulátort és a vezetéket is. A vezetéket a hulladéktároló alkatrészeiből készítettem, de az ebay -en is kaphatók - beleértve egy jó lehetőséget, amely elemdobozt és kapcsolót tartalmaz. Keresés a „PP3 2.1 mm -es elvezetéken”.

A jelenlegi fogyasztás körülbelül 80 millió. Ezért, ha néhány percnél tovább akar működni, fontolja meg a nagyobb, 9 voltos akkumulátort, mint a PP3.

4. lépés: Kód hozzáadása a magassághoz és az LCD -hez

Image
Image

Kicsit többet kell kódolnunk, hogy a nyomást magassággá alakítsuk, és megvezessük a kijelzőt.

A vázlat elején adja hozzá a kijelző könyvtárat, és mondja el, hogy milyen csapokat használ:

#befoglalni

// inicializálja a könyvtárat a LiquidCrystal lcd (8, 9, 4, 5, 6, 7) interfész csapok számával;

Ezután szükség van néhány változóra és egy funkcióra a billentyűzet gombjainak olvasásához. Ezek mind az A0 analóg bemenethez vannak csatlakoztatva. Minden gomb más -más feszültséget ad az A0 -nak. Az „arduino lcd pajzsgombok kódja” keresés jó kódot talált a következő helyen:

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

Adja hozzá ezt a kódot a beállítás előtt ():

// a panel és a gombok által használt értékek meghatározása

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 // olvassa el a gombokat int read_LCD_buttons () {adc_key_in = analogRead (0); // olvassa ki az értéket az érzékelőből // a gombok olvasás közben ezekre az értékekre vannak középre állítva: 0, 144, 329, 504, 741 // kb. 50 -et adunk ezekhez az értékekhez, és ellenőrizzük, hogy közel vagyunk -e (adc_key_in> 1000) return btnNONE; // Gyorsasági okokból ezt az 1. opciót választjuk, mivel ez lesz a legvalószínűbb eredmény, ha (adc_key_in <50) return 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; // ha az összes többi kudarcot vall, adja vissza ezt…}

A tengerszint feletti magasságot általában kiindulási ponton nullázzák. Tehát változókra van szükség mind a magasság, mind a referencia szempontjából. Adja hozzá ezeket a beállítás előtt () és a fenti funkciót:

float mtr;

úszó ref = 0;

A Pascals -beli nyomásról méterre való átalakítás szinte pontosan 12 -es osztás a tengerszinten. Ez a képlet alkalmas a legtöbb földi mérésre. Vannak pontosabb képletek, amelyek alkalmasabbak a magasban történő átalakításra. Használja ezeket, ha ezt egy léggömbrepülés magasságának rögzítésére használja.

A referenciát az első nyomásértékre kell állítani, így nulla magasságból és a SELECT gomb megnyomásakor kezdjük. Adja hozzá a szűrőkód után és a Serial.println utasítás előtt:

ha (ref == 0) {

ref = szűrt/12,0; } if (read_LCD_buttons () == btnSELECT) {ref = szűrt/12.0; }

Ezután adja hozzá a magasságszámítást:

mtr = ref - szűrt/12,0;

Végül módosítsa a Serial.println utasítást, hogy az „mtr” legyen a „szűrt” helyett, és adjon hozzá kódot az „mtr” elküldéséhez az LCD -hez:

Soros.println (mtr); // Nyomás küldése soros (UART) útján

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

Az összes módosítást az MS5611data2lcd példa tartalmazza. Töltse fel ezt a 2. lépésben leírtak szerint.

Van egy utolsó mod, ami hasznos. A kijelző nehezen olvasható, ha másodpercenként 60 -szor frissítik. Szűrőnk 0,8 másodperc körüli időállandóval simítja az adatokat. Tehát a kijelző 0,3 másodpercenként történő frissítése elegendőnek tűnik.

Tehát adjunk hozzá egy számlálót a többi változódefiníció után a vázlat elején (pl. Float ref = 0;):

int i = 0;

Ezután adjon hozzá kódot az 'i' növekményhez, és egy "if" utasítást, amely akkor fut, amikor eléri a 20 -at, majd állítsa vissza nullára, és helyezze át a soros és lcd parancsokat az "if" utasításon belül, így ezeket csak minden 20. olvasás hajtja végre:

i += 1;

ha (i> = 20) {Soros.println (mtr); // Nyomás küldése soros (UART) lcd.setCursor (0, 1) segítségével; // 2. sor lcd.print (mtr); i = 0; }

Az utolsó módosítással nem említettem példát annak érdekében, hogy ösztönözzem a kód kézi beírását, ami segíti a tanulást.

Ennek a projektnek jó kiindulópontot kell adnia például egy digitális barométerhez. Azok számára, akik esetleg fontolóra kívánják venni az RC modellekben való használatot - keressenek OpenXvario kódot, amely lehetővé teszi az Frsky és Turnigy 9x telemetriai rendszerek magasságmérőjét és variométerét.

Ajánlott: