Tìm đường với mô-đun la bàn GY-271 và Arduino
Trong các dự án DIY hiện đại, việc tìm thấy các cảm biến tiên tiến như gia tốc kế và từ kế được giao tiếp với các bộ vi điều khiển là điều khá phổ biến. Mặc dù bạn có thể đã sử dụng các cảm biến này trên điện thoại của mình, nhưng thật khó để tưởng tượng cách thức hoạt động của các mô-đun này, nhưng nó lại đơn giản một cách đáng ngạc nhiên.
Cảm biến từ kế la bàn GY-271 cho phép cảm biến định hướng cho các ứng dụng khác nhau. Ở đây chúng ta sẽ khám phá quá trình kết nối cảm biến GY-271 với bộ vi điều khiển Arduino, cách hiệu chỉnh nó và xem xét các vấn đề bạn có thể gặp phải khi thực hiện.
Mục Lục
Mô-đun la bàn GY-271 là gì?
Mô-đun la bàn GY-271 là một từ kế có độ nhạy cao, có thể đo từ trường theo ba chiều. Nó được sử dụng để phát hiện từ trường của Trái đất và xác định hướng hoặc hướng của thiết bị trong các ứng dụng như hệ thống định vị, người máy và máy bay không người lái. Hãy nghĩ về nó giống như một la bàn kỹ thuật số rất chính xác. Cảm biến này được trang bị với thiết kế nhỏ gọn và chắc chắn giúp bạn dễ dàng lắp đặt và sử dụng trong nhiều công trình.
Mô-đun la bàn GY-271 hoạt động như thế nào?
Mô-đun la bàn GY-271 HCM5883L chứa cảm biến từ kế 3 trục, dựa trên công nghệ điện trở từ trường dị hướng (AMR). Cảm biến đo cường độ và hướng của từ trường Trái đất bằng cách phát hiện những thay đổi về điện trở của các phần tử AMR bên trong.
Khi cảm biến tiếp xúc với từ trường, điện trở của các phần tử AMR sẽ thay đổi, tạo ra điện áp tỷ lệ thuận với cường độ và hướng của từ trường. Sau đó, bộ xử lý tín hiệu kỹ thuật số của cảm biến sẽ chuyển đổi điện áp này thành tín hiệu kỹ thuật số, tín hiệu này có thể được đọc bởi một bộ vi điều khiển. Bằng cách đo điện áp ở cả ba trục, cảm biến có thể cung cấp số đọc chính xác cao về cường độ và hướng của từ trường theo ba chiều.
Kết nối GY-271 với Arduino Uno
Việc kết nối mô-đun này với Arduino khá đơn giản. Chúng tôi cũng đã đề cập đến các mô-đun Arduino dễ sử dụng khác có thể giúp mở rộng quy mô dự án của bạn trong tương lai. Mô-đun GY-271 có tổng cộng năm chân, bao gồm VCC, GNDvà ba chân tín hiệu (SDA, SCLVà DRDY).
Bạn sẽ cần các thành phần sau:
- Mô-đun la bàn GY-271 HMC5883L
- Arduino Uno (hoặc mô hình khác)
- Dây nhảy (nam sang nam và nam sang nữ)
- Breadboard (tùy chọn)
Đầu tiên, kết nối các VCC Và GND chân của mô-đun GY-271 vào 5V Và GND chân của Arduino Uno, tương ứng.
Tiếp theo, kết nối các SDA Và SCL các chân của mô-đun vào A4 Và A5 các chân tương tự của Arduino Uno, tương ứng.
Cài đặt các thư viện cần thiết
Trước khi bạn có thể bắt đầu làm việc với mô-đun la bàn GY-271 và Arduino, bạn cần cài đặt các thư viện cần thiết để giao tiếp với cảm biến.
Thư viện đầu tiên bạn cần đưa vào bản phác thảo của mình là thư viện Wire, được sử dụng để giao tiếp I2C giữa Arduino và cảm biến. Thư viện Wire được cài đặt sẵn trong Arduino IDE nên bạn không cần tải xuống riêng. Để cài đặt cái thứ hai, HMC5883L thư viện, bạn sẽ cần làm theo các bước sau:
Mở Arduino IDE và đi đến phác thảo > Bao gồm thư viện > Quản lý thư viện.
Trong Trình quản lý thư viện, tìm kiếm HMC5883L trong thanh tìm kiếm.
chọn HMC5883L thư viện cụ thể từ Adaf nhung. Sau khi thư viện được cài đặt, bạn có thể đưa nó vào bản phác thảo Arduino của mình bằng cách truy cập phác thảo > Bao gồm thư viện > HMC5883L.
Hiểu Mã
Bạn cần viết một chương trình khởi tạo cảm biến, đọc dữ liệu của nó và tính toán cường độ và hướng từ trường của Trái đất. Toàn bộ mã có thể được tải xuống từ kho lưu trữ GitHub chính thức của chúng tôi.
Khi bắt đầu viết mã, bạn cần bao gồm các thư viện cần thiết mà bạn vừa tải xuống.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
Đừng quên gán một ID duy nhất cho cảm biến. Sử dụng dòng này để làm điều đó:
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
Trong mã thiết lập, bắt đầu màn hình nối tiếp và kiểm tra xem cảm biến có phản hồi không. Bạn có thể in thông báo ra màn hình để cập nhật trạng thái của cảm biến:
void setup(void)
{
Serial.begin(9600);
Serial.println("HMC5883 Magnetometer Test"); Serial.println("");
if(!mag.begin())
{
Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
while(1);
}
}
Trong vòng lặp, trước tiên, hãy nhận một sự kiện cảm biến mới:
sensors_event_t event;
mag.getEvent(&event);
Sau đó hiển thị số đọc của cảm biến lên màn hình nối tiếp. Đừng quên đặt tốc độ baud thành 9600.
Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print(" ");
Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print(" ");
Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print(" ");Serial.println("uT");
Giữ mô-đun để z đang trỏ “lên” và đo tiêu đề bằng X Và Y. Bằng cách này, bạn có thể tính toán hướng khi từ kế cân bằng. Dòng mã này giúp với điều đó là:
float heading = atan2(event.magnetic.y, event.magnetic.x);
một khi bạn có của bạn phần mở đầusau đó bạn phải thêm góc nghiêngđó là lỗi của từ trường ở vị trí của bạn.
float declinationAngle = 0.663;
heading += declinationAngle;
Bạn có thể dễ dàng tìm thấy góc nghiêng của khu vực địa phương của mình trên trang web Độ nghiêng từ trường. Nếu vì lý do nào đó bạn không thể tìm thấy góc nghiêng của mình, hãy nhận xét hai dòng từ mã của bạn.
Nhận xét hai dòng mã có thể dẫn đến việc đọc cảm biến bị lỗi. Cố gắng hiệu chỉnh cảm biến trước khi sử dụng.
Cuối cùng, in tiêu đề lên màn hình nối tiếp và thêm độ trễ để chờ nửa giây trước khi đọc lại.
Serial.print("Heading (degrees): ");
Serial.println(headingDegrees);
delay(500);
Từ đây, bạn có thể tùy chỉnh mã cho phù hợp với nhu cầu của dự án và thêm các tính năng bổ sung như ghi dữ liệu.
Nếu bạn muốn sử dụng thư viện Adaf nhung, chúng tôi khuyên bạn nên tìm nguồn cung ứng từ kho lưu trữ GitHub của Adaf nhung.
Đọc và giải thích dữ liệu la bàn
Dữ liệu cảm biến được hiển thị trong màn hình nối tiếp hiển thị các giá trị vectơ từ trường được đo bằng từ kế tính bằng microtesla (μT) cho các trục X, Y và Z tương ứng. Những giá trị này có thể được sử dụng để xác định hướng và cường độ của từ trường.
Giá trị tiêu đề được hiển thị theo độ cũng rất quan trọng và biểu thị hướng của cực bắc từ tính so với vị trí của cảm biến. Cách đọc này có thể được sử dụng trong các dự án cần xác định hướng của một đối tượng chuyển động, chẳng hạn như trong các hệ thống rô-bốt, điều hướng và định vị địa lý.
Hiệu chuẩn cảm biến
Nếu bạn đã cài đặt một thư viện khác cho mô-đun HMC5883L, bạn cần gỡ cài đặt hoặc xóa thư viện đó. Nếu không, bạn có thể gặp lỗi biên dịch hoặc nhìn thấy cảnh báo trong màn hình nối tiếp trong quá trình hiệu chuẩn. Chúng tôi khuyên bạn nên sử dụng thư viện của Jarzebski có sẵn trên GitHub vì thư viện này có đầy đủ tài nguyên hiệu chỉnh cần thiết cho phần này.
Đầu tiên, tải xuống tệp zip từ kho lưu trữ bằng cách nhấp vào Mã số > Tải xuống ZIP.
Tiếp theo, mở Arduino IDE và nhấp vào phác thảo > Bao gồm thư viện > Thêm thư viện.
chọn Arduino-HMC5883 zip mà bạn vừa tải xuống và Arduino IDE sau đó sẽ tự động cài đặt thư viện cho bạn.
Chạy bản phác thảo hiệu chỉnh có sẵn trong kho lưu trữ trong khi di chuyển cảm biến xung quanh trên một bề mặt phẳng khi tải lên. Các giá trị thu được từ màn hình nối tiếp là các giá trị độ lệch của cảm biến, bạn có thể sử dụng các giá trị này để sửa số đọc của mình trong khi sử dụng la bàn trong các dự án của mình.
Vấn đề bạn có thể gặp phải
Có một số lỗi mà ai đó có thể gặp phải khi kết nối mô-đun la bàn với Arduino. Dưới đây là một vài ví dụ và cách giải quyết của họ:
lỗi biên dịch: Những điều này có thể xảy ra nếu không bao gồm các thư viện cần thiết hoặc nếu có lỗi cú pháp trong mã. Để khắc phục điều này, hãy đảm bảo bạn đã cài đặt đúng thư viện và kiểm tra mã của mình xem có lỗi cú pháp nào không. Như chúng ta đã thấy nhiều lần, có thể bạn đã vô tình cài đặt nhiều thư viện HCM5883L.
Compilation error: 'Adafruit_HMC5883_Unified' does not name a type
lỗi giao tiếp: Nếu bạn không thể giao tiếp với mô-đun la bàn, hãy đảm bảo rằng bạn đã kết nối nó với đúng chân trên Arduino của mình và hệ thống dây điện của bạn là chính xác. Bạn cũng có thể cần điều chỉnh địa chỉ I2C của mô-đun trong mã của mình nếu nó khác với địa chỉ mặc định—là 0x1E.
Error using hmc5883l/testDevice (line 246) Error communicating with the HMC5883L sensor. The value read from ID_A, ID_B and ID_C registers do not match expected values.
nhiễu từ: Nếu số đọc của la bàn không ổn định hoặc dao động, có thể là do nhiễu từ trường từ các vật thể ở gần. Di chuyển mô-đun ra khỏi mọi nam châm hoặc các nguồn gây nhiễu từ trường khác để có kết quả đọc ổn định hơn.
Cải thiện dự án của bạn với mô-đun la bàn GY-271
Việc có thể sử dụng mô-đun la bàn GY-271 HCM5883L sẽ mở ra cơ hội để xây dựng các dự án DIY phức tạp hơn bằng cách sử dụng Arduino, chẳng hạn như máy bay tự hành có hướng dẫn bằng GPS và máy bay không người lái DIY. Khả năng là vô tận, đặc biệt là khi bạn thêm các cảm biến khác.