The CORVON CV0850 is a compact infrared ranging module built on the direct Time-of-Flight (dToF) principle for short-range distance measurement. It ranges from 20 mm to 8 m with a narrow <3° field of view, a 50 Hz measurement rate, and an eye-safe 940 nm light source. Its small 20 mm minimum spot and strong ambient-light immunity suit UAV altitude hold, robot and AGV obstacle avoidance, and proximity sensing in low-power systems. Distance is output over UART or I²C, making it a drop-in fit for PX4, INAV and ArduPilot. The module measures 20.0 × 16.5 × 6.7 mm and weighs about 1.8 g.
| Model | CV0850 |
|---|---|
| Type | Infrared Ranging Module (dToF) |
| Measuring Range | 20–8000 mm |
| Field of View (FOV) | < 3° |
| Measuring Accuracy | ±3 cm @ <1 m · ±3% @ ≥1 m |
| Measurement Frequency | 50 Hz |
| Light Source Wavelength | 940 nm |
| Minimum Spot Size | 20 mm |
| Ambient Light Resistance | 8000 mm @ 350 lux · 4000 mm @ 100 klux |
| Operating Voltage | 3.5–5.5 V |
| Current Consumption | ≤ 40 mA @ 5 V |
| Communication Interface | UART 115200 · I²C up to 400 K |
| Operating Temp. | 0°C – 60°C |
| Storage Temp. | −20°C – 70°C |
| Dimensions | 20.0 × 16.5 × 6.7 mm (±0.1 mm) |
| Weight | 1.8 g |
| Firmware Support | PX4 · INAV · ArduPilot |
4-pin connector, UART / I²C selectable. For UART connect module TX to the flight-controller RX and module RX to the flight-controller TX (115200 bps).
| Pin | UART | I²C | Function |
|---|---|---|---|
| 1 | TX | SDA | UART transmit / I²C data |
| 2 | RX | SCL | UART receive / I²C clock |
| 3 | VCC | VCC | Power · +5 V |
| 4 | GND | GND | Ground |
UART Output Protocol
| S/N | Name | Content | Description |
|---|---|---|---|
| 1 | Header | 0xDF | |
| 2 | Device ID | 0x15 | |
| 3 | System ID | 0x00 | |
| 4 | Message ID | 0x55 | |
| 5 | Packet Sequence | 0x00~0xFF | |
| 6 | Payload Length | 0x0C | |
| 7 | Payload Content | TOF Dist Low Byte | TOF Distance (mm) |
| 8 | TOF Dist High Byte | ||
| 9 | TOF Signal Strength | 0~100 | |
| 10 | Reserved | ||
| 11 | flow_x_integral Low Byte | Accumulated X-pixel displacement over time (radians). Divide by 10000 and multiply by height (mm) to obtain actual displacement (mm). | |
| 12 | flow_x_integral High Byte | ||
| 13 | flow_y_integral Low Byte | Accumulated Y-pixel displacement over time (radians). Divide by 10000 and multiply by height (mm) to obtain actual displacement (mm). | |
| 14 | flow_y_integral High Byte | ||
| 15 | integration_timespan Low Byte | Time interval since last optical flow data (µs) | |
| 16 | integration_timespan High Byte | ||
| 17 | valid | Status: 0=Optical Flow data invalid, 245=Optical Flow data valid | |
| 18 | version | Optical Flow module version number | |
| 19 | Checksum | 0xXX | Sum of all preceding bytes |
Output Protocol: I2C (The I2C output protocol is proprietary and does not support open-source use.)
Device Address: 0x31 (7-bit)
| S/N | Register Address | Content | Description |
|---|---|---|---|
| 1 | 0x00 | Device ID | 0x15 |
| 2 | 0x01 | TOF Distance Low Byte | TOF distance (mm) |
| 3 | 0x02 | TOF Distance High Byte | |
| 4 | 0x03 | TOF Intensity | 0~100 |
| 5 | 0x04 | Reserved | |
| 6 | 0x05 | flow_x_integral Low Byte | Accumulated X-pixel displacement over time (radians). Divide by 10000 and multiply by height (mm) to obtain actual displacement (mm). |
| 7 | 0x06 | flow_x_integral High Byte | |
| 8 | 0x07 | flow_y_integral Low Byte | Accumulated Y-pixel displacement over time (radians). Divide by 10000 and multiply by height (mm) to obtain actual displacement (mm). |
| 9 | 0x08 | flow_y_integral High Byte | |
| 10 | 0x09 | integration_timespan Low Byte | Time interval since last optical flow data (µs) |
| 11 | 0x0A | integration_timespan High Byte | |
| 12 | 0x0B | valid | Status: 0=Optical Flow data invalid, 245=Optical Flow data valid |
| 13 | 0x0C | version | Optical Flow module version number |
I. PX4 Configuration
1. Open the tool and select Vehicle Configuration;
2. Set MAV_1_CONFIG to TELEM 2 and save;
3. Click “Tools,” then click “Reboot Vehicle”;
4. Set MAV_1_MODE to Normal and save;
5. Set SER_TEL2_BAUD to 115200 8N1 and save it;
6. Set EKF2_RNG_CTRL to Enabled and save.
7. Set EKF2_HGT_REF to Range sensor and save;
8.After the configuration is completed, restart the flight controller. You should be able to see the DISTANCE_SENSOR and OPTICAL_FLOW_RAD messages in the MAVLink Inspector page of QGC. It's fine as long as there is a change in the values. Note that the messages displayed on the QGC are sent by the flight control. The message frequency is not the same as the data frequency of the sensor. This frequency is determined by the Settings of the flight control and the speed of the data link, and is mainly used for observation. The number of the message frequency is not important.
II. APM Configuration
1. In Mission Planner, set the corresponding serial port baud rate SERIAL4_BAUD to 115(115200), the value SERIAL4_OPTIONS to 0, and set the serial port protocol value SERIAL4_PROTOCOL to 1(Mavlink1). Click "Write Params" to save;
2. Set the optical flow FLOW_TYPE value to 5 and save it;
3. Set the RNGFND1_TYPE value to 10 and save it;
4. Restart the flight controller, set the RNGFND1_MAX_CM value to 800, the RNGFND1_MIN_CM value to 1, and the RNGFND1_ORIENT value to 25, and save them.
5. On the status page, you can see the values of rangefinder1, opt_m_x, opt_m_y, and opt_qua.
III. INAV Configuration
1. Open the Ports interface, enable the MSP function for the corresponding serial port (we are connected to UART4), select a baud rate of 115200, save, and restart.
2. In the Configuration interface, set the Rangefinder option and the Optical flow option to MSP, save and restart. If the configuration is correct, you can see that the Sonar indicator light and the Flow indicator light on the main interface are on.
3. Set the Debug data to optical flow data in the CLI interface;
set debug_mode = FLOW_RAW
Entering the "save" command will save and restart.
4.In the Sensors interface, check the Sonar option and the Debug option; If configured correctly, it can be seen that the waveform and the X value are changing.
Thank you for choosing a CORVON product. Please read this disclaimer carefully — by using this product you acknowledge and agree to the following. Because we cannot control how this product is installed, used, or maintained, we accept no liability for any loss or damage arising from its use, and any unauthorized modification is undertaken at your own risk.
Keep the optical window clean and unobstructed — dust, smudges, or a covering film will degrade ranging accuracy. Although the 940 nm source is eye-safe, do not stare into the lens at close range for extended periods. Mount the module rigidly with the lens facing the target surface, and observe correct wiring and polarity on the connector — reversed or mis-wired connections can permanently damage the module. Highly reflective, transparent, or strongly light-absorbing surfaces can affect readings; validate behavior in your environment before relying on it for flight.