MechFlow V1 Datasheet
MechFlow V1
Overview
MechFlow V1 is a combined optical-flow and laser time-of-flight module that reports ground-relative velocity and altitude to a flight controller over a single UART, using the MSP v2 sensor protocol. It is intended for position-hold and altitude-hold augmentation on multirotors flying below the reliable range of GPS, indoors or under cover.
MechFlow V1 streams out the MSP/Mavlink packets through a single 4-wire UART connection — no host-side sensor drivers, calibration routines, or bus wiring required beyond power and serial.
- Single UART interface — plus, SPI/I2C exposed
- Native MSP v2 output, no companion computer needed
- Optical flow + laser rangefinder, factory-fused on one PCB
- 100 Hz combined telemetry stream
- Long-range ToF mode — full altitude-hold envelope
- Drop-in for Betaflight / INAV / ArduPilot optical-flow position hold
Sensors
Two independent sensing elements feed the onboard MCU; both are fixed, non-user-configurable at the hardware level. Ranges below are the sensor manufacturers' published figures, not flight-tested figures for every environment.
PixArt PMW3901
- Sample rate
- up to 121 fps (internal)
- Usable height
- ~80 mm and up
- Output
- raw Δx / Δy pixel counts
- Requires
- textured surface, adequate light
ST VL53L1X
- Range (this config)
- up to ~4 m
- Distance mode
- Long
- Native update rate
- ~18.2 Hz
- Laser safety
- Class 1 (eye-safe)
Ranging accuracy on both sensors depends on target surface reflectance/texture and ambient IR (direct sunlight reduces usable ToF range). Best performance is over textured, matte, non-reflective surfaces indoors or in shade.
Electrical
Supply voltage is drawn directly from the flight controller's 5 V peripheral rail; there is no onboard wide-input regulation margin beyond the stated value — do not supply above the rated voltage.
Wiring
MechFlow V1 exposes a single 4-pin JST-SH 1.0 mm connector carrying power and one UART. Only TX (module → flight controller) needs to be connected for normal operation; RX is reserved for a future configuration/passthrough mode and can be left unconnected.
JST-SH 1.0 mm, 4-position. Connect module TX to a spare flight-controller UART RX, configured as an MSP sensor input port.
Pin-to-signal order above must be verified against the physical board silkscreen/connector keying before this datasheet goes live — placeholder pending final confirmation.
Mechanical
Communication Protocol
MechFlow V1 speaks MSP v2 (Multiwii Serial Protocol, version 2) exclusively, as a sensor source — it only transmits, it does not need to parse a request. It emits two message types every telemetry tick.
Payload — Optical Flow 0x1F02
| Offset | Field | Type | Description |
|---|---|---|---|
| 0 | quality | u8 | PMW3901 surface-quality register (SQUAL), raw 0–255 |
| 1 | motionX | i32 LE | Raw accumulated Δx pixel count since last read — unscaled sensor counts, not mm or rad/s |
| 5 | motionY | i32 LE | Raw accumulated Δy pixel count since last read — unscaled |
Motion counts are the PMW3901's native register values, passed through with no conversion applied on-board. A consumer must apply its own scale factor (a function of lens FOV and measured height above ground) to convert counts into a physical velocity.
Payload — Rangefinder 0x1F01
| Offset | Field | Type | Description |
|---|---|---|---|
| 0 | quality | u8 |
255 = valid range status from sensor · 0 = invalid/no return |
| 1 | distance | i32 LE | Distance to target, millimetres |
Update Timing & Data Freshness
Both messages are transmitted back-to-back, once per 10 ms scheduler tick (100 Hz), driven by a hardware timer with no software jitter on the send side. The two sensors do not refresh at the same underlying rate, however — this matters for anyone feeding this data into a filter.
The rangefinder value is cached and re-sent unchanged for ~5 out of every 6 telemetry frames, because the VL53L1X only completes a new measurement every ~55 ms. The current protocol does not carry a separate "fresh vs. repeated" flag.
Flight Controller Compatibility
| Firmware | Protocol | Status | Notes |
|---|---|---|---|
| INAV | MSP v2 | Supported | Native optical-flow + rangefinder fusion for position/altitude hold |
| ArduPilot | MSP v2 | Supported | via AP_OpticalFlow_MSP / AP_RangeFinder_MSP drivers |
| Betaflight | MSP v2 | Protocol-compatible | Parses the frames, but Betaflight has no position-hold flight mode that consumes them |
| PX4 | MAVLink | Supported | PX4's sensor pipeline is MAVLink-based, this module is also usable on PX4 as it can be configured to output Mavlink Packets |
Handling & Assembly Notes
- Handle the board by its edges — avoid contact with the optical flow sensor's lens
- ESD-sensitive: use grounded tools/mat when working near the module
- Do not exceed the rated supply voltage — the input has no reverse-polarity or overvoltage protection margin beyond spec
- Mount with the ToF/flow sensor window facing straight down, unobstructed by landing gear or props in frame
Revision History
| Rev | Date | Change |
|---|---|---|
| 1.0 | 2026-08-05 | Initial public release |