MicoAir MT-06 Laser Rangefinder — User Manual
The MT-06 is a 6 metre laser rangefinder that weighs 0.8 g and measures 16 × 12 × 10 mm. Two things make it interesting at that size: it works in sunlight, which many small time-of-flight sensors do not, and it speaks I2C as well as UART — so several of them can share one bus and give a flight controller distances in several directions at once.
A rangefinder measures the distance to whatever it is pointed at by timing a pulse of light there and back. Pointed down, it gives a flight controller a true height above the ground, which is far more precise near the surface than a barometer and does not drift. Pointed outward, it becomes an obstacle sensor.
Typical uses: altitude hold on a multirotor, flare and touchdown on an automatic fixed-wing landing, and — over I2C — multi-direction obstacle avoidance.
Specifications
| Item | Specification |
|---|---|
| Range | 0.02–6 m at 90% reflectivity, 1 kLux |
| Range in bright sun | 0.02–4 m at 90% reflectivity, 70 kLux |
| Accuracy | 2 cm from 0.02–2 m · 1.5% beyond 2 m (90% reflectivity) |
| Light source | Laser, 940 nm |
| Field of view | 2° |
| Data rate | 50 Hz |
| Serial interface | LVTTL 3.3 V, 115200 baud |
| Alternative interface | I2C |
| Supply voltage | 5 V |
| Average current | 25 mA |
| Module size | 16 × 12 × 10 mm |
| Mounting holes | 13 mm spacing, Ø2 mm |
| Weight | 0.8 g |
Range is not a fixed number — it depends on how much of the emitted light comes back. The published figures assume a 90% reflective target, which is close to white paper. A grey concrete surface returns less and the usable range drops; a dark asphalt surface less again. Treat the numbers as a best case and leave margin.
Why sunlight matters
1 kLux is roughly deep shade or a bright indoor space. 70 kLux is full daylight.
Range falls from 6 m to 4 m across that span because a rangefinder detects its own reflected pulse, and sunlight reflected off the same surface is background noise competing with it. A sensor that keeps working at 70 kLux is doing real work to reject that background — many small ToF sensors simply stop outdoors, which is the practical difference this specification describes.
Interfaces and wiring
The MT-06 has a single connector carrying power, ground and two data pins whose function changes with the mode:
| Pin | UART mode | I2C mode |
|---|---|---|
| 5V | supply | supply |
| GND | ground | ground |
| Rx | serial receive | SDA |
| Tx | serial transmit | SCL |
In I2C mode the pin marked Rx is SDA and the pin marked Tx is SCL. The silkscreen still says Rx and Tx. Wire by function, not by label.
For UART, cross the pins as usual: sensor Tx to flight controller Rx, sensor Rx to flight controller Tx.
For I2C, connect straight through: SDA to SDA, SCL to SCL.
Protocols
The MT-06 is configured with MicoAssistant, the browser-based tool, at 115200 baud.
UART mode
Three protocols, selectable:
| Protocol | For |
|---|---|
| MAVLink | ArduPilot and PX4 — the factory default |
| MSP | INAV |
| Micolink | a custom protocol, for FMT and for your own software |
For ArduPilot or PX4 there is normally nothing to change. If it is not being detected, confirm in MicoAssistant that the protocol is the MAVLink one before touching flight controller parameters.
I2C mode
I2C is what makes several sensors practical, because they share one bus rather than each taking a UART.
Two prerequisites:
- ArduPilot 4.5.0 or later. I2C support for this sensor does not exist before that.
- The bus must have pull-up resistors. The module does not include any, so the flight controller — or something else on the bus — has to provide them. Without pull-ups, I2C does not work at all.
Once switched to I2C, the module no longer answers the configuration tool over the serial port in the usual way. The way in:
- Connect the USB-to-TTL adapter to the computer on its own — with the sensor not connected.
- Open MicoAssistant, select that port at 115200 and connect.
- Now plug the sensor into the adapter. It is recognised as it powers up.
If the port disconnects at the moment you plug the sensor in, the inrush is browning out the adapter. A large capacitor across the adapter's 5 V output usually settles it.
ArduPilot — UART
Requires ArduPilot 4.1.0 or later. Connect the sensor to any spare UART, TX and RX crossed.
SERIALn_BAUD = 115 # 115200
SERIALn_PROTOCOL = 1 # MAVLink1
SERIALn_OPTIONS = 1024 # Don't forward MAVLink to/from this port
RNGFND1_TYPE = 10 # MAVLink
RNGFND1_ORIENT = 25 # Down
Replace n with the port you used. Reboot after setting RNGFND1_TYPE — the rest of the RNGFND1_ parameters do not appear until the type is set and the parameter list is refreshed.
RNGFND1_ORIENT must match the direction the sensor physically faces, and the module has its own orientation setting that must agree. Both default to Down (25), so for altitude hold there is nothing to change — but a mismatch is a common reason for a sensor that is present and still ignored.
The SERIALn_OPTIONS value stops the sensor's MAVLink traffic being relayed onward to the ground station and vice versa, which keeps a telemetry link clear. It is a refinement rather than a requirement. On ArduPilot 4.7 and later this option moved out of SERIALn_OPTIONS into the per-link MAVLink options, so set it from the tick-box list your ground station shows rather than typing 1024.
Once it is working, the distance appears as rangefinder1 on Mission Planner's status page.
ArduPilot — I2C, and several sensors at once
This is what the I2C mode is for.
Addresses
Each module's TOF_ID, set in MicoAssistant, determines its bus address:
TOF_ID | I2C address | ArduPilot RNGFNDn_ADDR |
|---|---|---|
| 0 | 0x08 | 8 |
| 1 | 0x09 | 9 |
| 2 | 0x0A | 10 |
| 3 | 0x0B | 11 |
ArduPilot's RNGFNDn_ADDR takes the address in decimal, which is why 0x0A is entered as 10.
TOF_ID 0Set each one's ID before you fit it, connecting them one at a time. Two modules left on the default address are both answering to 0x08 on the same bus, and neither will work properly.
Per-sensor parameters
Set the module's interface to the I2C option in MicoAssistant (or buy the I2C version), and wire SDA to SDA, SCL to SCL.
For each sensor, configure one ArduPilot rangefinder instance:
RNGFND1_TYPE = 40 # NoopLoop TOFSense-F I2C
RNGFND1_ADDR = 8 # matches TOF_ID 0
RNGFND1_ORIENT = 25 # Down
RNGFND1_TYPE = 40 is ArduPilot's NoopLoop TOFSense-F I2C driver — the protocol the MT-06 speaks in I2C mode, which is also why the module's own setting for that mode carries the NoopLoop name.
Reboot or refresh the parameter list after setting the type, then fill in the rest.
For a second sensor, repeat with RNGFND2_:
RNGFND2_TYPE = 40
RNGFND2_ADDR = 9 # matches TOF_ID 1
RNGFND2_ORIENT = 0 # Forward
Orientation values
RNGFNDn_ORIENT is what turns a set of distances into a picture of the aircraft's surroundings:
| Value | Direction |
|---|---|
| 0 | Forward |
| 1 | Forward-Right |
| 2 | Right |
| 3 | Back-Right |
| 4 | Back |
| 5 | Back-Left |
| 6 | Left |
| 7 | Forward-Left |
| 24 | Up |
| 25 | Down — for altitude hold |
Checking it
Mission Planner's status page lists each rangefinder's live distance. The Proximity view is better for avoidance work: it draws the readings around the aircraft, so a sensor pointing somewhere other than where you told ArduPilot it points is immediately obvious.
PX4
The MT-06's default UART protocol is MAVLink, which PX4 accepts directly. Wire it to a TELEM port with TX and RX crossed.
MAV_1_CONFIG = TELEM n # the port you used
Write that and reboot — the port's baud parameter does not exist until something has claimed the port. Then:
MAV_1_MODE = Normal
SER_TELn_BAUD = 115200
Finally, tell the estimator to use it:
EKF2_RNG_CTRL = Enabled # use range-sensor height aiding
EKF2_HGT_REF = Range sensor # make it the height reference
EKF2_RNG_CTRL lets the estimator use the rangefinder; EKF2_HGT_REF decides which source the height estimate converges towards. Setting the reference to the range sensor is right for flying over flat ground — over varying terrain the local origin moves up and down with the surface, which is usually not what you want. Older PX4 releases did the same two jobs with EKF2_RNG_AID and EKF2_HGT_MODE.
Reboot, then open MAVLink Inspector and look for DISTANCE_SENSOR.
DISTANCE_SENSOR in the inspector is being emitted by the flight controller, at whatever rate its streams and link speed allow. The MT-06 samples at 50 Hz regardless. Use the inspector to confirm the data exists and is sensible, not to judge the sensor's speed.
Mounting
- Point it where you told the firmware it points. The orientation parameter and the physical direction have to agree.
- Keep the window clean and clear. Dust, a smear, or a frame member clipping the edge of the 2° cone all reduce or break the reading.
- Down-facing sensors see the landing gear if they are mounted where a leg passes through the beam. Check at full extension.
- Mind the field of view. At 2°, the spot is small — about 3.5 cm across at 1 m. That makes it precise, and it also means it can miss a thin obstacle entirely.
- Use the 13 mm, Ø2 mm mounting holes rather than tape. At 0.8 g the sensor does not need much, but it does need to stay pointed in one direction.
Easily confused points
Zero means no valid reading, not zero distance. Out of range, including aimed at the sky, reads zero.
Rx is SDA and Tx is SCL in I2C mode. The silkscreen does not change.
The I2C bus needs pull-ups and the module has none.
TOF_ID 0 is address 0x08, not 0x00.
RNGFNDn_ADDR is decimal. 0x0A is 10.
The module's orientation setting and RNGFNDn_ORIENT are two settings that have to agree.
Range depends on the target. The published figures assume a 90% reflective surface.
Setting the type needs a reboot before the rest of the RNGFNDn_ parameters appear.
Troubleshooting
| Symptom | Where to look |
|---|---|
| Not detected on UART | Baud 115200, TX and RX crossed, SERIALn_PROTOCOL set, RNGFND1_TYPE = 10, and the module's protocol still MAVLink. |
| Not detected on I2C | ArduPilot 4.5.0 or later; bus pull-ups present; RNGFND1_TYPE = 40; RNGFND1_ADDR matching the module's TOF_ID. |
| Detected but always zero | Nothing in range, or a surface the laser cannot measure — glass, mirror, matt black, or too steep an angle. Check the window. |
| Distance jumps around | Aim at a flat surface within range. Check for a frame member at the edge of the beam. |
| Two sensors, only one seen | Both are still on TOF_ID 0. Set them one at a time. |
| Readings appear in the wrong direction | RNGFNDn_ORIENT does not match how the sensor is mounted. |
| Configuration tool cannot see a module in I2C mode | Connect the adapter first, connect in the tool, then plug the sensor in. |
| Works on the bench, not in flight | Vibration loosening a connector, or a down-facing beam catching the landing gear. |
Related guides
- MT-01P 10 m Laser Rangefinder — User Manual — the longer-range single-purpose alternative
- MTF-01P — User Manual — optical flow and rangefinder in one module
- Optical Flow Setup Guide — the flight controller side for position hold
- MicoAssistant Guide — the configuration tool
- ArduPilot Basic Configuration
- PX4 Build & Configuration Walkthrough
Written and maintained by the Robofusion engineering team.