Obsah:

Meradlo atmosférickej pásky Arduino/ MS5611 GY63 GY86 Ukážka: 4 kroky (s obrázkami)
Meradlo atmosférickej pásky Arduino/ MS5611 GY63 GY86 Ukážka: 4 kroky (s obrázkami)

Video: Meradlo atmosférickej pásky Arduino/ MS5611 GY63 GY86 Ukážka: 4 kroky (s obrázkami)

Video: Meradlo atmosférickej pásky Arduino/ MS5611 GY63 GY86 Ukážka: 4 kroky (s obrázkami)
Video: Postavme si mini mono zosilňovač s TDA2003V - Živé vysielanie používateľa Paul's Electronics AV 2024, November
Anonim
Ukážka atmosférickej pásky Arduino/ MS5611 GY63 GY86
Ukážka atmosférickej pásky Arduino/ MS5611 GY63 GY86

Toto je skutočne barometer/výškomer, ale dôvod názvu uvidíte pri pohľade na video.

Tlakový senzor MS5611, ktorý sa nachádza na oddeľovacích doskách Arduino GY63 a GY86, ponúka úžasný výkon. V pokojnom dni zmeria vašu výšku do 0,2 m. Toto je efektívne meranie vzdialenosti od vašej hlavy do vesmíru a jeho odčítanie od vzdialenosti vašich nôh do vesmíru (meraním tlaku - to je hmotnosť vzduchu vyššie). Toto veľkolepé zariadenie má rozsah, ktorý pohodlne zmeria výšku Everestu - a môže merať až niekoľko palcov.

Tento projekt bol zameraný ako: školský projekt, príklad úpravy kódu Arduino a dobré východiskové miesto na skúmanie pomocou senzora MS5611. Existuje množstvo otázok z fóra od tých, ktorí majú problémy s týmto senzorom. Vďaka tomuto prístupu je použitie veľmi jednoduché. Po vykonaní tohto projektu budete dobre vybavení na vývoj ďalších aplikácií súvisiacich s tlakom.

Každý senzor má svoje vlastné kalibračné konštanty, ktoré je potrebné prečítať a použiť na opravu údajov. K dispozícii je knižnica, ktorá vám pomôže s ich riadením. Tu zobrazený kód používa knižnicu na odčítanie údajov a potom ich prevádza na výšku a zobrazuje ich na štíte LCD.

Najprv pošleme údaje na sériový monitor na PC/prenosnom počítači na počiatočné testy. Ukazujú určitý hluk, a preto pridávame filter na ich vyhladenie. Potom pridáme LCD displej, aby jednotka mohla bežať nezávisle a môžete sa pokúsiť zmerať svoju výšku - alebo čokoľvek iné.

Všimnite si toho, že doska GY63 má iba snímač tlaku MS5611. GY86 sa nazýva doska s 10 stupňami voľnosti a tiež obsahuje 3 -osový akcelerometer, 3 -osový gyroskop a 3 -osový magnetometer za pár dolárov navyše.

Budete potrebovať:

1. Arduino UNO (alebo iný so štandardným vývodom) a jeho kábel USB

2. GY63 breakout board alebo GY86

3. 4 Dupont vedie samec - samica - alebo spojovací vodič

4. Štít klávesnice LCD Arduino

5. 9v batéria a olovo

6. Zásuvkový pás 2,54 mm (voliteľný, ale odporúčaný)

Príprava

Stiahnite si Arduino IDE (integrované vývojové prostredie) z:

Niektoré technické bity pre zaujímavosť

MS5611 prináša vynikajúci výkon spriemerovaním veľkého počtu meraní. Dokáže vykonať 4096 analógových meraní 3 bajtov (24 bitov) za pouhých 8 ms a poskytnúť priemernú hodnotu. Musí merať tlak aj teplotu, aby bolo možné údaje o tlaku korigovať na vnútornú teplotu. Preto môže poskytnúť približne 60 párov hodnôt tlaku a teploty za sekundu.

Dátový list je dostupný na:

Komunikácia prebieha cez I2C. Zbernicu môžu teda zdieľať aj ostatné senzory I2C (ako je to na doske GY86 10DOF, kde sú všetky čipy na I2C).

Krok 1: Získajte knižnicu MS5611

Mnoho senzorov Arduino buď používa štandardnú knižnicu, ktorá je súčasťou Arduino IDE, alebo sa dodávajú so súborom zip s knižnicou, ktorú je možné ľahko nainštalovať. To zvyčajne neplatí pre senzory MS5611. Bolo však nájdené vyhľadávanie: https://github.com/gronat/MS5611, ktoré má knižnicu pre MS5611, vrátane vykonania korekcie teploty.

možnosť 1

Prejdite na webovú stránku vyššie, kliknite na „Klonovať alebo stiahnuť“a vyberte „Stiahnuť ZIP“. To by malo priniesť MS5611-master.zip do vášho adresára na stiahnutie. Teraz, ak chcete, presuňte ho do priečinka, kde ho v budúcnosti nájdete. Používam adresár s názvom „údaje“pridaný do mojich priečinkov Arduino.

Stiahnutý súbor.zip bohužiaľ neobsahuje žiadne vzorové náčrty a bolo by pekné pridať knižnicu a príklady do IDE Arduino. V súbore README.md existuje minimálny príklad, ktorý je možné skopírovať a vložiť do náčrtu a uložiť. Toto je jeden zo spôsobov, ako začať.

Možnosť 2

Aby bolo spustenie kódu v tomto návode jednoduchšie, pridal som do knižnice minimálny príklad vyššie a príklady tu uvedené a nižšie priložený súbor.zip, ktorý sa nainštaluje do Arduino IDE.

Stiahnite si súbor zip nižšie. Ak chcete, presuňte ho do lepšieho priečinka.

Spustite Arduino IDE. Kliknite na položku Skica> Zahrnúť knižnicu> Pridať súbor zip a vyberte súbor. Reštartujte IDE. IDE teraz bude mať nainštalovanú knižnicu aj všetky tu uvedené príklady. Skontrolujte kliknutím na položky Súbor> príklady >> MS5611-master. Mali by byť uvedené tri skice.

Krok 2: Pripojte snímač k Arduinu a otestujte

Pripojte snímač k Arduinu a otestujte
Pripojte snímač k Arduinu a otestujte
Pripojte snímač k Arduinu a otestujte
Pripojte snímač k Arduinu a otestujte

Dosky GY63/GY86 sú obvykle vybavené hlavičkami, ale nie sú spájkované. Je teda na vás, či budete spájkovať záhlavia na mieste a použijete vodiče Dupont medzi mužmi a ženami, alebo (ako som sa rozhodol) spájkovacie vodiče priamo k doske a do vývodu zapojte kolíky na zapojenie do Arduina. Posledná možnosť je lepšia, ak si myslíte, že budete chcieť dosku neskôr spájkovať do projektu. Prvý z nich je lepší, ak chcete dosku použiť na experimentovanie. Odpájkovanie vodičov je oveľa jednoduchšie ako kolíková hlavička.

Potrebné pripojenia sú tieto:

Arduino GY63/GY86

VCC - 5v napájanie GND - GND Ground SCL - A5 I2C hodiny> SDA - A4 I2C dáta

Pripojte dosku senzora k Arduinu ako je uvedené vyššie a pripojte Arduino k PC/notebooku pomocou USB kábla. Senzor tiež zakryte nepriehľadným/čiernym materiálom. Senzor je citlivý na svetlo (ako je to u väčšiny tohto typu senzora).

Spustite Arduino IDE. Kliknite:

Súbor> príklady >> MS5611-master> MS5611data2serial.

Spolu so skicou sa zobrazí nová inštancia IDE. Kliknite na tlačidlo nahrávania (šípka doprava).

Potom spustite sériový plotter - kliknite na Nástroje> Sériový plotter a v prípade potreby nastavte prenosovú rýchlosť na 9600. Odosielané údaje sú tlakom v Pascaloch. Asi po sekunde sa zmení mierka a zdvihnutie a spustenie senzora, povedzme 0,3 m, by sa malo prejaviť ako zníženie a zvýšenie stopy (nižšia výška je vyšší tlak).

Údaje majú určitý šum. Pozri prvý graf vyššie. To je možné vyhladiť pomocou digitálneho filtra (skutočne užitočný nástroj).

Rovnica filtra je:

hodnota = hodnota + K (nová hodnota)

kde „hodnota“sú filtrované údaje a „nové“sú najnovšie namerané hodnoty. Ak K = 1, neexistuje žiadne filtrovanie. Pri nižších hodnotách K sú údaje vyhladené časovou konštantou T/K, kde T je čas medzi vzorkami. Tu je T okolo 17 ms, takže hodnota 0,1 dáva časovú konštantu 170 ms alebo asi 1/6 s.

Filter je možné pridať:

Pred nastavením () pridajte premennú pre filtrované údaje:

plavákový filtrovaný = 0;

Potom pridajte filtračnú rovnicu po tlaku = …. riadok.

filtrované = filtrované + 0,1*(filtrované pod tlakom);

Je vhodné inicializovať filtrovanú hodnotu do prvého čítania. Pridajte teda do riadka vyššie výraz „keby“, aby to vyzeralo takto:

ak (filtrované! = 0) {

filtrované = filtrované + 0,1*(filtrované pod tlakom); } else {filtrovane = tlak; // prvé čítanie, takže nastavte filtrovanie na čítanie}

Test „! =“Nie je „nerovný“. Ak sa „filtrovaný“nerovná 0, vykoná sa rovnica filtra, ale ak je, nastaví sa na čítanie tlaku.

Nakoniec musíme vo výraze Serial.println zmeniť „tlak“na „filtrovaný“, aby sme videli filtrovanú hodnotu.

Najlepšie učenie sa dosiahne vykonaním vyššie uvedených zmien ručne. Tieto som však zahrnul do príkladu MS5611data2serialWfilter. V prípade problémov je teda možné príklad načítať.

Teraz nahrajte kód do Arduina a uvidíte zlepšenie. Pozri druhý graf vyššie a všimnite si, že mierka Y je rozšírená x2.

Skúste nižšiu hodnotu pre konštantu filtra, povedzme 0,02 namiesto 0,1, a uvidíte rozdiel. Údaje sú plynulejšie, ale s pomalšou odozvou. Toto je kompromis, ktorý treba pri použití tohto jednoduchého filtra hľadať. Charakteristika je rovnaká ako RC (odporový a kapacitný) filter, ktorý sa bežne používa v elektronických obvodoch.

Krok 3: Urobte to samostatne

Teraz pridáme štít klávesnice LCD, tlak prevedieme na výšku v metroch a ukážeme ho na displeji. Pridáme tiež možnosť vynulovať hodnotu stlačením tlačidla „Vybrať“na klávesnici.

S tienením LCD na Arduino bude musieť byť senzor pripojený k štítu LCD. LCD štíty sa bohužiaľ zvyčajne dodávajú bez príslušných zásuviek. Možnosti sú teda vytvoriť spájkované spoje alebo zaobstarať nejaký zásuvkový pás. Zásuvkový pás je k dispozícii na eBay za oveľa viac, ako sú náklady na poštovné. Vyhľadajte „zásuvkový pás 2,54 mm“a vyhľadajte tie, ktoré sú podobné tým na Arduine. Obvykle sa dodávajú v dĺžkach 36 alebo 40 pinov. Vyhol by som sa sústruženým kolíkom, pretože nie sú dostatočne hlboké pre štandardné vodiče Dupont.

Pás zásuvky sa musí skrátiť na dĺžku a rez sa musí vykonať na rovnakom mieste ako kolík. Takže pre 6 -kolíkový pásik - odstráňte 7. kolík jemnými kliešťami a potom ho na mieste odrežte pomocou mladšej píly. Konce opilujem, aby boli úhľadné.

Pri ich spájkovaní na dosku skontrolujte, či neexistujú žiadne spájkovacie mostíky.

S príslušným rozhodnutím o pripojení senzora zapojte LCD štít do Arduina a pripojte senzor k rovnakým kolíkom - ale teraz k LCD štítu.

Pripravte si aj batériu a olovo. Olovo som doplnil z dielov v mojom šrote, ale sú k dispozícii aj na ebay - vrátane príjemnej možnosti, ktorá obsahuje box na batérie a vypínač. Vyhľadajte výraz „PP3, 2,1 mm zvod“.

Aktuálna spotreba sa pohybuje okolo 80ma. Ak teda chcete bežať viac ako niekoľko minút, zvážte väčšiu 9 V batériu ako PP3.

Krok 4: Pridajte kód pre nadmorskú výšku a displej LCD

Image
Image

Musíme urobiť trochu viac kódovania, aby sme premenili tlak na výšku a poháňali displej.

Na začiatku náčrtu pridajte knižnicu zobrazenia a povedzte, aké piny sa používajú:

#zahrnúť

// inicializácia knižnice číslami pinov rozhrania LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Ďalej potrebujeme niekoľko premenných a funkciu na čítanie tlačidiel klávesnice. Všetky sú pripojené k analógovému vstupu A0. Každé tlačidlo dáva A0 iné napätie. Pri hľadaní „kódu tlačidiel štítu arduino lcd“sa našiel dobrý kód na:

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

Pridajte tento kód pred nastavením ():

// definujte niektoré hodnoty používané panelom a tlačidlami

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 // čítať tlačidlá int read_LCD_buttons () {adc_key_in = analogRead (0); // prečítajte hodnotu zo senzora // moje tlačidlá pri čítaní sú sústredené na tieto hodnoty: 0, 144, 329, 504, 741 // k týmto hodnotám pripočítame približne 50 a skontrolujeme, či sme blízko, ak (adc_key_in> 1000) vrátiť btnNONE; // Toto robíme z dôvodov rýchlosti ako 1. možnosť, pretože to bude najpravdepodobnejší výsledok, ak (adc_key_in <50) vráti 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; vrátiť btnNONE; // keď všetky ostatné zlyhajú, vráťte toto …}

Nadmorská výška sa v počiatočnom bode zvyčajne vynuluje. Potrebujeme teda premenné pre výšku aj pre referenciu. Pridajte ich pred nastavením () a vyššie uvedenou funkciou:

float mtr;

float ref = 0;

Prevod z tlaku v Pascaloch na metre je takmer presne delenie 12 na hladine mora. Tento vzorec je vhodný pre väčšinu pozemných meraní. Existujú presnejšie vzorce, ktoré sú vhodnejšie na konverziu vo vysokých nadmorských výškach. Použite ich, ak ich chcete použiť na zaznamenanie nadmorskej výšky letu balónom.

Referencia by mala byť nastavená na prvé čítanie tlaku, takže začneme od nulovej výšky a po stlačení tlačidla VYBRAŤ. Pridajte za kód filtra a pred príkaz Serial.println:

ak (odkaz == 0) {

ref = filtrované/12,0; } if (read_LCD_buttons () == btnSELECT) {ref = filtrovane/12.0; }

Potom pridajte výpočet výšky:

mtr = ref - filtrované/12,0;

Nakoniec zmeňte príkaz Serial.println na odosielanie „mtr“namiesto „filtrovaného“a pridajte kód na odoslanie „mtr“na LCD:

Serial.println (mtr); // Odoslanie tlaku cez sériové číslo (UART)

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

Všetky tu uvedené zmeny sú zahrnuté v príklade MS5611data2lcd. Vložte to ako v kroku 2.

Existuje jeden posledný režim, ktorý je užitočný. Displej je ťažko čitateľný, keď sa aktualizuje 60 -krát za sekundu. Náš filter vyhladzuje údaje s časovou konštantou približne 0,8 s. Aktualizácia displeja každých 0,3 s sa zdá byť dosť.

Pridajte teda počítadlo za všetky ostatné definície premenných na začiatku skice (napr. Po float ref = 0;):

int i = 0;

Potom pridajte kód do prírastku „i“a príkazu „if“, ktoré sa spustia, keď sa dostane na 20, a potom ho nastavte späť na nulu a posuňte príkazy Serial a lcd do príkazu „if“, aby sa vykonávali iba každých 20. čítaní:

i += 1;

ak (i> = 20) {Serial.println (mtr); // Odoslanie tlaku cez serial (UART) lcd.setCursor (0, 1); // riadok 2 lcd.print (mtr); i = 0; }

Pri tejto poslednej úprave som neuviedol príklad, aby som povzbudil k ručnému zadávaniu kódu, ktorý pomáha pri učení.

Tento projekt by mal poskytnúť dobrý východiskový bod napríklad pre digitálny barometer. Pre tých, ktorí by chceli zvážiť použitie v RC modeloch - vyhľadajte v OpenXvario kód, ktorý umožňuje výškomer a variometer pre telemetrické systémy Frsky a Turnigy 9x.

Odporúča: