Sisällysluettelo:

Arduinon ilmakehän mittanauha/ MS5611 GY63 GY86 Esittely: 4 vaihetta (kuvilla)
Arduinon ilmakehän mittanauha/ MS5611 GY63 GY86 Esittely: 4 vaihetta (kuvilla)

Video: Arduinon ilmakehän mittanauha/ MS5611 GY63 GY86 Esittely: 4 vaihetta (kuvilla)

Video: Arduinon ilmakehän mittanauha/ MS5611 GY63 GY86 Esittely: 4 vaihetta (kuvilla)
Video: Playing with gauge design to display temperature, humidity, and VOC air quality. #arduino #iot 2024, Heinäkuu
Anonim
Arduinon ilmakehän mittanauha/ MS5611 GY63 GY86 -esittely
Arduinon ilmakehän mittanauha/ MS5611 GY63 GY86 -esittely

Tämä on todella barometri/korkeusmittari, mutta näet otsikon syyn katsomalla videota.

MS5611 -paineanturi, joka löytyy Arduino GY63- ja GY86 -murtolevyistä, tarjoaa uskomattoman suorituskyvyn. Rauhallisena päivänä se mittaa korkeutesi 0,2 metrin tarkkuuteen. Tämä mittaa tehokkaasti etäisyyden päästäsi ulkoavaruuteen ja vähentää sen jalkojesi etäisyydestä ulkoavaruuteen (mittaamalla painetta - tämä on yläpuolella olevan ilman paino). Tässä upeassa laitteessa on alue, joka mittaa mukavasti Everestin korkeuden - ja voi mitata myös muutaman tuuman.

Tämän projektin tarkoituksena oli: kouluprojekti, esimerkki Arduino -koodin muokkaamisesta ja hyvä lähtökohta tutkimiseen MS5611 -anturin avulla. Foorumilla on paljon kysymyksiä niiltä, joilla on vaikeuksia tämän anturin kanssa. Lähestymistapa tekee sen käytön erittäin yksinkertaiseksi. Tämän projektin jälkeen sinulla on hyvät valmiudet kehittää muita paineeseen liittyviä sovelluksia.

Jokaisella anturilla on omat kalibrointivakiot, jotka täytyy lukea ja käyttää tietojen korjaamiseen. On olemassa kirjasto, joka auttaa näitä ajamaan. Tässä näkyvä koodi käyttää kirjastoa lukemien ottamiseen ja muuntaa ne sitten korkeudeksi ja näyttää ne LCD -kilvessä.

Ensin lähetämme tiedot tietokoneen/kannettavan tietokoneen sarjamonitoriin ensimmäisiä testejä varten. Näissä näkyy melua, joten lisäämme suodattimen niiden tasoittamiseksi. Sitten lisäämme LCD -näytön, jotta laite voi toimia itsenäisesti ja voit yrittää mitata pituutesi - tai mitä tahansa muuta.

Huomaa, että GY63 -kortissa on vain MS5611 -paineanturi. GY86: ta kutsutaan 10 asteen vapauslevyksi ja siinä on myös 3 -akselinen kiihtyvyysmittari, 3 -akselinen gyroskooppi ja 3 -akselinen magnetometri vain muutamalla dollarilla.

Tarvitset:

1. Arduino UNO (tai muu vakiopistokkeella) ja sen USB -kaapeli

2. GY63 -katkaisulauta tai GY86

3. 4 Dupont johtaa uros -naaras - tai liitäntäjohdon

4. Arduino LCD -näppäimistön suoja

5. 9v akku ja johto

6. 2,54 mm: n hylsyliuska (valinnainen, mutta suositeltava)

Valmistautuminen

Lataa Arduino IDE (integroitu kehitysympäristö) osoitteesta

Muutama tekninen juttu kiinnostuksen vuoksi

MS5611 tarjoaa erinomaisen suorituskyvyn keskimäärin suuria mittauksia. Se voi tehdä 4096 3 tavun (24 bitin) analogista mittausta vain 8 ms: ssa ja antaa keskiarvon. Sen on mitattava sekä paine että lämpötila, jotta painetiedot voidaan korjata sisäisen lämpötilan mukaan. Siten se voi antaa noin 60 paria paine- ja lämpötilalukemia sekunnissa.

Tietolomake on saatavilla osoitteessa:

Viestintä tapahtuu I2C: n kautta. Joten muut I2C -anturit voivat jakaa väylän (kuten GY86 10DOF -kortilla, jossa kaikki sirut ovat I2C: ssä).

Vaihe 1: Hanki MS5611 -kirjasto

Monet Arduino -antureista käyttävät joko Arduino IDE: n mukana toimitettua vakiokirjastoa tai toimitetaan zip -tiedostona, jonka kirjasto on helppo asentaa. Tämä ei yleensä päde MS5611 -antureihin. Kuitenkin löytyi haku: https://github.com/gronat/MS5611, jolla on kirjasto MS5611: lle, mukaan lukien lämpötilan korjaus.

Vaihtoehto 1

Siirry yllä olevaan verkkosivustoon, napsauta "Kloona tai lataa" ja valitse "Lataa ZIP". Tämän pitäisi toimittaa MS5611-master.zip lataushakemistoosi. Jos haluat, siirrä se nyt kansioon, josta löydät sen tulevaisuudessa. Käytän "data" -hakemistoa, joka on lisätty Arduino -kansioihini.

Valitettavasti ladattu.zip -tiedosto ei sisällä esimerkkiluonnoksia, ja olisi mukavaa lisätä kirjasto ja esimerkit Arduino IDE: hen. README.md -tiedostossa on minimiesimerkki, joka voidaan kopioida, liittää luonnokseen ja tallentaa. Tämä on yksi tapa päästä eteenpäin.

Vaihtoehto 2

Tämän ohjeen koodin suorittamisen helpottamiseksi olen lisännyt yllä olevan vähimmäisesimerkin ja tässä esitetyt esimerkit kirjastoon ja liittänyt alla.zip -tiedoston, joka asennetaan Arduino IDE: hen.

Lataa zip -tiedosto alta. Siirrä tämä parempaan kansioon, jos haluat.

Käynnistä Arduino IDE. Napsauta Luonnos> Sisällytä kirjasto> Lisää zip -tiedosto ja valitse tiedosto. Käynnistä IDE uudelleen. IDE: hen on nyt asennettu kirjasto sekä kaikki tässä esitetyt esimerkit. Tarkista napsauttamalla Tiedosto> esimerkkejä >> MS5611-master. Kolme luonnosta on lueteltava.

Vaihe 2: Liitä anturi Arduinoon ja testaa

Liitä anturi Arduinoon ja testaa
Liitä anturi Arduinoon ja testaa
Liitä anturi Arduinoon ja testaa
Liitä anturi Arduinoon ja testaa

GY63/GY86 -levyissä on yleensä otsikot, mutta niitä ei ole juotettu. Joten sinun on joko juotettava otsikot paikalleen ja käytettävä uros-naaras Dupont-johtoja tai (kuten päätin) juotosjohdot suoraan levylle ja lisää nastat johtoon Arduinon liittämiseksi. Jälkimmäinen vaihtoehto on parempi, jos luulet, että haluat juottaa levyn projektiin myöhemmin. Edellinen on parempi, jos haluat käyttää taulua kokeiluun. Johtimien irrotus on paljon helpompaa kuin nastan otsikko.

Tarvittavat liitännät ovat:

GY63/GY86 Arduino

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

Kiinnitä anturikortti Arduinoon edellä kuvatulla tavalla ja liitä Arduino tietokoneeseen/kannettavaan sen USB -johdon kautta. Peitä myös anturi läpinäkymättömällä/mustalla materiaalilla. Anturi on herkkä valolle (kuten useimmat tämän tyyppiset anturit).

Käynnistä Arduino IDE. Klikkaus:

Tiedosto> esimerkkejä >> MS5611-master> MS5611data2serial.

Luonnoksen mukana tulee uusi IDE -esiintymä. Napsauta latauspainiketta (oikea nuoli).

Käynnistä seuraavaksi sarjaplotteri - napsauta Työkalut> Sarjaplotteri ja aseta tarvittaessa baudiksi 9600. Lähetettävät tiedot ovat pascalia. Noin sekunnin kuluttua se skaalautuu uudelleen ja anturin nostamisen ja laskemisen sanomalla 0,3 m pitäisi näkyä jäljen laskemisena ja nostamisena (alempi korkeus on suurempi paine).

Datassa on melua. Katso ensimmäinen juoni yllä. Tämä voidaan tasoittaa käyttämällä digitaalista suodatinta (todella hyödyllinen työkalu).

Suodatinyhtälö on:

arvo = arvo + K (uusi arvo)

jossa "arvo" on suodatetut tiedot ja "uusi" on viimeisin mitattu. Jos K = 1, suodatusta ei ole. Pienemmillä K -arvoilla tiedot tasoitetaan aikavakioilla T/K, jossa T on näytteiden välinen aika. Tässä T on noin 17 ms, joten arvo 0,1 antaa aikavakion 170 ms tai noin 1/6 s.

Suodatin voidaan lisätä:

Lisää muuttuja suodatetuille tiedoille ennen asennusta ():

kelluva suodatettu = 0;

Lisää sitten suodatinyhtälö paineen =… jälkeen. linja.

suodatettu = suodatettu + 0,1*(painesuodatettu);

On hyvä idea alustaa suodatettu arvo ensimmäiseen käsittelyyn. Joten lisää "jos" -lauseke yllä olevan rivin ympärille, joka tekee tämän, jotta se näyttää tältä:

jos (suodatettu! = 0) {

suodatettu = suodatettu + 0,1*(painesuodatettu); } else {suodatettu = paine; // ensimmäinen luku, niin että se on suodatettu lukemaan}

Testi "! =" Ei ole "sama". Joten jos "suodatettu" ei ole yhtä kuin 0, suodatinyhtälö suoritetaan, mutta jos on, se asetetaan paineen lukemaan.

Lopuksi meidän on muutettava Serial.println -lausekkeen "paine" muotoon "suodatettu", jotta näemme suodatetun arvon.

Paras oppiminen saavutetaan tekemällä yllä olevat muutokset manuaalisesti. Kuitenkin sisällytin ne esimerkkiin MS5611data2serialWfilter. Joten jos on ongelmia, esimerkki voidaan ladata.

Lataa nyt koodi Arduinolle ja näe parannus. Katso toinen kuvaaja yllä ja huomaa, että Y -asteikko on laajennettu x2.

Kokeile suodatinvakion pienempää arvoa, sano 0,02 0,1: n sijasta, ja näe ero. Tiedot ovat tasaisempia, mutta vastaus hitaampi. Tämä on kompromissi, jota on etsittävä tätä yksinkertaista suodatinta käytettäessä. Ominaisuus on sama kuin elektronisissa piireissä laajalti käytetty RC (vastus ja kapasitanssi) -suodatin.

Vaihe 3: Tee siitä itsenäinen

Nyt lisäämme LCD -näppäimistön kilven, muutamme paineen korkeudeksi metreinä ja näytämme sen näytöllä. Lisäämme myös mahdollisuuden nollata arvon painamalla näppäimistön "Valitse" -painiketta.

Kun Arduinon LCD -suoja on asennettu, anturi on liitettävä LCD -suojaan. Valitettavasti LCD -suojat tulevat yleensä ilman asianmukaisia pistorasioita. Vaihtoehdot ovat siis juotosliitosten tekeminen tai pistorasian saaminen. Pistorasialiuska on saatavana ebaystä vain postikulut. Tee haku "2,54 mm: n hylsyliuskalla" ja etsi sellaisia, jotka ovat samanlaisia kuin Arduinon. Nämä ovat yleensä 36 tai 40 nastan pituisia. Vältän sorvattuja tappeja, koska ne eivät ole riittävän syviä tavallisille Dupont -johtimille.

Pistorasia on leikattava pituuteensa ja leikkaus on tehtävä samaan paikkaan kuin tappi. Joten 6 -napaisella nauhalla - poista 7. nasta hienoilla pihdeillä ja leikkaa sitten siitä paikasta juniorisahalla. Viilaan päät, jotta ne ovat siistit.

Varmista, ettei juotosiltoja ole, kun juotat ne levylle.

Kun olet tehnyt oikean päätöksen anturin liittämisestä, liitä LCD -suoja Arduinoon ja kytke anturi samoihin nastoihin - mutta nyt LCD -suojaan.

Valmistele myös akku ja johto. Tein lyijyn roskakorin osista, mutta niitä on saatavana myös ebaystä - mukaan lukien mukava vaihtoehto, joka sisältää akkukotelon ja kytkimen. Hae”PP3 2.1mm -johdosta”.

Nykyinen kulutus on noin 80m. Jos siis haluat käyttää pidempään kuin muutaman minuutin, harkitse isompaa 9 voltin akkua kuin PP3.

Vaihe 4: Lisää korkeuskoodi ja nestekidenäyttö

Image
Image

Meidän on tehtävä hieman enemmän koodausta, jotta paine muutetaan korkeudeksi ja näyttöä ohjataan.

Luonnoksen alussa lisää näyttökirjasto ja kerro, mitä tappeja käytetään:

#sisältää

// alustetaan kirjasto liitäntätappien numeroilla LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Seuraavaksi tarvitsemme muuttujia ja toiminnon näppäimistön painikkeiden lukemiseen. Nämä kaikki on kytketty analogiatuloon A0. Jokainen painike antaa eri jännitteen A0: lle. Haulla "arduino lcd shield button code" löytyi hyvä koodi osoitteesta:

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

Lisää tämä koodi ennen asennusta ():

// määritä joitain paneelin ja painikkeiden käyttämiä arvoja

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 // lue painikkeet int read_LCD_buttons () {adc_key_in = analogRead (0); // lukee arvon anturista // painikkeeni lukiessa ovat keskittyneet näihin arvoihin: 0, 144, 329, 504, 741 // lisäämme näihin arvoihin noin 50 ja tarkistamme, ovatko lähellä, jos (adc_key_in> 1000) palauta btnNONE; // Teemme tästä ensimmäisen vaihtoehdon nopeussyistä, koska se on todennäköisin tulos, jos (adc_key_in <50) palauttaa btnRIGHT; if (adc_key_in <250) palauta btnUP; if (adc_key_in <450) return btnDOWN; if (adc_key_in <650) return btnLEFT; if (adc_key_in <850) return btnSELECT; palauta btnNONE; // kun kaikki muut epäonnistuvat, palauta tämä…}

Yleensä korkeus nollataan lähtöpisteessä. Tarvitsemme siis muuttujia sekä korkeudelle että referenssille. Lisää nämä ennen asennusta () ja yllä oleva toiminto:

kellua mtr;

float ref = 0;

Paineen muuntaminen Pascalsissa metreiksi on melkein täsmällinen jako 12: llä merenpinnan tasolla. Tämä kaava sopii useimpiin maanpäällisiin mittauksiin. On tarkempia kaavoja, jotka sopivat paremmin muuntamiseen suurilla korkeuksilla. Käytä näitä, jos aiot käyttää tätä ilmapallolennon korkeuden tallentamiseen.

Viite on asetettava ensimmäiseen paineeseen, jotta aloitamme nollasta ja kun VALITSE -painiketta painetaan. Lisää suodatinkoodin jälkeen ja ennen Serial.println -käskyä:

jos (viite == 0) {

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

Lisää tämän jälkeen korkeuslaskenta:

mtr = ref - suodatettu/12,0;

Muuta lopuksi Serial.println -käsky lähettämään 'mtr' suodatetun sijasta ja lisää koodi lähettääksesi 'mtr' nestekidenäyttöön:

Sarja.println (mtr); // Lähetä paine sarjaportin kautta (UART)

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

Kaikki muutokset ovat tässä esimerkissä MS5611data2lcd. Lataa tämä kuten vaiheessa 2.

Yksi viimeinen modi on hyödyllinen. Näyttöä on vaikea lukea, kun sitä päivitetään 60 kertaa sekunnissa. Suodattimemme tasoittaa tiedot ajan vakion ollessa noin 0,8 sekuntia. Joten näytön päivittäminen 0,3 sekunnin välein vaikuttaa riittävältä.

Joten lisää laskuri kaikkien muiden muuttujien määritelmien jälkeen luonnoksen alussa (esim. Float ref = 0;):

int i = 0;

Lisää sitten koodi lisäykseen "i" ja "if" -lauseke suoritettavaksi, kun se saavuttaa 20, ja aseta se sitten nollaan ja siirrä sarja- ja lcd -komennot "if" -lausekkeen sisällä, joten ne suoritetaan vain joka 20. lukema:

i += 1;

jos (i> = 20) {Sarja.println (mtr); // Lähetä paine sarjaportin (UART) kautta lcd.setCursor (0, 1); // rivi 2 lcd.print (mtr); i = 0; }

En sisällyttänyt esimerkkiä tähän viimeiseen muutokseen kannustaaksesi koodin syöttämiseen manuaalisesti, mikä helpottaa oppimista.

Tämän projektin pitäisi antaa hyvä lähtökohta esimerkiksi digitaaliselle barometrille. Niille, jotka haluavat harkita käyttöä RC -malleissa - etsi OpenXvario -koodia, joka mahdollistaa korkeusmittarin ja vaihtelumittarin Frsky- ja Turnigy 9x -telemetriajärjestelmille.

Suositeltava: