Мазмуну:

Микроңуз менен басымды өлчөңүз: бит: 5 кадам (Сүрөттөр менен)
Микроңуз менен басымды өлчөңүз: бит: 5 кадам (Сүрөттөр менен)

Video: Микроңуз менен басымды өлчөңүз: бит: 5 кадам (Сүрөттөр менен)

Video: Микроңуз менен басымды өлчөңүз: бит: 5 кадам (Сүрөттөр менен)
Video: Безымянная звезда (1 серия) (1978) фильм 2024, Июль
Anonim
Микроңуз менен басымды өлчөңүз: бит
Микроңуз менен басымды өлчөңүз: бит
Микроңуз менен басымды өлчөңүз: бит
Микроңуз менен басымды өлчөңүз: бит

Төмөнкү көрсөтмөлөрдө BMP280 басым/температура сенсору менен бирдикте микро: битти өлчөө жана Бойл мыйзамын көрсөтүү үчүн оңой жана арзан түзмөк сүрөттөлгөн.

Бул шприц/басым сенсорунун айкалышы мурунку көрсөтмөлөрүмдүн биринде сүрөттөлгөн болсо, micro: bit менен айкалышуу жаңы мүмкүнчүлүктөрдү сунуштап жатат, мис. класстык бөлмө долбоорлору үчүн.

Мындан тышкары, микро: бит I2C менен башкарылган сенсор менен айкалышта колдонулган тиркемелердин сүрөттөөлөрүнүн саны азырынча чектелүү. Бул көрсөтмө башка долбоорлор үчүн башталыш болушу мүмкүн деп үмүттөнөм.

Түзмөк аба басымынын сандык өлчөөлөрүн аткарууга жана жыйынтыгын микро: бит LED массивинде же туташкан компьютерде көрсөтүүгө мүмкүндүк берет, кийинчерээк Arduino IDEнин сериялык мониторун же сериялык плоттер функцияларын колдонот. Мындан тышкары, сизде шприцтин поршенин өзүңүз түртүп же тартып, жана ошону менен керектүү күчтү сезе тургандыгыңыз үчүн, сизде каптик пикир бар.

Демейки боюнча, дисплей LED матрицасында көрсөтүлгөн деңгээл индикатору аркылуу басымды баалоого мүмкүндүк берет. Arduino IDEнин сериялык плоттери дагы ушундай кылууга мүмкүндүк берет, бирок бир топ жакшыраак чечилиши менен (видеону караңыз). Дагы татаал чечимдер бар, мис. иштетүү тилинде. Сиз ошондой эле A же B баскычтарын баскандан кийин LED матрицасында басымдын жана температуранын так өлчөнгөн маанилерин көрсөтө аласыз, бирок Arduino IDEнин сериялык монитору реалдуу убакытта баалуулуктарды көрсөтүүгө мүмкүндүк берет.

Жалпы чыгымдар жана аппаратты жасоого керектүү техникалык көндүмдөр өтө төмөн, ошондуктан мугалимдин көзөмөлү астында жакшы класстык долбоор болушу мүмкүн. Мындан тышкары, түзмөк физикага багытталган STEM долбоорлорунун куралы болушу мүмкүн же башка долбоорлордо колдонулушу мүмкүн, анда күч же салмак санариптик мааниге айланат.

Принцип өтө жөнөкөй микро: бит сууга түшүү метрин, канчалык тереңдикке түшүп жатканыңызды өлчөөчү түзүлүштү түзүүдө колдонулган.

Кошумча 27-Май-2018:

Pimoroni BMP280 сенсору үчүн MakeCode китепканасын иштеп чыккандан кийин, бул жерде сүрөттөлгөн түзмөк үчүн колдонула турган скриптти иштеп чыгууга мүмкүнчүлүк берди. Сценарийди жана тиешелүү HEX-файлын бул нускаманын акыркы баскычында тапса болот. Аны колдонуу үчүн жөн эле HEX файлын micro: bitке жүктөңүз. Атайын программалык камсыздоонун кереги жок, жана скриптти түзөтүү үчүн онлайн MakeCode редакторун колдонсоңуз болот.

1 -кадам: колдонулган материалдар

Колдонулган материалдар
Колдонулган материалдар
Колдонулган материалдар
Колдонулган материалдар
Колдонулган материалдар
Колдонулган материалдар
Колдонулган материалдар
Колдонулган материалдар
  • Микро: бит, меникини Пиморониден алды - 13.50 GBP
  • Kitronic Edge Connector микро үчүн: бит - Pimoroni аркылуу - 5 GBP, Эскертүү: Pimorini азыр I2C портторунда казыктары бар pin: bit деп аталган панель үчүн ыңгайлуу коннекторду сунуштайт.
  • 2 x 2 пин тилкеси
  • Батарея же LiPo микро үчүн: бит (кереги жок, бирок пайдалуу), которгуч менен батарея кабели (dito) - Pimoroni
  • сенсорлорду Edge коннекторуна туташтыруу үчүн секирүүчү кабелдер
  • сенсор үчүн узун (!) секирүүчү кабелдер, жок дегенде шприцке чейин, f/f же f/m
  • BMP280 басым жана температура сенсору - Banggood - 5 бирдик үчүн 5 АКШ доллары Бул сенсордун өлчөө диапазону 550 менен 1537 hPa ортосунда.
  • Резина прокаты бар 150 мл пластикалык катетер шприци - Amazon же аппараттык жана бакча дүкөндөрү - болжол менен 2-3 АКШ доллары
  • ысык желим/ысык желим тапанча
  • кандооч
  • Arduino IDE орнотулган компьютер

2 -кадам: Ассамблея боюнча нускамалар

Монтаждоо көрсөтмөлөрү
Монтаждоо көрсөтмөлөрү
Монтаждоо көрсөтмөлөрү
Монтаждоо көрсөтмөлөрү
Монтаждоо көрсөтмөлөрү
Монтаждоо көрсөтмөлөрү

Solder аталыштары BMP280 сенсорунун үзүлүшүнө.

Edge туташтыргычынын pin 2 жана pin 20 коннекторлоруна эки 2 төөнөгүчтүн башын кошуңуз (сүрөттү караңыз).

Micro: bitти Edge коннекторуна жана компьютериңизге туташтырыңыз.

Adafruit micro: bit көрсөтмөсүндө айтылгандай программалык камсыздоону жана микро: битти даярдаңыз. Аларды жакшылап окуңуз.

Керектүү китепканаларды Arduino IDEге орнотуңуз.

Кийинки кадамда тиркелген BMP280 скриптин ачыңыз.

Сенсорду Edge коннекторуна туташтырыңыз. GND - 0V, VCC - 3V, SCL - 19, SDA - 20.

Скриптти micro: bitке жүктөңүз.

Сенсор акылга сыярлык маалымат бергенин текшериңиз, басымдын мааниси сериялык монитордо көрсөтүлгөн 1020 hPa тегерегинде болушу керек. Керек болсо, адегенде кабелдерди жана туташууларды текшериңиз, андан кийин программалык камсыздоону орнотуп, тууралаңыз.

Микро: битти өчүрүү, сенсорду алып салуу.

Узун секирүүчү кабелдерди шприцтин тешиги аркылуу өткөрүңүз. Ачыктыкты кеңейтүү керек болсо. Кабелдер бузулуп жатканын унутпоо үчүн этият болуңуз.

Сенсорду секирүүчү кабелдерге туташтырыңыз. Байланыштардын туура жана жакшы экенин текшериңиз. Микро: битке туташыңыз.

Сенсордун туура иштеп жатканын текшериңиз. Кабелдерди этияттык менен тартып, сенсорду шприцтин үстүнө жылдырыңыз.

Плунжерди салып, каалаган эс алуу абалынан бир аз ары жылдырыңыз (100 мл).

Шприцтин аягына ысык клей кошуп, поршенди бир аз артка жылдырыңыз. Шприц аба менен жабылганын текшериңиз, антпесе дагы ысык клей кошуңуз. Ысык желимди муздатып коёбуз.

Сенсор иштеп жатканын дагы бир жолу текшериңиз. Эгерде сиз поршенди жылдырсаңыз, сериялык монитордогу жана micro: bitтин дисплейиндеги сандар өзгөрүшү керек.

Керек болсо, шприцтин көлөмүн прокладкага жакын кысып, поршенди жылдырып туураласаңыз болот.

3 -кадам: Бир аз теория жана кээ бир практикалык өлчөөлөр

Бир аз теория жана кээ бир практикалык өлчөөлөр
Бир аз теория жана кээ бир практикалык өлчөөлөр
Бир аз теория жана кээ бир практикалык өлчөөлөр
Бир аз теория жана кээ бир практикалык өлчөөлөр

Бул жерде сүрөттөлгөн прибор менен физиканын жөнөкөй эксперименттеринде кысуунун жана басымдын корреляциясын көрсөтө аласыз. Шприц "мл" масштабы менен келгендиктен, ал тургай сандык эксперименттерди аткаруу оңой.

Мунун теориясы: Бойл мыйзамына ылайык, [Көлөм * Басым] - бул белгилүү бир температурада газдын туруктуу мааниси.

Бул эгер сиз берилген газдын көлөмүн N эсе кыссаңыз, башкача айтканда, акыркы көлөмү оригиналдын 1/N эсе көп болсо, анын басымы N эсе жогорулайт, демек: P0*V0 = P1*V1 = cons t. Көбүрөөк маалымат алуу үчүн, сураныч, газ мыйзамдары боюнча Википедиядагы макаланы караңыз. Деңиз деңгээлинде барометрдик басым көбүнчө 1010 гПа (гекто Паскаль) чегинде болот.

Ошентип, эс алуу пункттарынан баштап, мис. V0 = 100 мл жана P0 = 1000 гПа, болжол менен 66 млге чейин абанын кысылышы (б.а. V1 = 2/3 * V0) болжол менен 1500 гПа басымга алып келет (P0 = P1 = 3/2). Плунжерди 125 мл (5/4 эсе көлөмдө) тартуу 800 гПа (4/5 басым) басымына алып келет. Мындай жөнөкөй түзүлүш үчүн өлчөөлөр таң калыштуу тактыкта.

Түзмөк шприцке салыштырмалуу аз өлчөмдөгү абаны кысуу же кеңейтүү үчүн канча күч керектелээрин түздөн -түз хаптик элестетүүгө мүмкүндүк берет.

Бирок биз ошондой эле кээ бир эсептөөлөрдү жүргүзүп, аларды эксперименталдык түрдө текшере алабыз. Биз 1000 гПа базалык барометрдик басымда абаны 1500 гПа чейин кысабыз деп ойлойбуз. Ошентип, басымдын айырмасы 500 гПа же 50 000 Па. Менин шприцим үчүн поршендин диаметри (d) болжол менен 4 см же 0,04 метр.

Эми поршенди ошол абалда кармоо үчүн керектүү күчтү эсептей аласыз. Берилген P = F/A (Басым Force Аянтка бөлүнөт), же өзгөртүлгөн F = P*A. SI күчүнүн бирдиги "Ньютон" N, узундугу үчүн "Метр" м жана 1 Па чарчы метрге 1N. Тегерек поршень үчүн аянтты A = ((d/2)^2)*pi аркылуу эсептеп чыкса болот, бул менин шприцим үчүн 0,00125 чарчы метрди берет. Ошентип

50 000 Па * 0,00125 м^2 = 63 Н.

Жерде 1 N 100 гр салмагына байланыштуу, ошондуктан 63 N 6,3 кг салмагына барабар.

