Mục lục:

Đo áp suất bằng Micro của bạn: bit: 5 Bước (có Hình ảnh)
Đo áp suất bằng Micro của bạn: bit: 5 Bước (có Hình ảnh)

Video: Đo áp suất bằng Micro của bạn: bit: 5 Bước (có Hình ảnh)

Video: Đo áp suất bằng Micro của bạn: bit: 5 Bước (có Hình ảnh)
Video: Bạn thuận não trái hay phải? Cách test suy nghĩ #shots #vitamin #braintest #fyp #xuhuong #Drvitamin 2024, Tháng bảy
Anonim
Đo áp suất bằng Micro của bạn: bit
Đo áp suất bằng Micro của bạn: bit
Đo áp suất bằng Micro của bạn: bit
Đo áp suất bằng Micro của bạn: bit

Tài liệu hướng dẫn sau đây mô tả một thiết bị dễ chế tạo và rẻ tiền để thực hiện các phép đo áp suất và chứng minh định luật Boyle, sử dụng micro: bit kết hợp với cảm biến áp suất / nhiệt độ BMP280.

Trong khi sự kết hợp ống tiêm / cảm biến áp suất này đã được mô tả trong một trong những tài liệu hướng dẫn trước đây của tôi, sự kết hợp với micro: bit đang mang lại những cơ hội mới, ví dụ: cho các dự án phòng học.

Ngoài ra, số lượng mô tả các ứng dụng trong đó micro: bit được sử dụng kết hợp với cảm biến điều khiển I2C cho đến nay còn khá hạn chế. Tôi hy vọng hướng dẫn này có thể là một điểm khởi đầu cho các dự án khác.

Thiết bị cho phép thực hiện các phép đo áp suất không khí định lượng và hiển thị kết quả trên dãy micro: bit LED hoặc trên máy tính được kết nối, để sử dụng sau này bằng cách sử dụng các chức năng màn hình nối tiếp hoặc máy vẽ nối tiếp của Arduino IDE. Ngoài ra, bạn có phản hồi xúc giác, vì bạn sẽ tự mình đẩy hoặc kéo pít-tông của ống tiêm, và do đó cảm thấy sức mạnh cần thiết.

Theo mặc định, màn hình cho phép bạn ước tính áp suất bằng chỉ báo mức hiển thị trên ma trận LED. Máy vẽ nối tiếp của Arduino IDE cho phép làm điều tương tự, nhưng với độ phân giải tốt hơn nhiều (xem video). Các giải pháp phức tạp hơn cũng có sẵn, ví dụ: bằng ngôn ngữ Xử lý. Bạn cũng có thể hiển thị các giá trị đo được chính xác của áp suất và nhiệt độ trên ma trận LED sau khi nhấn các nút A hoặc B tương ứng, nhưng màn hình nối tiếp của Arduino IDE nhanh hơn nhiều, cho phép hiển thị các giá trị trong thời gian thực.

Tổng chi phí và các kỹ năng kỹ thuật cần thiết để chế tạo thiết bị này khá thấp, vì vậy nó có thể là một dự án lớp học đẹp dưới sự giám sát của giáo viên. Ngoài ra, thiết bị có thể là một công cụ cho các dự án STEM tập trung vào vật lý hoặc được sử dụng trong các dự án khác, nơi một lực hoặc trọng lượng sẽ được chuyển đổi thành một giá trị kỹ thuật số.

Nguyên tắc được sử dụng để tạo ra một thiết bị đo vi mô rất đơn giản: bit lặn-o-o, một thiết bị để đo độ sâu bạn đang lặn.

Phụ lục ngày 27 tháng 5 năm 2018:

Vì Pimoroni đã phát triển thư viện MakeCode cho cảm biến BMP280, Điều này đã cho tôi cơ hội phát triển một tập lệnh để sử dụng cho thiết bị được mô tả ở đây. Tập lệnh và tệp HEX tương ứng có thể được tìm thấy trong bước cuối cùng của hướng dẫn này. Để sử dụng nó, chỉ cần tải tệp HEX vào micro: bit của bạn. Không cần phần mềm đặc biệt và bạn có thể sử dụng trình chỉnh sửa MakeCode trực tuyến để chỉnh sửa tập lệnh.

Bước 1: Vật liệu đã qua sử dụng

