Ranging/synchronisation over UWB - DecaDuino library for Arduino
DecaDuino library for Arduino

Get the latest version of this documentation here:

DecaDuino is an Arduino library which provides a driver for the DecaWave DW1000 transceiver and modules based on this transceiver, such as DecaWave DWM1000. Since the DW1000 is based on a Ultra Wide Band (UWB) Physical layer, in addition to wireless communication, DecaDuino supports Time-of-Flight (ToF) ranging and can be used as an open framework for protocol evaluation.

DecaDuino supports the PJRC Teensy 3.2/3.1/3.0. Others Arduino boards have not been tested yet. User feedback on the topic will be greatly appreciated. For this purpose, please use the contact address indicated in the "Contact, feedback and users forum" section of this documentation.

DecaDuino is a Physical-layer Service Access Point (PHY-SAP). It provides the two conventional Physical-Data (PD) and Physical Layer Management Entity (PLME) SAPs which enable MAC-level protocols to send/receive data and configure the transceiver (channel, transmission rate, preamble parameters...). Since this framework was designed to aid in the implementation of Time-of-Flight based ranging protocols, DecaDuino also provides access to the DW1000's Physical-level high precision timer (64GHz/40bit) which enables precise message timestamping at both transmission (t_TX) and reception (t_RX). Finally, DecaDuino implements DW1000's advanced synchronization/timestamping functionalities such as delayed transmission and receiver skew evaluation, which are required for efficient centimetre-level ranging protocols using Time-of-Flight.

DecaDuino comes with several Arduino examples implementing the most popular ranging protocols such as Two-Way Ranging (TWR) and Symetrical Double-Sided Two-Way Ranging (SDS-TWR).


DecaDuino has been written by Adrien van den Bossche and Réjane Dalcé at the Institut de Recherche en Informatique de Toulouse (IRIT), France. Thanks to Thierry Val, François Despaux, Laurent Guerby, Ibrahim Fofana and Robert Try for their contributions to DecaDuino.


Get the current release of the library on Previous versions (before hosting) are also available in the "Revision History" section of this documentation.


To use DecaDuino on a PJRC Teensy 3.2/3.1/3.0, install the Teensyduino add-on first. Then, download DecaDuino, unzip the files into the libraries sub-directory and relaunch the Arduino environment; you should see the library in the Sketch->Import Library menu, and example sketches in File->Examples->DecaDuino.


Remember to import the SPI and Decaduino libraries in your sketches:

#include <SPI.h>
#include <DecaDuino.h>

For more details, please checkout the examples in the File->Examples->DecaDuino menu in the Arduino IDE. The sketches include both frame send/receive examples and ranging protocols implementation examples.

Contact, feedback and users forum

Please contact Adrien van den Bossche (remove _nospam) for any question concerning DecaDuino.


In this video, a fixed node running DecaDuino executes a ranging session every 100ms with another node, using the TWR protocol. Once the distance to the other node is estimated, the fixed node represents the distance by driving an RGB LED strip: the LED corresponding to the estimated distance is powered up in blue. Note that the strip used in the video is 1m-long and the leds are spaced by 1.65cm. Using a LED strip gives a direct and real-time feedback of the ranging precision and accuracy using DecaDuino.

Revision History
Academic Publications

DecaDuino has been presented in this academic publication: Adrien Van den Bossche, Rejane Dalce, Nezo Ibrahim Fofana, Thierry Val, DecaDuino: An Open Framework for Wireless Time-of-Flight Ranging Systems, IFIP Wireless Days (WD 2016) conference, Toulouse, 23/03/2016-25/03/2016.

Academic Publications that references DecaDuino are listed here. Please contact Adrien van den Bossche (remove _nospam) if you want to add your work to this list.


DecaDuino's use is subject to licensing, GPL_V3 ( or Commercial. Please contact Adrien van den Bossche (remove _nospam) for Commercial Licensing.