Përmbajtje:

Masa e shiritit atmosferik Arduino/ MS5611 GY63 GY86 Demonstrim: 4 hapa (me fotografi)
Masa e shiritit atmosferik Arduino/ MS5611 GY63 GY86 Demonstrim: 4 hapa (me fotografi)

Video: Masa e shiritit atmosferik Arduino/ MS5611 GY63 GY86 Demonstrim: 4 hapa (me fotografi)

Video: Masa e shiritit atmosferik Arduino/ MS5611 GY63 GY86 Demonstrim: 4 hapa (me fotografi)
Video: Урок 96: Датчик атмосферного давления, температуры, приблизительной высоты BMP390 с ЖК-дисплеем 2024, Korrik
Anonim
Masa e shiritit atmosferik Arduino/ MS5611 GY63 GY86 Demonstrim
Masa e shiritit atmosferik Arduino/ MS5611 GY63 GY86 Demonstrim

Ky është me të vërtetë një barometër/lartësimatës, por arsyen e titullit do ta shihni duke shikuar videon.

Sensori i presionit MS5611, i gjetur në pllakat Arduino GY63 dhe GY86, jep performancë të mahnitshme. Në një ditë të qetë ajo do të masë lartësinë tuaj brenda 0.2m. Kjo është efektivisht matja e distancës nga koka juaj në hapësirën e jashtme dhe zbritja e saj nga distanca e këmbëve tuaja në hapësirën e jashtme (duke matur presionin - kjo është pesha e ajrit sipër). Kjo pajisje spektakolare ka një gamë që do të masë me lehtësi lartësinë e Everestit - dhe gjithashtu mund të matet deri në disa centimetra.

Ky projekt kishte për qëllim si: një projekt shkollash, një shembull të modifikimit të kodit Arduino dhe një vend i mirë fillimi për të eksploruar duke përdorur sensorin MS5611. Ka shumë pyetje në forum nga ata që kanë vështirësi me këtë sensor. Qasja këtu e bën përdorimin e tij shumë të drejtpërdrejtë. Pas kryerjes së këtij projekti do të jeni të pajisur mirë për të zhvilluar aplikacione të tjera të lidhura me presionin.

Çdo sensor ka konstantet e veta të kalibrimit që duhen lexuar dhe përdorur për të korrigjuar të dhënat. Ekziston një bibliotekë në dispozicion për të ndihmuar në drejtimin e tyre. Kodi i treguar këtu përdor bibliotekën për të marrë leximet dhe pastaj i konverton ato në lartësi dhe i shfaq ato në një LCD Shield.

Së pari ne do t'i dërgojmë të dhënat në monitorin serik në PC/laptop për testet fillestare. Këto tregojnë pak zhurmë dhe kështu shtojmë një filtër për t'i zbutur ato. Pastaj do të shtojmë një ekran LCD në mënyrë që njësia të funksionojë në mënyrë të pavarur dhe ju mund të provoni të matni lartësinë tuaj - ose ndonjë gjë tjetër.

Vini re se bordi GY63 sapo ka sensorin e presionit MS5611. GY86 quhet një tabelë 10 gradë e lirisë dhe gjithashtu përfshin një akselerometër me 3 boshte, gyro me 3 boshte dhe një magnetometër me 3 boshte për vetëm disa dollarë më shumë.

Do t'ju duhet:

1. Arduino UNO (ose tjetër me pinout standard) dhe kabllon e tij USB

2. Bordi i thyerjes GY63 ose GY86

3. 4 Dupont drejton mashkull -femër - ose tela lidhës

4. Mburoja e tastierës Arduino LCD

5. Bateri 9v dhe plumb

6. Rrip fole 2.54 mm (opsionale por e rekomanduar)

Përgatitja

Shkarkoni Arduino IDE (mjedisi i integruar i zhvillimit) nga:

Disa pjesë teknike për interes

MS5611 jep performancën e tij të shkëlqyer duke mesatarizuar një numër të madh të matjeve. Mund të bëjë 4096 matje analoge 3 byte (24bit) në vetëm 8ms dhe të japë vlerën mesatare. Duhet të masë presionin dhe temperaturën në mënyrë që të dhënat e presionit të korrigjohen për temperaturën e brendshme. Prandaj mund të japë rreth 60 palë presione dhe lexime të temperaturës në sekondë.

Fleta e të dhënave është në dispozicion në:

Komunikimi bëhet përmes I2C. Pra, sensorë të tjerë I2C mund të ndajnë autobusin (siç është rasti në tabelën GY86 10DOF ku të gjitha çipat janë në I2C).

Hapi 1: Merrni një Bibliotekë MS5611

Shumë nga sensorët Arduino ose përdorin një bibliotekë standarde që përfshihet në Arduino IDE ose furnizohen me një skedar zip me një bibliotekë që mund të instalohet lehtësisht. Kjo nuk tenton të jetë rasti për sensorët MS5611. Sidoqoftë, u gjet një kërkim: https://github.com/gronat/MS5611 që ka një bibliotekë për MS5611, duke përfshirë kryerjen e korrigjimit të temperaturës.

opsioni 1

Shkoni në uebfaqen e mësipërme, klikoni "Klononi ose Shkarkoni" dhe zgjidhni "Shkarkoni ZIP". Kjo duhet të japë MS5611-master.zip në drejtorinë tuaj të shkarkimeve. Tani, nëse dëshironi, zhvendoseni në një dosje ku mund ta gjeni në të ardhmen. Unë përdor një drejtori të quajtur "të dhëna" të shtuar në dosjet e mia Arduino.

Fatkeqësisht skedari.zip i shkarkuar nuk përfshin ndonjë skicë shembull dhe do të ishte mirë të shtoni bibliotekën dhe shembujt në Arduino IDE. Ekziston një shembull minimal në skedarin README.md që mund të kopjohet dhe ngjitet në një skicë dhe të ruhet. Kjo është një mënyrë për të vazhduar.

Opsioni 2

Për ta bërë më të lehtë ekzekutimin e kodit në këtë udhëzues, kam shtuar shembullin minimal të mësipërm dhe shembujt e treguar këtu në bibliotekë dhe bashkangjitur një skedar.zip më poshtë që do të instalohet në Arduino IDE.

Shkarkoni skedarin zip më poshtë. Zhvendoseni këtë në një dosje më të mirë nëse dëshironi.

Filloni Arduino IDE. Klikoni Skicë> Përfshini Bibliotekën> Shtoni skedar zip dhe zgjidhni skedarin. Rinisni IDE -në. IDE tani do të ketë bibliotekën të instaluar plus të gjithë shembujt e treguar këtu. Kontrolloni duke klikuar Skedar> shembuj >> MS5611-master. Tre skica duhet të renditen.

Hapi 2: Lidhni sensorin me Arduino dhe Test

Lidheni Sensorin me Arduino dhe Provoni
Lidheni Sensorin me Arduino dhe Provoni
Lidheni Sensorin me Arduino dhe Provoni
Lidheni Sensorin me Arduino dhe Provoni

Tabelat GY63/GY86 zakonisht vijnë me tituj, por jo të bashkuar. Pra, është zgjedhja juaj që ose të lidhni titujt në vend dhe të përdorni lidhëset Dupont meshkuj-femra, ose (siç vendosa) lidhëset lidhës direkt në tabelë dhe të shtoni kunja në plumb për t'u lidhur me Arduino. Opsioni i fundit është më i mirë nëse mendoni se mund të dëshironi ta bashkoni bordin në një projekt më vonë. E para është më mirë nëse doni të përdorni tabelën për eksperimentim. Udhëzimet e palidhshme janë shumë më të lehta se sa një kokë pin.

Lidhjet e kërkuara janë:

GY63/GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - Ora A5 I2C> SDA - Të dhëna A4 I2C

Bashkangjitni bordin e sensorit në Arduino si më sipër dhe lidhni Arduino me kompjuterin/laptopin përmes prizës së tij USB. Gjithashtu mbuloni sensorin me një material të errët/të zi. Sensori është i ndjeshëm ndaj dritës (siç është rasti për shumicën e këtij lloji të sensorëve).

Filloni Arduino IDE. Kliko:

Skedar> shembuj >> MS5611-master> MS5611data2serial.

Një shembull i ri i IDE do të shfaqet me skicën. Klikoni në butonin e ngarkimit (shigjeta e djathtë).

Më pas filloni komplotuesin serik - klikoni Veglat> Komplotuesi serik dhe nëse është e nevojshme vendosni baud në 9600. Të dhënat që dërgohen janë presioni në Pascals. Pas një çasti të dytë, ai do të shkallëzohet përsëri dhe ngritja dhe ulja e sensorit për shembull 0.3m duhet të shfaqet si ulje dhe ngritje e gjurmës (lartësia më e ulët është presion më i lartë).

Të dhënat kanë pak zhurmë. Shih komplotin e parë më sipër. Kjo mund të zbutet duke përdorur një filtër dixhital (një mjet vërtet i dobishëm).

Ekuacioni i filtrit është:

vlera = vlera + K (vlera e re)

ku 'vlera' është e dhëna e filtruar, dhe 'e re' është matja më e fundit. Nëse K = 1 nuk ka filtrim. Për vlerat më të ulëta të K të dhënave zbutet me një konstante kohore të T/K ku T është koha midis mostrave. Këtu T është rreth 17ms kështu që një vlerë prej 0.1 jep një konstante kohore prej 170ms ose rreth 1/6s.

Filtri mund të shtohet nga:

Shtoni një ndryshore për të dhënat e filtruara para konfigurimit ():

noton filtruar = 0;

Pastaj shtoni ekuacionin e filtrit pas presionit =…. linjë.

filtruar = filtruar + 0,1*(i filtruar me presion);

Ideashtë një ide e mirë të filloni vlerën e filtruar në leximin e parë. Pra, shtoni një deklaratë "nëse" rreth vijës së mësipërme që e bën këtë kështu që duket si:

nëse (filtruar! = 0) {

filtruar = filtruar + 0,1*(i filtruar me presion); } else {filtruar = presion; // leximi i parë kështu i filtruar në lexim}

Testi ‘! =’ Nuk është ‘i barabartë’. Pra, nëse "filtruar" nuk është e barabartë me 0, ekuacioni i filtrit ekzekutohet, por nëse është, atëherë ai vendoset në leximin e presionit.

Së fundmi ne duhet të ndryshojmë 'presionin' në 'filtruar' në deklaratën Serial.println kështu që ne shohim vlerën e filtruar.

Mësimi më i mirë arrihet duke bërë ndryshimet e mësipërme me dorë. Sidoqoftë, i përfshiva këto në shembullin MS5611data2serialWfilter. Pra, nëse ka probleme, shembulli mund të ngarkohet.

Tani ngarkoni kodin në Arduino dhe shihni përmirësimin. Shihni komplotin e dytë më lart dhe vini re se shkalla Y është zgjeruar x2.

Provoni një vlerë më të ulët për konstantën e filtrit, thoni 0.02 në vend të 0.1, dhe shihni ndryshimin. Të dhënat janë më të qeta, por me një përgjigje më të ngadaltë. Ky është një kompromis që duhet kërkuar kur përdorni këtë filtër të thjeshtë. Karakteristika është e njëjtë me një filtër RC (rezistencë dhe kapacitet) i përdorur gjerësisht në qarqet elektronike.

Hapi 3: Bëjeni të Pavarur

Tani do të shtojmë një mburojë të tastierës LCD, do ta shndërrojmë presionin në lartësi në metra dhe do ta shfaqim në ekran. Ne gjithashtu do të shtojmë aftësinë për të zeruar vlerën duke shtypur butonin "Zgjidh" të tastierës.

Me mburojën LCD në Arduino sensori do të duhet të lidhet me mburojën LCD. Fatkeqësisht mburojat LCD zakonisht vijnë pa prizat e duhura. Pra, opsionet janë për të bërë lidhje lidhëse ose për të marrë një shirit fole. Shiriti i prizës është i disponueshëm në ebay për jo më shumë se kostoja e postës. Bëni një kërkim në ‘brezin e prizës 2.54mm’ dhe kërkoni ato që janë të ngjashme me ato në Arduino. Këto zakonisht vijnë në gjatësi 36 ose 40 pin. Unë do të shmangja ato me kunja të kthyera pasi ato nuk janë mjaft të thella për lidhjet standarde të Dupont.

Shiriti i prizës duhet të pritet në gjatësi dhe prerja duhet të bëhet në të njëjtin vend me një kunj. Pra, për një shirit me 6 kunja - hiqeni kunjin e 7 -të me disa pincë të imëta, pastaj prerë në atë vend duke përdorur një sharrë hekuri të vogël. I skajoj skajet për t'i bërë ato të pastra.

Sigurohuni që nuk ka ura lidhëse kur i bashkoni ato në tabelë.

Me vendimin e duhur për lidhjen e sensorit lidheni ekranin LCD në Arduino dhe lidhni sensorin me të njëjtat kunja - por tani në mburojën LCD.

Gjithashtu bëni gati baterinë dhe plumbin. Unë e kompozova pjesën time në koshin e mbeturinave, por ato janë gjithashtu të disponueshme në ebay - duke përfshirë një opsion të mirë që përfshin një kuti baterie dhe një ndërprerës. Kërko në 'plumb PP3 2.1mm'.

Konsumi aktual është rreth 80ma. Prandaj, nëse doni të punoni për më shumë se disa minuta, merrni parasysh një bateri më të madhe 9v sesa PP3.

Hapi 4: Shtoni Kodin për Lartësinë dhe LCD

Image
Image

Duhet të bëjmë pak më shumë kodim për të kthyer presionin në lartësi dhe për të drejtuar ekranin.

Në fillim të skicës shtoni bibliotekën e ekranit dhe tregoni këtë se cilat kunja përdoren:

#përfshi

// inicializoni bibliotekën me numrat e kunjave të ndërfaqes LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Tjetra ne kemi nevojë për disa ndryshore dhe një funksion për të lexuar butonat e tastierës. Të gjitha këto janë të lidhura me hyrjen analoge A0. Çdo buton i jep një tension të ndryshëm A0. Një kërkim në 'arduino lcd shield buttons code' gjeti një kod të mirë në:

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

Shtoni këtë kod para konfigurimit ():

// përcaktoni disa vlera të përdorura nga paneli dhe butonat

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 btnJONE 5 // lexoni butonat int read_LCD_buttons () {adc_key_in = analogRead (0); // lexoni vlerën nga sensori // butonat e mi kur lexohen janë të përqendruar në këto vlera: 0, 144, 329, 504, 741 // i shtojmë përafërsisht 50 atyre vlerave dhe kontrollojmë nëse jemi afër nëse (adc_key_in> 1000) kthimi btn ASNJ; // Ne e bëjmë këtë opsionin e parë për arsye shpejtësie pasi do të jetë rezultati më i mundshëm nëse (adc_key_in <50) kthehet btnRIGHT; nëse (adc_key_in <250) kthehet btnUP; nëse (adc_key_in <450) kthehu btnDOWN; nëse (adc_key_in <650) kthehet btnLEFT; nëse (adc_key_in <850) kthehu btnSELECT; kthehu btn ASNJE; // kur të gjithë të tjerët dështojnë, kthejeni këtë…}

Lartësia zakonisht është zero në pikën e fillimit. Pra, ne kemi nevojë për ndryshore si për lartësinë ashtu edhe për referencën. Shtoni këto para konfigurimit () dhe funksionit të mësipërm:

noton mtr;

noton ref = 0;

Shndërrimi nga presioni në Pascals në metra është pothuajse saktësisht një ndarje me 12 në nivelin e detit. Kjo formulë është e mirë për shumicën e matjeve të bazuara në tokë. Ka formula më të sakta që janë më të përshtatshme për shndërrim në lartësi të mëdha. Përdorni këto nëse do ta përdorni këtë për të regjistruar lartësinë e një fluturimi me tullumbace.

Referenca duhet të vendoset në leximin e parë të presionit kështu që ne fillojmë në lartësinë zero dhe kur shtypet butoni SELECT. Shtoni, pas kodit të filtrit dhe para deklaratës Serial.println:

nëse (ref == 0) {

ref = filtruar/12.0; } if (read_LCD_buttons () == btnSELECT) {ref = filtruar/12.0; }

Pas kësaj shtoni llogaritjen e lartësisë:

mtr = ref - filtruar/12.0;

Së fundi ndryshoni deklaratën Serial.println për të dërguar 'mtr' në vend të 'filtruar' dhe shtoni kodin për të dërguar 'mtr' në LCD:

Serial.println (mtr); // Dërgo presion përmes serialit (UART)

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

Të gjitha ndryshimet këtu përfshihen në shembullin MS5611data2lcd. Ngarko këtë si në hapin 2.

Ekziston një mod i fundit që është i dobishëm. Ekrani është i vështirë për tu lexuar kur azhurnohet 60 herë në sekondë. Filtri ynë po zbut të dhënat me një konstante kohore rreth 0.8s. Pra, përditësimi i ekranit çdo 0.3s duket mjaftueshëm.

Pra, shtoni një numërues pas të gjitha përkufizimeve të tjera të ndryshueshme në fillim të skicës (p.sh. pas float ref = 0;):

int i = 0;

Pastaj shtoni kodin në shtesën 'i' dhe një deklaratë 'nëse' për t'u ekzekutuar kur të arrijë në 20 dhe pastaj vendoseni përsëri në zero dhe zhvendosni komandat Seriale dhe LCD brenda deklaratës 'nëse', kështu që këto ekzekutohen vetëm çdo lexim të 20 -të:

i += 1;

nëse (i> = 20) {Serial.println (mtr); // Dërgo presion nëpërmjet serialit (UART) lcd.setCursor (0, 1); // rreshti 2 lcd.print (mtr); i = 0; }

Unë nuk përfshiva një shembull me këtë modifikim të fundit në mënyrë që të inkurajoj futjen e kodit me dorë që ndihmon të mësuarit.

Ky projekt duhet të japë një pikënisje të mirë për shembull për një barometër dixhital. Për ata që mund të duan të marrin në konsideratë përdorimin në modelet RC - kërkoni për OpenXvario për kodin që mundëson një lartësimatës dhe variometër për sistemet e telemetrisë Frsky dhe Turnigy 9x.

Recommended: