Sisukord:

Arduino atmosfääri mõõdulint/ MS5611 GY63 GY86 demonstratsioon: 4 sammu (piltidega)
Arduino atmosfääri mõõdulint/ MS5611 GY63 GY86 demonstratsioon: 4 sammu (piltidega)

Video: Arduino atmosfääri mõõdulint/ MS5611 GY63 GY86 demonstratsioon: 4 sammu (piltidega)

Video: Arduino atmosfääri mõõdulint/ MS5611 GY63 GY86 demonstratsioon: 4 sammu (piltidega)
Video: Playing with gauge design to display temperature, humidity, and VOC air quality. #arduino #iot 2024, November
Anonim
Arduino atmosfääri mõõdulindi mõõtmine/ MS5611 GY63 GY86 demonstratsioon
Arduino atmosfääri mõõdulindi mõõtmine/ MS5611 GY63 GY86 demonstratsioon

See on tõesti baromeeter/kõrgusemõõtja, kuid näete pealkirja põhjust videot vaadates.

Rõhuandur MS5611, mis asub Arduino GY63 ja GY86 purunemisplaatidel, pakub hämmastavat jõudlust. Rahulikul päeval mõõdab see teie pikkust 0,2 m täpsusega. See mõõdab tõhusalt kaugust peast kosmosesse ja lahutab selle jalgade kaugusest kosmosesse (mõõtes survet - see on ülalpool oleva õhu kaal). Sellel suurejoonelisel seadmel on vahemik, mis mõõdab mugavalt Everesti kõrgust - ja võib mõõta ka mõne tolli.

Selle projekti eesmärk oli: kooliprojekt, näide Arduino koodi muutmisest ja hea lähtekoht MS5611 anduri abil uurimiseks. Neilt, kellel on selle anduriga probleeme, on palju foorumiküsimusi. Siinne lähenemine muudab selle kasutamise väga lihtsaks. Pärast selle projekti tegemist olete hästi varustatud muude survega seotud rakenduste arendamiseks.

Igal anduril on oma kalibreerimiskonstandid, mida tuleb lugeda ja andmete parandamiseks kasutada. Nende juhtimiseks on saadaval raamatukogu. Siin näidatud kood kasutab teeki lugemiseks ja teisendab need kõrguseks ning kuvab need LCD -ekraanil.

Esmalt saadame andmed esialgseks testimiseks arvuti/sülearvuti jadamonitorile. Need näitavad müra ja seetõttu lisame nende silumiseks filtri. Seejärel lisame LCD -ekraani, et seade saaks iseseisvalt töötada ja saaksite proovida oma kõrgust - või midagi muud.

Pange tähele, et plaadil GY63 on lihtsalt rõhuandur MS5611. GY86 -d nimetatakse 10 -kraadiseks vabadusastmeks ja see sisaldab ka 3 -teljelist kiirendusmõõturit, 3 -teljelist güroskoopi ja 3 -teljelist magnetomeetrit vaid mõne dollari eest.

Sa vajad:

1. Arduino UNO (või muu standardse pistikuga) ja selle USB -kaabel

2. GY63 purunemisplaat või GY86

3. 4 Dupont juhib isas -emane - või ühendusjuhe

4. Arduino LCD -klahvistiku kilp

5. 9v aku ja juhe

6. 2,54 mm pistikuriba (valikuline, kuid soovitatav)

Ettevalmistus

Laadige Arduino IDE (integreeritud arenduskeskkond) alla aadressilt

Mõned tehnilised nipid huvi pärast

MS5611 tagab suurepärase jõudluse keskmiselt suure hulga mõõtmiste abil. See suudab teha 4096 3 -baidist (24 -bitist) analoogmõõtmist vaid 8 ms jooksul ja anda keskmise väärtuse. See peab mõõtma nii rõhku kui ka temperatuuri, et rõhuandmeid saaks sisetemperatuuri jaoks korrigeerida. Seega võib see anda umbes 60 paari rõhu- ja temperatuurinäitu sekundis.

Andmeleht on saadaval aadressil:

Side toimub I2C kaudu. Nii et teised I2C andurid saavad bussi jagada (nagu see on GY86 10DOF plaadil, kus kõik kiibid on I2C peal).

Samm: hankige MS5611 kogu

Paljud Arduino andurid kasutavad kas standardset raamatukogu, mis on kaasas Arduino IDE -ga, või on kaasas zip -fail koos koguga, mida saab hõlpsasti paigaldada. See ei kipu olema MS5611 andurite puhul. Siiski leiti otsing: https://github.com/gronat/MS5611, millel on kogu MS5611 jaoks kogu, sealhulgas temperatuuri korrigeerimine.

valik 1

Minge ülaltoodud veebisaidile, klõpsake „Kloonige või laadige alla” ja valige „Laadi alla ZIP”. See peaks teie allalaadimiste kataloogi toimetama MS5611-master.zip. Nüüd, kui soovite, teisaldage see kausta, kust leiate selle tulevikus. Ma kasutan oma Arduino kaustadesse lisatud kataloogi nimega „andmed”.

Kahjuks ei sisalda allalaaditud.zip -fail ühtegi visandit ja oleks tore lisada raamatukogu ja näited Arduino IDE -sse. Failis README.md on minimaalne näide, mida saab kopeerida, visandisse kleepida ja salvestada. See on üks võimalus liikumiseks.

2. valik

Selle juhendi koodi käivitamise hõlbustamiseks olen teeki lisanud ülaltoodud minimaalse näite ja siin näidatud näited ning lisanud alla.zip -faili, mis installitakse Arduino IDE -sse.

Laadige alla zip -fail. Soovi korral teisaldage see paremasse kausta.

Käivitage Arduino IDE. Klõpsake Visand> Kaasa raamatukogu> Lisa zip -fail ja valige fail. Taaskäivitage IDE. Mõlemasse IDE -sse on nüüd installitud kogu ja kõik siin näidatud näited. Kontrollige, klõpsates Fail> näited >> MS5611-master. Loetleda tuleks kolm visandit.

Samm: ühendage andur Arduinoga ja testige

Ühendage andur Arduinoga ja testige
Ühendage andur Arduinoga ja testige
Ühendage andur Arduinoga ja testige
Ühendage andur Arduinoga ja testige

Tahvlid GY63/GY86 on tavaliselt varustatud päistega, kuid mitte joodetud. Seega on teie valik kas joota päised paika ja kasutada isas-emane Duponti juhtmeid või (nagu ma otsustasin) jootmisjuhtmed otse plaadile ja lisada juhtmele tihvtid Arduino ühendamiseks. Viimane võimalus on parem, kui arvate, et võiksite tahvli hiljem projekti jootma hakata. Esimene on parem, kui soovite tahvlit katsetamiseks kasutada. Juhtmete lahtijootmine on palju lihtsam kui tihvti päis.

Vajalikud ühendused on järgmised:

GY63/GY86 Arduino

VCC - 5v toide GND - GND Ground SCL - A5 I2C kell> SDA - A4 I2C andmed

Kinnitage anduriplaat Arduino külge nagu eespool ja ühendage Arduino arvuti/sülearvutiga USB -juhtme kaudu. Katke andur ka mõne läbipaistmatu/musta materjaliga. Andur on valguse suhtes tundlik (nagu enamiku seda tüüpi andurite puhul).

Käivitage Arduino IDE. Klõpsake:

Fail> näited >> MS5611-master> MS5611data2serial.

Eskiisiga kuvatakse uus IDE eksemplar. Klõpsake üleslaadimisnuppu (paremnool).

Järgmisena käivitage jadaplotter - klõpsake Tools> Serial Plotter ja määrake vajadusel baudiks 9600. Saadetavad andmed on rõhk Pascals. Umbes sekundi pärast skaleerub see uuesti ning anduri tõstmine ja langetamine näiteks 0,3 m võrra peaks näitama jälje langetamist ja tõstmist (madalam kõrgus on suurem rõhk).

Andmetes on müra. Vaadake ülaltoodud esimest skeemi. Seda saab siluda digitaalse filtri abil (tõesti kasulik tööriist).

Filtri võrrand on järgmine:

väärtus = väärtus + K (uus väärtus)

kus „väärtus” on filtreeritud andmed ja „uus” on viimati mõõdetud. Kui K = 1, pole filtreerimist. K madalamate väärtuste korral silutakse andmed ajakonstandiga T/K, kus T on proovide vaheline aeg. Siin on T umbes 17 ms, nii et väärtus 0,1 annab ajakonstandi 170 ms või umbes 1/6 s.

Filtri saab lisada:

Enne seadistamist lisage filtreeritud andmetele muutuja ():

ujuk filtreeritud = 0;

Seejärel lisage filtrivõrrand pärast rõhku =…. rida.

filtreeritud = filtreeritud + 0,1*(rõhu all filtreeritud);

Hea mõte on lähtestada filtreeritud väärtus esimesele lugemisele. Nii et lisage ülaltoodud rea ümber avaldis „kui”, nii et see näeb välja selline:

kui (filtreeritud! = 0) {

filtreeritud = filtreeritud + 0,1*(rõhu all filtreeritud); } else {filtreeritud = rõhk; // esimene lugemine, nii et see on filtreeritud lugemiseks}

Test "! =" Ei ole "võrdne". Seega, kui „filtreeritud” ei ole võrdne 0 -ga, täidetakse filtrivõrrand, kuid kui see on nii, siis seatakse see rõhunäidule.

Lõpuks peame Serial.println avalduses muutma rõhu väärtuseks „filtreeritud“, et näha filtreeritud väärtust.

Parim õppimine saavutatakse ülaltoodud muudatuste tegemisega käsitsi. Kuid ma lisasin need MS5611data2serialWfilter näidisesse. Nii et kui on probleeme, saab näite laadida.

Nüüd laadige kood üles Arduino ja näete paranemist. Vaadake ülaltoodud teist graafikut ja pange tähele, et Y skaala on laiendatud x2.

Proovige filtrikonstandi madalamat väärtust, öelge 0,1 asemel 0,02 ja vaadake erinevust. Andmed on sujuvamad, kuid aeglasema reageerimisega. See on kompromiss, mida tuleb selle lihtsa filtri kasutamisel otsida. Karakteristik on sama, mis elektroonilistes vooluahelates laialdaselt kasutatav RC (takistus ja mahtuvus) filter.

3. samm: muutke see iseseisvaks

Nüüd lisame LCD -klahvistiku kilbi, teisendame rõhu kõrguseks meetrites ja näitame seda ekraanil. Lisame ka väärtuse nullimise võimaluse, vajutades klahvistiku nuppu „Vali”.

Kui Arduino LCD -ekraan on varustatud, tuleb andur ühendada LCD -kattega. Kahjuks tulevad LCD -ekraanid tavaliselt ilma sobivate pistikupesadeta. Nii et võimalused on jooteühenduste tegemine või pistikupesa hankimine. Pistikupesa on ebayst saadaval palju rohkem kui postikulu. Otsige „2,54 mm pistikuriba” ja otsige neid, mis on sarnased Arduino omadele. Tavaliselt on need 36 või 40 tihvti pikkused. Ma väldiksin pööratud tihvtide kasutamist, kuna need pole tavaliste Duponti juhtmete jaoks piisavalt sügavad.

Pistikuriba tuleb lõigata pikkuseks ja lõige tuleb teha tihvtiga samas kohas. 6 -nööpnõelaga riba puhul eemaldage 7. tihvt mõne peene tangiga, seejärel lõigake selles kohas, kasutades nooremat rauasaega. Viilin otsad, et need oleksid korralikud.

Veenduge, et plaadile jootmisel poleks jootmissillasid.

Anduri ühendamise sobiva otsuse korral ühendage LCD -ekraan Arduino külge ja ühendage andur samade tihvtidega - kuid nüüd LCD -ekraaniga.

Valmistage ka aku ja juhe ette. Ma tegin oma juhtme oma prügikasti osadest, kuid need on saadaval ka ebayst - sealhulgas kena võimalus, mis sisaldab akukasti ja lülitit. Otsige 'PP3 2,1 mm juhtmest'.

Praegune tarbimine on umbes 80m. Seega, kui soovite töötada kauem kui paar minutit, kaaluge suuremat 9 V akut kui PP3.

Samm: lisage kõrguse ja LCD -koodi kood

Image
Image

Peame natuke rohkem kodeerima, et muuta rõhk kõrguseks ja juhtida ekraani.

Visandi alguses lisage kuvaraamatukogu ja öelge, milliseid tihvte kasutatakse:

#kaasake

// teegi initsialiseerimine liidese tihvtide numbritega LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Järgmisena vajame klaviatuuri nuppude lugemiseks mõnda muutujat ja funktsiooni. Kõik need on ühendatud analoogsisendiga A0. Iga nupp annab A0 -le erineva pinge. Otsing „arduino lcd kilpnuppude koodist” leidis hea koodi aadressilt:

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

Enne seadistamist lisage see kood ():

// määrake mõned väärtused, mida paneel ja nupud kasutavad

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 // loe nuppe int read_LCD_buttons () {adc_key_in = analogRead (0); // lugege väärtust andurilt // minu nupud lugemisel on nende väärtuste keskel: 0, 144, 329, 504, 741 // lisame neile väärtustele umbes 50 ja kontrollime, kas oleme lähedal (adc_key_in> 1000) tagastama btnNONE; // Muudame selle kiiruse kaalutlustel esimeseks võimaluseks, kuna see on kõige tõenäolisem tulemus, kui (adc_key_in <50) tagastab 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; tagastama btnNONE; // kui kõik teised ebaõnnestuvad, tagasta see…}

Tavaliselt on alguspunktis kõrgus nullitud. Seega vajame muutujaid nii kõrguse kui ka võrdluse jaoks. Lisage need enne seadistamist () ja ülaltoodud funktsiooni:

float mtr;

ujuki ref = 0;

Rõhu muutmine Pascalsis meetriteks on peaaegu täpselt jagunemine 12 -ga merepinnal. See valem sobib enamiku maapealsete mõõtmiste jaoks. On täpsemaid valemeid, mis sobivad kõrgemal kõrgusel teisendamiseks. Kasutage neid, kui kavatsete seda kasutada õhupalli lennu kõrguse salvestamiseks.

Viide tuleks seada esimesele rõhunäidule, nii et alustame nullkõrguselt ja nupu SELECT vajutamisel. Lisage pärast filtrikoodi ja enne lauset Serial.println:

kui (viide == 0) {

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

Pärast seda lisage kõrguse arvutamine:

mtr = ref - filtreeritud/12,0;

Lõpuks muutke Serial.println avaldust, et saata filtreeritud asemel mtr, ja lisage kood, et saata mtr LCD -le:

Serial.println (mtr); // Saada rõhk jada (UART) kaudu

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

Kõik siin tehtud muudatused sisalduvad näites MS5611data2lcd. Laadige see sammuga 2.

On veel üks viimane moodus, mis on kasulik. Ekraani on raske lugeda, kui seda uuendatakse 60 korda sekundis. Meie filter silub andmeid ajakonstandiga umbes 0,8s. Nii et ekraani värskendamine iga 0,3 sekundi tagant tundub piisav.

Nii et lisage loendur pärast kõiki teisi muutuja määratlusi eskiisi alguses (nt pärast ujuki ref = 0;):

int i = 0;

Seejärel lisage kood juurdekasvule „i” ja avaldis „if”, mis käivitub, kui see jõuab 20 -ni, seejärel seadke see tagasi nulli ja liigutage käsud Serial ja lcd lauses „if”, nii et neid täidetakse ainult iga 20. lugemise ajal:

i += 1;

kui (i> = 20) {Serial.println (mtr); // Saada rõhk jada (UART) kaudu lcd.setCursor (0, 1); // rida 2 lcd.print (mtr); i = 0; }

Ma ei lisanud selle viimase muudatusega näidet, et julgustada koodi käsitsi sisestama, mis aitab õppimist.

See projekt peaks andma hea lähtepunkti näiteks digitaalse baromeetri jaoks. Neile, kes võiksid kaaluda RC -mudelite kasutamist - otsige OpenXvario koodi, mis võimaldab Frsky ja Turnigy 9x telemeetria süsteemide jaoks altimeetrit ja varomeetrit.

Soovitan: