Mục lục:

Đo băng khí quyển Arduino / MS5611 GY63 GY86 Trình diễn: 4 bước (kèm hình ảnh)
Đo băng khí quyển Arduino / MS5611 GY63 GY86 Trình diễn: 4 bước (kèm hình ảnh)

Video: Đo băng khí quyển Arduino / MS5611 GY63 GY86 Trình diễn: 4 bước (kèm hình ảnh)

Video: Đo băng khí quyển Arduino / MS5611 GY63 GY86 Trình diễn: 4 bước (kèm hình ảnh)
Video: Lesson 96: Barometric Pressure, Temperature, Approximate Altitude Sensor BMP390 with LCD 2024, Tháng bảy
Anonim
Đo băng khí quyển Arduino / Trình diễn MS5611 GY63 GY86
Đo băng khí quyển Arduino / Trình diễn MS5611 GY63 GY86

Đây thực sự là một phong vũ biểu / máy đo độ cao nhưng bạn sẽ thấy lý do cho tiêu đề bằng cách xem video.

Cảm biến áp suất MS5611, được tìm thấy trên bảng đột phá Arduino GY63 và GY86, mang lại hiệu suất đáng kinh ngạc. Vào một ngày bình lặng, nó sẽ đo chiều cao của bạn trong khoảng 0,2m. Đây là hiệu quả đo khoảng cách từ đầu của bạn đến không gian bên ngoài và trừ nó từ khoảng cách của chân bạn đến không gian bên ngoài (bằng cách đo áp suất - đó là trọng lượng của không khí ở trên). Thiết bị ngoạn mục này có phạm vi có thể đo thoải mái chiều cao của Everest - và cũng có thể đo xuống một vài inch.

Dự án này nhằm mục đích: một dự án trường học, một ví dụ về việc sửa đổi mã Arduino và một nơi khởi đầu tốt để khám phá bằng cách sử dụng cảm biến MS5611. Có rất nhiều câu hỏi trên diễn đàn từ những người gặp khó khăn với cảm biến này. Cách tiếp cận ở đây làm cho việc sử dụng nó rất đơn giản. Sau khi thực hiện dự án này, bạn sẽ được trang bị tốt để phát triển các ứng dụng liên quan đến áp suất khác.

Mỗi cảm biến đều có hằng số hiệu chuẩn riêng cần được đọc và sử dụng để hiệu chỉnh dữ liệu. Có một thư viện có sẵn để giúp thúc đẩy những điều này. Đoạn mã hiển thị ở đây sử dụng thư viện để lấy các bài đọc, sau đó chuyển đổi chúng thành độ cao và hiển thị chúng trên một tấm chắn LCD.

Đầu tiên, chúng tôi sẽ gửi dữ liệu đến màn hình nối tiếp trên PC / máy tính xách tay để kiểm tra ban đầu. Chúng cho thấy một số tiếng ồn và vì vậy chúng tôi thêm một bộ lọc để làm mịn chúng. Sau đó, chúng tôi sẽ thêm màn hình LCD để thiết bị có thể chạy độc lập và bạn có thể thử đo chiều cao của mình - hoặc bất kỳ thứ gì khác.

Lưu ý bo mạch GY63 chỉ có cảm biến áp suất MS5611. GY86 được gọi là bảng 10 bậc tự do và cũng bao gồm một gia tốc kế 3 trục, con quay hồi chuyển 3 trục và một từ kế 3 trục với giá chỉ thêm vài đô la.

Bạn sẽ cần:

1. Arduino UNO (hoặc loại khác có sơ đồ chân chuẩn) và cáp USB của nó

2. Bảng đột phá GY63 hoặc GY86

3. 4 dây dẫn Dupont nam-nữ - hoặc dây kết nối

4. Tấm chắn bàn phím LCD Arduino

5. pin 9v và chì

6. Dải ổ cắm 2,54mm (tùy chọn nhưng được khuyến nghị)

Sự chuẩn bị

Tải xuống Arduino IDE (môi trường phát triển tích hợp) từ:

Một số thông tin kỹ thuật cần quan tâm

MS5611 mang lại hiệu suất tuyệt vời bằng cách lấy số lượng lớn các phép đo trung bình. Nó có thể thực hiện 4096 phép đo tương tự 3 byte (24bit) chỉ trong 8ms và cho giá trị trung bình. Nó phải đo cả áp suất và nhiệt độ để dữ liệu áp suất có thể được hiệu chỉnh cho nhiệt độ bên trong. Do đó, nó có thể cung cấp khoảng 60 cặp số đọc áp suất và nhiệt độ mỗi giây.

Bảng dữ liệu có tại:

Thông tin liên lạc thông qua I2C. Vì vậy, các cảm biến I2C khác có thể chia sẻ bus (như trường hợp trên bảng GY86 10DOF nơi tất cả các chip đều nằm trên I2C).

Bước 1: Nhận thư viện MS5611

Nhiều cảm biến Arduino sử dụng thư viện tiêu chuẩn đi kèm với Arduino IDE hoặc được cung cấp tệp zip có thư viện có thể dễ dàng cài đặt. Điều này có xu hướng không đúng với các cảm biến MS5611. Tuy nhiên, một tìm kiếm đã tìm thấy: https://github.com/gronat/MS5611 có thư viện cho MS5611, bao gồm cả việc thực hiện hiệu chỉnh nhiệt độ.

lựa chọn 1

Truy cập trang web ở trên, nhấp vào ‘Sao chép hoặc Tải xuống’ và chọn ‘Tải xuống ZIP’. Điều này sẽ cung cấp MS5611-master.zip đến thư mục tải xuống của bạn. Bây giờ, nếu bạn muốn, hãy chuyển nó vào một thư mục mà bạn có thể tìm thấy nó trong tương lai. Tôi sử dụng một thư mục có tên là ‘dữ liệu’ được thêm vào các thư mục Arduino của mình.

Rất tiếc, tệp.zip đã tải xuống không bao gồm bất kỳ bản phác thảo mẫu nào và sẽ rất tuyệt nếu bạn thêm thư viện và ví dụ vào Arduino IDE. Có một ví dụ tối thiểu trong tệp README.md có thể được sao chép và dán vào bản phác thảo và lưu. Đây là một cách để bắt đầu.

Lựa chọn 2

Để giúp chạy mã dễ dàng hơn trong hướng dẫn này, tôi đã thêm ví dụ tối thiểu ở trên và các ví dụ hiển thị ở đây vào thư viện và đính kèm tệp.zip bên dưới sẽ cài đặt vào Arduino IDE.

Tải xuống tệp zip bên dưới. Di chuyển nó đến một thư mục tốt hơn nếu bạn muốn.

Khởi động Arduino IDE. Nhấp vào Phác thảo> Bao gồm Thư viện> Thêm tệp zip và chọn tệp. Khởi động lại IDE. IDE bây giờ sẽ có cả thư viện được cài đặt cộng với tất cả các ví dụ được hiển thị ở đây. Kiểm tra bằng cách nhấp vào Tệp> ví dụ >> MS5611-master. Ba bản phác thảo nên được liệt kê.

Bước 2: Kết nối Cảm biến với Arduino và kiểm tra

Kết nối Cảm biến với Arduino và Kiểm tra
Kết nối Cảm biến với Arduino và Kiểm tra
Kết nối Cảm biến với Arduino và Kiểm tra
Kết nối Cảm biến với Arduino và Kiểm tra

Bảng GY63 / GY86 thường đi kèm với tiêu đề nhưng không được hàn. Vì vậy, bạn có thể lựa chọn hàn các đầu cắm tại chỗ và sử dụng các dây dẫn Dupont nam-nữ hoặc (như tôi đã quyết định) hàn các dây dẫn trực tiếp vào bảng và thêm các chân vào dây dẫn để cắm vào Arduino. Tùy chọn thứ hai sẽ tốt hơn nếu bạn nghĩ rằng bạn có thể muốn hàn bảng vào một dự án sau này. Trước đây là tốt hơn nếu bạn muốn sử dụng bảng để thử nghiệm. Các đầu dẫn không có thứ tự dễ dàng hơn nhiều so với một tiêu đề ghim.

Các kết nối yêu cầu là:

GY63 / GY86 Arduino

VCC - Nguồn 5v GND - GND Ground SCL - A5 I2C clock> SDA - A4 I2C data

Gắn bảng cảm biến vào Arduino như trên và kết nối Arduino với PC / máy tính xách tay qua dây dẫn USB của nó. Ngoài ra, hãy che cảm biến bằng một số vật liệu mờ / đen. Cảm biến nhạy cảm với ánh sáng (như trường hợp của hầu hết các loại cảm biến này).

Khởi động Arduino IDE. Nhấp chuột:

Tệp> ví dụ >> MS5611-master> MS5611data2serial.

Một phiên bản IDE mới sẽ xuất hiện cùng với bản phác thảo. Nhấp vào nút tải lên (mũi tên phải).

Tiếp theo khởi động máy vẽ nối tiếp - nhấp vào Công cụ> Máy vẽ nối tiếp và nếu cần thiết đặt baud thành 9600. Dữ liệu được gửi là áp suất trong Pascals. Sau một giây hoặc lâu hơn, nó sẽ mở rộng quy mô và nâng cao và hạ thấp cảm biến ở mức 0,3m sẽ hiển thị là hạ thấp và nâng cao dấu vết (độ cao thấp hơn là áp suất cao hơn).

Dữ liệu có một số nhiễu. Xem cốt truyện đầu tiên ở trên. Điều này có thể được làm mịn bằng cách sử dụng bộ lọc kỹ thuật số (một công cụ thực sự hữu ích).

Phương trình bộ lọc là:

value = value + K (new-value)

trong đó "giá trị" là dữ liệu được lọc và "mới" là dữ liệu được đo mới nhất. Nếu K = 1 thì không có lọc. Đối với các giá trị thấp hơn của K, dữ liệu được làm mịn với hằng số thời gian là T / K trong đó T là thời gian giữa các mẫu. Ở đây T là khoảng 17ms nên giá trị 0,1 cho hằng số thời gian là 170ms hoặc khoảng 1 / 6s.

Bộ lọc có thể được thêm vào bằng cách:

Thêm một biến cho dữ liệu được lọc trước khi thiết lập ():

float được lọc = 0;

Sau đó thêm phương trình lọc sau áp suất =…. hàng.

Lọc = lọc + 0,1 * (lọc áp suất);

Bạn nên khởi tạo giá trị đã lọc cho lần đọc đầu tiên. Vì vậy, hãy thêm câu lệnh ‘if’ xung quanh dòng bên trên để thực hiện điều này để nó trông giống như sau:

if (được lọc! = 0) {

lọc = lọc + 0,1 * (lọc áp suất); } else {lọc = áp suất; // lần đọc đầu tiên nên đặt được lọc thành đọc}

Kiểm tra ‘! =’ Là ‘không bằng nhau’. Vì vậy, nếu 'lọc' không bằng 0, phương trình lọc sẽ được thực thi nhưng nếu đúng thì nó được đặt thành đọc áp suất.

Cuối cùng, chúng ta cần thay đổi "áp suất" thành "lọc" trong câu lệnh Serial.println để chúng ta thấy giá trị được lọc.

Việc học tốt nhất đạt được bằng cách thực hiện các thay đổi ở trên theo cách thủ công. Tuy nhiên, tôi đã đưa chúng vào ví dụ MS5611data2serialWfilter. Vì vậy, nếu có vấn đề, ví dụ có thể được tải.

Bây giờ hãy tải mã lên Arduino và xem sự cải thiện. Xem biểu đồ thứ hai ở trên và lưu ý rằng tỷ lệ Y được mở rộng x2.

Hãy thử một giá trị thấp hơn cho hằng số bộ lọc, giả sử 0,02 thay vì 0,1 và xem sự khác biệt. Dữ liệu mượt mà hơn nhưng phản hồi chậm hơn. Đây là một thỏa hiệp phải được tìm kiếm khi sử dụng bộ lọc đơn giản này. Đặc tính này cũng giống như một bộ lọc RC (điện trở và điện dung) được sử dụng rộng rãi trong các mạch điện tử.

Bước 3: Làm cho nó trở thành độc lập

Bây giờ chúng ta sẽ thêm một tấm chắn Bàn phím LCD, chuyển đổi áp suất thành chiều cao tính bằng mét và hiển thị nó trên màn hình. Chúng tôi cũng sẽ thêm khả năng làm cho giá trị bằng không bằng cách nhấn nút ‘Chọn’ trên bàn phím.

Với tấm chắn LCD trên Arduino, cảm biến sẽ phải được kết nối với tấm chắn LCD. Thật không may, tấm chắn LCD thường không có ổ cắm thích hợp. Vì vậy, các tùy chọn là tạo kết nối hàn hoặc lấy một số dải ổ cắm. Dải ổ cắm có sẵn trên ebay với giá không cao hơn nhiều so với chi phí của bưu điện. Thực hiện tìm kiếm trên 'dải ổ cắm 2,54mm' và tìm những dải tương tự như dải trên Arduino. Chúng thường có độ dài 36 hoặc 40 pin. Tôi sẽ tránh những cái ghim quay vì chúng không đủ sâu cho các dây dẫn Dupont tiêu chuẩn.

Dải ổ cắm phải được cắt theo chiều dài và vết cắt phải được thực hiện ở cùng vị trí với ghim. Vì vậy, đối với dải 6 ghim - hãy loại bỏ ghim thứ 7 bằng một số kìm loại tốt, sau đó cắt tại vị trí đó bằng cách sử dụng cưa sắt nhỏ. Tôi giũa các đầu để làm cho chúng gọn gàng.

Đảm bảo không có cầu hàn khi hàn chúng lên bảng.

Với quyết định thích hợp về việc kết nối cảm biến, hãy cắm tấm chắn LCD vào Arduino và kết nối cảm biến với cùng một chân - nhưng bây giờ trên tấm chắn LCD.

Cũng chuẩn bị sẵn pin và chì. Tôi đã tạo ra chì của mình từ các bộ phận trong thùng rác của mình nhưng chúng cũng có sẵn trên ebay - bao gồm một tùy chọn tuyệt vời bao gồm hộp pin và công tắc. Tìm kiếm trên 'PP3 2.1mm chì'.

Mức tiêu thụ hiện tại là khoảng 80ma. Do đó, nếu bạn muốn chạy trong vài phút, hãy cân nhắc sử dụng pin 9v lớn hơn PP3.

Bước 4: Thêm mã cho độ cao và màn hình LCD

Image
Image

Chúng ta cần phải thực hiện thêm một chút mã hóa để chuyển đổi áp suất thành chiều cao và điều khiển màn hình.

Khi bắt đầu phác thảo, hãy thêm thư viện hiển thị và cho biết những gì các chân được sử dụng:

#bao gồm

// khởi tạo thư viện với số lượng các chân giao diện LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Tiếp theo, chúng ta cần một số biến và một hàm để đọc các nút trên bàn phím. Tất cả chúng đều được kết nối với đầu vào tương tự A0. Mỗi nút cho một hiệu điện thế khác nhau đến A0. Tìm kiếm trên ‘mã nút khiên lcd arduino’ đã tìm thấy một số mã hay tại:

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

Thêm mã này trước khi thiết lập ():

// xác định một số giá trị được sử dụng bởi bảng điều khiển và các nút

int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // đọc các nút int read_LCD_buttons () {adc_key_in = analogRead (0); // đọc giá trị từ cảm biến // các nút của tôi khi đọc được căn giữa ở các giá trị này: 0, 144, 329, 504, 741 // chúng tôi thêm khoảng 50 vào các giá trị đó và kiểm tra xem chúng tôi có đóng nếu không (adc_key_in> 1000) trả về btnNONE; // Chúng tôi đặt tùy chọn này là tùy chọn đầu tiên vì lý do tốc độ vì nó sẽ là kết quả có nhiều khả năng xảy ra nhất nếu (adc_key_in <50) return btnRIGHT; if (adc_key_in <250) return btnUP; if (adc_key_in <450) return btnDOWN; if (adc_key_in <650) trả về btnLEFT; if (adc_key_in <850) return btnSELECT; trả về btnNONE; // khi tất cả những người khác không thành công, hãy trả lại cái này…}

Độ cao thường được lấy bằng 0 tại điểm bắt đầu. Vì vậy, chúng ta cần các biến cho cả chiều cao và tham chiếu. Thêm những điều này trước khi setup () và hàm ở trên:

float mtr;

float ref = 0;

Sự chuyển đổi từ áp suất tính bằng Pascal sang mét gần như chính xác là một phép chia cho 12 ở mực nước biển. Công thức này phù hợp với hầu hết các phép đo trên mặt đất. Có nhiều công thức chính xác phù hợp hơn để chuyển đổi ở độ cao lớn. Sử dụng chúng nếu bạn định sử dụng để ghi lại độ cao của một chuyến bay khinh khí cầu.

Tham chiếu phải được đặt thành số đọc áp suất đầu tiên để chúng tôi bắt đầu ở độ cao bằng không và khi nhấn nút CHỌN. Thêm, sau mã bộ lọc và trước câu lệnh Serial.println:

if (ref == 0) {

ref = lọc / 12.0; } if (read_LCD_buttons () == btnSELECT) {ref = filter / 12.0; }

Sau đó, thêm phép tính chiều cao:

mtr = ref - đã lọc / 12.0;

Cuối cùng thay đổi câu lệnh Serial.println để gửi ‘mtr’ thay vì ‘lọc’ và thêm mã để gửi ‘mtr’ tới màn hình LCD:

Serial.println (mtr); // Gửi áp suất qua nối tiếp (UART)

lcd.setCursor (0, 1); // dòng 2 lcd.print (mtr);

Tất cả các thay đổi ở đây được bao gồm trong ví dụ MS5611data2lcd. Tải nó như trong bước 2.

Có một mod cuối cùng hữu ích. Màn hình hiển thị khó đọc khi được cập nhật 60 lần một giây. Bộ lọc của chúng tôi đang làm mịn dữ liệu với hằng số thời gian khoảng 0,8 giây. Vì vậy, cập nhật màn hình sau mỗi 0,3 giây dường như là đủ.

Vì vậy, hãy thêm bộ đếm sau tất cả các định nghĩa biến khác ở đầu phác thảo (ví dụ: sau float ref = 0;):

int i = 0;

Sau đó, thêm mã để tăng 'i' và một câu lệnh 'if' để chạy khi nó đến 20 và sau đó đặt nó trở lại 0 và di chuyển các lệnh Serial và lcd trong câu lệnh 'if' để chúng chỉ được thực thi mỗi lần đọc thứ 20:

i + = 1;

if (i> = 20) {Serial.println (mtr); // Gửi áp suất qua serial (UART) lcd.setCursor (0, 1); // dòng 2 lcd.print (mtr); i = 0; }

Tôi đã không bao gồm một ví dụ với sửa đổi cuối cùng này để khuyến khích nhập mã theo cách thủ công để hỗ trợ việc học.

Dự án này nên đưa ra một điểm khởi đầu tốt, ví dụ như cho một phong vũ biểu kỹ thuật số. Đối với những người có thể muốn xem xét việc sử dụng trong các mô hình RC - hãy tìm kiếm OpenXvario để biết mã cho phép máy đo độ cao và máy đo biến thể cho các hệ thống đo từ xa Frsky và Turnigy 9x.

Đề xuất: