Features:
- Low noise, high-accuracy 3-axis magnetic field sensing
- I2C digital communication interface (100 kHz / 400 kHz)
- High resolution 16-bit ADC output
- Selectable magnetic sensitivity ±2mG to ±8G
- Integrated data-ready interrupt pin (DRDY)
- Low current consumption (75 µA typical active mode)
- Fast acquisition time: 6 ms
- Compact design with standard 2.54mm pin spacing
- Operating temperature: -30°C to +85°C
Specifications:
Parameter |
QMC5883L |
Voltage Supply (Vs) |
2.16V ~ 3.6V |
Interface Voltage (VDDIO) |
1.65V ~ 3.6V |
Absolute Max VDD/VDDIO |
-0.3V ~ 5.4V |
Interface |
I2C |
I2C Address (R/W) |
0x0D |
I2C Rates |
100 kHz / 400 kHz |
ADC Resolution |
16 bits |
Measurement Range |
±2mG to ±8G |
Survivable Gauss |
50,000G |
Acquisition Time |
6 ms |
Active Current |
75 µA to 850 µA |
Peak Active Current |
2.6 mA |
Standby Current |
3 µA |
Operating Temp. |
-30°C to +85°C |
Working Principle:
The QMC5883L uses the Anisotropic Magnetoresistance (AMR) effect to detect magnetic fields. When a magnetic field is present, it alters the resistance of a ferrous sensing element inside the chip. This resistance change, due to Lorentz force interaction, is measured and converted into a digital signal via an onboard ADC. This allows the module to sense direction and field strength in all three axes (X, Y, Z).
Pinout:
- VCC: Power supply (3.3V to 5V)
- GND: Ground
- SCL: I2C clock line
- SDA: I2C data line
- DRDY: Data Ready output (optional)
Wiring with Arduino UNO:
- VCC → 5V
- GND → GND
- SCL → A5
- SDA → A4
Sample Arduino Code:
#include <Wire.h>
#define addr 0x1E // I2C address for QMC5883L
void setup() {
Serial.begin(9600);
Serial.println("QMC5883L Magnetometer Initialization");
Wire.begin();
Wire.beginTransmission(addr);
Wire.write(0x02); // Mode Register
Wire.write(0x00); // Continuous measurement mode
Wire.endTransmission();
}
void loop() {
int x, y, z;
// Start reading from register 3
Wire.beginTransmission(addr);
Wire.write(0x03);
Wire.endTransmission();
// Read 6 bytes of data
Wire.requestFrom(addr, 6);
if (Wire.available() >= 6) {
x = Wire.read() << 8 | Wire.read();
z = Wire.read() << 8 | Wire.read();
y = Wire.read() << 8 | Wire.read();
Serial.print("X: "); Serial.println(x);
Serial.print("Y: "); Serial.println(y);
Serial.print("Z: "); Serial.println(z);
Serial.println();
}
delay(1000);
}
Applications:
- Digital compasses
- Robotics navigation
- Orientation tracking in drones
- Magnetic field mapping
- Wearable direction-sensing devices
- Educational sensor experiments
Features:
- Low noise, high-accuracy 3-axis magnetic field sensing
- I2C digital communication interface (100 kHz / 400 kHz)
- High resolution 16-bit ADC output
- Selectable magnetic sensitivity ±2mG to ±8G
- Integrated data-ready interrupt pin (DRDY)
- Low current consumption (75 µA typical active mode)
- Fast acquisition time: 6 ms
- Compact design with standard 2.54mm pin spacing
- Operating temperature: -30°C to +85°C
Specifications:
Parameter |
QMC5883L |
Voltage Supply (Vs) |
2.16V ~ 3.6V |
Interface Voltage (VDDIO) |
1.65V ~ 3.6V |
Absolute Max VDD/VDDIO |
-0.3V ~ 5.4V |
Interface |
I2C |
I2C Address (R/W) |
0x0D |
I2C Rates |
100 kHz / 400 kHz |
ADC Resolution |
16 bits |
Measurement Range |
±2mG to ±8G |
Survivable Gauss |
50,000G |
Acquisition Time |
6 ms |
Active Current |
75 µA to 850 µA |
Peak Active Current |
2.6 mA |
Standby Current |
3 µA |
Operating Temp. |
-30°C to +85°C |
Working Principle:
The QMC5883L uses the Anisotropic Magnetoresistance (AMR) effect to detect magnetic fields. When a magnetic field is present, it alters the resistance of a ferrous sensing element inside the chip. This resistance change, due to Lorentz force interaction, is measured and converted into a digital signal via an onboard ADC. This allows the module to sense direction and field strength in all three axes (X, Y, Z).
Pinout:
- VCC: Power supply (3.3V to 5V)
- GND: Ground
- SCL: I2C clock line
- SDA: I2C data line
- DRDY: Data Ready output (optional)
Wiring with Arduino UNO:
- VCC → 5V
- GND → GND
- SCL → A5
- SDA → A4
Sample Arduino Code:
#include <Wire.h>
#define addr 0x1E // I2C address for QMC5883L
void setup() {
Serial.begin(9600);
Serial.println("QMC5883L Magnetometer Initialization");
Wire.begin();
Wire.beginTransmission(addr);
Wire.write(0x02); // Mode Register
Wire.write(0x00); // Continuous measurement mode
Wire.endTransmission();
}
void loop() {
int x, y, z;
// Start reading from register 3
Wire.beginTransmission(addr);
Wire.write(0x03);
Wire.endTransmission();
// Read 6 bytes of data
Wire.requestFrom(addr, 6);
if (Wire.available() >= 6) {
x = Wire.read() << 8 | Wire.read();
z = Wire.read() << 8 | Wire.read();
y = Wire.read() << 8 | Wire.read();
Serial.print("X: "); Serial.println(x);
Serial.print("Y: "); Serial.println(y);
Serial.print("Z: "); Serial.println(z);
Serial.println();
}
delay(1000);
}
Applications:
- Digital compasses
- Robotics navigation
- Orientation tracking in drones
- Magnetic field mapping
- Wearable direction-sensing devices
- Educational sensor experiments