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

Չափել ճնշումը ձեր միկրո միջոցով. Բիթ ՝ 5 քայլ (նկարներով)
Չափել ճնշումը ձեր միկրո միջոցով. Բիթ ՝ 5 քայլ (նկարներով)

Video: Չափել ճնշումը ձեր միկրո միջոցով. Բիթ ՝ 5 քայլ (նկարներով)

Video: Չափել ճնշումը ձեր միկրո միջոցով. Բիթ ՝ 5 քայլ (նկարներով)
Video: BTT GTR v1.0/M5 v1.0 - configuration of A4988 and DRV8825 steppers 2024, Հուլիսի
Anonim
Չափել ճնշումը ձեր միկրո միջոցով
Չափել ճնշումը ձեր միկրո միջոցով
Չափել ճնշումը ձեր միկրո միջոցով
Չափել ճնշումը ձեր միկրո միջոցով

Հետևյալ հրահանգը նկարագրում է հեշտ կառուցվող և էժան սարք `ճնշման չափումներ կատարելու և Բոյլի օրենքը ցուցադրելու համար` օգտագործելով միկրո. Բիթը `BMP280 ճնշման/ջերմաստիճանի տվիչի հետ համատեղ:

Մինչդեռ ներարկիչ/ճնշման սենսորային համակցությունն արդեն նկարագրված է իմ նախորդ հրահանգներից մեկում, միկրո: բիթի հետ համադրությունը նոր հնարավորություններ է տալիս, օրինակ. դասասենյակի նախագծերի համար:

Բացի այդ, առայժմ բավականին սահմանափակ է այն ծրագրերի նկարագրությունների թիվը, որոնցում միկրո: բիթը օգտագործվում է I2C շարժիչ ցուցիչի հետ համատեղ: Հուսով եմ, որ սա ուսանելի կարող է լինել այլ նախագծերի մեկնարկային կետը:

Սարքը թույլ է տալիս իրականացնել օդային ճնշման քանակական չափումներ և արդյունքները ցուցադրել միկրո: բիթ LED զանգվածում կամ միացված համակարգչում, Arduino IDE- ի սերիական մոնիտորի կամ սերիական գծագրիչի գործառույթների հետագա օգտագործման համար: Բացի այդ, դուք ունեք հապտիկ արձագանք, քանի որ ինքներդ եք հրում կամ քաշում ներարկիչի մխոցը և դրանով զգում անհրաժեշտ ուժը:

Լռելյայն, էկրանը թույլ է տալիս գնահատել ճնշումը LED մատրիցի վրա ցուցադրված մակարդակի ցուցիչով: Arduino IDE- ի սերիական գծանկարը թույլ է տալիս անել նույնը, բայց շատ ավելի լավ լուծմամբ (տես տեսանյութը): Առավել մանրակրկիտ լուծումներ կան նաև, օրինակ. մշակման լեզվով: Դուք նաև կարող եք ցուցադրել ճնշման և ջերմաստիճանի ճշգրիտ չափված արժեքները LED մատրիցի վրա համապատասխանաբար A կամ B կոճակները սեղմելուց հետո, սակայն Arduino IDE- ի սերիական մոնիտորը շատ ավելի արագ է, ինչը թույլ է տալիս ցուցադրել արժեքները գրեթե իրական ժամանակում:

Ընդհանուր ծախսերը և սարքը կառուցելու համար պահանջվող տեխնիկական հմտությունները բավականին ցածր են, ուստի դա կարող է լինել դասարանների գեղեցիկ նախագիծ ուսուցչի հսկողության ներքո: Բացի այդ, սարքը կարող է գործիք լինել STEM- ի նախագծերի համար `կենտրոնանալով ֆիզիկայի վրա կամ օգտագործվել այլ նախագծերում, որտեղ ուժը կամ քաշը պետք է փոխակերպվեն թվային արժեքի:

Սկզբունքն օգտագործվել է շատ պարզ միկրո կառուցելու համար. Bit dive-o-meter, սարք, որը չափում է, թե որքան խորությամբ ես սուզվում:

Հավելված 27-Մայիս -2018:

Քանի որ Պիմորոնին մշակել է MakePode գրադարան BMP280 սենսորի համար, սա ինձ հնարավորություն տվեց մշակել սցենար, որը կօգտագործվի այստեղ նկարագրված սարքի համար: Սցենարը և համապատասխան HEX ֆայլը կարելի է գտնել այս հրահանգի վերջին քայլում: Այն օգտագործելու համար պարզապես բեռնեք HEX ֆայլը ձեր micro: bit- ում: Հատուկ ծրագրային ապահովման կարիք չկա, և սցենարը խմբագրելու համար կարող եք օգտագործել MakeCode առցանց խմբագիրը:

Քայլ 1: Օգտագործված նյութեր

Օգտագործված նյութեր
Օգտագործված նյութեր
Օգտագործված նյութեր
Օգտագործված նյութեր
Օգտագործված նյութեր
Օգտագործված նյութեր
Օգտագործված նյութեր
Օգտագործված նյութեր
  • Միկրո
  • Kitronic Edge միակցիչ միկրո.
  • 2 x 2 քորոց վերնագրի շերտեր
  • Մարտկոց կամ LiPo միկրո համար. Բիթ (անհրաժեշտ չէ, բայց օգտակար), մարտկոցի մալուխ անջատիչով (dito) - Pimoroni
  • jumper մալուխներ սենսորների Edge միակցիչին միացնելու համար
  • երկար (!) jumper մալուխներ սենսորի համար, առնվազն այնքան երկար, որքան ներարկիչը, f/f կամ f/m
  • BMP280 ճնշման և ջերմաստիճանի տվիչ - Banggood - 5 ԱՄՆ դոլար երեք միավորի համար: Այս տվիչի չափման միջակայքը 550 -ից 1537 hPa- ի միջև է:
  • 150 մլ պլաստիկ կաթետերի ներարկիչ `ռետինե միջադիրով - Amazon կամ սարքավորումների և այգիների խանութներ` մոտ 2 - 3 ԱՄՆ դոլար
  • տաք սոսինձ/տաք սոսինձ ատրճանակ
  • զոդման երկաթ
  • համակարգիչ Arduino IDE- ով տեղադրված

Քայլ 2: Հավաքման ցուցումներ

Հավաքման ցուցումներ
Հավաքման ցուցումներ
Հավաքման ցուցումներ
Հավաքման ցուցումներ
Հավաքման ցուցումներ
Հավաքման ցուցումներ

Oldոդման վերնագրեր BMP280 սենսորային ճեղքման վրա:

2ոդեք երկու 2 քորոց վերնագրերը Edge միակցիչի 19 և 20 միակցիչներին (տես նկարը):

Միացրեք միկրո: բիթը Edge միակցիչին և ձեր համակարգչին:

Պատրաստեք ծրագրակազմ և միկրո. Բիթ, ինչպես նկարագրված է Adafruit micro: bit հրահանգներում: Կարդացեք դրանք մանրակրկիտ:

Տեղադրեք անհրաժեշտ գրադարանները Arduino IDE- ում:

Բացեք BMP280 սցենարը, որը կցված է հետագա քայլին:

Սենսորը միացրեք Edge միակցիչին: GND- ից 0V, VCC- ից մինչև 3V, SCL- ից 19 -ին, SDA- ից `20 -ից:

Վերբեռնեք սցենարը միկրո: bit.

Ստուգեք, որ սենսորը տալիս է ողջամիտ տվյալներ, ճնշման արժեքները պետք է լինեն մոտ 1020 hPa ՝ ցուցադրված սերիական մոնիտորի վրա: Այդ դեպքում նախ ստուգեք մալուխներն ու միացումները, այնուհետև ծրագրաշարի տեղադրումը և ուղղեք:

Անջատեք միկրո. Բիթ, հեռացրեք սենսորը:

Ներարկիչի ելքի միջով անցեք երկար թռիչքի մալուխները: Այն դեպքում, երբ գուցե ստիպված լինեք ընդլայնել բացվածքը: Carefulգույշ եղեք, բաց թողեք, որ մալուխները վնասվում են:

Միացրեք սենսորը jumper մալուխներին: Ստուգեք, որ կապերը ճիշտ և լավ են: Միացեք միկրոին `բիթ:

Ստուգեք, որ սենսորը ճիշտ է աշխատում: Fullyգուշորեն քաշեք մալուխները, սենսորը տեղափոխեք ներարկիչի վերև:

Տեղադրեք մխոցը և տեղափոխեք այն մի փոքր ավելի, քան ցանկալի հանգստի դիրքը (100 մլ):

Ներարկիչի ելքի ծայրին ավելացրեք տաք սոսինձ և մխոցը մի փոքր հետ տարեք: Ստուգեք, արդյոք ներարկիչը փակ է օդով, հակառակ դեպքում ավելացրեք ավելի շատ տաք սոսինձ: Թող տաք սոսինձը սառչի:

Կրկին ստուգեք, որ սենսորը աշխատում է: Եթե դուք տեղափոխում եք մխոցը, ապա սերիական մոնիտորի և միկրո: բիտի էկրանին թվերը պետք է փոխվեն:

Անհրաժեշտության դեպքում կարող եք կարգավորել ներարկիչի ծավալը `սեղմելով այն միջադիրի մոտ և շարժելով մխոցը:

Քայլ 3. Մի քիչ տեսություն և որոշ գործնական չափումներ

Մի քիչ տեսություն և որոշ գործնական չափումներ
Մի քիչ տեսություն և որոշ գործնական չափումներ
Մի քիչ տեսություն և որոշ գործնական չափումներ
Մի քիչ տեսություն և որոշ գործնական չափումներ

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

Դրա հիմքում ընկած տեսությունը. Բոյլի օրենքի համաձայն, [umeավալը * ureնշում] տվյալ ջերմաստիճանում գազի հաստատուն արժեքն է:

Սա նշանակում է, որ եթե սեղմում եք տվյալ ծավալի գազի N- ծալքը, այսինքն `վերջնական ծավալը օրիգինալից 1/N անգամ է, դրա ճնշումը կբարձրանա N- անգամ, քանի որ ՝ P0*V0 = P1*V1 = մինուս տ. Լրացուցիչ մանրամասների համար խնդրում ենք ծանոթանալ գազի մասին օրենքների վերաբերյալ Վիքիպեդիայի հոդվածին: Seaովի մակարդակում բարոմետրիկ ճնշումը սովորաբար գտնվում է 1010 hPa (հեկտո Պասկալ) միջակայքում:

Այսպիսով, սկսած հանգստավայրերից, օրինակ. V0 = 100 մլ և P0 = 1000 hPa, օդի սեղմումը մինչև 66 մլ (այսինքն ՝ V1 = 2/3 * V0) կհանգեցնի մոտ 1500 hPa ճնշման (P1 = 3/2 P0): Մխոցը 125 մլ -ով քաշելը (5/4 անգամ ծավալը) հանգեցնում է մոտ 800 hPa ճնշման (4/5 ճնշում) ճնշման: Չափումները զարմանալիորեն ճշգրիտ են նման պարզ սարքի համար:

Սարքը թույլ է տալիս ուղղակի հապտիկ տպավորություն թողնել, թե որքան ուժ է պահանջվում ներարկիչում համեմատաբար փոքր քանակությամբ օդը սեղմելու կամ ընդլայնելու համար:

Բայց մենք կարող ենք նաև որոշ հաշվարկներ կատարել և դրանք փորձնականորեն ստուգել: Ենթադրենք, մենք օդը սեղմում ենք մինչև 1500 hPa, 1000 hPa բազալոմետրիկ ճնշման դեպքում: Այսպիսով, ճնշման տարբերությունը 500 hPa է, կամ 50, 000 Pa: Իմ ներարկիչի համար մխոցի տրամագիծը (դ) կազմում է մոտ 4 սմ կամ 0.04 մետր:

Այժմ կարող եք հաշվարկել մխոցն այդ դիրքում պահելու համար անհրաժեշտ ուժը: Հաշվի առնելով P = F/A (ureնշումը ուժ է բաժանված տարածքի վրա), կամ փոխակերպված F = P*A: SI ուժի միավորը «Նյուտոն» N է, «Մետր» մ երկարության համար, և 1 Pa- ն 1N քառակուսի մետրի համար է: Կլոր մխոցի համար տարածքը կարելի է հաշվարկել ՝ օգտագործելով A = ((d/2)^2)*pi, որը 0.00125 քմ է տալիս իմ ներարկիչի համար: Այսպիսով, 50, 000 Պա * 0,00125 մ^2 = 63 Ն

Երկրի վրա 1 N- ը փոխկապակցված է 100 գր քաշի հետ, ուստի 63 N- ը հավասար է 6.3 կգ քաշ պահելուն:

Սա կարելի է հեշտությամբ ստուգել ՝ օգտագործելով սանդղակ: Ներարկիչը մխոցով մղեք կշեռքի վրա, մինչև մոտ 1500 hPa ճնշման հասնելը, ապա կարդացեք սանդղակը: Կամ սեղմեք մինչև սանդղակը ցույց տա մոտ 6-7 կգ, այնուհետև կտտացրեք «A» կոճակին և կարդացեք միկրո: բիթի LED մատրիցի վրա ցուցադրված արժեքը: Ինչպես պարզվեց, վերը նշված հաշվարկների հիման վրա կատարված գնահատականը վատ չէր: 1500 hPa- ից փոքր -ինչ բարձր ճնշումը փոխկապակցված է մարմնի մասշտաբով մոտ 7 կգ ցուցադրվող «քաշի» հետ (տես նկարները): Կարող եք նաև շրջել այս հայեցակարգը և օգտագործել սարքը ճնշման չափումների վրա հիմնված պարզ թվային սանդղակ կառուցելու համար:

Խնդրում ենք նկատի ունենալ, որ սենսորի վերին սահմանը մոտ 1540 hPa է, այնպես որ դրանից բարձր ճնշումը չի կարող չափվել և կարող է վնասել սենսորը:

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

Քայլ 4: MicroPython Script

Կից դուք գտնում եք իմ BMP280 սցենարը միկրո: բիտի համար: Այն BMP/BME280 սցենարի ածանցյալ է, որը ես գտել եմ ինչ -որ տեղ Banggood կայքում ՝ զուգորդված Adafruit- ի Microbit գրադարանով: Առաջինը թույլ է տալիս օգտագործել Banggood սենսորը, երկրորդը պարզեցնում է 5x5 LED էկրանով աշխատելը: Շնորհակալություն եմ հայտնում երկուսի մշակողներին:

Լռելյայն, սցենարը ցուցադրում է ճնշման չափումների արդյունքները 5 քայլով միկրո. Valuesշգրիտ արժեքները կարող են զուգահեռաբար ցուցադրվել Arduino IDE սերիալային մոնիտորի վրա, կամ ավելի մանրամասն գրաֆիկը կարող է ցուցադրվել Arduino IDE- ի սելարային գծապատկերով:

Եթե սեղմում եք A կոճակը, չափված ճնշման արժեքները ցուցադրվում են micro: bit- ի 5x5 LED զանգվածում: Եթե սեղմում եք B կոճակը, ցուցադրվում են ջերմաստիճանի արժեքները: Չնայած դա թույլ է տալիս կարդալ ճշգրիտ տվյալները, զգալիորեն դանդաղեցնում է չափման ցիկլերը:

Վստահ եմ, որ առաջադրանքները ծրագրավորելու և սցենարը բարելավելու շատ ավելի էլեգանտ եղանակներ կան: Helpանկացած օգնություն ողջունելի է:

#ներառել xxx

#ներառել Adafruit_Microbit_Matrix microbit; #սահմանեք BME280_ADDRESS 0x76 անստորագիր երկար int hum_raw, temp_raw, pres_raw; ստորագրված երկար int t_fine; uint16_t փորել_Տ 1; int16_t dig_T2; int16_t dig_T3; uint16_t փորել_Փ 1; int16_t dig_P2; int16_t dig_P3; int16_t dig_P4; int16_t dig_P5; int16_t փորել_Փ 6; int16_t dig_P7; int16_t dig_P8; int16_t dig_P9; int8_t փորել_Հ 1; int16_t փորել_Հ2; int8_t փորել_Հ 3; int16_t dig_H4; int16_t dig_H5; int8_t փորել_Հ 6; // չափված արժեքների բեռնարկղեր int արժեք 0; int արժեք 1; int արժեք 2; int արժեք 3; int արժեք 4; // ---------------------------------------------------- ------------------------------------------------------ ------------------ անվավեր կարգավորում () {uint8_t osrs_t = 1; // peratերմաստիճանի գերազանցում x 1 uint8_t osrs_p = 1; // ureնշման գերբարձրացում x 1 uint8_t osrs_h = 1; // Խոնավության գերազանցում x 1 uint8_t ռեժիմ = 3; // Նորմալ ռեժիմ uint8_t t_sb = 5; // Tstandby 1000ms uint8_t զտիչ = 0; // terտել անջատված uint8_t spi3w_en = 0; // 3-մետաղալար SPI Անջատել uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | ռեժիմ; uint8_t config_reg = (t_sb << 5) | (զտիչ << 2) | spi3w_en; uint8_t ctrl_hum_reg = osrs_h; pinMode (PIN_BUTTON_A, INPUT); pinMode (PIN_BUTTON_B, INPUT); Serial.begin (9600); // Serial.println («peratերմաստիճանը [աստիճան C]»); // Serial.print ("\ t"); Serial.print («ureնշում [hPa]»); // վերնագիր Wire.begin (); writeReg (0xF2, ctrl_hum_reg); writeReg (0xF4, ctrl_meas_reg); writeReg (0xF5, config_reg); readTrim (); // microbit.begin (); // microbit.print ("x"); ուշացում (1000); } // --------------------------------------------------- ------------------------------------------------------ -------- դատարկ շրջան () {double temp_act = 0.0, press_act = 0.0, hum_act = 0.0; ստորագրված երկար int temp_cal; անստորագիր երկար int press_cal, hum_cal; int N; // սահմանել շեմային արժեքներ LED մատրիցային ցուցադրման համար, hPa- ում կրկնակի max_0 = 1100; կրկնակի max_1 = 1230; կրկնակի max_2 = 1360; կրկնակի max_3 = 1490; readData (); temp_cal = calibration_T (temp_raw); press_cal = calibration_P (pres_raw); hum_cal = calibration_H (hum_raw); temp_act = (կրկնակի) temp_cal / 100.0; press_act = (կրկնակի) press_cal / 100.0; hum_act = (կրկնակի) hum_cal / 1024.0; microbit.clear (); // վերակայել LED մատրիցը /* Serial.print ("PRESS:"); Serial.println (press_act); Serial.print ("hPa"); Serial.print ("TEMP:"); Serial.print ("\ t"); Serial.println (temp_act); */ if (! digitalRead (PIN_BUTTON_B)) {// թվերի արժեքների ցուցադրումը հետաձգում է microbit.print շրջանակների չափումը («T:»); microbit.print (temp_act, 1); microbit.print ("'C"); // Serial.println (""); } այլ եթե (! digitalRead (PIN_BUTTON_A)) {microbit.print ("P:"); microbit.print (press_act, 0); microbit.print («hPa»); } else {// ճնշման արժեքների ցուցադրում որպես պիքսել կամ գծեր որոշակի մակարդակում // 5 քայլ ՝ 1490 hPa // max_n արժեքներով սահմանված շեմեր, եթե (press_act> max_3) {(N = 0); // վերին տող} այլապես եթե (press_act> max_2) {(N = 1); } else if (press_act> max_1) {(N = 2); } else if (press_act> max_0) {(N = 3); } այլ {(N = 4); // բազային տող} // Serial.println (N); // զարգացման նպատակով // microbit.print (N); // որպես տող // microbit.drawLine (N, 0, 0, 4, LED_ON); // արժեքները տեղափոխել հաջորդ տողի արժեք 4 = արժեք 3; արժեք 3 = արժեք 2; արժեք 2 = արժեք 1; արժեք 1 = արժեք 0; արժեք 0 = N; // նկարել պատկերը, սյունակ սյունակով microbit.drawPixel (0, արժեք 0, LED_ON); // որպես Pixel: սյունակ, տող: 0, 0 ձախ վերին անկյուն microbit.drawPixel (1, արժեք 1, LED_ON); microbit.drawPixel (2, արժեք 2, LED_ON); microbit.drawPixel (3, արժեք 3, LED_ON); microbit.drawPixel (4, արժեք 4, LED_ON); } // տվյալները ուղարկել սերիական մոնիտորին և սերիական գծագրիչին // Serial.println (press_act); // թվային ցուցադրման համար սերիական պորտին արժեք (ներ) ուղարկելը, ըստ ցանկության

Serial.print (press_act); // արժեքը ուղարկեք սերիական պորտին գծագրիչի համար

// գծել ցուցիչի գծեր և շտկել ցուցադրվող տիրույթը Serial.print ("\ t"); Serial.print (600); Serial.print ("\ t"); Serial.print (1100), Serial.print ("\ t"); Serial.println (1600); ուշացում (200); // Չափել վայրկյանում երեք անգամ} // -------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ - // bmp/bme280 սենսորի համար պահանջվում է հետևյալը, քանի որ այն անվավեր է readTrim () {uint8_t տվյալներ [32], i = 0; // Ուղղել 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0x88); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (BME280_ADDRESS, 24); // Fix 2014/while (Wire.available ()) {data = Wire.read (); i ++; } Wire.beginTransmission (BME280_ADDRESS); // Ավելացնել 2014/Wire.write (0xA1); // Ավելացնել 2014/Wire.endTransmission (); // Ավելացնել 2014/Wire.request. From (BME280_ADDRESS, 1); // Ավելացնել 2014/տվյալներ = Wire.read (); // Ավելացնել 2014/i ++; // Ավելացնել 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xE1); Wire.endTransmission (); Մետաղալար. Խնդրանք (BME280_ADDRESS, 7); // Fix 2014/while (Wire.available ()) {data = Wire.read (); i ++; } dig_T1 = (տվյալները [1] << 8) | տվյալներ [0]; dig_P1 = (տվյալներ [7] << 8) | տվյալներ [6]; dig_P2 = (տվյալներ [9] << 8) | տվյալներ [8]; dig_P3 = (տվյալներ [11] << 8) | տվյալներ [10]; dig_P4 = (տվյալներ [13] << 8) | տվյալներ [12]; dig_P5 = (տվյալներ [15] << 8) | տվյալներ [14]; dig_P6 = (տվյալներ [17] << 8) | տվյալներ [16]; dig_P7 = (տվյալներ [19] << 8) | տվյալներ [18]; dig_T2 = (տվյալներ [3] << 8) | տվյալներ [2]; dig_T3 = (տվյալներ [5] << 8) | տվյալներ [4]; dig_P8 = (տվյալներ [21] << 8) | տվյալներ [20]; dig_P9 = (տվյալները [23] << 8) | տվյալներ [22]; dig_H1 = տվյալներ [24]; dig_H2 = (տվյալներ [26] << 8) | տվյալներ [25]; dig_H3 = տվյալներ [27]; dig_H4 = (տվյալներ [28] << 4) | (0x0F & տվյալներ [29]); dig_H5 = (տվյալներ [30] 4) և 0x0F); // Ուղղել 2014/dig_H6 = տվյալները [31]; // Fix 2014/} void writeReg (uint8_t reg_address, uint8_t data) {Wire.beginTransmission (BME280_ADDRESS); Wire.write (reg_address); Wire.write (տվյալներ); Wire.endTransmission (); }

void readData ()

{int i = 0; uint32_t տվյալներ [8]; Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xF7); Wire.endTransmission (); Մետաղալար. Խնդրանք (BME280_ADDRESS, 8); while (Wire.available ()) {data = Wire.read (); i ++; } pres_raw = (տվյալներ [0] << 12) | (տվյալներ [1] 4); temp_raw = (տվյալներ [3] << 12) | (տվյալներ [4] 4); hum_raw = (տվյալներ [6] << 8) | տվյալներ [7]; }

ստորագրված երկար int calibration_T (ստորագրված երկար int adc_T)

{ստորագրված երկար int var1, var2, T; var1 = ((((adc_T >> 3) - ((ստորագրված երկար int) dig_T1 11; var2 = (((((adc_T >> 4) - ((ստորագրված երկար int) dig_T1)) * ((adc_T >> 4) - ((ստորագրված երկար int) dig_T1))) >> 12) * ((ստորագրված երկար int) dig_T3)) >> 14; t_fine = var1 + var2; T = (t_fine * 5 + 128) >> 8; վերադարձ T;} անստորագիր երկար int calibration_P (ստորագրված երկար int adc_P) {ստորագրված երկար int var1, var2; անստորագիր երկար int P; var1 = (((ստորագրված երկար int) t_fine) >> 1) - (ստորագրված երկար int) 64000; var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * ((ստորագրված երկար int) dig_P6); var2 = var2 + ((var1 * ((ստորագրված երկար int) dig_P5)) 2) + (((ստորագրված երկար int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + ((((ստորագրված երկար int) dig_P2) * var1) >> 1)) >> 18; var1 = ((((32768+var1))*((ստորագրված երկար int) dig_P1)) >> 15); if (var1 == 0) {վերադարձ 0; } P = (((չստորագրված երկար int) (((ստորագրված երկար int) 1048576) -adc_P)-(var2 >> 12)))*3125; եթե (P <0x80000000) {P = (P << 1) / ((անստորագիր երկար int) var1); } else {P = (P / (unsigned long int) var1) * 2; } var1 = (((ստորագրված երկար int) dig_P9) * ((ստորագրված երկար int) (((P >> 3) * (P >> 3)) >> 13))] 12; var2 = (((ստորագրված երկար int) (P >> 2)) * ((ստորագրված երկար int) dig_P8)) >> 13; P = (անստորագիր երկար int) ((ստորագրված երկար int) P + ((var1 + var2 + dig_P7) >> 4)); վերադարձ P; } unsigned long int calibration_H (ստորագրված long int adc_H) {ստորագրված երկար int v_x1; v_x1 = (t_fine - ((ստորագրված երկար int) 76800)); v_x1 = (((((adc_H << 14) -(((ստորագրված երկար int) dig_H4) 15) *) ((((((v_x1 * ((ստորագրված երկար int) dig_H6)) >> 10) * (((v_x1 * ((ստորագրված երկար int) dig_H3)) >> 11) + ((ստորագրված երկար int) 32768))) >> 10) + ((ստորագրված երկար int) 2097152)) * ((ստորագրված երկար int) dig_H2) + 8192) >> 14)); v_x1 = (v_x1 - ((((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((ստորագրված երկար int) dig_H1)) >> 4)); v_x1 = (v_x1 419430400? 419430400: v_x1); վերադարձ (անստորագիր երկար int) (v_x1 >> 12);}

Քայլ 5: MakeCode/JavaScript սցենարներ

MakeCode/JavaScript սցենարներ
MakeCode/JavaScript սցենարներ

Pimoroni- ն վերջերս թողարկել է enviro: bit- ը, որն ուղեկցվում է BMP280 ճնշման սենսորով, լույսի/գույնի ցուցիչով և MEMS խոսափողով:Նրանք նաև առաջարկում են MicroPython և MakeCode/JavaScript գրադարան:

Հետագայում օգտագործեցի ճնշման տվիչի համար MakeCode սցենար գրելու համար: Համապատասխան վեցանկյուն ֆայլը կարող է պատճենվել անմիջապես ձեր միկրո: բիթում: Կոդը ցուցադրվում է ստորև և կարող է փոփոխվել ՝ օգտագործելով MakeCode առցանց խմբագիրը:

Այն սցենարի տատանում է միկրո: bit dive-o-meter- ի համար: Լռելյայն այն ցուցադրում է ճնշման տարբերությունը որպես բարային գրաֆիկ: Կոճակը սեղմելը սահմանում է հղման ճնշումը, B կոճակը սեղմելը ցույց է տալիս hPa- ի փաստացի և հղման ճնշման տարբերությունը:

Բացի շտրիխ կոդի հիմնական տարբերակից, դուք կգտնեք նաև «X», խաչաձև և «L» տարբերակ ՝ նախատեսված ընթերցումը հեշտացնելու համար:

թող Սյունակ = 0

թող մնա = 0 let Row = 0 let Meter = 0 let Delta = 0 let ref = 0 let Is = 0 Is = 1012 basic.showLeds (` # # # # # # # #. # #. #. # #… # # # # # # `) Ref = 1180 basic.clearScreen () basic.forever (() => {basic.clearScreen () if (input.buttonIsPressed (Button. A)) {Ref = envirobit.getPressure () Basic.showLeds (` # # #. #. #. #. # # # # #. #. #. #. #. #`) Basic.pause (1000)} այլ դեպքում, եթե (input.buttonIsPressed (Button. B)) {basic.showString ("" + Delta + "hPa") basic.pause (200) basic.clearScreen ()} else {Is = envirobit.getPressure () Delta = Is - Ref Meter = Math.abs (Delta) եթե (Հաշվիչ> = 400) {Տող = 4} այլ եթե (Մետր> = 300) {Տող = 3} այլ եթե (Մետր> = 200) {Տող = 2} այլ եթե (Մետր> = 100) {Տող = 1} else {Տող = 0} մնալ = Մետր - Տող * 100 եթե (մնա> = 80) {Սյունակ = 4} այլ եթե (մնա> = 60) {Սյունակ = 3} այլ եթե (մնա> = 40) {Սյունակ = 2 } else if (մնալ> = 20) {Column = 1} else {Column = 0} for (let ColA = 0; ColA <= Column; ColA ++) {led.plot (ColA, Row)} Basic.pause (500)}})

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