Sensor Boards
An overview of available sensor boards.
- Table last updated: January 2026
- Parts marked with ✅ are supported by madflight
- Parts with 🚧 are work in progress, see Pull Requests on Github
- The "Module Price" column lists price of a breakout board (if it is cheap & easy to procure)
- Prices in USD from online platforms incl shipping
- EOL = End Of Life, NRND = Not Recommended for New Designs
IMU
| Part | Flight Controller | Module Price | Rate (Hz) | Gyro Noise (mdps/√Hz) | Acc Noise (µg/√Hz) | Notes |
|---|---|---|---|---|---|---|
| BMI055 | A----3 |
|||||
| BMI088 | A-I--3 |
|||||
| BMI160 | ABI--4 |
$2 | 3.2k gyro, 1.6k acc | 8 | 180 | |
| BMI270 ✅ | ABIM-3 |
6k gyro | 7 | 160 | Used in current commercial FC as replacement for MPU-6000/6500 | |
| BMI330 | ------ |
6.4k | 7 | 180 | ||
| ICM-20602 | A---P- |
$5 | 4 | 100 | NRND | |
| ICM-20649 | AB--P- |
17.5 | 285 | NRND | ||
| ICM-20948 🚧 | -----3 |
$9 | 15 | 230 | 9DOF, replacement of MPU-9250/9255, ICM-20649 + AK09916, Released 2018 | |
| ICM-40609-D | AB--P- |
32k gyro+acc | 4.5 | 100 | Marketed for drones, replacement of ICM-20602 and MPU-6500 | |
| ICM-42605 ✅ | ABIMP- |
8k | 3.8 | 70 | Similar to ICM-42688-P | |
| ICM-42670-P | A---P- |
$3 | 1.6k | 7 | 100 | Marketed for drones |
| ICM-42688-P ✅ | ABIMP3 |
$6 | 32k gyro | 2.8 | 70 | Used in current high performance FC |
| ICM-45605 | ABI--- |
6.4k | 3.8 | 80 | similar to ICM-45686 but with FS max 2000dps / 16G | |
| ICM-45686 ✅ | ABIMP1 |
6.4k | 3.8 | 80 | FS max 4000dps / 32G | |
| IIM-42652 | AB--P- |
32k | 3.8 | 70 | ||
| IIM-42653 ✅ | -B-MP- |
32k | 5 | 70 | FS max 4000dps / 32G | |
| LSM6DS3 | --I--- |
$2 | 7 | 180 | ||
| LSM6DSL | --I--- |
6.7k | 4 | 80 | ||
| LSM6DSM | ------ |
6.7k | 3.8 | 130 | ||
| LSM6DSO | -BI--2 |
$10 | 6.7k | 3.8 | 110 | |
| LSM6DSR | -----1 |
6.7k | 5 | 60 | ||
| LSM6DSV | -B---1 |
7.68k | 2.8 | 60 | ||
| MPU-6000 ✅ | ABIMP4 |
$2 | 8k gyro, 1k acc | Released 2011, EOL | ||
| MPU-6050 ✅ | ABIMP4 |
$2 | 8k gyro, 1k acc | I2C only, Released 2011, EOL | ||
| MPU-6500 ✅ | ABIMP4 |
$2 | 8k gyro, 4k acc | 10 | 300 | Upgraded MPU-6000, Released 2014, NRND |
| MPU-9150 ✅ | $7 | 8k gyro | 9DOF, I2C only, MPU6050 + AK8975, EOL | |||
| MPU-9250/9255✅ | $7 | 8k gyro, 4k acc, 100Hz mag | 9DOF, MPU6500 + AK8963, Released 2014, EOL. Note: many fake or relabelled MPU-6500 chips sold as MPU-9250 on the market... |
Flight Controller
A: ArduPilot
B: BetaFlight
I: INAV
M: Madflight
P: PX4
1-4: SlimeVR IMU ranking 1=best 4=worst
Magnetometer
Earth's magnetic field strength at its surface ranges from 25 to 65 μT (0.25 to 0.65 G).
| Part | Flight Controller | Module Price | Max Sampling Rate | Noise (mG/√Hz) | LSB Resolution | ADC | Full Scale | Notes |
|---|---|---|---|---|---|---|---|---|
| AK09916 🚧 | A---P |
100 Hz | 1.5mG | 16-bit | integraded in ICM-20948 | |||
| AK09918 | ----- |
120 Hz | 1.5mG | 16-bit | ±50G | |||
| AK8963 ✅ | ABIMP |
100 Hz | 1.5mG | 16-bit | integraded in MPU9250 | |||
| AK8975 ✅ | -BIM- |
100 Hz | 3mG | 13-bit | integraded in MPU9150 | |||
| BMM150 ✅ | A---P |
$7 | 300 Hz | 0.6 | 3mG | 13-bit | ±13G | NRND |
| BMM350 | A---P |
$7 | 400 Hz | 1mG | 16-bit | ±20G | ||
| HMC5883L | -BI-P |
$2 | 160 Hz | 0.7mG | 12-bit | ±1G to ±8G | chip marking "L883" | |
| HMC5983 | ----- |
$2 | 220 Hz | 0.7mG | 12-bit | ±1G to ±8G | ||
| IST8310 | ABI-P |
200 Hz | 3mG | 14-bit | ±16G | |||
| LIS2MDL | -B--P |
100 Hz | 0.7 | 1.5mG | 16-bit | ±49G | ||
| MMC5603NJ ✅ | ---M- |
1000 Hz | 0.17 | 0.06mG | 20-bit | ±30G | linearity: 0.5%FS, noise: 1.5mG @ 75Hz | |
| MMC5983MA | A---P |
$15 | 1000 Hz | 0.06 | 0.06mG | 18-bit | ±8G | linearity: 0.1%FS, noise: 0.6mG @ 100Hz |
| QMC6309 ✅ | ---M- |
1500 Hz | 0.5 | 0.25mG | 16-bit | ±8G or ±32G | linearity: 0.6%FS, noise: 7mG @ 200Hz | |
| QMC5883L ✅ | ABIMP |
$2 | 200 Hz | 0.08mG | 16-bit | ±2G or ±8G | linearity: 0.1%FS, chip marking "5883" | |
| QMC5883P ✅ | A-IMP |
1500 Hz | 0.08mG | 16-bit | ±2G to ±32G | linearity: 0.5%FS | ||
| RM3100 ✅ | A--MP |
$25 | 500 Hz | 0.02 | 0.13mG @ 150 Hz | no ADC | ±8G | linearity: 0.5% @2G, noise: 0.2mG @ 147Hz, Uses coils, not hall sensors |
Barometer
When used as altimeter: approx 12 Pa (0.12 mbar) per meter at sea level.
| Part | Flight Controller | Module Price | Relative Precision "Marketing Bla Bla" | ADC Resolution | Max Measurement Rate | RMS Noise (Pa/√Hz) | Notes |
|---|---|---|---|---|---|---|---|
| BMP180 | ----- |
$2 | |||||
| BMP280 ✅ | ABIMP |
$2 | "relative accuracy 12Pa 100cm" | 0.25Pa raw 20 bit ADC value | 26-167Hz OSR=16-1 | 0.23 (2.1Pa @ 87Hz) | 2.5x2x1mm, 8 pin, pitch 0.65mm |
| BMP388 ✅ | ABIMP |
$2 | 8Pa 66cm | 200Hz | 0.32 (3.2Pa @ 92Hz) | ||
| BMP390 ✅ | ---M- |
$3 | "relative accuracy 3Pa 25cm" | 2.6Pa 16bit OSR=1 to 0.8Pa 21bit OSR=32 | 25-200Hz OSR=32-1 | 0.21 (2.0Pa @ 92Hz) | 2x2x0.75mm, 10 pi, pitch 0.5mm |
| BMP580 / BMP581 / BMP585 ✅ | A--MP |
"Relative pressure accuracy: 6 Pa per 10kPa step" | 0.016Pa (1/64Pa) 24bit | 622 Hz | 0.022 (0.21Pa @ 87Hz) | 2x2x0.8mm, 10 pin, pitch 0.5mm | |
| DPS310 ✅ | ABIMP |
$3 | "relative accuracy 6Pa 50cm" | 0.06Pa | 128Hz | 0.06 (0.35Pa @35Hz) | 2.5x2x1 mm, 8 pin, pitch 0.65mm, EOL |
| HP203B ✅ | ---M- |
"Altitude Resolution down to 0.1 meter" | 0.01Pa 20 bit value (24bit ADC) | 8-240Hz OSR=4096-128 | 3.8×3.6×1.2 mm, 8 pin, pitch 0.9mm | ||
| ILPS22QS | ----- |
$14 | 1.5Pa 12cm | 0.025Pa | 200Hz | ||
| LPS22HB | ----P |
$6 | 10Pa 80cm | 0.025Pa | 75Hz | ||
| LPS22DF | -B--- |
$14 | 1Pa 8cm | 0.025Pa | 200Hz | ||
| MPL3115A2 | ----- |
$5 | 0.25Pa | 166Hz | 1.5 (19Pa @166Hz) | ||
| MS5607 | --I-- |
"high resolution 20cm" | 0.014Pa raw 24 bit ADC value | 120-2000Hz OSR=4096-256 | 5x3x1 mm, 8 pin, pitch 1.25mm | ||
| MS5611 ✅ | ABIMP |
$4 | "high resolution 10cm" | 0.014Pa raw 24 bit ADC value | 120-2000Hz OSR=4096-256 | 5x3x1 mm, 8 pin, pitch 1.25mm | |
| SPL06-001 | ABIMP |
$2 | 6Pa 50cm | 0.06Pa | 128Hz | 0.20 (1.2Pa @35Hz) | Registers identical to DSP310, but noisier |
The following tests were performed to get some experimental data at approximately 100Hz sample rate using the best possible pressure oversampling. Clear winner is the BMP580 with a standard deviation of less than 2 cm.
TEST RESULTS with madflight 2.1.2
with CLI calinfo stationary sampling for 3 seconds
BMP580 PRES_16X_TEMP_1X
=== Barometer - Sample rate: 85 Hz===
Altitude[m] mean:+536.401306 stdev:0.016890 min:+536.355164 max:+536.452942 n:257
Pressure[Pa] mean:+95045.796875 stdev:0.192236 min:+95045.218750 max:+95046.328125 n:257
Temperature[C] mean:+24.054352 stdev:0.010603 min:+24.028427 max:+24.079422 n:257
BMP390 PRES_2X_TEMP_1X
=== Barometer - Sample rate: 100 Hz===
Altitude[m] mean:+536.515625 stdev:0.219643 min:+535.979980 max:+537.145203 n:301
Pressure[Pa] mean:+95044.492188 stdev:2.504872 min:+95037.312500 max:+95050.609375 n:301
Temperature[C] mean:+24.873934 stdev:0.004969 min:+24.859617 max:+24.887152 n:301
BMP280 PRES_4X_TEMP_1X
=== Barometer - Sample rate: 105 Hz===
Altitude[m] mean:+526.812683 stdev:0.186374 min:+526.335693 max:+527.411072 n:315
Pressure[Pa] mean:+95155.210938 stdev:2.126955 min:+95148.382812 max:+95160.664062 n:315
Temperature[C] mean:+25.984348 stdev:0.008128 min:+25.959999 max:+26.000000 n:315
HP203B OSR=256
=== Barometer - Sample rate: 100 Hz===
Altitude[m] mean:+539.022583 stdev:1.616964 min:+533.578125 max:+543.663696 n:300
Pressure[Pa] mean:+95015.906250 stdev:18.437220 min:+94963.000000 max:+95078.000000 n:300
Temperature[C] mean:+27.717833 stdev:0.010926 min:+27.700001 max:+27.740000 n:300
Multi Sensor Modules
| Module | Module Price | DOF | Sensors |
|---|---|---|---|
| GY-85 | 9DOF | ITG3205, ADXL345, HMC5883L | |
| GY-86 | 10DOF | MPU6050, HMC5883L, MS5611 ✅ | |
| GY-87 | $4 | 10DOF | MPU6050 ✅, HMC5883L, BMP180 |
| GY-91 | $8 | 10DOF | MPU9255 ✅ (not MPU9250), BMP280 ✅ |
| GY-521 | $2 | 6DOF | MPU6050 ✅ |
| GY-912 | $11 | 10DOF | ICM20948 🚧, BMP388 ✅ |
Current Sensors
| Part | Module Price | Notes |
|---|---|---|
| INA219 | $1 | 12-bit ADC, 0-26V |
| INA226 ✅ | $1.5 | 16-bit ADC, 0-36V, 1LSB = 1.25mV; ±32A with 2.5mΩ 3W shunt, 1LSB = 1mA |
| INA228 ✅ | $5 | 20-bit ADC, 0-85V, 1LSB = 0.2mV; ±80A with 0.5mΩ 3W shunt, 1LSB = 0.16mA |
Radar / Lidar / Ultrasonic Sensors
| Part | Module Price | Manufacturer | Max Range | Resolution | Sample Rate | Notes |
|---|---|---|---|---|---|---|
| DTS6012M ✅ | $15 | Senkylaser | 20m (12m in full sun) | 1mm (accuracy: 6cm, 1%) | 250Hz (default 100Hz) | Lidar with UART and I2C interface, 1.35 gram, 330 mW. - Tested stationary indoor approx 1m above floor: works very well, also at an angle. |
| LD2411S ✅ | $4 | Hi-link | 6m | 1cm (accuracy 5%) | 10Hz | 24G Radar, Distance detection - Tested stationary indoor approx 1m above floor: gives very erratic values and appears not to react on change in height. Not useful for madflight... |
| LD2413 ✅ | $11 | Hi-link | 10m | 1mm (accuracy 3mm) | 20Hz | 24G Radar, Liquid level - Tested stationary indoor approx 1m above floor: works but about 2 second delay reporting change in height. Not useful for madflight... |
| LD2451 | $7 | Hi-link | 100m | 1m | 24G Radar, Vehicle detection, tracks relative speed, angle and distance of multiple targets. Not useful for madflight... | |
| RD-03E | $3 | Ai-tinker | 6m | 1cm (accuracy 5%) | 24G Radar, Ranging Firmware (also exist with Gesture Firmware) | |
| SR04M-2 ✅ | $3 | no-name | 6m | 20Hz | Waterproof Ultrasonic, pwm output. - Tested stationary indoor approx 1m above floor: works but sensor axis needs to be perpendicular (approx. +/-15 degrees) to floor to give correct readings. | |
| VL53L3CX ✅ | STMicroelectronics | 5m indoor, 1m outdoor | 1mm | 120Hz | Time-of-flight sensor. Can track up to 4 objects. |
Optical Flow Sensors
| Part | Module Price | Notes |
|---|---|---|
| PMW3901 ✅ | $8 | SPI interface (4 GPIO), Frame rate: 120Hz, Power: 30 mW, Max speed: 7.4 rad/s (7.4 m/s at 1 m height), Field of view: 42°, Range: ~80mm to infinity |
| PMW3901U ✅ | UART interface. This is a PMW3901 with external microcontroller for SPI to UART conversion | |
| ESP32-Optical-Flow ✅ | $6 | ESP32-Cam module with OV2640 or OV3660 camera |