Բովանդակություն:

Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 onstուցադրություն. 4 քայլ (նկարներով)
Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 onstուցադրություն. 4 քայլ (նկարներով)

Video: Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 onstուցադրություն. 4 քայլ (նկարներով)

Video: Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 onstուցադրություն. 4 քայլ (նկարներով)
Video: Altimeter using Arduino and GY63 board with MS5611 sensor 2024, Նոյեմբեր
Anonim
Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 onstուցադրություն
Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 onstուցադրություն

Սա իսկապես բարոմետր/բարձրաչափ է, բայց վերնագրի պատճառը կտեսնեք ՝ դիտելով տեսանյութը:

5նշման MS5611 սենսորը, որը գտնվում է Arduino GY63 և GY86 ճեղքման տախտակներում, զարմանալի կատարում է: Հանգիստ օրը ձեր բարձրությունը կհասնի 0,2 մ -ի սահմաններում: Սա արդյունավետորեն չափում է ձեր գլխից մինչև տիեզերք հեռավորությունը և այն հանում ձեր ոտքերի հեռավորությունից մինչև տիեզերք (ճնշումը չափելով ՝ դա վերևի օդի քաշն է): Այս տպավորիչ սարքն ունի մի շարք, որը հարմարավետորեն կչափի Էվերեստի բարձրությունը, և կարող է նաև չափվել մինչև մի քանի դյույմ:

Այս նախագիծը նպատակ ուներ. Կան բազմաթիվ ֆորումի հարցեր նրանցից, ովքեր դժվարություններ ունեն այս սենսորի հետ: Այստեղ մոտեցումը դարձնում է այն շատ պարզ: Այս նախագիծը կատարելուց հետո դուք լավ սարքավորված կլինեք ճնշման հետ կապված այլ ծրագրեր մշակելու համար:

Յուրաքանչյուր սենսոր ունի իր ճշգրտման հաստատունները, որոնք պետք է կարդալ և օգտագործել տվյալները շտկելու համար: Գոյություն ունի գրադարան, որը կօգնի դրանք քշել: Այստեղ ցուցադրված կոդը օգտագործում է գրադարանը ընթերցումներ կատարելու համար, այնուհետև դրանք վերածում է բարձրության և ցուցադրում դրանք LCD վահանի վրա:

Սկզբում մենք տվյալները կուղարկենք համակարգչի/նոութբուքի սերիական մոնիտորին `նախնական փորձարկումների համար: Դրանք ցույց են տալիս որոշակի աղմուկ, և մենք ավելացնում ենք զտիչ `դրանք հարթելու համար: Այնուհետև մենք կավելացնենք LCD էկրան, որպեսզի սարքը կարողանա ինքնուրույն աշխատել, և դուք կարող եք փորձել չափել ձեր բարձրությունը կամ որևէ այլ բան:

Ուշադրություն դարձրեք, որ GY63 տախտակը պարզապես ունի MS5611 ճնշման սենսոր: GY86- ը կոչվում է 10 աստիճանի ազատության տախտակ և ներառում է նաև 3 առանցքի արագացուցիչ, 3 առանցքի գիրո և 3 առանցքի մագնիսաչափ ընդամենը մի քանի դոլարով ավելի:

Ձեզ հարկավոր կլինի.

1. Arduino UNO (կամ այլ ստանդարտ pinout) և դրա USB մալուխը

2. GY63 բեկման տախտակ կամ GY86

3. 4 Dupont- ը տանում է տղամարդ -կին - կամ միացնող մետաղալար

4. Arduino LCD ստեղնաշարի վահան

5. 9 վ մարտկոց և կապար

6. 2.54 մմ վարդակից ժապավեն (ըստ ցանկության, բայց խորհուրդ է տրվում)

Պատրաստում

Ներբեռնեք Arduino IDE- ն (զարգացման ինտեգրված միջավայր) ՝

Որոշ տեխնիկական բիթեր հետաքրքրության համար

MS5611- ը մատուցում է իր հիանալի կատարումը `մեծ թվով չափումներ կատարելով: Այն կարող է կատարել 4096 3 բայթ (24 բիթ) անալոգային չափումներ ընդամենը 8 մ -ով և տալ միջին արժեք: Այն պետք է չափի ինչպես ճնշումը, այնպես էլ ջերմաստիճանը, որպեսզի ճնշման տվյալները ճշգրտվեն ներքին ջերմաստիճանի համար: Այսպիսով, այն կարող է ապահովել մոտ 60 զույգ ճնշման և ջերմաստիճանի ընթերցումներ վայրկյանում:

Տվյալների թերթիկը հասանելի է ՝

Հաղորդակցությունն իրականացվում է I2C- ի միջոցով: Այսպիսով, այլ I2C տվիչներ կարող են կիսել ավտոբուսը (ինչպես դա տեղի է ունենում GY86 10DOF տախտակի վրա, որտեղ բոլոր չիպերը I2C- ի վրա են):

Քայլ 1: Ստացեք MS5611 գրադարան

Arduino սենսորներից շատերը կամ օգտագործում են ստանդարտ գրադարան, որը ներառված է Arduino IDE- ի հետ, կամ տրվում են zip ֆայլ ՝ գրադարանով, որը կարող է հեշտությամբ տեղադրվել: Սա հակված չէ MS5611 տվիչների դեպքում: Այնուամենայնիվ, կատարվեց որոնում.

Տարբերակ 1

Գնացեք վերը նշված վեբ կայք, կտտացրեք «Կլոնավորել կամ ներբեռնել» և ընտրել «Ներբեռնել ZIP»: Սա պետք է MS5611-master.zip հասցնի ձեր ներլցումների գրացուցակին: Այժմ, եթե ցանկանում եք, տեղափոխեք այն թղթապանակ, որտեղ հետագայում կարող եք գտնել այն: Ես օգտագործում եմ «տվյալների» անունով գրացուցակ, որն ավելացվել է իմ Arduino պանակներին:

Unfortunatelyավոք, ներբեռնված.zip ֆայլը չի պարունակում էսքիզների օրինակ, և լավ կլիներ գրադարանը և օրինակները ավելացնել Arduino IDE- ին: README.md ֆայլում կա նվազագույն օրինակ, որը կարող է պատճենվել և տեղադրվել ուրվագծի մեջ և պահպանվել: Սա գնալու ճանապարհներից մեկն է:

Տարբերակ 2

Այս ուսուցողական կոդն ավելի դյուրին դարձնելու համար ես ավելացրել եմ վերը նշված նվազագույն օրինակը և այստեղ ցուցադրված օրինակները գրադարանին և ներքևում կցել.zip ֆայլ, որը տեղադրվելու է Arduino IDE- ում:

Ներբեռնեք zip ֆայլը ստորև: Thisանկության դեպքում սա տեղափոխեք ավելի լավ պանակ:

Սկսեք Arduino IDE- ն: Կտտացրեք Էսքիզներ> Ներառել գրադարան> Ավելացնել zip ֆայլ և ընտրեք ֆայլը: Վերագործարկեք IDE- ն: IDE- ն այժմ երկուսն էլ տեղադրելու է գրադարանը, գումարած այստեղ ցուցադրված բոլոր օրինակները: Ստուգեք ՝ կտտացնելով Ֆայլ> օրինակներ >> MS5611-master: Պետք է թվարկել երեք ուրվագիծ:

Քայլ 2. Սենսորը միացրեք Arduino- ին և փորձարկեք

Միացրեք սենսորը Arduino- ին և փորձարկեք
Միացրեք սենսորը Arduino- ին և փորձարկեք
Միացրեք սենսորը Arduino- ին և փորձարկեք
Միացրեք սենսորը Arduino- ին և փորձարկեք

GY63/GY86 տախտակները սովորաբար գալիս են վերնագրերով, բայց զոդված չեն: Այսպիսով, ձեր ընտրությունն է կամ վերնագրերը միացնել տեղում և օգտագործել Dupont- ի արական և իգական կապերը, կամ (ինչպես որոշեցի) զոդման տողերը ուղիղ տախտակին տանել, իսկ կապիչին ավելացնել կապող Arduino- ին: Վերջին տարբերակն ավելի լավ է, եթե կարծում եք, որ գուցե ցանկանաք հետագայում խորհուրդը միացնել նախագծի: Նախկինն ավելի լավ է, եթե ցանկանում եք օգտագործել տախտակը փորձերի համար: Չպահվող կապանքները շատ ավելի հեշտ են, քան կապի վերնագիրը:

Պահանջվող կապերն են.

GY63/GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - A5 I2C ժամացույց> SDA - A4 I2C տվյալներ

Կցեք սենսորային տախտակը Arduino- ին, ինչպես վերևում, և Arduino- ն միացրեք համակարգչին/նոութբուքին `նրա USB լարով: Նաև ծածկեք սենսորը որոշ անթափանց/սև նյութով: Սենսորը զգայուն է լույսի նկատմամբ (ինչպես դա տեղի է ունենում այս տեսակի սենսորների մեծ մասի դեպքում):

Սկսեք Arduino IDE- ն: Սեղմել:

Ֆայլ> օրինակներ >> MS5611-master> MS5611data2serial.

Էսքիզով IDE- ի նոր օրինակ կհայտնվի: Կտտացրեք բեռնման կոճակին (աջ սլաք):

Հաջորդը սկսեք սերիական գծապատկերը - կտտացրեք Գործիքներ> Սերիական գծագիր և անհրաժեշտության դեպքում սահմանեք բաուդ 9600 -ը: Ուղարկվող տվյալները ճնշում են Պասկալում: Երկրորդ վայրկյանից հետո այն նորից կշարժվի և սենսորը բարձրացնելով և իջեցնելով, ասենք, 0.3 մ-ով պետք է ցույց տրվի որպես հետքի իջեցում և բարձրացում (ցածր բարձրությունը բարձր ճնշում է):

Տվյալները որոշակի աղմուկ ունեն: Տես վերևի առաջին սյուժեն: Սա կարելի է հարթել ՝ օգտագործելով թվային զտիչ (իսկապես օգտակար գործիք):

Theտիչի հավասարումը հետևյալն է.

արժեք = արժեք + K (նոր արժեք)

որտեղ «արժեքը» զտված տվյալներն են, իսկ «նորը» ՝ վերջին չափվածը: Եթե K = 1 չկա զտիչ: K- ի ավելի ցածր արժեքների համար տվյալները հարթվում են T/K ժամանակի հաստատունով, որտեղ T- ն նմուշների միջև ընկած ժամանակն է: Այստեղ T- ն մոտ 17ms է, ուստի 0.1 արժեքը տալիս է 170ms ժամանակի հաստատուն կամ մոտ 1/6 վայրկյան:

Ֆիլտրը կարող է ավելացվել ՝

Ավելացնել փոփոխական զտված տվյալների համար նախքան կարգավորումը ():

բոց ֆիլտրացված = 0;

Այնուհետև ճնշումից հետո ավելացրեք ֆիլտրի հավասարումը =… գիծ.

զտված = զտված + 0.1*(ճնշմամբ զտված);

Լավ գաղափար է ֆիլտրացված արժեքը սկզբնավորել առաջին ընթերցման համար: Այսպիսով, ավելացրեք «եթե» հայտարարություն վերևի տողի շուրջ, որը դա անում է, որպեսզի այն նման լինի.

եթե (ֆիլտրացված! = 0) {

զտված = զտված + 0.1*(ճնշմամբ զտված); } else {ֆիլտրացված = ճնշում; // առաջին ընթերցումը, այնպես որ զտված է ընթերցման համար}

«! =» Թեստը «հավասար չէ»: Այսպիսով, եթե «զտվածը» հավասար չէ 0 -ի, ֆիլտրի հավասարումը կատարվում է, բայց եթե դա այն է, ապա այն դրված է ճնշման ցուցանիշի վրա:

Վերջապես, մենք պետք է փոխենք «ճնշումը» դեպի «զտված» Serial.println հայտարարության մեջ, որպեսզի տեսնենք զտված արժեքը:

Լավագույն ուսումը ձեռք է բերվում ձեռքով վերը նշված փոփոխությունները կատարելու միջոցով: Այնուամենայնիվ, ես դրանք ներառեցի MS5611data2serialWfilter- ի օրինակում: Այսպիսով, եթե խնդիրներ կան, օրինակը կարող է բեռնվել:

Այժմ վերբեռնեք կոդը Arduino- ում և տեսեք բարելավումը: Տես վերևի երկրորդ գծապատկերը և նշեք, որ Y սանդղակը ընդլայնված է x2:

Փորձեք ավելի ցածր արժեք ֆիլտրի հաստատունի համար, ասենք 0,02 0,1 -ի փոխարեն և տեսեք տարբերությունը: Տվյալները ավելի հարթ են, բայց ավելի դանդաղ արձագանքով: Սա փոխզիջում է, որը պետք է փնտրել այս պարզ զտիչն օգտագործելիս: Բնութագիրը նույնն է, ինչ RC (դիմադրություն և հզորություն) ֆիլտր, որը լայնորեն օգտագործվում է էլեկտրոնային սխեմաներում:

Քայլ 3: Դարձրեք այն ինքնուրույն

Այժմ մենք կավելացնենք LCD ստեղնաշարի վահանը, ճնշումը կդարձնենք բարձրության մետրերով և կցուցադրենք այն էկրանին: Մենք նաև կավելացնենք արժեքը զրոյացնելու հնարավորությունը `սեղմելով ստեղնաշարի« Ընտրել »կոճակը:

Arduino- ի LCD վահանով սենսորը պետք է միացված լինի LCD վահանին: Unfortunatelyավոք, LCD վահանակները սովորաբար գալիս են առանց համապատասխան վարդակների: Այսպիսով, ընտրանքներն են զոդման միացումներ կատարել կամ մի քանի վարդակից ժապավեն ստանալ: Socket strip- ը ebay- ում հասանելի է ոչ ավելի, քան փոստային առաքման արժեքը: Որոնեք «2.54 մմ վարդակից» և փնտրեք նմաններ, որոնք նման են Arduino- ին: Սրանք սովորաբար գալիս են 36 կամ 40 փին երկարությամբ: Ես կխուսափեի շրջված քորոցներից, քանի որ դրանք բավականաչափ խորը չեն Dupont- ի ստանդարտ տողերի համար:

Խողովակի ժապավենը պետք է կտրվի երկարությամբ, իսկ կտրվածքը պետք է կատարվի քորոցի նույն տեղում: Այսպիսով, 6 պին շերտի համար - հեռացրեք 7 -րդ կապը որոշ տափակաբերան տափակաբերան աքցանով, այնուհետ կտրեք այդ վայրում ՝ օգտագործելով կրտսեր սղոց: Ես ավարտում եմ ծայրերը ՝ դրանք կոկիկ դարձնելու համար:

Տախտակին զոդելիս համոզվեք, որ կամուրջներ չկան:

Սենսորին միացնելու մասին համապատասխան որոշմամբ LCD վահանը միացրեք Arduino- ին և միացրեք սենսորը նույն կապումներով, բայց այժմ LCD վահանի վրա:

Նաև պատրաստեք մարտկոցը և կապարը: Ես կազմեցի իմ առաջատարը իմ ջարդոնի աղբարկղի մասերից, բայց դրանք նույնպես հասանելի են ebay- ում `ներառյալ մի գեղեցիկ տարբերակ, որը ներառում է մարտկոցի տուփ և անջատիչ: Որոնեք «PP3 2.1 մմ կապարի» վրա:

Ներկայիս սպառումը մոտ 80 մմ է: Այսպիսով, եթե ցանկանում եք մի քանի րոպեից ավելի աշխատել, հաշվի առեք ավելի մեծ 9 վ մարտկոց, քան PP3- ը:

Քայլ 4: Ավելացրեք բարձրության և LCD- ի կոդ

Image
Image

Մենք պետք է մի փոքր ավելի շատ կոդավորումներ անենք ՝ ճնշումը բարձրության փոխարկելու և էկրանը քշելու համար:

Էսքիզի սկզբում ավելացրեք ցուցադրման գրադարանը և ասեք, թե ինչ կապեր են օգտագործվում.

#ներառում

// գրադարանի սկզբնականացում LiquidCrystal lcd (8, 9, 4, 5, 6, 7) միջերեսային կապերի համարներով;

Հաջորդը մեզ անհրաժեշտ են որոշ փոփոխականներ և ստեղնաշարի կոճակները կարդալու գործառույթ: Սրանք բոլորը կապված են անալոգային մուտքի A0- ի հետ: Յուրաքանչյուր կոճակ տարբեր լարում է տալիս A0- ին: «Arduino lcd վահանի կոճակների կոդի» որոնման արդյունքում որոշ լավ ծածկագիր է գտնվել ՝

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

Տեղադրելուց առաջ ավելացրեք այս ծածկագիրը ():

// սահմանել վահանակի և կոճակների կողմից օգտագործվող որոշ արժեքներ

int lcd_key = 0; int adc_key_in = 0; #սահմանել btnRIGHT 0 #սահմանել btnUP 1 #սահմանել btnDOWN 2 #սահմանել btnLEFT 3 #սահմանել btn SELECT 4 #սահմանել btn ՉԻ 5 5 // կարդալ կոճակները int read_LCD_buttons () {adc_key_in = analogRead (0); // կարդալ արժեքը սենսորից // իմ կոճակները կարդալիս կենտրոնացած են այս արժույթների վրա `0, 144, 329, 504, 741 // մենք այդ արժեքներին ավելացնում ենք մոտ 50 և ստուգում ՝ արդյոք մոտ ենք, եթե (adc_key_in> 1000) վերադարձնել btn ՉԻ; // Մենք արագության նկատառումներով սա դարձնում ենք 1 -ին տարբերակ, քանի որ դա կլինի ամենահավանական արդյունքը, եթե (adc_key_in <50) վերադառնա btnRIGHT; եթե (adc_key_in <250) վերադարձնել btnUP; եթե (adc_key_in <450) վերադարձնել btnDOWN; եթե (adc_key_in <650) վերադարձնել btnLEFT; եթե (adc_key_in <850) վերադարձնել btnSELECT; վերադարձնել btn ՈՉ ՄԵԿ; // երբ բոլոր մյուսները ձախողվեն, վերադարձիր սա…}

Բարձրությունը սովորաբար զրոյացվում է ելակետում: Այսպիսով, մեզ անհրաժեշտ են փոփոխականներ և՛ բարձրության, և՛ հղման համար: Ավելացրեք դրանք նախքան setup () և վերը նշված գործառույթը.

float mtr;

float ref = 0;

Պասկալում ճնշումից մետր փոխակերպումը գրեթե ճշգրիտ բաժանում է ծովի մակարդակին 12 -ի: Այս բանաձևը լավ է գետնի վրա հիմնված չափումների համար: Կան ավելի ճշգրիտ բանաձևեր, որոնք ավելի հարմար են բարձր բարձրության վրա դարձի գալու համար: Օգտագործեք դրանք, եթե մտադիր եք դա օգտագործել փուչիկներով թռիչքի բարձրությունը գրանցելու համար:

Տեղեկանքը պետք է դրվի ճնշման առաջին ընթերցման վրա, այնպես որ մենք սկսում ենք զրոյական բարձրությունից և երբ SELECT կոճակը սեղմվում է: Ֆիլտրի ծածկագրից հետո և Serial.println հայտարարությունից առաջ ավելացրեք.

եթե (ref == 0) {

ref = զտված/12.0; } if (read_LCD_buttons () == btnSELECT) {ref = զտված/12.0; }

Դրանից հետո ավելացրեք բարձրության հաշվարկը.

mtr = ref - ֆիլտրացված/12.0;

Վերջապես փոխեք Serial.println հայտարարությունը ՝ «զտված» -ի փոխարեն ուղարկելով «mtr», և LCD- ին «mtr» ուղարկելու համար ՝ ավելացրեք ծածկագիր.

Serial.println (mtr); // pressureնշում ուղարկեք սերիայի միջոցով (UART)

lcd.setCursor (0, 1); // տող 2 lcd.print (mtr);

Բոլոր փոփոխություններն այստեղ ներառված են MS5611data2lcd օրինակում: Բեռնել սա, ինչպես 2 -րդ քայլում:

Կա մեկ վերջին ռեժիմ, որն օգտակար է: Էկրանը դժվար է կարդալ, երբ այն վայրկյանում 60 անգամ թարմացվում է: Մեր զտիչը հարթեցնում է տվյալները 0,8 վրկ ժամանակային հաստատունով: Այսպիսով, էկրանը յուրաքանչյուր 0.3 վայրկյանում թարմացնելը բավական բավական է թվում:

Այսպիսով, ուրվագծի սկզբում մնացած բոլոր փոփոխական սահմանումներից հետո ավելացրեք հաշվիչ (օրինակ ՝ float ref = 0;) հետո.

int i = 0;

Այնուհետև ավելացրեք կոդը «i» հավելման վրա և «եթե» հայտարարությունը գործարկվի, երբ այն հասնի 20 -ի, այնուհետև այն նորից զրոյի հասցրեք և «եթե» հայտարարության մեջ տեղափոխեք Serial և lcd հրամանները, որպեսզի դրանք կատարվեն միայն յուրաքանչյուր 20 -րդ ընթերցմամբ:

i += 1;

եթե (i> = 20) {Serial.println (mtr); // pressureնշում ուղարկեք սերիական (UART) միջոցով lcd.setCursor (0, 1); // տող 2 lcd.print (mtr); i = 0; }

Այս վերջին փոփոխությամբ ես օրինակ չեմ ներառել, որպեսզի խրախուսեմ ձեռքով մուտքագրել ծածկագիրը, որն օգնում է սովորելուն:

Այս նախագիծը պետք է լավ ելակետ տա, օրինակ `թվային բարոմետրի համար: Նրանց համար, ովքեր գուցե ցանկանան օգտվել RC մոդելներից. Որոնեք OpenXvario- ում այնպիսի կոդը, որը հնարավորություն է տալիս բարձրաչափ և փոփոխաչափ չափել Frsky և Turnigy 9x հեռաչափության համակարգերի համար:

Խորհուրդ ենք տալիս: