Mündəricat:

Mikrofonunuzla təzyiqi ölçün: bit: 5 addım (şəkillərlə)
Mikrofonunuzla təzyiqi ölçün: bit: 5 addım (şəkillərlə)

Video: Mikrofonunuzla təzyiqi ölçün: bit: 5 addım (şəkillərlə)

Video: Mikrofonunuzla təzyiqi ölçün: bit: 5 addım (şəkillərlə)
Video: Böyrəkdə Problem Varsa - Bu 10 Əlamət Olur 2024, Noyabr
Anonim
Mikro Təzyiqinizi Ölçün: bit
Mikro Təzyiqinizi Ölçün: bit
Mikro Təzyiqinizi Ölçün: bit
Mikro Təzyiqinizi Ölçün: bit

Aşağıdakı təlimat, BMP280 təzyiq/temperatur sensoru ilə birlikdə mikro ölçmə istifadə edərək, təzyiq ölçmələri aparmaq və Boyle qanunu nümayiş etdirmək üçün qurulması asan və ucuz bir cihazı təsvir edir.

Bu şpris/təzyiq sensoru birləşməsi əvvəlki təlimatlarımdan birində artıq təsvir edildiyi halda, micro: bit ilə birləşmə yeni imkanlar təqdim edir, məsələn. sinif otaqları layihələri üçün.

Bundan əlavə, mikro: bitin I2C idarəedici sensoru ilə birlikdə istifadə edildiyi tətbiqlərin təsvirlərinin sayı bu günə qədər olduqca məhduddur. Ümid edirəm ki, bu təlimat digər layihələr üçün bir başlanğıc nöqtəsi ola bilər.

Cihaz, kəmiyyət hava təzyiqi ölçmələri aparmağa və nəticəni mikro: bit LED massivində və ya bağlı bir kompüterdə, sonradan Arduino IDE -nin seriyalı monitorundan və ya serial plotter funksiyalarından istifadə etməklə göstərməyə imkan verir. Əlavə olaraq, şprisin pistonunu özünüz itələyəcəyiniz və ya çəkəcəyiniz və bununla da lazımi gücü hiss etdiyiniz üçün, bir rəyiniz var.

Varsayılan olaraq, ekran təzyiqi LED matrisində göstərilən səviyyə göstəricisi ilə qiymətləndirməyə imkan verir. Arduino IDE -nin serial qurucusu eyni şeyi etməyə imkan verir, lakin daha yaxşı bir qətnamə ilə (videoya baxın). Daha ətraflı həllər də mövcuddur, məsələn. emal dilində. A və ya B düymələrinə basdıqdan sonra LED matrisində təzyiq və temperaturun dəqiq ölçülmüş dəyərlərini göstərə bilərsiniz, ancaq Arduino IDE -nin serial monitoru daha sürətlidir və dəyərləri yaxın vaxtda göstərməyə imkan verir.

Cihazın qurulması üçün tələb olunan ümumi xərclər və texniki bacarıqlar olduqca aşağıdır, buna görə müəllimin nəzarəti altında gözəl bir sinif layihəsi ola bilər. Əlavə olaraq cihaz, fizikaya diqqət yetirən və ya gücün və ya çəkinin rəqəmsal bir dəyərə çevriləcəyi digər layihələrdə istifadə olunan STEM layihələri üçün bir vasitə ola bilər.

Bu prinsip çox sadə bir mikro qurmaq üçün istifadə edilmişdir: bit dive-o-meter, nə qədər dərinliyə daldığınızı ölçən bir cihaz.

Əlavə 27 May-2018:

Pimoroni, BMP280 sensoru üçün MakeCode kitabxanası hazırladığı üçün mənə burada təsvir edilən cihaz üçün istifadə ediləcək bir skript hazırlamaq imkanı verdi. Skript və müvafiq HEX faylını bu təlimatın son addımında tapa bilərsiniz. İstifadə etmək üçün HEX faylını micro: bit -ə yükləyin. Xüsusi bir proqrama ehtiyac yoxdur və skriptin redaktəsi üçün onlayn MakeCode redaktorundan istifadə edə bilərsiniz.

Addım 1: İstifadə olunan materiallar

İstifadə olunan materiallar
İstifadə olunan materiallar
İstifadə olunan materiallar
İstifadə olunan materiallar
İstifadə olunan materiallar
İstifadə olunan materiallar
İstifadə olunan materiallar
İstifadə olunan materiallar
  • Mikro: bit, Pimoroni -dən mənimkini aldı - 13.50 GBP
  • Kitronic Edge Connector for micro: bit - Pimoroni vasitəsi ilə - 5 GBP, Qeyd: Pimorini indi I2C portlarında pinləri olan pin: bit adlanan çörək bortu dostu bir kənar bağlayıcı təklif edir.
  • 2 x 2 pinli başlıq zolaqları
  • Mikro üçün batareya və ya LiPo: bit (lazım deyil, amma faydalı), açarı olan batareya kabeli (dito) - Pimoroni
  • Sensorların Edge konnektoruna qoşulması üçün keçid kabelləri
  • Sensor üçün uzun (!) tullanan kabellər, ən azından şpris, f/f və ya f/m
  • BMP280 təzyiq və temperatur sensoru - Banggood - Üç ədəd üçün 5 ABŞ dolları Bu sensorun ölçü aralığı 550 ilə 1537 hPa arasındadır.
  • Kauçuk contalı 150 ml plastik kateter şpris - Amazon və ya hardware və bağ mağazaları - təxminən 2-3 ABŞ dolları
  • isti yapışqan/isti yapışqan tapança
  • lehimleme dəmir
  • Arduino IDE quraşdırılmış bir kompüter

Addım 2: Montaj Təlimatları

Montaj Təlimatları
Montaj Təlimatları
Montaj Təlimatları
Montaj Təlimatları
Montaj Təlimatları
Montaj Təlimatları

Lehim başlıqları, BMP280 sensoru qırılmasına.

İki 2 pinli başlığı, Edge konnektorunun pin 19 və pin 20 bağlayıcılarına lehimləyin (şəklə baxın).

Mikro: biti Edge bağlayıcısına və kompüterinizə qoşun.

Adafruit micro: bit təlimatında göstərildiyi kimi proqram və mikro: bit hazırlayın. Onları diqqətlə oxuyun.

Lazımi kitabxanaları Arduino IDE -yə quraşdırın.

Sonrakı bir addımda əlavə edilmiş BMP280 skriptini açın.

Sensoru Edge konnektoruna qoşun. GND - 0V, VCC - 3V, SCL - pin 19, SDA - pin 20.

Skriptini mikro: bitə yükləyin.

Sensorun ağlabatan məlumat verdiyini yoxlayın, təzyiq dəyərləri serial monitorda göstərilən 1020 hPa ətrafında olmalıdır. Bu vəziyyətdə əvvəlcə kabelləri və əlaqələri yoxlayın, sonra proqramın quraşdırılmasını yoxlayın və düzəldin.

Mikro: biti söndürün, sensoru çıxarın.

Uzun tullanan kabelləri şprisin çıxışından keçirin. Açığı genişləndirmək lazım gələ bilər. Kabellərin zədələndiyini unutmamaq üçün diqqətli olun.

Sensoru keçid kabellərinə qoşun. Bağlantıların düzgün və yaxşı olduğunu yoxlayın. Mikro: bitə qoşulun.

Sensorun düzgün işlədiyini yoxlayın. Kabelləri diqqətlə çəkərək sensoru şprisin üstünə aparın.

Pistonu daxil edin və istədiyiniz istirahət vəziyyətindən (100 ml) bir qədər irəli aparın.

Şpris çıxışının ucuna isti yapışqan əlavə edin və pistonu bir qədər geri çəkin. Şprisin hava keçirmədiyini yoxlayın, əks halda daha çox isti yapışqan əlavə edin. İsti yapışqan sərinləsin.

Sensorun işlədiyini bir daha yoxlayın. Pistonu hərəkət etdirsəniz, seriyalı monitorda və mikro: bitin ekranındakı nömrələr dəyişməlidir.

Gerekirse, şprisin həcmini contanın yanında sıxaraq və pistonu hərəkət etdirərək tənzimləyə bilərsiniz.

Addım 3: Bir az nəzəriyyə və bəzi praktiki ölçülər

Bir az nəzəriyyə və bəzi praktiki ölçülər
Bir az nəzəriyyə və bəzi praktiki ölçülər
Bir az nəzəriyyə və bəzi praktiki ölçülər
Bir az nəzəriyyə və bəzi praktiki ölçülər

Burada təsvir olunan cihazla, sadə fizika təcrübələrində sıxılma və təzyiqin əlaqəsini nümayiş etdirə bilərsiniz. Şprisin üzərində "ml" ölçüsü olduğu üçün hətta kəmiyyət təcrübələri də yerinə yetirmək asandır.

Bunun arxasındakı nəzəriyyə: Boyle qanununa görə, [Həcm * Təzyiq] müəyyən bir temperaturda qaz üçün sabit bir dəyərdir.

Bu o deməkdir ki, verilmiş bir qaz həcmini N qat sıxsanız, yəni son həcmi orijinalın 1/N qatını təşkil edərsə, təzyiqi N qat artacaq: P0*V0 = P1*V1 = eksi t. Daha ətraflı məlumat üçün qaz qanunları haqqında Vikipediya məqaləsinə baxın. Dəniz səviyyəsində, barometrik təzyiq ümumiyyətlə 1010 hPa (hekto Paskal) aralığındadır.

Beləliklə, istirahət nöqtələrindən başlayaraq, məsələn. V0 = 100 ml və P0 = 1000 hPa, havanın təxminən 66 ml qədər sıxılması (yəni V1 = 2/3 * V0) təxminən 1500 hPa (P1 = 3/2 P0) təzyiqlə nəticələnəcək. Pistonu 125 ml (5/4 qat həcmdə) çəkmək təxminən 800 hPa (4/5 təzyiq) təzyiqlə nəticələnir. Ölçmələr belə sadə bir cihaz üçün təəccüblü dərəcədə dəqiqdir.

Cihaz, şprisdəki nisbətən az miqdarda havanı sıxmaq və ya genişləndirmək üçün nə qədər qüvvə lazım olduğunu birbaşa təsəvvür etməyə imkan verir.

Ancaq bəzi hesablamalar apara və onları eksperimental olaraq yoxlaya bilərik. Güman edək ki, havanı 1500 hPa -ya, 1000 hPa bazal barometrik təzyiqdə sıxırıq. Yəni təzyiq fərqi 500 hPa və ya 50 000 Pa -dir. Şprisim üçün pistonun diametri (d) təxminən 4 sm və ya 0,04 metrdir.

İndi pistonu bu vəziyyətdə tutmaq üçün lazım olan gücü hesablaya bilərsiniz. Verilmiş P = F/A (Təzyiq Sahəyə Bölünmüş Gücdür) və ya F = P*A çevrilmişdir. SI güc vahidi "Newton" N, uzunluğu "Metr" m üçün və 1 Pa hər kvadrat metrə 1N -dir. Dairəvi bir piston üçün, sahə şprisim üçün 0,00125 kvadrat metr verən A = ((d/2)^2)*pi istifadə edərək hesablana bilər. Belə ki

50.000 Pa * 0.00125 m^2 = 63 N.

Yer üzündə 1 N 100 qram çəki ilə əlaqədardır, buna görə 63 N 6,3 kq ağırlığa bərabərdir.

Ölçəkdən istifadə edərək bunu asanlıqla yoxlamaq olar. Təxminən 1500 hPa təzyiqə çatana qədər pistonu olan şprisi tərəziyə itələyin, sonra tərəzi oxuyun. Ya da miqyası təxminən 6-7 kq olana qədər itələyin, sonra "A" düyməsini basın və mikro: bitin LED matrisində göstərilən dəyəri oxuyun. Məlum oldu ki, yuxarıdakı hesablamalara əsaslanan qiymətləndirmə pis deyildi. 1500 hPa -dan bir qədər yuxarı bir təzyiq, bədən çəkisində təxminən 7 kq olan "çəki" ilə əlaqələndirilir (şəkillərə baxın). Bu konsepsiyanı çevirə və təzyiq ölçmələrinə əsaslanan sadə bir rəqəmsal tərəzi qurmaq üçün cihazı istifadə edə bilərsiniz.

Diqqət yetirin ki, sensorun yuxarı həddi təxminən 1540 hPa -dır, buna görə yuxarıdakı təzyiq ölçülə bilməz və sensora zərər verə bilər.

Pistonu bu və ya digər şəkildə hərəkət etdirməyə çalışan qüvvələri kəmiyyətcə ölçməyə imkan verdiyi üçün təhsil məqsədləri ilə yanaşı, bəzi real dünya tətbiqləri üçün də sistem istifadə edilə bilər. Beləliklə, pistonun üstünə qoyulan bir ağırlığı və ya pistona vurulan bir zərbə qüvvəsini ölçə bilərsiniz. Və ya müəyyən bir eşik dəyərinə çatdıqdan sonra işığı və ya siqnalı işə salan və ya səs verən bir keçid qurun. Və ya pistona tətbiq olunan qüvvənin gücündən asılı olaraq tezliyi dəyişən bir musiqi aləti qura bilərsiniz. Və ya bir oyun nəzarətçisi olaraq istifadə edin. Təsəvvürünüzdən istifadə edin və oynayın!

Addım 4: MicroPython Script

Mikro: bit üçün BMP280 skriptimi tapa bilərsiniz. Adafruit -in Microbit kitabxanası ilə birlikdə Banggood veb saytında tapdığım BMP/BME280 skriptinin bir törəməsidir. Birincisi, Banggood sensorundan istifadə etməyə imkan verir, ikincisi 5x5 LED ekranın işlənməsini asanlaşdırır. Hər ikisini hazırlayanlara təşəkkürümü bildirirəm.

Varsayılan olaraq, skript, təzyiq ölçmələrinin nəticələrini mikro: bitin 5x5 LED displeyində 5 addımda göstərir və dəyişiklikləri az gecikmə ilə görməyə imkan verir. Dəqiq dəyərlər Arduino IDE seriyalı monitorda paralel olaraq göstərilə bilər və ya daha ətraflı bir qrafik Arduino IDE seral plotterində göstərilə bilər.

A düyməsini basarsanız, ölçülmüş təzyiq dəyərləri mikro: bitin 5x5 LED massivində göstərilir. B düyməsini basarsanız, temperatur dəyərləri göstərilir. Bu dəqiq məlumatları oxumağa imkan versə də, ölçü dövrlərini əhəmiyyətli dərəcədə yavaşlatır.

Əminəm ki, tapşırıqları proqramlaşdırmaq və ssenarini yaxşılaşdırmaq üçün daha zərif yollar var. Hər hansı bir kömək xoş gəlir.

#xxx daxil edin

#Adafruit_Microbit_Matrix mikrobini daxil edin; #define BME280_ADDRESS 0x76 işarəsiz uzun int hum_raw, temp_raw, pres_raw; imzalanmış uzun 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; // ölçülmüş dəyərlər üçün qablar int value0; int dəyəri1; int dəyəri2; int dəyəri3; int dəyəri 4; // ------------------------------------------------ -------------------------------------------------- ------------------ void setup () {uint8_t osrs_t = 1; // İstilik həddindən artıq seçmə x 1 uint8_t osrs_p = 1; // Təzyiq həddindən artıq nümunə götürmə x 1 uint8_t osrs_h = 1; // Nəmlik həddindən artıq seçmə x 1 uint8_t rejimi = 3; // Normal rejim uint8_t t_sb = 5; // Tstandby 1000ms uint8_t filter = 0; // Süzün uint8_t spi3w_en = 0; // 3 telli SPI Disable uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | rejim; uint8_t config_reg = (t_sb << 5) | (filtr << 2) | spi3w_en; uint8_t ctrl_hum_reg = osrs_h; pinMode (PIN_BUTTON_A, GİRİŞ); pinMode (PIN_BUTTON_B, GİRİŞ); Serial.begin (9600); // Serial.println ("Temperatur [dərəcə C]"); // Serial.print ("\ t"); Serial.print ("Təzyiq [hPa]"); // başlıq Wire.begin (); writeReg (0xF2, ctrl_hum_reg); writeReg (0xF4, ctrl_meas_reg); writeReg (0xF5, config_reg); readTrim (); // microbit.begin (); // microbit.print ("x"); gecikmə (1000); } // ----------------------------------------------- -------------------------------------------------- -------- void loop () {double temp_act = 0.0, press_act = 0.0, hum_act = 0.0; imzalanmış uzun int temp_cal; imzasız uzun int press_cal, hum_cal; int N; // LED matris ekranı üçün eşik dəyərləri təyin edin, hPa cüt max_0 = 1100; ikiqat max_1 = 1230; ikiqat max_2 = 1360; ikiqat max_3 = 1490; readData (); temp_cal = calibration_T (temp_raw); press_cal = calibration_P (pres_raw); hum_cal = calibration_H (hum_raw); temp_act = (ikiqat) temp_cal / 100.0; press_act = (ikiqat) press_cal / 100.0; hum_act = (ikiqat) hum_cal / 1024.0; microbit.clear (); // LED matrisini sıfırlayın /* 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)) {// dəyərlərin rəqəmlərlə göstərilməsi dairələrin ölçülməsini gecikdirir microbit.print ("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"); } başqa {// təzyiq dəyərlərinin müəyyən bir səviyyədə piksel və ya xətlər şəklində göstərilməsi // 5 addım: 1490 hPa // max_n dəyərləri ilə təyin olunan eşiklər (press_act> max_3) {(N = 0); // yuxarı sıra} başqa halda (press_act> max_2) {(N = 1); } başqa əgər (press_act> max_1) {(N = 2); } başqa əgər (press_act> max_0) {(N = 3); } başqa {(N = 4); // əsas sıra} // Serial.println (N); // inkişaf məqsədləri üçün // microbit.print (N); // Line kimi // microbit.drawLine (N, 0, 0, 4, LED_ON); // dəyərləri növbəti sətir dəyərinə keçir4 = dəyər3; dəyər3 = dəyər2; dəyər2 = dəyər1; dəyər1 = dəyər 0; dəyər 0 = N; // şəkil çəkmək, sütun -sütun microbit.drawPixel (0, dəyər0, LED_ON); // Piksel olaraq: sütun, satır. 0, 0 sol yuxarı künc microbit.drawPixel (1, dəyər1, LED_ON); microbit.drawPixel (2, dəyər2, LED_ON); microbit.drawPixel (3, dəyər3, LED_ON); microbit.drawPixel (4, dəyər4, LED_ON); } // məlumatları serial monitoruna və serial plotterə göndərmək // Serial.println (press_act); // rəqəmsal ekran üçün dəyər (lər) göndərin, isteğe bağlıdır

Serial.print (press_act); // plotter üçün serial portuna dəyər göndərin

// göstərici xətləri çəkin və göstərilən aralıqları düzəldin Serial.print ("\ t"); Serial.çap (600); Serial.print ("\ t"); Serial.print (1100), Serial.print ("\ t"); Serial.println (1600); gecikmə (200); // Saniyədə üç dəfə ölçün} // ---------------------------------------- -------------------------------------------------- -------------------------------------------------- - // bmp/bme280 sensoru üçün aşağıdakılar tələb olunur, oxunmadığı kimi saxlayın readTrim () {uint8_t data [32], i = 0; // Fix 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 əlavə et (0xA1); // 2014/Wire.endTransmission () əlavə edin; // 2014/Wire.requestFrom əlavə edin (BME280_ADDRESS, 1); // Əlavə et 2014/data = Wire.read (); // 2014/i ++ əlavə edin; // 2014/Wire.beginTransmission (BME280_ADDRESS) əlavə edin; Wire.write (0xE1); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 7); // Fix 2014/while (Wire.available ()) {data = Wire.read (); i ++; } dig_T1 = (məlumatlar [1] << 8) | məlumatlar [0]; dig_P1 = (məlumat [7] << 8) | məlumatlar [6]; dig_P2 = (məlumatlar [9] << 8) | məlumatlar [8]; dig_P3 = (məlumatlar [11] << 8) | məlumatlar [10]; dig_P4 = (məlumatlar [13] << 8) | məlumatlar [12]; dig_P5 = (məlumat [15] << 8) | məlumatlar [14]; dig_P6 = (məlumatlar [17] << 8) | məlumatlar [16]; dig_P7 = (məlumatlar [19] << 8) | məlumatlar [18]; dig_T2 = (məlumat [3] << 8) | məlumatlar [2]; dig_T3 = (məlumat [5] << 8) | məlumatlar [4]; dig_P8 = (məlumatlar [21] << 8) | məlumatlar [20]; dig_P9 = (məlumatlar [23] << 8) | məlumatlar [22]; dig_H1 = məlumat [24]; dig_H2 = (məlumatlar [26] << 8) | məlumatlar [25]; dig_H3 = məlumatlar [27]; dig_H4 = (məlumatlar [28] << 4) | (0x0F & data [29]); dig_H5 = (məlumatlar [30] 4) & 0x0F); // Fix 2014/dig_H6 = data [31]; // Düzəlt 2014/} etibarsız writeReg (uint8_t reg_address, uint8_t data) {Wire.beginTransmission (BME280_ADDRESS); Wire.write (reg_address); Wire.write (məlumatlar); Wire.endTransmission (); }

etibarsız readData ()

{int i = 0; uint32_t məlumatları [8]; Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xF7); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 8); while (Wire.available ()) {data = Wire.read (); i ++; } pres_raw = (məlumat [0] << 12) | (məlumatlar [1] 4); temp_raw = (məlumat [3] << 12) | (məlumatlar [4] 4); hum_raw = (məlumat [6] << 8) | məlumatlar [7]; }

imzalanmış uzun int calibration_T (imzalanmış uzun int adc_T)

{imzalanmış uzun int var1, var2, T; var1 = (((((adc_T >> 3) - ((imzalanmış uzun int) dig_T1 11; var2 = {) - ((imzalanmış uzun int) dig_T1))) >> 12) * ((imzalanmış uzun int) dig_T3)) >> 14; t_fine = var1 + var2; T = (t_fine * 5 + 128) >> 8; qayıt T;} işarəsiz uzun int calibration_P (imzalanmış uzun int adc_P) {imzalanmış uzun int var1, var2; işarəsiz uzun int P; var1 = (((uzun imzalı uzun int) t_fine) >> 1) - (uzun int) 64000; var2 = ((((var1 >> 2) * (var1 >> 2)) >> 11) * ((imzalanmış uzun int) dig_P6); var2 = var2 + ((var1 * ((imzalanmış uzun int) dig_P5)) 2) + (((imzalanmış uzun int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + (((((uzun imzalı uzun int) dig_P2) * var1) >> 1)) >> 18; var1 = ((((32768+var1))*((uzun imzalanmış int) dig_P1)) >> 15); if (var1 == 0) {return 0; } P = (((işarəsiz uzun int) (((imzalanmış uzun int) 1048576) -adc_P)-(var2 >> 12)))*3125; əgər (P <0x80000000) {P = (P << 1) / ((işarəsiz uzun int) var1); } başqa {P = (P / (işarəsiz uzun int) var1) * 2; } var1 = (((imzalanan uzun int) dig_P9) * ((uzun imza) (((P >> 3) * (P >> 3)) >> 13))) >> 12; var2 = (((imzalanmış uzun int) (P >> 2)) * ((imzalanmış uzun int) dig_P8)) >> 13; P = (işarəsiz uzun int) ((imzalanmış uzun int) P + ((var1 + var2 + dig_P7) >> 4)); qaytarılması P; } imzasız uzun int calibration_H (imzalanmış uzun int adc_H) {imzalanmış uzun int v_x1; v_x1 = (t_fine - ((imzalanmış uzun int) 76800)); v_x1 = ((((((adc_H << 14) -(((uzun imzalanmış int) dig_H4) 15) * (((((((v_x1 * ((imzalanmış uzun int) dig_H3)) >> 11) + ((uzun imza uzun 32) + 8192) >> 14)); v_x1 = (v_x1 - ((((((v_x1 >> 15) * (v_x1 >> 15)) 7) * ((imzalanmış uzun int) dig_H1)) >> 4)); v_x1 = (v_x1 419430400? 419430400: v_x1); qaytar (işarəsiz uzun int) (v_x1 >> 12);}

Addım 5: MakeCode/JavaScript Skriptləri

MakeCode/JavaScript Skriptləri
MakeCode/JavaScript Skriptləri

Pimoroni, bu yaxınlarda BMP280 təzyiq sensoru, işıq/rəng sensoru və MEMS mikrofonu ilə birlikdə gələn: bit mühitini buraxdı. Bir MicroPython və MakeCode/JavaScript kitabxanası da təklif edirlər.

Daha sonra təzyiq sensoru üçün MakeCode skript yazmaq üçün istifadə etdim. Müvafiq hex faylı birbaşa micro: bit -ə kopyalana bilər. Kod aşağıda göstərilir və onlayn MakeCode redaktoru istifadə edərək dəyişdirilə bilər.

Mikro: bit dive-o-meter üçün skriptin bir variantıdır. Varsayılan olaraq təzyiq fərqini bir çubuq qrafiki olaraq göstərir. A düyməsinə basmaq istinad təzyiqini təyin edir, B düyməsini basmaq hPa -da faktiki və istinad təzyiqi arasındakı fərqi göstərir.

Əsas barkod versiyasına əlavə olaraq oxumağı asanlaşdırmaq üçün nəzərdə tutulmuş "X", crosshair versiyası və "L" versiyasını da tapa bilərsiniz.

Sütun = 0 olsun

qalsın = 0 edək Satır = 0 olsun Metr = 0 edək Delta = 0 edək Ref = 0 edək Is = 0 olsun = 1012 əsas.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 (Metr> = 400) {Satır = 4} başqa halda (Metr> = 300) {Satır = 3} başqa halda (Metr> = 200) {Satır = 2} başqa (Metr> = 100) {Satır = 1} else {Satır = 0} qalır = Metr - Satır * 100 əgər (qalsa> = 80) {Sütun = 4} başqa (qalsa> = 60) {Sütun = 3} başqa (qalsa> = 40) {Sütun = 2 } else if (qalın> = 20) {Sütun = 1} başqa {Sütun = 0} üçün (edək ColA = 0; ColA <= Sütun; ColA ++) {led.plot (ColA, Satır)} əsas.pauza (500)}})

Tövsiyə: