Précision réelle, portée, nombre d'ancres, calibration, dépannage : les questions qui reviennent le plus souvent sur le positionnement UWB par DS-TWR.
La mesure de distance entre une ancre et un tag tient dans 2 à 5 cm (1σ) en vue dégagée, une fois le délai d'antenne calibré. Après trilatération, la position 2D se situe plutôt entre 5 et 10 cm : l'erreur de chaque distance se combine avec la géométrie des ancres. Sans calibration du délai d'antenne, le biais peut atteindre plusieurs dizaines de centimètres — c'est l'étape à ne pas sauter.
Jusqu'à 300 m en ligne de vue avec les antennes intégrées du DWM3000, et environ 500 m avec une antenne externe à gain. En intérieur réel, avec cloisons et mobilier, on déploie plutôt des zones de 10×10 m à 30×30 m selon le placement des ancres.
Le signal traverse une cloison légère, mais il ralentit dans le matériau : la distance mesurée devient systématiquement trop grande. Le béton armé et le métal bloquent quasiment tout. Pour une précision centimétrique, il faut viser une vue directe entre le tag et au moins trois ancres ; c'est le placement des ancres, en hauteur et dégagées, qui fait la qualité du résultat.
Le BLE en RSSI estime une distance à partir de la puissance reçue : 2 à 5 m d'erreur, très sensible aux obstacles. Le WiFi RTT descend à 1-3 m. L'UWB ne mesure pas une puissance mais un temps de vol, avec des impulsions de ~2 ns horodatées à ~15,65 ps — soit environ 4,7 mm de résolution. C'est un écart de deux ordres de grandeur, et la brièveté des impulsions rend la mesure robuste aux trajets multiples.
Trois ancres minimum pour une position 2D (x, y) par trilatération, et une quatrième pour lever l'ambiguïté en 3D (x, y, z). Le firmware Centilog n'accepte une position que si les distances de trois ancres au moins sont fraîches, c'est-à-dire mesurées depuis moins de deux secondes. Évitez d'aligner les ancres : une géométrie trop plate dégrade fortement la précision.
Le DS-TWR est un dialogue séquentiel : chaque échange tag-ancre occupe le canal pendant sa durée. Avec 3 ancres, un tag est rafraîchi à environ 10 Hz. Ce budget se partage entre les tags : deux tags à 5 Hz, cinq tags à 2 Hz, etc. Pour suivre beaucoup de tags, on baisse la cadence ou on passe à une architecture TDoA, que ce firmware n'implémente pas.
N'importe quel MCU disposant d'un bus SPI en 3,3 V et de deux GPIO (IRQ et RST). Le câblage de référence du firmware est un ESP32-DevKitC : SPI sur GPIO18/23/19/5, IRQ sur GPIO27, RST sur GPIO26. L'ESP32-S3 est recommandé pour un usage durable (USB-C natif, plus de RAM). Un Arduino Mega 2560 fonctionne aussi, mais il est en 5 V : un adaptateur de niveau est alors obligatoire sous peine de détruire le module.
Sur une platine d'essai, les deux rangées d'un connecteur 2×4 tombent dans des pistes reliées entre elles : les broches se retrouvent court-circuitées deux à deux. Une rangée unique de 8 broches au pas de 2,54 mm place chaque signal dans une piste isolée. L'antenne UWB reste en haut de la carte, à l'opposé de la breadboard, ce qui préserve son dégagement radio.
C'est le symptôme classique d'un délai d'antenne non calibré. Les sketches partent d'une valeur par défaut de 16385 pour les chaînes TX et RX, alors que le trajet réel dans le circuit et l'antenne diffère d'une carte à l'autre. La méthode : placer le tag à une distance connue, mesurée au mètre, comparer avec la distance affichée, puis ajuster la constante de délai d'antenne jusqu'à faire coïncider les deux — une unité de délai vaut environ 15,65 ps, soit ~4,7 mm. Le module optionnel dw3000_trilat.h automatise ce réglage avec la commande série CALIB <distance> (115200 bauds). À refaire pour chaque carte.
Dans l'ordre : (1) l'alimentation doit être en 3,3 V, jamais en 5 V ; (2) un condensateur de 100 nF au plus près des broches VCC/GND du DW3000 est indispensable, faute de quoi le module redémarre pendant les pics d'émission ; (3) vérifiez le câblage MISO/MOSI, souvent croisé par erreur ; (4) contrôlez que RSTn dispose de son pull-up et IRQ de son pull-down ; (5) sur un MCU 5 V, l'absence d'adaptateur de niveau explique presque toujours la panne. Les schémas de câblage couvrent les quatre cartes les plus courantes.
Rien n'est vendu sur ce site. Centilog est un projet open-hardware : les schémas, le routage, la nomenclature et le firmware sont publiés, à charge pour chacun de fabriquer sa carte ou de la faire fabriquer. Le coût dépend donc du fabricant choisi et des quantités, le module Qorvo DWM3000 représentant l'essentiel de la facture. Si le projet vous est utile, vous pouvez soutenir son développement.
Téléchargez les fichiers de fabrication : Gerbers pour le PCB et nomenclature (BOM) pour les composants, avec un fichier de placement pour l'assemblage automatisé. Ces fichiers s'envoient tels quels à un fabricant de PCB. Les passifs sont traversants, ce qui rend l'assemblage manuel réaliste ; seul le module DWM3000 demande un peu de soin à la soudure.
Le firmware et les fichiers de conception sont publiés sous licence MIT : usage libre, y compris commercial, modification et redistribution autorisées, sans garantie. La seule obligation est de conserver la mention de licence. Le module DWM3000 lui-même reste un produit Qorvo, soumis à sa propre documentation.
La licence MIT ne s'y oppose pas. En revanche, la carte Centilog est une carte de développement : elle n'a pas fait l'objet d'une évaluation de conformité en tant que produit fini. Tout équipement radio mis sur le marché européen doit satisfaire à ses propres obligations réglementaires, notamment la directive RED 2014/53/UE. Reportez-vous à la documentation Qorvo pour les homologations du module et faites qualifier votre produit final.
Tout est rassemblé sur la page Ressources : firmware ancre et tag pour ESP32 et ESP32-S3, datasheet du DWM3000, notice de mise en œuvre sur platine d'essai et schémas de câblage. Le code source vit sur GitHub, où les questions techniques et les bugs se signalent dans les issues.