Skip to main content

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

ItemSpecification
Range0.02–6 m at 90% reflectivity, 1 kLux
Range in bright sun0.02–4 m at 90% reflectivity, 70 kLux
Accuracy2 cm from 0.02–2 m · 1.5% beyond 2 m (90% reflectivity)
Light sourceLaser, 940 nm
Field of view
Data rate50 Hz
Serial interfaceLVTTL 3.3 V, 115200 baud
Alternative interfaceI2C
Supply voltage5 V
Average current25 mA
Module size16 × 12 × 10 mm
Mounting holes13 mm spacing, Ø2 mm
Weight0.8 g
What "90% reflectivity" is doing in the range figures

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:

PinUART modeI2C mode
5Vsupplysupply
GNDgroundground
Rxserial receiveSDA
Txserial transmitSCL
The pin labels do not change when the mode does

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:

ProtocolFor
MAVLinkArduPilot and PX4 — the factory default
MSPINAV
Micolinka 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.
Configuring a module that is already in I2C mode

Once switched to I2C, the module no longer answers the configuration tool over the serial port in the usual way. The way in:

  1. Connect the USB-to-TTL adapter to the computer on its own — with the sensor not connected.
  2. Open MicoAssistant, select that port at 115200 and connect.
  3. 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.

How TOF_ID becomes an I2C address and how each sensor maps to an ArduPilot rangefinder instance

Addresses

Each module's TOF_ID, set in MicoAssistant, determines its bus address:

TOF_IDI2C addressArduPilot RNGFNDn_ADDR
00x088
10x099
20x0A10
30x0B11

ArduPilot's RNGFNDn_ADDR takes the address in decimal, which is why 0x0A is entered as 10.

Every module ships as TOF_ID 0

Set 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:

ValueDirection
0Forward
1Forward-Right
2Right
3Back-Right
4Back
5Back-Left
6Left
7Forward-Left
24Up
25Down — 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.

The message rate there is not the sensor's rate

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

SymptomWhere to look
Not detected on UARTBaud 115200, TX and RX crossed, SERIALn_PROTOCOL set, RNGFND1_TYPE = 10, and the module's protocol still MAVLink.
Not detected on I2CArduPilot 4.5.0 or later; bus pull-ups present; RNGFND1_TYPE = 40; RNGFND1_ADDR matching the module's TOF_ID.
Detected but always zeroNothing in range, or a surface the laser cannot measure — glass, mirror, matt black, or too steep an angle. Check the window.
Distance jumps aroundAim at a flat surface within range. Check for a frame member at the edge of the beam.
Two sensors, only one seenBoth are still on TOF_ID 0. Set them one at a time.
Readings appear in the wrong directionRNGFNDn_ORIENT does not match how the sensor is mounted.
Configuration tool cannot see a module in I2C modeConnect the adapter first, connect in the tool, then plug the sensor in.
Works on the bench, not in flightVibration loosening a connector, or a down-facing beam catching the landing gear.

Written and maintained by the Robofusion engineering team.