- 29a Bùi Xuân Phái, P.Tây Thạnh, Quận Tân Phú, TPHCM
- linhkienduchuy2018@gmail.com
- TƯ VẤN, GIẢI ĐÁP, HƯỚNG DẪN, MUA HÀNG (ZALO): 0966515049 - 0942954739
Giao miễn phí chuyển phát nhanh trong nội thành TPHCM đối với đơn hàng trên 1 triệu đồng
Giảm 5k cho đơn hàng trên 300k đồng
Giảm 10k cho đơn hàng trên 500k đồng
Giảm 15k hoặc freeship chuyển phát nhanh cho đơn hàng trên 1tr đồng
Giảm 25.000đ hoặc freeship cho đơn hàng trên 2tr đồng.
- Điện áp: 3-5V
- Giao tiếp: I2C
- Chuyển đổi dữ liệu ADC 16bit
- Độ phân giải: 5mm gauss
- Dải đo: 1.3-8 gauss
- PCB Board Size: 1.5 x 1.3cm/0.59" x 0.51"(L*W)
- Nhiệt độ làm việc: -40º - 85ºC
Dùng trong các ứng dụng xác định phương hướng từ trường, la bàn, trong robot tự hành...
SƠ ĐỒ KẾT NỐI QMC5883L VỚI ARDUINO

CÁCH TẢI THƯ VIỆN QMC5883L

Lưu ý: Hiện nay trên thị trường có rất nhiều phiên bản QMC5883L nên quý khach cần chạy chương trình I2C scanner để biết địa chỉ là gì, sau đó sẽ nạp code tương ứng.

Nếu địa chỉ I2C=0x2C thì sử dụng CODE này:
#include <Wire.h>
// QMC5883P的I2C地址
const int QMC5883P_ADDR = 0x2C;
// 控制寄存器地址
const int MODE_REG = 0x0A;
const int CONFIG_REG = 0x0B;
// 数据输出寄存器地址
const int X_LSB_REG = 0x01;
const int X_MSB_REG = 0x02;
const int Y_LSB_REG = 0x03;
const int Y_MSB_REG = 0x04;
const int Z_LSB_REG = 0x05;
const int Z_MSB_REG = 0x06;
// 状态寄存器地址
const int STATUS_REG = 0x09;
// 初始化QMC5883P
void initQMC5883P() {
Wire.begin();
// 设置为连续测量模式,数据输出速率为200Hz,量程为±8G
Wire.beginTransmission(QMC5883P_ADDR);
Wire.write(MODE_REG);
Wire.write(0xCF); // 0xCF: 连续模式, 200Hz数据输出速率
Wire.endTransmission();
Wire.beginTransmission(QMC5883P_ADDR);
Wire.write(CONFIG_REG);
Wire.write(0x08); // 0x08: 设置Set/Reset模式为开启,量程为±8G
Wire.endTransmission();
}
// 读取QMC5883P的原始数据
void readQMC5883PData(int16_t& x, int16_t& y, int16_t& z) {
Wire.beginTransmission(QMC5883P_ADDR);
Wire.write(X_LSB_REG);
Wire.endTransmission(false);
Wire.requestFrom(QMC5883P_ADDR, 6);
if (Wire.available() == 6) {
byte x_lsb = Wire.read();
byte x_msb = Wire.read();
byte y_lsb = Wire.read();
byte y_msb = Wire.read();
byte z_lsb = Wire.read();
byte z_msb = Wire.read();
x = (x_msb << 8) | x_lsb;
y = (y_msb << 8) | y_lsb;
z = (z_msb << 8) | z_lsb;
}
}
void setup() {
Serial.begin(9600);
initQMC5883P();
}
void loop() {
int16_t x, y, z;
readQMC5883PData(x, y, z);
Serial.print("X: ");
Serial.print(x);
Serial.print("\tY: ");
Serial.print(y);
Serial.print("\tZ: ");
Serial.println(z);
delay(100);
}
NẾU ĐỊA CHỈ I2C = 0X0D THÌ NẠP CODE NÀY:
/*
===============================================================================================================
QMC5883LCompass.h Library XYZ Example Sketch
Learn more at [https://github.com/mprograms/QMC5883LCompass]
This example shows how to get the XYZ values from the sensor.
===============================================================================================================
Release under the GNU General Public License v3
[https://www.gnu.org/licenses/gpl-3.0.en.html]
===============================================================================================================
*/
#include <QMC5883LCompass.h>
QMC5883LCompass compass;
void setup() {
Serial.begin(9600);
compass.init();
}
void loop() {
int x, y, z;
// Read compass values
compass.read();
// Return XYZ readings
x = compass.getX();
y = compass.getY();
z = compass.getZ();
Serial.print("X: ");
Serial.print(x);
Serial.print(" Y: ");
Serial.print(y);
Serial.print(" Z: ");
Serial.print(z);
Serial.println();
delay(250);
}
Bình luận