Vật liệu đã qua sử dụng
Vật liệu đã qua sử dụng
Vật liệu đã qua sử dụng
Vật liệu đã qua sử dụng
Vật liệu đã qua sử dụng
Vật liệu đã qua sử dụng
Vật liệu đã qua sử dụng
Vật liệu đã qua sử dụng
  • Một micro: bit, nhận được của tôi từ Pimoroni - 13,50 GBP
  • Đầu nối cạnh Kitronic cho micro: bit - qua Pimoroni - 5 GBP, Ghi chú: Pimorini hiện cung cấp đầu nối cạnh thân thiện với breadboard được gọi là pin: bit với các chân trên cổng I2C.
  • 2 x 2 dải tiêu đề pin
  • Pin hoặc LiPo cho micro: bit (không cần thiết, nhưng hữu ích), cáp pin có công tắc (dito) - Pimoroni
  • cáp jumper để kết nối cảm biến với đầu nối Edge
  • cáp jumper dài (!) cho cảm biến, ít nhất là dài bằng ống tiêm, f / f hoặc f / m
  • Cảm biến áp suất và nhiệt độ BMP280 - Banggood - 5 đô la Mỹ cho ba đơn vị Phạm vi đo cho cảm biến này là từ 550 đến 1537 hPa.
  • Ống tiêm ống thông bằng nhựa 150 ml có miếng đệm cao su - Amazon hoặc các cửa hàng đồ gia dụng và làm vườn - khoảng 2 - 3 đô la Mỹ
  • keo nóng / súng ngắn keo nóng
  • mỏ hàn
  • một máy tính đã cài đặt Arduino IDE

Bước 2: Hướng dẫn lắp ráp

Hướng dẫn lắp ráp
Hướng dẫn lắp ráp
Hướng dẫn lắp ráp
Hướng dẫn lắp ráp
Hướng dẫn lắp ráp
Hướng dẫn lắp ráp

Các tiêu đề hàn cho đột phá về cảm biến BMP280.

Hàn hai đầu cắm 2 chân vào đầu nối chân 19 và chân 20 của đầu nối Edge (xem hình ảnh).

Kết nối micro: bit với trình kết nối Edge và máy tính của bạn.

Chuẩn bị phần mềm và micro: bit như được mô tả trong hướng dẫn Adafruit micro: bit. Đọc kỹ chúng.

Cài đặt các thư viện bắt buộc vào Arduino IDE.

Mở tập lệnh BMP280 được đính kèm trong bước sau.

Kết nối cảm biến với đầu nối Edge. GND đến 0V, VCC đến 3V, SCL đến chân 19, SDA đến chân 20.

Tải tập lệnh lên micro: bit.

Kiểm tra để đảm bảo rằng cảm biến cung cấp dữ liệu hợp lý, các giá trị áp suất phải ở khoảng 1020 hPa, được hiển thị trên màn hình nối tiếp. Trong trường hợp, hãy kiểm tra cáp và kết nối trước, sau đó cài đặt phần mềm và sửa lại.

Tắt micro: bit, loại bỏ cảm biến.

Luồn dây cáp nhảy dài qua đầu ra của ống tiêm. Trong trường hợp bạn có thể phải nới rộng lỗ mở. Hãy cẩn thận để bỏ sót rằng các dây cáp đang bị hư hỏng.

Kết nối cảm biến với cáp jumper. Kiểm tra xem các kết nối có đúng và tốt không. Kết nối với micro: bit.

Kiểm tra xem cảm biến có chạy chính xác không. Cẩn thận kéo dây cáp, di chuyển cảm biến lên đầu ống tiêm.

Chèn pít tông và di chuyển nó ra xa hơn một chút so với vị trí nghỉ mong muốn (100 ml).

Thêm keo nóng vào phần cuối của ống tiêm và di chuyển pít-tông về phía sau một chút. Kiểm tra xem ống tiêm đã kín khí chưa, nếu không, hãy đổ thêm keo nóng. Để nguội keo nóng.

Kiểm tra lại xem cảm biến đã hoạt động chưa. Nếu bạn di chuyển pít-tông, các số trong màn hình nối tiếp và màn hình hiển thị của micro: bit sẽ thay đổi.

Nếu cần, bạn có thể điều chỉnh thể tích trong ống tiêm bằng cách bóp nó gần miếng đệm và di chuyển pít-tông.

Bước 3: Một chút lý thuyết và một số phép đo thực tế

Một chút lý thuyết và một số phép đo thực tế
Một chút lý thuyết và một số phép đo thực tế
Một chút lý thuyết và một số phép đo thực tế
Một chút lý thuyết và một số phép đo thực tế

Với thiết bị được mô tả ở đây, bạn có thể chứng minh mối tương quan của lực nén và áp suất trong các thí nghiệm vật lý đơn giản. Vì ống tiêm đi kèm với thang đo "ml" trên đó, ngay cả các thí nghiệm định lượng cũng dễ dàng thực hiện.

Lý thuyết đằng sau nó: Theo định luật Boyle, [Thể tích * Áp suất] là một giá trị không đổi đối với một chất khí ở một nhiệt độ nhất định.

Điều này có nghĩa là nếu bạn nén một thể tích khí nhất định lên N lần, tức là thể tích cuối cùng bằng 1 / N lần ban đầu, áp suất của nó sẽ tăng lên N lần, như: P0 * V0 = P1 * V1 = khuyết điểm t. Để biết thêm chi tiết, vui lòng xem bài viết trên Wikipedia về luật khí. Ở mực nước biển, áp suất khí quyển thường nằm trong khoảng 1010 hPa (hecto Pascal).

Vì vậy, bắt đầu từ các điểm nghỉ ngơi của ví dụ: V0 = 100 ml và P0 = 1000 hPa, nén không khí vào khoảng 66 ml (tức là V1 = 2/3 * V0) sẽ tạo ra áp suất khoảng 1500 hPa (P1 = 3/2 của P0). Kéo pít-tông đến 125 ml (thể tích gấp 5/4 lần) dẫn đến áp suất khoảng 800 hPa (áp suất 4/5). Các phép đo có độ chính xác đáng kinh ngạc đối với một thiết bị đơn giản như vậy.

Thiết bị này cho phép bạn có ấn tượng xúc giác trực tiếp về lực cần thiết để nén hoặc mở rộng lượng không khí tương đối nhỏ trong ống tiêm.

Nhưng chúng tôi cũng có thể thực hiện một số tính toán và kiểm tra chúng bằng thực nghiệm. Giả sử chúng ta nén không khí đến 1500 hPa, ở áp suất khí quyển cơ bản là 1000 hPa. Vì vậy, chênh lệch áp suất là 500 hPa, hoặc 50, 000 Pa. Đối với ống tiêm của tôi, đường kính (d) của pít-tông là khoảng 4 cm hoặc 0,04 mét.

Bây giờ bạn có thể tính toán lực cần thiết để giữ piston ở vị trí đó. Cho P = F / A (Áp suất là Lực chia cho Diện tích), hoặc biến đổi F = P * A. Đơn vị SI của lực là "Newton" N, đối với chiều dài "Mét" m, và 1 Pa là 1N trên mét vuông. Đối với một piston tròn, diện tích có thể được tính bằng cách sử dụng A = ((d / 2) ^ 2) * pi, mang lại 0,00125 mét vuông cho ống tiêm của tôi. Vì thế

50, 000 Pa * 0,00125 m ^ 2 = 63 N.

Trên Trái đất, 1 N tương ứng với trọng lượng 100 gr, do đó 63 N tương đương với trọng lượng 6,3 kg.

Điều này có thể được kiểm tra dễ dàng bằng cách sử dụng cân. Dùng pít-tông đẩy ống tiêm lên cân, cho đến khi đạt áp suất khoảng 1500 hPa, sau đó đọc thang đo. Hoặc nhấn cho đến khi cân hiển thị khoảng 6-7 kg, sau đó nhấn nút "A" và đọc giá trị hiển thị trên ma trận LED của micro: bit. Hóa ra, ước tính dựa trên các tính toán trên không tệ. Áp suất trên 1500 hPa một chút tương quan với "trọng lượng" hiển thị khoảng 7 kg trên cân cơ thể (xem hình ảnh). Bạn cũng có thể xoay chuyển khái niệm này và sử dụng thiết bị để xây dựng một thang đo kỹ thuật số đơn giản dựa trên các phép đo áp suất.

Xin lưu ý rằng giới hạn trên của cảm biến là khoảng 1540 hPa, vì vậy không thể đo được bất kỳ áp suất nào trên mức này và có thể làm hỏng cảm biến.

Ngoài mục đích giáo dục, người ta cũng có thể sử dụng hệ thống cho một số ứng dụng trong thế giới thực, vì nó cho phép đo lường định lượng các lực đang cố gắng di chuyển pít-tông theo cách này hay cách khác. Vì vậy, bạn có thể đo trọng lượng đặt lên pít tông hoặc lực tác động lên pít tông. Hoặc xây dựng một công tắc kích hoạt đèn hoặc còi hoặc phát âm thanh sau khi đạt đến một giá trị ngưỡng nhất định. Hoặc bạn có thể chế tạo một nhạc cụ thay đổi tần số tùy thuộc vào cường độ lực tác dụng lên pít tông. Hoặc sử dụng nó như một bộ điều khiển trò chơi. Sử dụng trí tưởng tượng của bạn và chơi!

Bước 4: Tập lệnh MicroPython

Đính kèm, bạn tìm thấy tập lệnh BMP280 của tôi cho micro: bit. Nó là một dẫn xuất của tập lệnh BMP / BME280 mà tôi đã tìm thấy ở đâu đó trên trang web Banggood, kết hợp với thư viện Microbit của Adafruit. Đầu tiên cho phép bạn sử dụng cảm biến Banggood, thứ hai đơn giản hóa việc xử lý màn hình LED 5x5. Cảm ơn của tôi gửi đến các nhà phát triển của cả hai.

Theo mặc định, tập lệnh hiển thị kết quả đo áp suất trong 5 bước trên màn hình LED 5x5 của micro: bit, cho phép xem các thay đổi với độ trễ nhỏ. Các giá trị chính xác có thể được hiển thị song song trên màn hình nối tiếp Arduino IDE hoặc một đồ thị chi tiết hơn có thể được hiển thị trên máy vẽ đồ thị nối tiếp của Arduino IDE.

Nếu bạn nhấn nút A, các giá trị áp suất đo được sẽ hiển thị trên dãy đèn LED 5x5 của micro: bit. Nếu bạn nhấn nút B, các giá trị nhiệt độ sẽ được hiển thị. Mặc dù điều này cho phép đọc dữ liệu chính xác, nhưng lại làm chậm đáng kể chu kỳ đo.

Tôi chắc chắn rằng có nhiều cách thanh lịch hơn để lập trình các nhiệm vụ và cải thiện kịch bản. Mọi sự giúp đỡ đều được hoan nghênh.

#include xxx

#include Adafruit_Microbit_Matrix microbit; #define BME280_ADDRESS 0x76 long int hum_raw, temp_raw, pres_raw; ký dài 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; // vùng chứa các giá trị đo được int value0; int giá trị1; int value2; giá trị int3; giá trị int4; // ------------------------------------------------ -------------------------------------------------- ------------------ void setup () {uint8_t osrs_t = 1; // Lấy mẫu quá nhiệt độ x 1 uint8_t osrs_p = 1; // Lấy mẫu quá áp x 1 uint8_t osrs_h = 1; // Lấy mẫu quá mức độ ẩm x 1 uint8_t mode = 3; // Chế độ bình thường uint8_t t_sb = 5; // Chuẩn 1000ms uint8_t filter = 0; // Lọc bỏ uint8_t spi3w_en = 0; // SPI 3 dây Vô hiệu hóa uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | chế độ; uint8_t config_reg = (t_sb << 5) | (bộ lọc << 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 ("Nhiệt độ [độ C]"); // Serial.print ("\ t"); Serial.print ("Áp suất [hPa]"); // tiêu đề Wire.begin (); writeReg (0xF2, ctrl_hum_reg); writeReg (0xF4, ctrl_meas_reg); writeReg (0xF5, config_reg); readTrim (); // microbit.begin (); // microbit.print ("x"); chậm trễ (1000); } // ----------------------------------------------- -------------------------------------------------- -------- void loop () {double temp_act = 0.0, press_act = 0.0, hum_act = 0.0; đã ký dài int temp_cal; unsigned long int press_cal, hum_cal; int N; // đặt giá trị ngưỡng cho màn hình ma trận LED, trong hPa double max_0 = 1100; gấp đôi max_1 = 1230; gấp đôi max_2 = 1360; gấp đôi max_3 = 1490; readData (); temp_cal = calibration_T (temp_raw); press_cal = calibration_P (pres_raw); hum_cal = hiệu chỉnh_H (hum_raw); temp_act = (double) temp_cal / 100.0; press_act = (double) press_cal / 100.0; hum_act = (gấp đôi) hum_cal / 1024.0; microbit.clear (); // thiết lập lại ma trận 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)) {// hiển thị giá trị bằng số làm chậm vòng tròn đo 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"); } else {// hiển thị giá trị áp suất dưới dạng pixel hoặc đường ở một mức nhất định // 5 bước: 1490 hPa // ngưỡng được xác định bởi giá trị max_n if (press_act> max_3) {(N = 0); // hàng trên} else if (press_act> max_2) {(N = 1); } else if (nhấn_act> max_1) {(N = 2); } else if (press_act> max_0) {(N = 3); } else {(N = 4); // hàng cơ sở} // Serial.println (N); // cho mục đích phát triển // microbit.print (N); // dưới dạng Dòng // microbit.drawLine (N, 0, 0, 4, LED_ON); // chuyển các giá trị sang dòng tiếp theo value4 = value3; value3 = value2; value2 = value1; value1 = value0; giá trị0 = N; // vẽ hình, theo cột microbit.drawPixel (0, value0, LED_ON); // dưới dạng Pixel: cột, hàng. 0, 0 góc trên bên trái microbit.drawPixel (1, value1, LED_ON); microbit.drawPixel (2, value2, LED_ON); microbit.drawPixel (3, value3, LED_ON); microbit.drawPixel (4, value4, LED_ON); } // gửi dữ liệu đến màn hình nối tiếp và máy vẽ nối tiếp // Serial.println (press_act); // gửi (các) giá trị đến cổng nối tiếp để hiển thị số, tùy chọn

Serial.print (press_act); // gửi giá trị đến cổng nối tiếp cho máy vẽ

// vẽ các đường chỉ báo và sửa phạm vi hiển thị Serial.print ("\ t"); Serial.print (600); Serial.print ("\ t"); Serial.print (1100), Serial.print ("\ t"); Serial.println (1600); chậm trễ (200); // Đo ba lần một giây} // ---------------------------------------- -------------------------------------------------- -------------------------------------------------- - // thông tin sau là bắt buộc đối với cảm biến bmp / bme280, giữ nguyên vì nó là void readTrim () {uint8_t data [32], i = 0; // Sửa lỗi 2014 / Wire.beginTransmission (BME280_ADDRESS); Wire.write (0x88); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 24); // Sửa lỗi 2014 / while (Wire.available ()) {data = Wire.read (); i ++; } Wire.beginTransmission (BME280_ADDRESS); // Thêm 2014 / Wire.write (0xA1); // Thêm 2014 / Wire.endTransmission (); // Thêm 2014 / Wire.requestFrom (BME280_ADDRESS, 1); // Thêm 2014 / data = Wire.read (); // Thêm 2014 / i ++; // Thêm 2014 / Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xE1); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 7); // Sửa lỗi 2014 / while (Wire.available ()) {data = Wire.read (); i ++; } dig_T1 = (dữ liệu [1] << 8) | dữ liệu [0]; dig_P1 = (dữ liệu [7] << 8) | dữ liệu [6]; dig_P2 = (dữ liệu [9] << 8) | dữ liệu [8]; dig_P3 = (dữ liệu [11] << 8) | dữ liệu [10]; dig_P4 = (dữ liệu [13] << 8) | dữ liệu [12]; dig_P5 = (dữ liệu [15] << 8) | dữ liệu [14]; dig_P6 = (dữ liệu [17] << 8) | dữ liệu [16]; dig_P7 = (dữ liệu [19] << 8) | dữ liệu [18]; dig_T2 = (dữ liệu [3] << 8) | dữ liệu [2]; dig_T3 = (dữ liệu [5] << 8) | dữ liệu [4]; dig_P8 = (dữ liệu [21] << 8) | dữ liệu [20]; dig_P9 = (dữ liệu [23] << 8) | dữ liệu [22]; dig_H1 = data [24]; dig_H2 = (dữ liệu [26] << 8) | dữ liệu [25]; dig_H3 = data [27]; dig_H4 = (dữ liệu [28] << 4) | (0x0F & dữ liệu [29]); dig_H5 = (dữ liệu [30] 4) & 0x0F); // Sửa lỗi 2014 / dig_H6 = data [31]; // Sửa lỗi 2014 /} void writeReg (uint8_t reg_address, uint8_t data) {Wire.beginTransmission (BME280_ADDRESS); Wire.write (reg_address); Wire.write (dữ liệu); Wire.endTransmission (); }

void readData ()

{int i = 0; dữ liệu 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 = (data [0] << 12) | (dữ liệu [1] 4); temp_raw = (data [3] << 12) | (dữ liệu [4] 4); hum_raw = (dữ liệu [6] << 8) | dữ liệu [7]; }

đã ký dài int calibration_T (ký dài int adc_T)

{ký dài int var1, var2, T; var1 = ((((adc_T >> 3) - ((int dài đã ký) dig_T1 11; var2 = (((((adc_T >> 4) - ((int dài đã ký) dig_T1)) * ((adc_T >> 4) - ((ký dài int) dig_T1))) >> 12) * ((ký dài int) dig_T3)) >> 14; t_fine = var1 + var2; T = (t_fine * 5 + 128) >> 8; return T;} unsigned long int calibration_P (sign long int adc_P) {sign long int var1, var2; unsigned long int P; var1 = (((int long đã ký) t_fine) >> 1) - (int long đã ký) 64000; var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * ((ký dài int) dig_P6); var2 = var2 + ((var1 * ((ký dài int) dig_P5)) 2) + (((ký dài int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + ((((ký dài int) dig_P2) * var1) >> 1)) >> 18; var1 = ((((32768 + var1)) * ((int dài đã ký) dig_P1)) >> 15); if (var1 == 0) {return 0; } P = (((unsigned long int) (((unsigned 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 = (((int dài đã ký) dig_P9) * ((int dài đã ký) (((P >> 3) * (P >> 3)) >> 13))) >> 12; var2 = (((int dài đã ký) (P >> 2)) * ((int dài đã ký) dig_P8)) >> 13; P = (unsigned long int) ((int dài có dấu) P + ((var1 + var2 + dig_P7) >> 4)); trả về P; } unsigned long int calibration_H (sign long int adc_H) {đã ký long int v_x1; v_x1 = (t_fine - ((long int) 76800)); v_x1 = (((((adc_H << 14) - (((int long đã ký) dig_H4) 15) * ((((((((v_x1) * ((int dài có ký) dig_H6)) >> 10) * (((v_x1 * ((int dài đã ký) dig_H3)) >> 11) + ((int dài đã ký) 32768))) >> 10) + ((int dài đã ký) 2097152)) * ((int dài đã ký) dig_H2) + 8192) >> 14)); v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((int dài đã ký) dig_H1)) >> 4)); v_x1 = (v_x1 419430400? 419430400: v_x1); return (unsigned long int) (v_x1 >> 12);}

Bước 5: MakeCode / JavaScript Scripts

MakeCode / JavaScript Scripts
MakeCode / JavaScript Scripts

Pimoroni gần đây đã phát hành enviro: bit, đi kèm với cảm biến áp suất BMP280, cảm biến ánh sáng / màu sắc và micrô MEMS. Họ cũng cung cấp một MicroPython và một thư viện MakeCode / JavaScript.

Tôi đã sử dụng sau này để viết kịch bản MakeCode cho cảm biến áp suất. Tệp hex tương ứng có thể được sao chép trực tiếp vào micro: bit của bạn. Mã được hiển thị bên dưới và có thể được sửa đổi bằng trình chỉnh sửa MakeCode trực tuyến.

Nó là một biến thể của tập lệnh cho micro: bit jump-o-meter. Theo mặc định, nó hiển thị chênh lệch áp suất dưới dạng biểu đồ thanh. Nhấn nút A đặt áp suất tham chiếu, nhấn nút B hiển thị sự khác biệt giữa áp suất thực và áp suất tham chiếu tính bằng hPa.

Ngoài phiên bản mã vạch cơ bản, bạn cũng tìm thấy phiên bản "X", crosshair và phiên bản "L", nhằm giúp việc đọc dễ dàng hơn.

để cho Cột = 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) nếu (Mét> = 400) {Hàng = 4} else if (Mét> = 300) {Hàng = 3} else if (Mét> = 200) {Hàng = 2} else if (Mét> = 100) {Hàng = 1} else {Hàng = 0} còn lại = Mét - Hàng * 100 if (còn lại> = 80) {Cột = 4} else if (còn> = 60) {Cột = 3} else if (còn> = 40) {Cột = 2 } else if (còn lại> = 20) {Column = 1} else {Column = 0} for (let ColA = 0; ColA <= Column; ColA ++) {led.plot (ColA, Row)} basic.pause (500)}})

Đề xuất: