Cảm biến la bàn số GY-271 QMC5883L

Loại: Đang cập nhật
Thương hiệu: Đang cập nhật
Tình trạng: Còn hàng
Mã sản phẩm: Đang cập nhật
Giá bán:
60.000₫

Cam kết bán hàng

  • Hàng được kiểm tra trước khi bán Hàng được kiểm tra trước khi bán
  • Giá cả hợp lý Giá cả hợp lý
  • Vận chuyển nhanh chóng Vận chuyển nhanh chóng

Danh sách khuyến mãi

  • Miễn phí giao hàng cho đơn từ 500k thanh toán trước.Miễn phí giao hàng cho đơn từ 500k thanh toán trước.

Cảm biến la bàn số 3 trục GY-271 QMC5883L

Module GY-271 dùng chip QMC5883L đo từ trường Trái Đất theo 3 trục X, Y, Z để xác định hướng Bắc – Nam với độ chính xác 1 – 2°. Giao tiếp I2C, nhỏ gọn, dùng cho robot định hướng, drone, xe tự hành, la bàn điện tử, phát hiện nam châm/vật kim loại từ tính.

Thông số kỹ thuật

Thông sốGiá trị
ChipQMC5883L (một số lô dùng HMC5883L, code bên dưới tự nhận)
Điện áp3 – 5V DC
Giao tiếpI2C, địa chỉ 0x0D (QMC5883L) / 0x1E (HMC5883L)
Dải đo±2 / ±8 Gauss
Độ phân giải16-bit
Kích thước14 × 13 mm

Sơ đồ chân

ChânChức năng
VCC / GNDNguồn 3 – 5V
SCL / SDAI2C
DRDYBáo có dữ liệu mới (không bắt buộc)

Code mẫu 1: Arduino Uno đọc từ trường và hướng la bàn

GY-271VCCGNDSCLSDA
Arduino Uno5VGNDA5A4
Nạp code nhanh

Nối dây theo bảng trên, cắm board qua USB và mở bằng Chrome hoặc Edge trên máy tính. Chương trình mẫu đã được biên dịch sẵn, không cần build.

Xem code mẫu · gy271_compass_uno.ino
// La bàn số GY-271 - Arduino Uno, Serial Monitor 9600 baud
// Tự nhận chip QMC5883L (địa chỉ 0x0D) hoặc HMC5883L (0x1E), không cần thư viện
#include <Wire.h>

uint8_t addr = 0;

bool coThietBi(uint8_t a) {
  Wire.beginTransmission(a);
  return Wire.endTransmission() == 0;
}

void ghi(uint8_t reg, uint8_t val) {
  Wire.beginTransmission(addr);
  Wire.write(reg);
  Wire.write(val);
  Wire.endTransmission();
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.println("GY-271 la ban - MShop");
  if (coThietBi(0x0D)) {
    addr = 0x0D;                     // QMC5883L
    ghi(0x0B, 0x01);                 // Chu kỳ SET/RESET
    ghi(0x09, 0x1D);                 // Liên tục, 200Hz, ±8 Gauss, OSR 512
    Serial.println("Chip: QMC5883L");
  } else if (coThietBi(0x1E)) {
    addr = 0x1E;                     // HMC5883L
    ghi(0x00, 0x70);                 // Trung bình 8 mẫu, 15Hz
    ghi(0x01, 0xA0);                 // Độ lợi
    ghi(0x02, 0x00);                 // Đo liên tục
    Serial.println("Chip: HMC5883L");
  } else {
    Serial.println("Khong tim thay la ban, kiem tra day SDA/SCL!");
    while (1) delay(1000);
  }
}

void loop() {
  int16_t x, y, z;
  Wire.beginTransmission(addr);
  Wire.write(addr == 0x0D ? 0x00 : 0x03);
  Wire.endTransmission();
  Wire.requestFrom(addr, (uint8_t)6);
  if (addr == 0x0D) {                 // QMC: X, Y, Z - byte thấp trước
    x = Wire.read() | (Wire.read() << 8);
    y = Wire.read() | (Wire.read() << 8);
    z = Wire.read() | (Wire.read() << 8);
  } else {                           // HMC: X, Z, Y - byte cao trước
    x = (Wire.read() << 8) | Wire.read();
    z = (Wire.read() << 8) | Wire.read();
    y = (Wire.read() << 8) | Wire.read();
  }

  float huong = atan2((float)y, (float)x) * 180.0 / PI;
  if (huong < 0) huong += 360;
  const char* ten[] = {"Bac", "Dong Bac", "Dong", "Dong Nam", "Nam", "Tay Nam", "Tay", "Tay Bac"};

  Serial.print("X="); Serial.print(x);
  Serial.print(" Y="); Serial.print(y);
  Serial.print(" Z="); Serial.print(z);
  Serial.print("  Huong: "); Serial.print(huong, 0);
  Serial.print(" do ("); Serial.print(ten[(int)((huong + 22.5) / 45) % 8]);
  Serial.println(")");
  delay(250);
}

Code mẫu 2: ESP32 đọc hướng la bàn

GY-271VCCGNDSCLSDA
ESP323.3VGNDGPIO22GPIO21
Nạp code nhanh

Nối dây theo bảng trên, cắm board qua USB và mở bằng Chrome hoặc Edge trên máy tính. Chương trình mẫu đã được biên dịch sẵn, không cần build.

Xem code mẫu · gy271_compass_esp32.ino
// La bàn số GY-271 - ESP32, Serial Monitor 115200 baud
// Tự nhận chip QMC5883L (địa chỉ 0x0D) hoặc HMC5883L (0x1E), không cần thư viện
#include <Wire.h>

uint8_t addr = 0;

bool coThietBi(uint8_t a) {
  Wire.beginTransmission(a);
  return Wire.endTransmission() == 0;
}

void ghi(uint8_t reg, uint8_t val) {
  Wire.beginTransmission(addr);
  Wire.write(reg);
  Wire.write(val);
  Wire.endTransmission();
}

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);
  Serial.println("GY-271 la ban - MShop");
  if (coThietBi(0x0D)) {
    addr = 0x0D;                     // QMC5883L
    ghi(0x0B, 0x01);                 // Chu kỳ SET/RESET
    ghi(0x09, 0x1D);                 // Liên tục, 200Hz, ±8 Gauss, OSR 512
    Serial.println("Chip: QMC5883L");
  } else if (coThietBi(0x1E)) {
    addr = 0x1E;                     // HMC5883L
    ghi(0x00, 0x70);                 // Trung bình 8 mẫu, 15Hz
    ghi(0x01, 0xA0);                 // Độ lợi
    ghi(0x02, 0x00);                 // Đo liên tục
    Serial.println("Chip: HMC5883L");
  } else {
    Serial.println("Khong tim thay la ban, kiem tra day SDA/SCL!");
    while (1) delay(1000);
  }
}

void loop() {
  int16_t x, y, z;
  Wire.beginTransmission(addr);
  Wire.write(addr == 0x0D ? 0x00 : 0x03);
  Wire.endTransmission();
  Wire.requestFrom(addr, (uint8_t)6);
  if (addr == 0x0D) {                 // QMC: X, Y, Z - byte thấp trước
    x = Wire.read() | (Wire.read() << 8);
    y = Wire.read() | (Wire.read() << 8);
    z = Wire.read() | (Wire.read() << 8);
  } else {                           // HMC: X, Z, Y - byte cao trước
    x = (Wire.read() << 8) | Wire.read();
    z = (Wire.read() << 8) | Wire.read();
    y = (Wire.read() << 8) | Wire.read();
  }

  float huong = atan2((float)y, (float)x) * 180.0 / PI;
  if (huong < 0) huong += 360;
  const char* ten[] = {"Bac", "Dong Bac", "Dong", "Dong Nam", "Nam", "Tay Nam", "Tay", "Tay Bac"};

  Serial.print("X="); Serial.print(x);
  Serial.print(" Y="); Serial.print(y);
  Serial.print(" Z="); Serial.print(z);
  Serial.print("  Huong: "); Serial.print(huong, 0);
  Serial.print(" do ("); Serial.print(ten[(int)((huong + 22.5) / 45) % 8]);
  Serial.println(")");
  delay(250);
}

Mẹo khi sử dụng

  • Đặt cảm biến nằm ngang, tránh xa nam châm, động cơ, loa và dây điện lớn.
  • Hướng đo được là hướng Bắc từ; ở Việt Nam độ lệch từ so với Bắc thật rất nhỏ (~ -1°).
  • Muốn chính xác hơn: quay cảm biến 1 vòng, ghi giá trị min/max mỗi trục để bù lệch (hard-iron).

Bước 1: Truy cập website và lựa chọn sản phẩm cần mua

Bước 2: Click và sản phẩm muốn mua, màn hình hiển thị ra pop up với các lựa chọn sau

Nếu bạn muốn tiếp tục mua hàng: Bấm vào phần tiếp tục mua hàng để lựa chọn thêm sản phẩm vào giỏ hàng

Nếu bạn muốn xem giỏ hàng để cập nhật sản phẩm: Bấm vào xem giỏ hàng

Nếu bạn muốn đặt hàng và thanh toán cho sản phẩm này vui lòng bấm vào: Đặt hàng và thanh toán

Bước 3: Lựa chọn thông tin tài khoản thanh toán

Nếu bạn đã có tài khoản vui lòng nhập thông tin tên đăng nhập là email và mật khẩu vào mục đã có tài khoản trên hệ thống

Nếu bạn chưa có tài khoản và muốn đăng ký tài khoản vui lòng điền các thông tin cá nhân để tiếp tục đăng ký tài khoản. Khi có tài khoản bạn sẽ dễ dàng theo dõi được đơn hàng của mình

Nếu bạn muốn mua hàng mà không cần tài khoản vui lòng nhấp chuột vào mục đặt hàng không cần tài khoản

Bước 4: Điền các thông tin của bạn để nhận đơn hàng, lựa chọn hình thức thanh toán và vận chuyển cho đơn hàng của mình

Bước 5: Xem lại thông tin đặt hàng, điền chú thích và gửi đơn hàng

Sau khi nhận được đơn hàng bạn gửi chúng tôi sẽ liên hệ bằng cách gọi điện lại để xác nhận lại đơn hàng và địa chỉ của bạn.

Trân trọng cảm ơn.

Có thể bạn thích

Sản phẩm đã xem

Thông số kỹ thuật

Cảm biến la bàn số 3 trục GY-271 QMC5883L

Module GY-271 dùng chip QMC5883L đo từ trường Trái Đất theo 3 trục X, Y, Z để xác định hướng Bắc – Nam với độ chính xác 1 – 2°. Giao tiếp I2C, nhỏ gọn, dùng cho robot định hướng, drone, xe tự hành, la bàn điện tử, phát hiện nam châm/vật kim loại từ tính.

Thông số kỹ thuật

Thông sốGiá trị
ChipQMC5883L (một số lô dùng HMC5883L, code bên dưới tự nhận)
Điện áp3 – 5V DC
Giao tiếpI2C, địa chỉ 0x0D (QMC5883L) / 0x1E (HMC5883L)
Dải đo±2 / ±8 Gauss
Độ phân giải16-bit
Kích thước14 × 13 mm

Sơ đồ chân

ChânChức năng
VCC / GNDNguồn 3 – 5V
SCL / SDAI2C
DRDYBáo có dữ liệu mới (không bắt buộc)

Code mẫu 1: Arduino Uno đọc từ trường và hướng la bàn

GY-271VCCGNDSCLSDA
Arduino Uno5VGNDA5A4
Nạp code nhanh

Nối dây theo bảng trên, cắm board qua USB và mở bằng Chrome hoặc Edge trên máy tính. Chương trình mẫu đã được biên dịch sẵn, không cần build.

Xem code mẫu · gy271_compass_uno.ino
// La bàn số GY-271 - Arduino Uno, Serial Monitor 9600 baud
// Tự nhận chip QMC5883L (địa chỉ 0x0D) hoặc HMC5883L (0x1E), không cần thư viện
#include <Wire.h>

uint8_t addr = 0;

bool coThietBi(uint8_t a) {
  Wire.beginTransmission(a);
  return Wire.endTransmission() == 0;
}

void ghi(uint8_t reg, uint8_t val) {
  Wire.beginTransmission(addr);
  Wire.write(reg);
  Wire.write(val);
  Wire.endTransmission();
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.println("GY-271 la ban - MShop");
  if (coThietBi(0x0D)) {
    addr = 0x0D;                     // QMC5883L
    ghi(0x0B, 0x01);                 // Chu kỳ SET/RESET
    ghi(0x09, 0x1D);                 // Liên tục, 200Hz, ±8 Gauss, OSR 512
    Serial.println("Chip: QMC5883L");
  } else if (coThietBi(0x1E)) {
    addr = 0x1E;                     // HMC5883L
    ghi(0x00, 0x70);                 // Trung bình 8 mẫu, 15Hz
    ghi(0x01, 0xA0);                 // Độ lợi
    ghi(0x02, 0x00);                 // Đo liên tục
    Serial.println("Chip: HMC5883L");
  } else {
    Serial.println("Khong tim thay la ban, kiem tra day SDA/SCL!");
    while (1) delay(1000);
  }
}

void loop() {
  int16_t x, y, z;
  Wire.beginTransmission(addr);
  Wire.write(addr == 0x0D ? 0x00 : 0x03);
  Wire.endTransmission();
  Wire.requestFrom(addr, (uint8_t)6);
  if (addr == 0x0D) {                 // QMC: X, Y, Z - byte thấp trước
    x = Wire.read() | (Wire.read() << 8);
    y = Wire.read() | (Wire.read() << 8);
    z = Wire.read() | (Wire.read() << 8);
  } else {                           // HMC: X, Z, Y - byte cao trước
    x = (Wire.read() << 8) | Wire.read();
    z = (Wire.read() << 8) | Wire.read();
    y = (Wire.read() << 8) | Wire.read();
  }

  float huong = atan2((float)y, (float)x) * 180.0 / PI;
  if (huong < 0) huong += 360;
  const char* ten[] = {"Bac", "Dong Bac", "Dong", "Dong Nam", "Nam", "Tay Nam", "Tay", "Tay Bac"};

  Serial.print("X="); Serial.print(x);
  Serial.print(" Y="); Serial.print(y);
  Serial.print(" Z="); Serial.print(z);
  Serial.print("  Huong: "); Serial.print(huong, 0);
  Serial.print(" do ("); Serial.print(ten[(int)((huong + 22.5) / 45) % 8]);
  Serial.println(")");
  delay(250);
}

Code mẫu 2: ESP32 đọc hướng la bàn

GY-271VCCGNDSCLSDA
ESP323.3VGNDGPIO22GPIO21
Nạp code nhanh

Nối dây theo bảng trên, cắm board qua USB và mở bằng Chrome hoặc Edge trên máy tính. Chương trình mẫu đã được biên dịch sẵn, không cần build.

Xem code mẫu · gy271_compass_esp32.ino
// La bàn số GY-271 - ESP32, Serial Monitor 115200 baud
// Tự nhận chip QMC5883L (địa chỉ 0x0D) hoặc HMC5883L (0x1E), không cần thư viện
#include <Wire.h>

uint8_t addr = 0;

bool coThietBi(uint8_t a) {
  Wire.beginTransmission(a);
  return Wire.endTransmission() == 0;
}

void ghi(uint8_t reg, uint8_t val) {
  Wire.beginTransmission(addr);
  Wire.write(reg);
  Wire.write(val);
  Wire.endTransmission();
}

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);
  Serial.println("GY-271 la ban - MShop");
  if (coThietBi(0x0D)) {
    addr = 0x0D;                     // QMC5883L
    ghi(0x0B, 0x01);                 // Chu kỳ SET/RESET
    ghi(0x09, 0x1D);                 // Liên tục, 200Hz, ±8 Gauss, OSR 512
    Serial.println("Chip: QMC5883L");
  } else if (coThietBi(0x1E)) {
    addr = 0x1E;                     // HMC5883L
    ghi(0x00, 0x70);                 // Trung bình 8 mẫu, 15Hz
    ghi(0x01, 0xA0);                 // Độ lợi
    ghi(0x02, 0x00);                 // Đo liên tục
    Serial.println("Chip: HMC5883L");
  } else {
    Serial.println("Khong tim thay la ban, kiem tra day SDA/SCL!");
    while (1) delay(1000);
  }
}

void loop() {
  int16_t x, y, z;
  Wire.beginTransmission(addr);
  Wire.write(addr == 0x0D ? 0x00 : 0x03);
  Wire.endTransmission();
  Wire.requestFrom(addr, (uint8_t)6);
  if (addr == 0x0D) {                 // QMC: X, Y, Z - byte thấp trước
    x = Wire.read() | (Wire.read() << 8);
    y = Wire.read() | (Wire.read() << 8);
    z = Wire.read() | (Wire.read() << 8);
  } else {                           // HMC: X, Z, Y - byte cao trước
    x = (Wire.read() << 8) | Wire.read();
    z = (Wire.read() << 8) | Wire.read();
    y = (Wire.read() << 8) | Wire.read();
  }

  float huong = atan2((float)y, (float)x) * 180.0 / PI;
  if (huong < 0) huong += 360;
  const char* ten[] = {"Bac", "Dong Bac", "Dong", "Dong Nam", "Nam", "Tay Nam", "Tay", "Tay Bac"};

  Serial.print("X="); Serial.print(x);
  Serial.print(" Y="); Serial.print(y);
  Serial.print(" Z="); Serial.print(z);
  Serial.print("  Huong: "); Serial.print(huong, 0);
  Serial.print(" do ("); Serial.print(ten[(int)((huong + 22.5) / 45) % 8]);
  Serial.println(")");
  delay(250);
}

Mẹo khi sử dụng

  • Đặt cảm biến nằm ngang, tránh xa nam châm, động cơ, loa và dây điện lớn.
  • Hướng đo được là hướng Bắc từ; ở Việt Nam độ lệch từ so với Bắc thật rất nhỏ (~ -1°).
  • Muốn chính xác hơn: quay cảm biến 1 vòng, ghi giá trị min/max mỗi trục để bù lệch (hard-iron).
Danh sách so sánh
Messenger