Муну таразанын жардамы менен оңой эле текшерсе болот. Плунжер менен шприцти таразага басыңыз, болжол менен 1500 гПа басымга жеткенге чейин, анан таразаны окуңуз. Же шкала болжол менен 6-7 кг көрсөтмөйүнчө басыңыз, андан кийин "А" баскычын басыңыз жана micro: bitтин LED матрицасында көрсөтүлгөн маанини окуңуз. Көрсө, жогорудагы эсептөөлөргө негизделген баа жаман болгон эмес. Бир аз басым 1500 гПа дененин шкаласы боюнча болжол менен 7 кг "салмагы" менен байланышкан (сүрөттөрдү караңыз). Сиз ошондой эле бул түшүнүктү буруп, аппаратты басымдын өлчөөсүнө негизделген жөнөкөй санариптик масштабды куруу үчүн колдоно аласыз.

Сураныч, сенсордун жогорку чеги болжол менен 1540 hPa экенин билиңиз, андыктан жогорудагы ар кандай басым өлчөнбөйт жана сенсорго зыян келтириши мүмкүн.

Билим берүү максаттарынан тышкары, системаны реалдуу дүйнөдөгү кээ бир колдонмолор үчүн да колдонсо болот, анткени ал плунжерди тигил же бул жакка жылдырууга аракет кылган күчтөрдү сандык түрдө өлчөөгө мүмкүндүк берет. Ошентип, сиз поршенге жүктөлгөн салмакты же поршенге тийген сокку күчүн өлчөй аласыз. Же жарыкты же ызылдакты иштетүүчү же белгилүү бир босого мааниге жеткенден кийин үн чыгаруучу которгучту куруңуз. Же болбосо, плунжерге колдонулуучу күчтүн күчүнө жараша жыштыгын өзгөртүүчү музыкалык аспап курсаңыз болот. Же оюн контролери катары колдонуңуз. Фантазияңызды колдонуңуз жана ойноңуз!

4 -кадам: MicroPython Script

Сиз менин BMP280 скриптиңизди микро: битти таба аласыз. Бул мен Adafruitтин Microbit китепканасы менен бирге Banggood веб -сайтынан тапкан BMP/BME280 сценарийинин туундусу. Биринчиси Banggood сенсорун колдонууга мүмкүндүк берет, экинчиси 5x5 LED дисплейинин иштешин жөнөкөйлөтөт. Экөөнүн тең иштеп чыгуучуларына ыраазычылыгымды билдирем.

Демейки боюнча, скрипт кысым өлчөөнүн жыйынтыгын микро: биттин 5x5 LED дисплейинде 5 кадам менен көрсөтөт, анча -мынча кечигүү менен өзгөрүүлөрдү көрүүгө мүмкүндүк берет. Так баалуулуктар Arduino IDE сериялык мониторунда параллелдүү түрдө көрсөтүлүшү мүмкүн, же деталдуу график Arduino IDEнин сералдык плоттери көрсөтүлүшү мүмкүн.

Эгерде сиз А кнопкасын бассаңыз, өлчөнгөн басымдын мааниси микро: биттин 5x5 LED массивинде көрсөтүлөт. B баскычын бассаңыз, температуранын мааниси көрсөтүлөт. Бул так маалыматтарды окууга мүмкүндүк берсе да, өлчөө циклдерин кыйла жайлатат.

Мен тапшырмаларды программалоонун жана сценарийди өркүндөтүүнүн алда канча саркеч жолдору бар экенине ишенем. Кандайдыр бир жардам күтөбүз.

#кошуу xxx

#Adafruit_Microbit_Matrix микробитин кошуу; #define BME280_ADDRESS 0x76 unsigned long int hum_raw, temp_raw, pres_raw; long int t_fine кол коюлган; uint16_t dig_T1; int16_t dig_T2; int16_t dig_T3; uint16_t dig_P1; int16_t dig_P2; int16_t dig_P3; int16_t dig_P4; int16_t dig_P5; int16_t dig_P6; int16_t dig_P7; int16_t dig_P8; int16_t dig_P9; int8_t dig_H1; int16_t dig_H2; int8_t dig_H3; int16_t dig_H4; int16_t dig_H5; int8_t dig_H6; // өлчөнүүчү маанилер үчүн контейнерлер int value0; int value1; int value2; int value3; int value4; // ------------------------------------------------ -------------------------------------------------- ------------------ void setup () {uint8_t osrs_t = 1; // Температуранын ашыкча тандалышы x 1 uint8_t osrs_p = 1; // басымдын ашыкча тандалышы x 1 uint8_t osrs_h = 1; // Нымдуулук oversampling x 1 uint8_t режими = 3; // Кадимки режим uint8_t t_sb = 5; // Tstandby 1000ms uint8_t чыпкасы = 0; // Чыпкалоо 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 ("Температура [градус C]"); // Serial.print ("\ t"); Serial.print ("Басым [hPa]"); // баш Wire.begin (); writeReg (0xF2, ctrl_hum_reg); writeReg (0xF4, ctrl_meas_reg); writeReg (0xF5, config_reg); readTrim (); // microbit.begin (); // microbit.print ("x"); кечигүү (1000); } // ----------------------------------------------- -------------------------------------------------- -------- void loop () {double temp_act = 0.0, press_act = 0.0, hum_act = 0.0; long int temp_cal кол коюлган; белгисиз узак int press_cal, hum_cal; int N; // LED матрицасынын дисплейи үчүн чектик маанилерди коюу, hPa кош max_0 = 1100; кош max_1 = 1230; кош max_2 = 1360; double 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)) {// маанилерди сандар менен көрсөтүү микробит.принттин айланасын өлчөөнү кечиктирет ("T:"); microbit.print (temp_act, 1); microbit.print ("'C"); // Serial.println (""); } else if (! digitalRead (PIN_BUTTON_A)) {microbit.print ("P:"); microbit.print (press_act, 0); microbit.print ("hPa"); } else {// басымдын маанилерин белгилүү бир деңгээлде пиксел же сызык катары көрсөтүү // 5 кадам: 1490 hPa // max_n баалуулуктары менен аныкталган босоголор if (press_act> max_3) {(N = 0); // жогорку сап} else if if (press_act> max_2) {(N = 1); } else if (press_act> max_1) {(N = 2); } else if (press_act> max_0) {(N = 3); } else {(N = 4); // базалык катар} // Serial.println (N); // өнүктүрүү максатында // microbit.print (N); // катары Line // microbit.drawLine (N, 0, 0, 4, LED_ON); // баалуулуктарды кийинки сапка которуу4 = value3; value3 = value2; value2 = value1; value1 = value0; value0 = N; // сүрөт тартуу, мамыча боюнча мамыча microbit.drawPixel (0, value0, LED_ON); // пиксел катары: мамыча, катар. 0, 0 сол жактын жогорку бурчу microbit.drawPixel (1, маани1, LED_ON); microbit.drawPixel (2, value2, LED_ON); microbit.drawPixel (3, value3, LED_ON); microbit.drawPixel (4, value4, 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 data [32], i = 0; // Оңдоо 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0x88); Wire.endTransmission (); Wire.requestFrom (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.requestFrom кошуу (BME280_ADDRESS, 1); // 2014/маалыматтарды кошуу = Wire.read (); // 2014/i ++ кошуу; // 2014/Wire.beginTransmission кошуу (BME280_ADDRESS); Wire.write (0xE1); Wire.endTransmission (); Wire.requestFrom (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); // Fix 2014/dig_H6 = маалыматтар [31]; // Оңдоо 2014/} жараксыз WriteReg (uint8_t reg_address, uint8_t маалыматтар) {Wire.beginTransmission (BME280_ADDRESS); Wire.write (reg_address); Wire.write (маалыматтар); Wire.endTransmission (); }

жараксыз readData ()

{int i = 0; uint32_t маалыматтары [8]; Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xF7); Wire.endTransmission (); Wire.requestFrom (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]; }

кол коюлган long int calibration_T (long int adc_T кол коюлган)

{sign long int var1, var2, T; var1 = ((((adc_T >> 3) - ((кол коюлган long int) dig_T1 11; var2 = () - ((long long int) dig_T1))) >> 12) * ((long long int) dig_T3)) >> 14; t_fine = var1 + var2; T = (t_fine * 5 + 128) >> 8; return T;} белгисиз long int calibration_P (long int adc_P кол коюлган) {кол коюлган long int var1, var2; unsigned long int P; var1 = (((long long int) t_fine) >> 1) - (long int int) 64000; var2 = ((((var1 >> 2) * (var1 >> 2)) >> 11) * ((кол коюлган long int) dig_P6); var2 = var2 + ((var1 * ((узун инт) dig_P5)) 2) + (((long long int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + (((((long long int) dig_P2) * var1) >> 1)) >> 18; var1 = ((((32768+var1))*((long int) dig_P1)) >> 15); if (var1 == 0) {return 0; } P = (((unsigned long int) (((long long int) 1048576) -adc_P)-(var2 >> 12)))*3125; if (P <0x80000000) {P = (P << 1) / (((unsigned long int) var1); } else {P = (P / (unsigned long int) var1) * 2; } var1 = (((кол коюлган long int) dig_P9) * ((кол коюлган long int) (((P >> 3) * (P >> 3)) >> 13))) >> 12; var2 = (((long long int) (P >> 2)) * ((long long int) dig_P8)) >> 13; P = (unsigned long int) ((long long int) P + ((var1 + var2 + dig_P7) >> 4)); return P; } unsigned long int calibration_H (long long int adc_H) {sign long int v_x1; v_x1 = (t_fine - ((long int) 76800))); v_x1 = ((((((adc_H << 14) -(((узак кол коюлган int) dig_H4) 15) * (((((((v_x1 * ((long long int) dig_H3)) >> 11) + ((long long int) 32768)))) 10) + ((long long int) 2097152)) * ((long long 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); return (unsigned long int) (v_x1 >> 12);}

5 -кадам: MakeCode/JavaScript скрипттери

MakeCode/JavaScript скрипттери
MakeCode/JavaScript скрипттери

Pimoroni жакында BMP280 басым сенсору, жарык/түстүү сенсор жана MEMS микрофону менен келген enviro: bit чыгарды. Алар ошондой эле MicroPython жана MakeCode/JavaScript китепканасын сунушташат.

Мен кийинчерээк басым сенсоруна MakeCode сценарийин жаздым. Тиешелүү он алтылык файлды микро: битке түз көчүрүү мүмкүн. Код төмөндө көрсөтүлгөн жана онлайн MakeCode редактору аркылуу өзгөртүлүшү мүмкүн.

Бул micro: bit dive-o-meter үчүн скрипттин бир түрү. Демейки боюнча ал басымдын айырмасын штрих -график катары көрсөтөт. А баскычын басуу шилтеме басымын белгилейт, В баскычын басуу hPaдагы реалдуу жана референс басымынын ортосундагы айырманы көрсөтөт.

Штрихкоддун негизги версиясынан тышкары сиз окууну жеңилдетүү үчүн "X", кайчылаш версиясын жана "L" версиясын таба аласыз.

Колонна = 0 болсун

let stay = 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)} else if (input.buttonIsPressed (Button. B)) {basic.showString ("" + Delta + "hPa") basic.pause (200) basic.clearScreen ()} else {Is = envirobit.getPressure () Delta = Is - Ref Meter = Math.abs (Delta) if (Метр> = 400) {Row = 4} if if (Meter> = 300) {Row = 3} else if (Meter> = 200) {Row = 2} if if (Meter> = 100) {Row = 1} else {Row = 0} stay = Meter - Row * 100 if (stay> = 80) {Column = 4} else if (stay> = 60) {Column = 3} else if (stay> = 40) {Column = 2 } else if (stay> = 20) {Column = 1} else {Column = 0} for (let ColA = 0; ColA <= Column; ColA ++) {led.plot (ColA, Row)} basic.pause (500)}})

Сунушталууда: