arrived arrived twice missing
Red line is 349 rpm, where 115200 baud can no longer carry a whole revolution.
Healthy returns fall away with distance. A flat smear near zero is a dirty or blocked window.
python3 -m http.server 8000 in the tools/ directory, then
open http://localhost:8000/xv11_lidar.html.
Demo and file replay work in any browser.
The XV-11 puck has two separate connectors, and they do different jobs. The four-pin one carries logic power and data. The two-pin one is only the motor, and nothing on the data connector will make it turn.
| Wire | Signal | Goes to | Notes |
|---|---|---|---|
| Red | +5 V | adapter 5V / VBUS | Logic draws about 45 mA idle, 135 mA turning |
| Brown | LDS_RX | leave unconnected | The sensor accepts no commands. There is nothing to send it |
| Orange | LDS_TX | adapter RX | 3.3 V logic. A 5 V adapter reads it fine; this is the only wire that carries data |
| Black | GND | adapter GND | Required, and shared with the motor supply |
Wire colours vary between revisions of the module. Confirm against your own unit before applying power rather than trusting the table.
About 3 V, drawing roughly 60 to 100 mA once turning. There is no closed-loop control and no start command, so speed follows the voltage you apply. Aim for 290 to 310 rpm, which this page reads out live, and use that reading to set the voltage.
115200 8N1, no flow control, receive only. On macOS use the
cu. device rather than tty., which blocks on open waiting
for carrier detect and looks exactly like a dead sensor.
| Reading | Good | Meaning |
|---|---|---|
| Checksum | 100% | The only figure that cannot be faked by noise |
| Speed | 290-310 rpm | Set by motor voltage; nothing regulates it |
| Packets per revolution | 90 | Fewer means loss, more means the sensor is repeating indices |
| Byte rate | ~9900 B/s | 86% of the line at 300 rpm |
| Usable readings | varies | An angle with nothing inside ~6 m returns nothing. Open space is not a fault |
| Symptom | Most likely cause |
|---|---|
| No port offered in the chooser | Adapter driver missing, or the browser is not Chrome/Edge/Opera |
| Port opens, zero bytes | Motor not turning, TX not connected, or TX and RX swapped. The sensor sends nothing while stationary |
| Bytes arrive, no frames found | Wrong baud rate. Try the others in the menu |
| Frames found, checksums failing | Noise, a marginal ground, or a baud rate close to but not the right one |
| Valid data, few usable readings | Normal aimed at open space. Check the strength-against-range chart before suspecting the sensor |
| Speed jumping to 4/3 or 4/5 of the true value | The sensor miscounting its own rotation, not the motor changing speed. Suspect the motor supply first |
22 bytes, 90 per revolution, four readings each, so 360 readings of one degree.
FA <index> <speed_L> <speed_H> [4 readings x 4 bytes] <crc_L> <crc_H>
| Field | Encoding |
|---|---|
| index | 0xA0 to 0xF9. Angle of the first reading is (index - 0xA0) x 4 |
| speed | 16-bit little endian, RPM x 64 |
| reading byte 0 | distance bits 7:0 |
| reading byte 1 | bit 7 no-return, bit 6 strength warning, bits 5:0 distance 13:8 |
| reading bytes 2-3 | signal strength, 16-bit little endian |
| crc | Ten 16-bit LE words shifted and added, folded into 15 bits |