Frequently asked questions

Real accuracy, range, anchor count, calibration, troubleshooting: the questions that come up most often about DS-TWR UWB positioning.

A question that is not answered here? Get in touch — recurring questions end up on this page.

Accuracy and range

How accurate is the positioning in practice?

Anchor-to-tag distance lands within 2 to 5 cm (1σ) in clear line of sight, once the antenna delay is calibrated. After trilateration, a 2D position sits closer to 5-10 cm: each distance error combines with the anchor geometry. Skipping antenna-delay calibration leaves a bias of several tens of centimetres — it is not an optional step.

What is the range between an anchor and a tag?

Up to 300 m in line of sight with the DWM3000 on-module antennas, and around 500 m with an external gain antenna. Indoors, with partitions and furniture, realistic deployments cover 10×10 m to 30×30 m depending on anchor placement.

Does UWB go through walls?

The signal does cross a light partition, but it slows down inside the material, so the measured distance comes out systematically too long. Reinforced concrete and metal block it almost entirely. Centimetre accuracy requires line of sight between the tag and at least three anchors — mounting anchors high and unobstructed is what drives the result.

Why is UWB better than BLE or WiFi for positioning?

BLE RSSI infers distance from received power: 2-5 m of error, highly sensitive to obstacles. WiFi RTT gets down to 1-3 m. UWB measures no power at all but a time of flight, with ~2 ns pulses timestamped at ~15.65 ps — roughly 4.7 mm of resolution. That is two orders of magnitude, and the short pulses make the measurement robust against multipath.

Deploying

How many anchors are needed to locate a tag?

Three anchors minimum for a 2D (x, y) fix by trilateration, and a fourth to resolve the ambiguity in 3D (x, y, z). The Centilog firmware only outputs a position when at least three anchor distances are fresh, meaning measured less than two seconds ago. Avoid placing anchors in a line: a flat geometry badly degrades accuracy.

How many tags can be tracked at once?

DS-TWR is a sequential exchange: every tag-anchor conversation occupies the channel for its duration. With 3 anchors, one tag refreshes at about 10 Hz. That budget is shared across tags: two tags at 5 Hz, five tags at 2 Hz, and so on. Tracking many tags means either lowering the rate or moving to a TDoA architecture, which this firmware does not implement.

Which microcontroller do I need?

Any MCU with a 3.3 V SPI bus and two GPIOs (IRQ and RST). The firmware's reference wiring is an ESP32-DevKitC: SPI on GPIO18/23/19/5, IRQ on GPIO27, RST on GPIO26. The ESP32-S3 is the recommended choice for lasting work (native USB-C, more RAM). An Arduino Mega 2560 works too, but it is a 5 V board: a level shifter is then mandatory, otherwise the module is destroyed.

Why a 1×8 header instead of a 2×4?

On a breadboard, the two rows of a 2×4 connector land in tracks that are already tied together, shorting the pins in pairs. A single row of 8 pins on a 2.54 mm pitch puts every signal in its own isolated track. The UWB antenna stays at the top of the board, away from the breadboard, which preserves its RF clearance.

Troubleshooting

My distances are off by tens of centimetres. What now?

That is the textbook symptom of an uncalibrated antenna delay. The sketches start from a default of 16385 for both the TX and RX chains, while the real path through the circuit and antenna differs from board to board. The method: put the tag at a known, tape-measured distance, compare it with the reported distance, then trim the antenna-delay constant until both match — one delay unit is about 15.65 ps, roughly 4.7 mm. The optional dw3000_trilat.h module automates this with the CALIB <distance> serial command (115200 baud). Repeat for every board.

The module does not answer, or SPI returns an error. Where do I start?

In order: (1) the supply must be 3.3 V, never 5 V; (2) a 100 nF capacitor as close as possible to the DW3000 VCC/GND pins is mandatory, otherwise the module browns out during transmit peaks; (3) check MISO/MOSI, frequently swapped; (4) confirm the pull-up on RSTn and the pull-down on IRQ; (5) on a 5 V MCU, a missing level shifter explains almost every failure. The wiring diagrams cover the four most common boards.

The project

Is the module for sale? How much does it cost?

Nothing is sold on this site. Centilog is an open-hardware project: schematics, layout, bill of materials and firmware are published, and everyone builds their own board or has it manufactured. Cost therefore depends on your manufacturer and quantities, with the Qorvo DWM3000 module accounting for most of the bill. If the project is useful to you, you can support its development.

How do I build the board myself?

Download the fabrication files: Gerbers for the PCB and a bill of materials for the parts, plus a placement file for automated assembly. Those files go straight to a PCB manufacturer. Passives are through-hole, which keeps hand assembly realistic; only the DWM3000 module asks for some care when soldering.

What licence covers the files?

Firmware and design files are published under the MIT licence: free use including commercial use, modification and redistribution allowed, without warranty. The only obligation is to keep the licence notice. The DWM3000 module itself remains a Qorvo product, governed by its own documentation.

Can I put this module in a commercial product?

The MIT licence does not stand in the way. However, the Centilog board is a development board: it has not gone through a conformity assessment as a finished product. Any radio equipment placed on the European market carries its own regulatory obligations, notably the RED 2014/53/EU directive. Refer to the Qorvo documentation for the module's own approvals and have your final product assessed.

Where are the firmware and the documentation?

Everything sits on the Resources page: anchor and tag firmware for ESP32 and ESP32-S3, the DWM3000 datasheet, the breadboard application note and the wiring diagrams. The source code lives on GitHub, where technical questions and bugs go in the issues.

How DS-TWR works Files & firmware