diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/compatibility.yml b/content/hardware/04.pro/shields/portenta-uwb-shield/compatibility.yml
new file mode 100644
index 0000000000..af891bcd4e
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/compatibility.yml
@@ -0,0 +1,9 @@
+software:
+ - arduino-ide
+ - arduino-cli
+ - iot-cloud
+ - cloud-editor
+ - openmv-ide
+hardware:
+ boards:
+ - portenta-c33
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/featured.png b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/featured.png
new file mode 100644
index 0000000000..09832da392
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/featured.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-board_connectors.png b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-board_connectors.png
new file mode 100644
index 0000000000..60c82638b7
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-board_connectors.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-board_dimensions.png b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-board_dimensions.png
new file mode 100644
index 0000000000..4cfe55b0d9
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-board_dimensions.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-pinout.png b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-pinout.png
new file mode 100644
index 0000000000..a6c1198d2b
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta-uwb-pinout.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta_uwb_power_tree.png b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta_uwb_power_tree.png
new file mode 100644
index 0000000000..7bc2880dc2
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta_uwb_power_tree.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta_uwb_shield_block_diagram.png b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta_uwb_shield_block_diagram.png
new file mode 100644
index 0000000000..a8056bf938
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/assets/portenta_uwb_shield_block_diagram.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/datasheet.md b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/datasheet.md
new file mode 100644
index 0000000000..e94820872c
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/datasheet/datasheet.md
@@ -0,0 +1,295 @@
+---
+identifier: ASX00074
+title: Arduino® Portenta UWB Shield
+type: pro
+variant: 'Datasheet'
+author: José Bagur
+---
+
+
+
+# Description
+
+
The Portenta UWB Shield, based on the Truesense DCU150 module, is a versatile Ultra-Wideband (UWB) communication solution. It integrates with the Arduino Portenta C33 board via its High-Density connectors and functions as a base station for two-way ranging and real-time location services (RTLS). The shield features the Truesense DCU150 module, which incorporates the NXP® Trimension™ SR150 UWB integrated circuit (IC), three embedded PCB antennas, onboard power management, clock control, filters and peripheral components. With 1.8 to 3.3 VDC level shifters and dual High-Density board-to-board connectors, it plugs directly into the Portenta C33 board.
+
+# Target Areas
+
Smart logistics, precision proximity sensing, high precision RTLS, industrial applications, access control and secure payments
+
+
+
+# CONTENTS
+
+## Application Examples
+
The Portenta UWB Shield is a versatile tool for developing Ultra-Wideband (UWB) communication solutions in various industries. Explore the possibilities of integrating advanced positioning and real-time location services into your projects with the following application examples:
+
+- **Smart logistics:** Optimize your supply chain and asset tracking solutions with the Portenta UWB Shield, enabling precise location monitoring for:
+ -
Warehouse management: Deploy the Portenta UWB Shield as fixed anchor points throughout warehouses to track inventory, forklifts, and other assets with centimeter-level accuracy, significantly improving inventory management and reducing search times.
+ -
Container tracking: Use the Portenta UWB Shield to create a network for real-time monitoring of shipping containers, pallets, and high-value assets throughout the logistics chain, ensuring visibility and reducing loss.
+ -
Last-mile delivery: Implement UWB-based systems for precise navigation in delivery vehicles and drones, facilitating accurate drop-off locations and improving delivery efficiency in complex environments.
+
+- **Industrial applications:** Transform your industrial operations with the Portenta UWB Shield, providing robust location-based solutions for:
+ -
Personnel safety: Create safety zones with UWB anchors to monitor worker proximity to hazardous machinery or areas, triggering automatic shutdowns when unauthorized personnel enter restricted zones.
+ -
Tool tracking: Deploy the Portenta UWB Shield to track critical tools and equipment in manufacturing facilities, ensuring proper utilization and reducing search time and replacement costs.
+ -
Process optimization: Analyze movement patterns of materials and workers through production lines using UWB positioning data, identifying bottlenecks and optimizing industrial workflows.
+
+- **Precision proximity sensing:** Implement high-accuracy distance measurement solutions with the Portenta UWB Shield for:
+ -
Social distancing applications: Create wearable tags that communicate with UWB anchors to monitor and enforce precise distance requirements between individuals in workplaces, public venues, or healthcare settings.
+ -
Collision avoidance: Integrate the Portenta UWB Shield into autonomous robots or vehicles to detect obstacles and other moving objects with precise distance measurements, enabling safe navigation in dynamic environments.
+ -
Gesture recognition: Leverage the UWB technology's precise ranging capabilities to detect subtle hand movements and gestures, creating touchless interfaces for various control applications.
+
+- **Access control and secure transactions:** Enhance security systems with the reliable and secure UWB technology of the Portenta UWB Shield for:
+ -
Contactless access control: Implement UWB-based authentication for doors, gates, and secure areas that automatically grant access when authorized personnel approach without requiring physical contact or explicit actions.
+ -
Secure vehicle access: Create passive entry systems for vehicles that authenticate users based on precise UWB positioning, providing better security than traditional RF technologies that are vulnerable to relay attacks.
+ -
Point-of-sale systems: Enable secure, direction-aware payment systems that can precisely identify which customer is making a transaction, even in crowded environments, improving both security and user experience.
+
+
+
+## Features
+
+### General Specifications Overview
+
+
The Portenta UWB Shield is a specialized 2D Angle of Arrival (AOA) Ultra-Wideband (UWB) technology board engineered specifically for anchor applications in positioning systems.
+
+Below is a summary of the shield's key features.
+
+| **Feature** | **Description** |
+|---------------|-------------------------------------------------------------------------------------------------|
+| Connectivity | UWB CH5, CH6, CH8, CH9 |
+| Level Shifter | 1.8 to 3.3 VDC |
+| Power Supply | External 3.3 VDC power supply connected through the dual High-Density board-to-board connectors |
+| Shielding Can | On the top of DCU150 module, enhancing the anti-interference performance of the module |
+| Dimensions | 70.1 mm x 37.5 mm |
+
+Below is a summary of the onboard UWB module's (DCU150) key features.
+
+| **Feature** | **Description** |
+| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Transceiver | NXP® SR150 UWB transceiver, IEEE 802.15.4z HRP UWB standard, 6.24–8.24 GHz, CH5, CH6, CH8, CH9 |
+| Ranging Capabilities | Supports two-way ranging and one-way ranging (TDoA) |
+| Max Output Power (EIRP) | 14.1 dBm @ CH9 |
+| Angle Measurement | Supports Angle of Arrival (AoA) measurement |
+| Processor | Arm® Cortex®-M33 32-bit processor running at 125 MHz with 128 kB code RAM, 128 kB data RAM, 128 kB ROM, Arm® TrustZone technology and S-DMA for security |
+| DSP | Onboard programmable DSP (BSP32 CoolFlux DSP core), 32 kB RAM for code, 2x 16kB RAM for data |
+| Clock | Onboard Real Time Clock (RTC) |
+
+
+
+
+### Included Accessories
+
+- No accessories are included
+
+### Related Products
+
+- Portenta C33 (SKU: ABX00074)
+- Arduino Stella (SKU: ABX00131)
+- Arduino USB Type-C® Cable 2-in-1 (SKU: TPX00094)
+
+
+
+## Ratings
+
+### Recommended Operating Conditions
+
+
The table below provides a comprehensive guideline for the optimal use of the Portenta UWB Shield, outlining typical operating conditions and design limits. The operating conditions of the Portenta UWB Shield are largely a function based on its component's specifications.
+
+| **Parameter** | **Symbol** | **Min** | **Typ** | **Max** | **Unit** |
+|:--------------------------------------------------------------------:|:--------------:|:-------:|:-------:|:-------:|:--------:|
+| External power supply input voltage from the High-Density connectors | VIN | 3.0 | 3.3 | 3.6 | V |
+| Operating temperature | TOP | -30 | - | 85 | °C |
+
+### Current Consumption
+
+
The table below summarizes the power consumption of the Portenta UWB Shield on different test cases. Notice that the operating current of the board will depend greatly on the application.
1 SR150 DS-TWR frame: responder, dual RX, 2 ms slot duration. 2 DPD: Deep Power Down mode.
+
+
+
+## Functional Overview
+
+The core of the Portenta UWB Shield is the DCU150 module from Truesense. The board also contains two High-Density connectors which can be used to connect the Portenta C33 board to the shield.
+
+### Pinout
+
+
The two High-Density connectors pinout of the Portenta UWB Shield is shown in the figure below.
An overview of the Portenta UWB Shield high-level architecture is illustrated in the figure below.
+
+
+
+
+
+### Power Supply
+
+
The Portenta UWB Shield is powered exclusively through the VCC pins (+3.3 VDC) of its High-Density Connectors. These connectors are designed to be used with boards from the Portenta family, such as the Portenta C33 board. The power is supplied directly from the connected Portenta family board, which acts as the power source for the Portenta UWB Shield.
+
+
+
+
+
+## Device Operation
+
+### Getting Started - IDE
+
+
If you want to use your Portenta UWB Shield with a supported Portenta family board while offline you need to install the Arduino® Desktop IDE [1]. To connect the supported Portenta family board to your computer, you will need a USB-C® cable.
+
+### Getting Started - Arduino Cloud Editor
+
+
All Arduino devices work out of the box on the Arduino Cloud Editor [2] by installing a simple plugin. The Arduino Cloud Editor is hosted online. Therefore, it will always be up-to-date with all the latest features and support for all boards and devices. Follow [3] to start coding on the browser and upload your sketches onto your device.
+
+### Getting Started - Arduino Cloud
+
+
All Arduino IoT-enabled products are supported on Arduino Cloud, which allows you to log, graph, and analyze sensor data, trigger events, and automate your home or business. Take a look at the official documentation [3] to know more.
+
+### Sample Sketches
+
+
Sample sketches for the Portenta UWB Shield can be found either in the “Examples” menu in the Arduino IDE or the “Portenta UWB Shield Documentation” section of Arduino documentation [4].
+
+### Online Resources
+
+
Now that you have gone through the basics of what you can do with the device, you can explore the endless possibilities it provides by checking exciting projects on Arduino Project Hub [5], the Arduino Library Reference [6] and the Arduino online store [7], where you will be able to complement your project with additional extensions, sensors and actuators.
+
+
+
+## Mechanical Information
+
+
The Portenta UWB Shield is a double-sided 70.1 mm x 37.5 mm board with the DCU150 UWB module overhanging the bottom edge and two High-Density connectors on the top side of the board.
+
+### Board Dimensions
+
+
The Portenta UWB Shield board outline dimensions can be seen in the figure below.
We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).
+
+### Declaration of Conformity to EU RoHS & REACH 191 11/26/2018
+
+
Arduino boards are in compliance with Directive 2011/65/EU of the European Parliament and Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.
Arduino boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.
+
+### Conflict Minerals Declaration
+
+
As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regards to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder, or as a component in metal alloys. As part of our reasonable due diligence Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.
+
+## FCC Caution
+
+
Any changes or modifications not expressly approved by the party responsible for compliance could void the user's authority to operate the equipment.
+
+This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions:
+
+1. This device may not cause harmful interference.
+2. This device must accept any interference received, including interference that may cause undesired operation.
+
+**FCC RF Radiation Exposure Statement:**
+
+1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter.
+2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment.
+3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body.
+
+
Note: This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures:
+
+- Reorient or relocate the receiving antenna.
+- Increase the separation between the equipment and receiver.
+- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected.
+- Consult the dealer or an experienced radio/TV technician for help.
+
+
English: User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions:
+
+1. This device may not cause interference
+2. This device must accept any interference, including interference that may cause undesired operation of the device.
+
+
French: Le présent appareil est conforme aux CNR d'Industrie Canada applicables aux appareils radio exempts de licence. L'exploitation est autorisée aux deux conditions suivantes:
+
+1. L'appareil ne doit pas produire de brouillage
+2. L'utilisateur de l'appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d'en compromettre le fonctionnement.
+
+**IC SAR Warning:**
+
+
English: This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body.
+
+
French: Lors de l'installation et de l'exploitation de ce dispositif, la distance entre le radiateur et le corps est d'au moins 20 cm.
+
+
Important: The operating temperature of the EUT can't exceed 70 °C and shouldn't be lower than -20 °C.
+
+
Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states.
+
+## Company Information
+
+| **Company name** | **Arduino S.r.l.** |
+|------------------|----------------------------------------------|
+| Company address | Via Andrea Appiani, 25 - 20900 Monza (Italy) |
+
+## Reference Documentation
+
+| **No.** | **Reference** | **Link** |
+|:-------:|:------------------------------------:|---------------------------------------------------------|
+| 1 | Arduino IDE (Desktop) | https://www.arduino.cc/en/software |
+| 2 | Arduino IDE (Cloud) | https://create.arduino.cc/editor |
+| 3 | Cloud IDE Getting Started | https://docs.arduino.cc/arduino-cloud/guides/overview |
+| 4 | Portenta UWB Shield Documentation | https://docs.arduino.cc/hardware/portenta-uwb-shield |
+| 5 | Project Hub | https://projecthub.arduino.cc/ |
+| 6 | Library Reference | https://www.arduino.cc/reference/en/ |
+| 7 | Arduino Store | https://store.arduino.cc/ |
+
+## Document Revision History
+
+| **Date** | **Revision** | **Changes** |
+|:----------:|:------------:|----------------------------------------|
+| 21/03/2025 | 4 | Trademarks check |
+| 20/03/2025 | 3 | Shield pinout updated |
+| 17/03/2025 | 2 | Mechanical drawings updated |
+| 14/03/2025 | 1 | First release |
\ No newline at end of file
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-full-pinout.pdf b/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-full-pinout.pdf
new file mode 100644
index 0000000000..6a645bff0d
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-full-pinout.pdf differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-schematics.pdf b/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-schematics.pdf
new file mode 100644
index 0000000000..0022c23a71
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-schematics.pdf differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-step.zip b/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-step.zip
new file mode 100644
index 0000000000..eec792b5a6
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/downloads/ASX00074-step.zip differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/essentials.md b/content/hardware/04.pro/shields/portenta-uwb-shield/essentials.md
new file mode 100644
index 0000000000..27019cba42
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/essentials.md
@@ -0,0 +1,33 @@
+---
+productsLibrariesMap:
+ - wifi
+ - arduinoble
+---
+
+
+
+ A quick guide to installing and setting up your board with the Arduino IDE.
+
+
+
+
+
+
+ The complete Arduino sketches from the Pro tutorials.
+
+
+ Ultra-Wideband communication library for the Portenta UWB Shield.
+
+
+
+
+
+ Built-in Examples are sketches included in the Arduino IDE and demonstrate all basic Arduino commands.
+
+
+ Discover interesting articles, principles and techniques related to the Arduino ecosystem.
+
+
+ Arduino programming language can be divided in three main parts: functions, values (variables and constants), and structure.
+
+
\ No newline at end of file
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/features.md b/content/hardware/04.pro/shields/portenta-uwb-shield/features.md
new file mode 100644
index 0000000000..7e9c2a3ca2
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/features.md
@@ -0,0 +1,22 @@
+
+
+ The **Portenta UWB Shield**, based on the Truesense DCU150, functions as a base station facilitating two-way ranging and real-time location services (RTLS). Ideal for smart logistics, interactive environments and precision proximity sensing applications. Its dual role as both base station and client device enhances connectivity and responsiveness across IoT systems. Designed to integrate with the Arduino Portenta C33 via the high-density connectors.
+
+
+
+
+
+
+Based on NXP Trimension™ SR150 UWB IC, with 3 PCB antennas embedded, power management, clock control, filters and peripheral components. The module is a switch-less 2D AoA solution without extra-antenna overhead, no phase/amplitude skew, no SPST insertion loss and low-cost design.
+
+
+
+
+
+
+
+The Portenta UWB Shield has been specifically designed to add robust UWB communication to the Portenta family, ensuring reliable and efficient device interactions.
+
+
+
+
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/image.svg b/content/hardware/04.pro/shields/portenta-uwb-shield/image.svg
new file mode 100644
index 0000000000..48068aa26b
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/image.svg
@@ -0,0 +1,3 @@
+
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/interactive/ASX00074-simple-pinout.png b/content/hardware/04.pro/shields/portenta-uwb-shield/interactive/ASX00074-simple-pinout.png
new file mode 100644
index 0000000000..3983e8e614
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/interactive/ASX00074-simple-pinout.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/product.md b/content/hardware/04.pro/shields/portenta-uwb-shield/product.md
new file mode 100644
index 0000000000..2f669539ff
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/product.md
@@ -0,0 +1,14 @@
+---
+title: Portenta UWB Shield
+url_shop: https://store.arduino.cc/products/portenta-uwb-shield
+url_guide: /tutorials/
+primary_button_url: /tutorials/portenta-uwb-shield/user-manual/
+primary_button_title: Get Started
+core: arduino:mbed_portenta
+forumCategorySlug: '/hardware/portenta/91'
+certifications: [CE, FCC, UKCA, ROHS, REACH, WEEE]
+productCode: '213'
+sku: [ASX00074]
+---
+
+The Arduino® Portenta UWB Shield, based on the Truesense DCU150, serves as a versatile UWB communication solution facilitating two-way ranging and real-time location services (RTLS). Ideal for smart logistics, interactive environments, and precision proximity sensing applications, its dual role as both base station and client device enhances connectivity and responsiveness across IoT systems. It is designed to integrate with the Arduino Portenta C33 via the high-density connectors.
\ No newline at end of file
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tech-specs.md b/content/hardware/04.pro/shields/portenta-uwb-shield/tech-specs.md
new file mode 100644
index 0000000000..67fdebe6e2
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/tech-specs.md
@@ -0,0 +1 @@
+Here you will find the technical specifications for the Arduino® Portenta UWB Shield.
\ No newline at end of file
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tech-specs.yml b/content/hardware/04.pro/shields/portenta-uwb-shield/tech-specs.yml
new file mode 100644
index 0000000000..e10fac98dd
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/tech-specs.yml
@@ -0,0 +1,18 @@
+Board:
+ Name: Arduino® Portenta UWB Shield
+ SKU: ASX00074
+High-Density Connectors: 2
+Ultra-wideband:
+ Module: Truesense DCU150 UWB Module based on NXP Trimension™ SR150 UWB IC
+ PCB embedded antennas: 3
+ Channels: 5, 6, 8, 9
+ Ranging Mode: 2D Ranging
+ Frequency range: 6.24 GHz ~ 8.24 GHz
+Power: 3.3 V DC from Portenta Main Board
+Max Output Power (EIRP): 14.1 dBm @ CH9
+Operating temperature:
+ Min: -30 °C
+ Max: 85 °C
+Dimensions:
+ Width: 37.5 mm
+ Length: 53.4 mm
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/front-page.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/front-page.png
new file mode 100644
index 0000000000..8d9ba7bcb7
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/front-page.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/hero-banner.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/hero-banner.png
new file mode 100644
index 0000000000..e00758cd2b
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/hero-banner.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-1.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-1.png
new file mode 100644
index 0000000000..e64ffbfeae
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-1.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-2.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-2.png
new file mode 100644
index 0000000000..7a5a89c4d9
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-2.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-3.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-3.png
new file mode 100644
index 0000000000..4ff31b5393
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-3.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-4.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-4.png
new file mode 100644
index 0000000000..66b308c298
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-4.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-5.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-5.png
new file mode 100644
index 0000000000..e4d610ce53
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-5.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-6.png b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-6.png
new file mode 100644
index 0000000000..eff0b3b300
Binary files /dev/null and b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/assets/user-manual-6.png differ
diff --git a/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/content.md b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/content.md
new file mode 100644
index 0000000000..ec271d44f1
--- /dev/null
+++ b/content/hardware/04.pro/shields/portenta-uwb-shield/tutorials/01.user-manual/content.md
@@ -0,0 +1,1146 @@
+---
+title: 'Portenta UWB Shield User Manual'
+difficulty: intermediate
+compatible-products: [portenta-uwb-shield]
+description: 'Learn about the hardware and software features of the Arduino® Portenta UWB Shield.'
+tags:
+ - UWB
+ - Positioning
+ - Real-time location
+ - Sensors
+ - User manual
+author: 'José Bagur'
+hardware:
+ - hardware/06.portenta/shields/portenta-uwb-shield
+software:
+ - ide-v2
+---
+
+This user manual provides a comprehensive overview of the Portenta UWB Shield, highlighting its hardware and software elements. With it, you will learn how to set up, configure, and use all the main features of the Portenta UWB Shield.
+
+
+
+## Hardware and Software Requirements
+
+### Hardware Requirements
+
+- [Portenta UWB Shield (SKU: ASX00074)](https://store.arduino.cc/products/portenta-uwb-shield) (x1)
+- [Portenta C33 (SKU: ABX00074)](https://store.arduino.cc/products/portenta-c33) (x1)
+- [Arduino Stella (SKU: ABX00131)](https://store.arduino.cc/products/arduino-stella) (x1)
+- [USB-C® cable (SKU: TPX00094)](https://store.arduino.cc/products/usb-cable2in1-type-c) (x2)
+
+### Software Requirements
+
+- [Arduino IDE 2.0+](https://www.arduino.cc/en/software)
+- [`PortentaUWBShield` library](https://github.com/Truesense-it/PortentaUWBShield) (designed for the Portenta UWB Shield)
+- [`StellaUWB` library](https://github.com/Truesense-it/StellaUWB) (designed for the Arduino Stella)
+- [`ArduinoBLE` library](https://github.com/arduino/ArduinoBLE)
+- [Arduino Renesas Portenta Boards core](https://github.com/arduino/ArduinoCore-renesas) (required to work with the Portenta C33 board)
+
+***The Portenta UWB Shield is not intended as a standalone device but as a shield to work alongside a Portenta family board. In this user manual, we will use the Portenta C33 as the main board and show how to use the Portenta UWB Shield with it.***
+
+## Portenta UWB Shield Overview
+
+Enhance your positioning and real-time location capabilities with the Portenta UWB Shield. Based on the Truesense DCU150 module, this versatile Ultra-Wideband (UWB) communication solution integrates with the Portenta C33 board via its High-Density connectors and functions as a base station for two-way ranging and real-time location services (RTLS).
+
+
+
+The Portenta UWB Shield incorporates the NXP® Trimension™ SR150 UWB integrated circuit (IC) within the DCU150 module, three embedded PCB antennas, onboard power management, clock control, filters and peripheral components. With +1.8 to +3.3 VDC level shifters and dual High-Density board-to-board connectors, it plugs directly into the Portenta C33 board, making it an excellent choice for projects that require precise positioning and real-time location tracking.
+
+### Understanding UWB Technology
+
+Ultra-Wideband (UWB) is a radio technology that uses very low energy levels for short-range, high-bandwidth communications over a large portion of the radio spectrum. Unlike traditional narrowband radio systems like Bluetooth® or Wi-Fi®, which operate in specific frequency bands, UWB transmits across a wide range of frequency bands (typically 500 MHz or more), allowing for greater precision in location tracking and higher data throughput.
+
+#### UWB vs. Traditional Narrowband Technologies
+
+The fundamental difference between UWB and traditional wireless technologies (Wi-Fi®, Bluetooth®, Zigbee® and Cellular) lies in their transmission methods:
+
+| **Feature** | **Traditional Narrowband Radio** | **Ultra-Wideband Impulse Radio** |
+|:--------------:|:------------------------------------:|:----------------------------------:|
+| Transmit Power | Higher transmit power | Lower transmit power |
+| Initialization | Slow startup/initialization | Fast startup/initialization |
+| Latency | High latency | Very low latency |
+| Ranging | Poor ranging (signal strength based) | Excellent ranging (time of flight) |
+| Multipath | Poor multipath robustness | Very good multipath robustness |
+
+Traditional narrowband systems use frequency or amplitude modulation to send data, requiring a reference carrier frequency between the transmitter and the receiver. This slows down the initialization process and restricts data transmission speed. UWB, in contrast, uses impulse radio technology. This technology consists of short pulses of energy (typically less than 5 nanoseconds) spread across a wide frequency band, allowing quick link initialization and extremely fast data transmission.
+
+#### Key Characteristics of UWB
+
+- **High precision**: UWB can determine the relative position of devices with centimeter-level accuracy (typically 5-10 cm), far more precise than GPS (meters), Bluetooth® (1-3 meters) or Wi-Fi® (2-15 meters).
+- **Low-power consumption**: Despite its high data rates, UWB consumes very little power, making it suitable for battery-operated devices and long-term deployments.
+- **Short range**: Typically effective within 10-30 meters, making it ideal for indoor positioning applications where GPS signals are weak or unavailable.
+- **Strong security**: The unique physical layer characteristics of UWB, including its wide bandwidth and low power spectral density, make it more resistant to jamming, eavesdropping, and relay attacks compared to other wireless technologies.
+- **Immunity to multipath fading**: The wide bandwidth of UWB signals makes them highly resistant to multipath interference, where signals bounce off surfaces and create echoes.
+- **Coexistence with other standards**: Due to its low output spectral power, UWB can operate alongside other wireless technologies without causing interference—other radio systems interpret UWB signals simply as background noise.
+
+#### Spectrum and Frequencies
+
+UWB operates in specific frequency bands regulated by telecommunications authorities worldwide. The Portenta UWB Shield specifically uses channels in the 6.0 to 8.5 GHz range (channels CH5 and CH9), allowing for high bandwidth communication while minimizing interference with other wireless technologies. In general, UWB can operate in the 3.1-10.6 GHz range, with channel widths of 500 MHz or greater.
+
+#### How UWB Technology Works
+
+UWB primarily uses a technique called "Time of Flight" (ToF) or "Time Difference of Arrival" (TDoA) to determine the distance between UWB-enabled devices with extraordinary precision. In a nutshell, this technique consists of the following steps:
+
+1. An UWB transmitter sends a signal with a precise timestamp.
+2. An UWB receiver detects the signal and calculates the time it took to arrive.
+3. Since radio waves travel at the speed of light (approximately 30 cm per nanosecond), the system can calculate the distance with high precision.
+
+For even greater accuracy, UWB can use the "Two-Way Ranging" (TWR) technique, where devices exchange several messages to account for clock synchronization issues. In a nutshell, this technique consists of the following steps:
+
+1. Device A sends a message to device B and records the time (T1).
+2. Device B receives the message and sends a response after a known delay.
+3. Device A receives the response and records the time (T2).
+4. The round-trip time, minus processing delays, determines the distance.
+
+The Portenta UWB Shield goes beyond basic distance measurements by supporting Angle of Arrival (AoA) capability. This enhances positioning by not only determining distance but also calculating the angle from which a signal arrives, enabling more accurate 2D or 3D positioning. With multiple UWB devices, a full positioning system can triangulate exact locations in space.
+
+#### Low Latency Advantage
+
+The impulse radio technology of UWB provides an inherent advantage in terms of latency. Since each pulse is extremely short (5 nanoseconds or less), the data latency is very low. Narrowband systems must modulate their carrier signals more slowly to maintain their frequency allocation, resulting in longer data latency and startup times.
+
+In UWB systems, there's no need to establish a stable carrier signal for the receiver to lock onto, allowing data transmission to start immediately, representing a significant advantage for time-sensitive applications.
+
+#### UWB System Components
+
+In an UWB positioning system, devices typically operate in one of two roles:
+
+- **Anchors**: Fixed-position devices (like the Portenta UWB Shield with a Portenta C33) that provide reference points for the positioning system. A minimum of three anchors is typically needed for 2D positioning and four for 3D positioning.
+- **Tags**: Mobile devices that communicate with anchors to determine their position in space. Tags can be standalone devices like the Arduino Stella or integrated into smartphones, wearables, or other IoT devices.
+
+#### Applications of UWB Technology
+
+UWB's unique combination of precision, low latency, and security opens up numerous applications:
+
+- **Asset tracking**: Monitor the location of valuable items in warehouses, hospitals, or construction sites with centimeter-level accuracy.
+- **Secure access**: Implement contactless entry systems that unlock only when an authorized device is in proximity, with resistance to relay attacks that plague other wireless technologies.
+- **Precision navigation**: Guide robots, vehicles, or drones in environments where GPS is unavailable, such as indoor spaces or underground facilities.
+- **Smart homes**: Enable context-aware automation based on the precise location of people within a space.
+- **Augmented reality**: Provide accurate spatial mapping and tracking for immersive experiences.
+- **Industrial safety**: Create geofencing solutions that can trigger alerts or machinery shutdowns when personnel enter dangerous areas.
+- **High-speed data transfer**: Leverage UWB's high data rates for wireless communications in personal area networks (PANs), outperforming Bluetooth® and Zigbee® for short-range data transmission.
+- **Autonomous guided vehicles**: Create follow-me systems where vehicles dynamically adjust routes and speeds based on real-time distance measurements, reducing logistics costs and workplace hazards in warehouses and industrial settings.
+- **Production operator tracking**: Automate operator log-in through UWB presence detection in production cells, eliminating the need for manual data entry and enabling accurate cycle time assessment in lean manufacturing environments.
+- **Maintenance equipment management**: Track tools, vehicles, and equipment assigned to maintenance personnel, ensuring assets are returned to their designated storage areas and improving team effectiveness without manual reporting.
+- **Access control automation**: Enable hands-free portal openings where authorized personnel with UWB-enabled devices are automatically granted access as they approach entry points, while unauthorized individuals are denied.
+- **Machine safety systems**: Implement dual authentication through proximity detection for machinery operation, enforcing security protocols when anomalies are detected after operator intervention.
+- **Anti-collision systems**: Enhance material handling equipment like forklifts and pallet trucks with UWB technology to detect operators or obstacles in blind spots, preventing collisions that might not be visible through other sensing technologies.
+
+### Portenta UWB Shield Architecture Overview
+
+The Portenta UWB Shield features a secure, certified and durable design that suits various applications, such as smart logistics, precision proximity sensing, high precision RTLS, industrial applications, access control and secure payments.
+
+The top view of the Portenta UWB Shield is shown in the image below:
+
+
+
+The bottom view of the Portenta UWB Shield is shown in the image below:
+
+
+
+Here's an overview of the shield's main components shown in the images:
+
+- **UWB module**: At the heart of the Portenta UWB Shield is the DCU150 module from Truesense, which incorporates the NXP Trimension SR150 UWB IC. This module supports UWB channels CH5 and CH9 in the 6.0-8.5 GHz range and complies with the IEEE 802.15.4 HRP UWB standard.
+- **UWB antennas**: The DCU150 module features three embedded PCB antennas for optimal signal reception and transmission.
+- **Processor**: The DCU150 module features an Arm® Cortex®-M33 32-bit processor running at 125 MHz with 128 kB code RAM, 128 kB data RAM, 128 kB ROM, TrustZone® technology and S-DMA for security.
+- **DSP**: The DCU150 module features an onboard programmable DSP (BSP32 CoolFlux DSP core) with 32 kB RAM for code and 2x 16kB RAM for data enhances signal processing capabilities.
+- **Level shifters**: The shield includes +1.8 to +3.3 VDC level shifters for compatible communication with Portenta family boards.
+- **High-Density connectors**: Dual High-Density board-to-board connectors allow the shield to plug directly into the Portenta family boards.
+- **Shielding can**: Located on top of the DCU150 module, it enhances anti-interference performance.
+
+### Board Libraries
+
+The Portenta UWB Shield and the Arduino Stella use different libraries and board cores due to their different microcontrollers and onboard UWB modules:
+
+#### Portenta UWB Shield Library
+
+The [`PortentaUWBShield` library](https://github.com/Truesense-it/PortentaUWBShield) contains an application programming interface (API) to read data from the Portenta UWB Shield and control its parameters and behavior. This library is designed to work with the DCU150 module on the shield and supports the following:
+
+- One-way ranging (Time Difference of Arrival - TDoA) and two-way ranging (TWR).
+- Angle of Arrival (AoA) measurement for 2D and 3D positioning.
+- SPI and GPIO communication with the host board through dedicated level translators.
+
+***The [Arduino Renesas Portenta Boards core](https://github.com/arduino/ArduinoCore-renesas) is required to work with the Portenta C33 board that hosts the UWB Shield in this User Manual.***
+
+#### Arduino Stella Library
+
+For two-way ranging experiments between the Portenta UWB Shield and Arduino Stella, you'll also need the [`StellaUWB` library](https://github.com/Truesense-it/StellaUWB). This library provides similar functionality but is specifically optimized for the DCU040 module in the Stella board.
+
+***The Arduino mbed OS Boards core is required to work with Stella's nRF52840 microcontroller.***
+
+#### Bluetooth® Communication
+
+For examples that use Bluetooth® Low Energy communication (like the Nearby Demo), you'll also need the [`ArduinoBLE` library](https://github.com/arduino/ArduinoBLE). This library enables Bluetooth Low Energy communication functionality for device discovery and initial connection setup before UWB ranging begins.
+
+#### Installing the Libraries and Board Cores
+
+To install the required libraries:
+
+1. Navigate to `Tools > Manage libraries...` or click the **Library Manager** icon in the left tab of the Arduino IDE.
+2. In the Library Manager tab, search for the library name (`PortentaUWBShield`, `StellaUWB`, or `ArduinoBLE`).
+3. Click "Install" to install the latest version of each library.
+
+
+
+To install the required board cores:
+
+1. Navigate to `Tools > Board > Boards Manager...`
+2. For the Portenta C33: Search for "Arduino Renesas Boards" and install the latest version.
+3. For the Arduino Stella (if using two-way ranging examples): Search for `Arduino mbed OS Boards` and install the latest version.
+
+
+
+***Important note: Make sure to install both the appropriate library and board core for your specific hardware. The Portenta UWB Shield with Portenta C33 requires the `PortentaUWBShield` library and Arduino Renesas Boards core. For examples involving Arduino Stella, you'll need the `StellaUWB` library and Arduino mbed OS Boards core. For examples involving Bluetooth® Low Energy communication, both devices will need the `ArduinoBLE` library installed.***
+
+### Pinout
+
+The full pinout is available and downloadable as PDF from the link below:
+
+- [Portenta UWB Shield pinout](https://docs.arduino.cc/resources/pinouts/ASX00074-full-pinout.pdf)
+
+### Datasheet
+
+The complete datasheet is available and downloadable as PDF from the link below:
+
+- [Portenta UWB Shield datasheet](https://docs.arduino.cc/resources/datasheets/ASX00074-datasheet.pdf)
+
+### Schematics
+
+The complete schematics are available and downloadable as PDF from the link below:
+
+- [Portenta UWB Shield schematics](https://docs.arduino.cc/resources/schematics/ASX00074-schematics.pdf)
+
+### STEP Files
+
+The complete STEP files are available and downloadable from the link below:
+
+- [Portenta UWB Shield STEP files](../../downloads/ASX00074-step.zip)
+
+## First Use
+
+### Unboxing the Product
+
+When you open the box of the Portenta UWB Shield, you will find the shield itself featuring two High-Density connectors designed to interface with compatible boards from the Portenta family. The shield also includes three pins for UART communications, which can be used primarily for debugging purposes.
+
+**It's important to note that the Portenta UWB Shield is not designed to function as a standalone device. It works as a shield that must be paired with a compatible Arduino board from the Portenta family.**
+
+Throughout this user manual, we will use the Portenta C33 as the main (host) board and the Portenta UWB Shield as the client board, connected via the High-Density pins.
+
+***When properly configured, the combined Portenta C33 and Portenta UWB Shield function as a UWB anchor node in a positioning system. This anchor can receive signals from UWB tags (mobile devices with UWB capability), precisely calculate their distance using time-of-flight principles, and determine their exact position in space when used in a network of anchors.***
+
+### Connecting the Shield
+
+Connect the Portenta UWB Shield directly to a Portenta C33 board through its High-Density connectors, as shown in the image below:
+
+
+
+Align the shield's High-Density connectors with those on the Portenta C33 board to connect the shield to the board. Then, gently press the shield onto the Portenta C33 until it is firmly seated, as shown in the image below:
+
+
+
+***Important note: Ensure that the Portenta C33 is powered off before connecting or disconnecting the shield to prevent potential damage to either of the boards.***
+
+### Powering the Shield
+
+The Portenta UWB Shield is powered exclusively through the `VCC` pins (+3.3 VDC) of its High-Density Connectors. These connectors are designed to be used with boards from the Portenta family, such as the Portenta C33 board. The power is supplied directly from the connected Portenta family board, which acts as the power source for the Portenta UWB Shield.
+
+***Important note: The Portenta UWB Shield does not have an independent power input. It receives power only through the High-Density connectors when properly connected to a Portenta C33 board. Additionally, if you plan to use Bluetooth® Low Energy functionality, make sure to connect an antenna to the Wi-Fi®/Bluetooth module of the Portenta C33 for optimal wireless performance.***
+
+### Nearby World Example
+
+Let's use the Portenta UWB Shield with the Portenta C33 to create a real-time distance measurement system using UWB technology. We will implement what we call the `Nearby World` example (based on the `NearbyDemo` sketch), which serves as our `Hello World` sketch for UWB technology. This example will verify the Portenta UWB Shield's connection to the host board, the host board's connection to the Arduino IDE and that the `PortentaUWBShield` library and both the board and the shield are working as expected.
+
+***This example sketch leverages Apple's Nearby Interaction protocol and similar UWB implementations on Android devices to establish a communication channel between the Portenta UWB Shield and a UWB-enabled smartphone, allowing precise distance and angle measurements.***
+
+#### How It Works
+
+The `Nearby World` example demonstrates the core functionality of UWB technology through a simple example sketch that can be described in the following key steps:
+
+1. **Bluetooth® Low Energy connection setup**: The Portenta UWB Shield establishes a Bluetooth Low Energy connection with a compatible smartphone app.
+2. **Configuration exchange**: The Bluetooth Low Energy connection is used to exchange necessary UWB configuration parameters.
+3. **UWB ranging**: Once configured, the actual UWB ranging session begins, providing precise distance measurements.
+4. **Real-time feedback**: Distance data is continuously updated and can be viewed on the IDE's Serial Monitor and the smartphone app.
+
+This process demonstrates the working principle of many UWB applications, where Bluetooth Low Energy is used primarily for discovery and configuration, while UWB handles the precise ranging.
+
+#### Uploading the Sketch
+
+First, connect the Portenta UWB Shield to the Portenta C33 as described in the [Connecting the Shield section](#connecting-the-shield). Now, connect the Portenta C33 to your computer using a USB-C cable, open the Arduino IDE and connect the board to it.
+
+***If you are new to the Portenta C33, please refer to the board's [user manual](https://docs.arduino.cc/tutorials/portenta-c33/user-manual/) for more detailed information.***
+
+Copy and paste the example sketch below into a new sketch in the Arduino IDE:
+
+```arduino
+/**
+ Nearby Demo Example for Portenta UWB Shield
+ Name: portenta_uwb_nearby.ino
+ Purpose: This sketch demonstrates how to use the Portenta UWB Shield
+ to measure distance between the shield and a UWB-enabled smartphone.
+
+ @author Pierpaolo Lento from Truesense, modified by the Arduino Product Experience Team
+ @version 1.0 15/04/25
+*/
+
+// Include required libraries
+#include
+#include
+
+// Track the number of connected Bluetooth® Low Energy clients
+uint16_t numConnected = 0;
+
+/**
+ Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+
+ // Nearby interaction uses Double-sided Two-way Ranging method
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0; jImportant note for Android devices: If Developer Mode is currently enabled on your Android device, please ensure all radio-related options remain at their default settings. We recommend keeping Developer Mode disabled for optimal UWB functionality. If you previously enabled it, consider disabling it for the most stable device operation.***
+
+Install one of these apps on your smartphone and follow these steps:
+
+1. Open the app on your smartphone.
+2. Look for a device named `Portenta UWB Shield` in the app's device list.
+3. Connect to the device.
+4. Once connected, the app will begin an UWB ranging session.
+5. Move your phone closer to and further from the Portenta UWB Shield.
+
+You should see the distance measurements updating in real-time both on your smartphone app and in the IDE's Serial Monitor. The distances are shown in millimeters, providing centimeter-level accuracy characteristic of the UWB technology.
+
+## NearbyDemo Example
+
+### About the NearbyDemo Example
+
+The NearbyDemo example sketch is a fundamental demonstration of the Portenta UWB Shield's core capabilities. This example showcases how to implement a direct distance measurement system between a stationary UWB device (the Portenta UWB Shield, acting as an UWB anchor) and a mobile UWB device (the UWB-enabled smartphone, acting as an UWB tag).
+
+This example sketch demonstrates the following:
+
+- **Hybrid communication protocol:** It shows the integration of Bluetooth® Low Energy for device discovery and configuration with UWB for precise distance measurements, a common pattern in production UWB applications.
+- **Standards compatibility:** The implementation is compatible with Apple's Nearby Interaction API and similar Android standards, demonstrating how the Arduino ecosystem can interact with mainstream consumer devices.
+- **Foundation for advanced applications:**: The ranging capability demonstrated is the building block for more sophisticated applications such as indoor positioning systems, geofencing, secure access and proximity-based automation.
+
+Some of the real-life applications for this example sketch are the following:
+
+- **Industrial automation:** Creating safety zones around machinery that can detect when workers approach with centimeter precision.
+- **Smart buildings:** Enabling location-aware services within facilities where GPS is unavailable.
+- **Healthcare:** Tracking the movement of patients, staff and equipment with high accuracy.
+- **Retail:** Implementing contactless payment systems with a higher degree of security than current NFC solutions.
+- **Consumer electronics:** Enabling precise "Find My Device" features and spatial awareness between gadgets.
+
+Now, let's take a closer look at the sketch:
+
+```arduino
+/**
+ Nearby Demo Example for Portenta UWB Shield
+ Name: portenta_uwb_nearby.ino
+ Purpose: This sketch demonstrates how to use the Portenta UWB Shield
+ to measure distance between the shield and an UWB-enabled smartphone.
+
+ @author Pierpaolo Lento from Truesense, modified by the Arduino Product Experience Team
+ @version 1.0 15/04/25
+*/
+
+// Include required libraries
+#include
+#include
+
+// Track the number of connected BLE clients
+uint16_t numConnected = 0;
+
+/**
+ Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+
+ // Nearby interaction uses Double-sided Two-way Ranging method
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0; j
+#include
+
+uint16_t numConnected = 0;
+```
+
+The code includes two essential libraries:
+
+- `ArduinoBLE`: Provides Bluetooth® Low Energy functionality for device discovery and initial connection.
+- `PortentaUWBShield`: The core library that enables interaction with the UWB hardware on the Portenta UWB Shield.
+
+The `numConnected` variable tracks how many Bluetooth Low Energy clients are currently connected to the Portenta UWB Shield.
+
+1. **Ranging Data Handler**
+
+```arduino
+void rangingHandler(UWBRangingData &rangingData) {
+ // ...
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+ // ...
+ if(twr[j].status==0 && twr[j].distance!=0xFFFF) {
+ Serial.print("Distance: ");
+ Serial.println(twr[j].distance);
+ }
+ }
+}
+```
+
+This callback function is the heart of the UWB functionality:
+
+- It's triggered whenever new ranging data is received from the UWB subsystem.
+- It checks if the measurement type is *Two-Way Ranging (TWR)*.
+- It validates the measurement (`status = 0` indicates a valid measurement, while `distance = 0xFFFF` is a reserved value indicating an invalid distance).
+- It extracts the distance measurements in millimeters and prints them to the IDE's Serial Monitor.
+
+1. **Connection Management**
+
+```arduino
+void clientConnected(BLEDevice dev) {
+ if (numConnected == 0) {
+ UWB.begin();
+ }
+ numConnected++;
+}
+
+void clientDisconnected(BLEDevice dev) {
+ UWBSession sess = UWBNearbySessionManager.find(dev);
+ sess.stop();
+ numConnected--;
+ if(numConnected==0) {
+ UWB.end();
+ }
+}
+```
+
+These functions handle Bluetooth® Low Energy connection events:
+
+- `clientConnected` initializes the UWB subsystem when the first client connects.
+- `clientDisconnected` shuts down the UWB subsystem when no clients are connected.
+
+This approach saves power by only running the shield's UWB hardware when it's needed.
+
+4. **Session Management**
+
+```arduino
+void sessionStarted(BLEDevice dev) {
+ Serial.println("Session started!");
+}
+
+void sessionStopped(BLEDevice dev) {
+ Serial.println("Session stopped!");
+}
+```
+
+These callbacks track the UWB session state:
+
+- A session begins after the Bluetooth® Low Energy connection is established and the UWB configuration is exchanged.
+- A session ends when the UWB communication is terminated, either by the client disconnecting or other factors.
+
+5. **Setup and Initialization**
+
+```arduino
+void setup() {
+ // ...
+ UWB.registerRangingCallback(rangingHandler);
+ UWBNearbySessionManager.onConnect(clientConnected);
+ UWBNearbySessionManager.onDisconnect(clientDisconnected);
+ UWBNearbySessionManager.onSessionStart(sessionStarted);
+ UWBNearbySessionManager.onSessionStop(sessionStopped);
+
+ UWBNearbySessionManager.begin("Portenta UWB Shield");
+}
+```
+
+The setup function:
+
+- Registers all the callback functions with the UWB subsystem.
+- Initializes the Bluetooth® Low Energy advertising with the name `Portenta UWB Shield`. This name is what will appear in the smartphone app's device list.
+
+1. **Main Loop**
+
+```arduino
+void loop() {
+ delay(100);
+ UWBNearbySessionManager.poll();
+}
+```
+
+The main loop is quite simple:
+
+- It calls the `UWBNearbySessionManager.poll()` function to process Bluetooth® Low Energy events.
+- The actual UWB ranging happens asynchronously through the callback system.
+
+This event-driven architecture allows the system to respond quickly to UWB and Bluetooth Low Energy events without blocking the main program flow.
+
+### Extending the Example Sketch
+
+The `NearbyDemo` example sketch provides a great foundation that you can build upon for more complex projects. Some possible extensions of this sketch include the following:
+
+- **Adding visual feedback:** Using LEDs or displays to indicate distance ranges.
+- **Implementing proximity alerts:** Triggering actions when devices come within a certain distance.
+- **Data logging:** Recording distance measurements for analysis and visualization.
+- **Integrating with other sensors:** Combining UWB data with other environmental sensors for context-aware applications.
+
+***Note: If you want to try this example yourself, please follow the same steps described in the [Nearby World Example](#nearby-world-example) section. The process for uploading the sketch and testing it with a smartphone is the same.***
+
+## Two-Way Ranging Example
+
+### About the Two-Way Ranging Example
+
+The Two-Way Ranging example demonstrates direct UWB communication between two Arduino devices: the Portenta UWB Shield (acting as a Controlee/Responder) and the Arduino Stella (acting as a Controller/Initiator). This example showcases the fundamental distance measurement capabilities of UWB technology in a dedicated device-to-device setup without requiring external UWB-enabled consumer devices such as smartphones.
+
+***Note: In UWB communication, the terms "Controller" and "Controlee" refer to specific roles within a ranging session. A __Controller__ (also called an Initiator) is the device that initiates and controls the ranging process, sending the initial signal and managing the timing of exchanges. A __Controlee__ (also called a Responder) is the device that responds to the Controller's signals. These terms are used interchangeably in UWB documentation: Controller/Initiator and Controlee/Responder refer to the same roles. In positioning systems, Controllers/Initiators often correspond to mobile "tags" while Controlees/Responders often serve as stationary "anchors".***
+
+This example demonstrates the following:
+
+- **Direct device-to-device communication:** Unlike the `NearbyDemo` example, which requires a smartphone, this example establishes direct UWB communication between two UWB-enabled Arduino devices.
+- **Controller-Controlee architecture:** It shows how to configure one device as a Controller (initiator of the ranging) and another as a Controlee (responder).
+- **Double-Sided Two-Way Ranging (DS-TWR):** This technique provides higher accuracy in distance measurements by accounting for clock drift between devices.
+- **Simple MAC addressing:** The implementation shows how to use short MAC addresses for device identification in UWB networks.
+
+Some of the real-life applications for this example include:
+
+- **Multi-node positioning systems:** Creating networks of UWB nodes for advanced indoor positioning.
+- **Robot navigation:** Enabling precise distance measurements between robots or between robots and fixed stations.
+- **Asset tracking:** Building custom tracking solutions with multiple Arduino-based UWB anchors.
+- **Proximity detection systems:** Creating safety systems that can detect precise distances between industrial equipment and personnel.
+- **Interactive installations:** Enabling position-based interactive exhibits in museums or public spaces.
+
+Here's the code for the Portenta UWB Shield, which acts as the Controlee (Responder) in this Two-Way Ranging scenario:
+
+```arduino
+/**
+ Two-Way Ranging Controlee Example for Portenta UWB Shield
+ Name: portenta_uwb_twr_controlee.ino
+ Purpose: This sketch configures the Portenta UWB Shield as a Controlee (Responder)
+ for Two-Way Ranging with an Arduino Stella configured as Controller.
+
+ @author Pierpaolo Lento from Truesense, modified by the Arduino Product Experience Team
+ @version 1.0 15/04/25
+*/
+
+// Include required UWB library
+#include
+
+/**
+ Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr=rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0;j
+
+/**
+ Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr=rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0;jImportant note: Notice how the MAC addresses are reversed between the two devices; this is critical for proper communication. In UWB communication, each device must know both its own address (`devAddr`) and the address of the device it is communicating with (`destination`). The Portenta UWB Shield identifies itself as `0x2222` and expects to communicate with `0x1111`, while the Arduino Stella identifies itself as `0x1111` and expects to communicate with `0x2222`. If these addresses don't match correctly, the devices won't be able to establish a ranging session. The prefix `0x` indicates these are hexadecimal values, which is a common notation in programming for representing memory addresses and identifiers.***
+
+The MAC addresses used in this example are short (2-byte) addresses for simplicity, but UWB also supports extended (8-byte) addresses for larger networks where unique identification is required. For basic two-device setups, these short addresses are enough, but for multi-node positioning systems, you may want to use extended addressing to avoid conflicts.
+
+2. **Setup and Initialization**
+
+The setup process for UWB communication differs between the two devices due to their different roles in the ranging session:
+
+**Portenta UWB Shield (Controlee/Responder):**
+
+```arduino
+// Configure the UWB session
+UWBSession session1;
+session1.sessionID(0x11223344); // Unique identifier for this session
+session1.sessionType(uwb::SessionType::RANGING);
+
+// Set application parameters
+if(!session1.appParams.addOrUpdateParam(AppConfigId::NO_OF_CONTROLEES,1))
+ Serial.println("could not add to app params");
+if(!session1.appParams.destinationMacAddr(dstAddr))
+ Serial.println("could not add to app params");
+
+// Apply default values for measurement repetition rate and antenna config
+session1.applyDefaults();
+
+// Configure ranging parameters
+session1.rangingParams.deviceMacAddr(srcAddr);
+session1.rangingParams.deviceRole(uwb::DeviceRole::RESPONDER);
+session1.rangingParams.deviceType(uwb::DeviceType::Controlee);
+session1.rangingParams.multiNodeMode(uwb::MultiNodeMode::UNICAST);
+session1.rangingParams.rangingRoundUsage(uwb::RangingMethod::DS_TWR);
+session1.rangingParams.scheduledMode(uwb::ScheduledMode::TIME_SCHEDULED);
+
+// Add the session to the manager and start it
+UWBSessionManager.addSession(session1);
+session1.init();
+session1.start();
+```
+
+**Arduino Stella (Controller/Initiator):**
+
+```arduino
+// Configure the UWB session
+UWBSession session1;
+session1.sessionID(0x11223344);
+session1.sessionType(UWBD_RANGING_SESSION);
+
+// Set application parameters
+if(!session1.appParams.addOrUpdateParam(UWB_SET_APP_PARAM_VALUE(NO_OF_CONTROLEES,1)))
+ Serial.println("could not add to app params");
+if(!session1.appParams.destinationMacAddr(dstAddr))
+ Serial.println("could not add to app params");
+
+// Apply default values for measurement repetition rate and antenna config
+session1.applyDefaults();
+
+// Configure ranging parameters
+session1.rangingParams.deviceMacAddr(srcAddr);
+session1.rangingParams.deviceRole(kUWB_DeviceRole_Initiator);
+session1.rangingParams.deviceType(kUWB_DeviceType_Controller);
+session1.rangingParams.multiNodeMode(kUWB_MultiNodeMode_UniCast);
+session1.rangingParams.rangingRoundUsage(kUWB_RangingRoundUsage_DS_TWR);
+session1.rangingParams.scheduledMode(kUWB_ScheduledMode_TimeScheduled);
+
+// Add the session to the manager and start it
+UWBSessionManager.addSession(session1);
+session1.init();
+session1.start();
+```
+
+***Important note: The session configuration is more detailed for the Portenta UWB Shield because it explicitly defines all the ranging parameters. The Arduino Stella uses the simplified `UWBTracker` class, which automatically sets up the device as a Controller/Initiator with appropriate defaults. However, both devices must use the same session ID (`0x11223344` in this example) to communicate with each other. This session ID is a shared identifier for the ranging session between these devices.***
+
+Let's examine some of the key configuration parameters:
+
+- `sessionID`: A unique 32-bit identifier (`0x11223344`) must match between devices in the same session.
+- `deviceRole`: Defines whether the device is a Responder (Controlee) or Initiator (Controller).
+- `multiNodeMode`: Set to UniCast for direct device-to-device communication.
+- `rangingRoundUsage`: Set to DS_TWR (Double-Sided Two-Way Ranging) for the highest accuracy.
+- `scheduledMode`: `TimeScheduled` mode allows the Controller to manage the timing of ranging exchanges.
+
+The initialization follows a specific sequence on both devices:
+
+- Register the ranging callback.
+- Start the UWB subsystem.
+- Configure the session parameters.
+- Initialize the session (apply the configuration).
+- Start the session (begin the ranging process).
+
+This process ensures both devices are properly configured before ranging begins, establishing a synchronized communication channel for precise distance measurements.
+
+1. **Ranging Data Handler**
+
+Both devices use nearly identical callback functions to process ranging data:
+
+```arduino
+void rangingHandler(UWBRangingData &rangingData) {
+ // ...
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ RangingMeasures twr=rangingData.twoWayRangingMeasure();
+ for(int j=0;j
+
+// Define proximity thresholds (centimeters)
+#define WORKSPACE_ACCESS_THRESHOLD 100 // 1 meter for door unlock
+#define EQUIPMENT_OPERATION_THRESHOLD 30 // 30 cm for machine enable
+
+// GPIO pin definitions
+#define DOOR_CONTROL_PIN 2 // Pin D2 for door lock control
+#define MACHINE_CONTROL_PIN 3 // Pin D3 for machine enable control
+
+// Variables for LED status indication
+unsigned long lastRedLedBlink = 0;
+const int RED_LED_BLINK_INTERVAL = 500;
+
+// Variables for proximity control
+unsigned long lastProximityStateChange = 0;
+#define DEBOUNCE_TIME 200 // 200ms debounce to prevent flickering
+
+// System state tracking
+bool doorUnlocked = false;
+bool machineEnabled = false;
+bool lastDoorState = false;
+bool lastMachineState = false;
+
+/**
+ Processes ranging data and controls access systems
+ @param rangingData Reference to UWB ranging data object
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+
+ if(rangingData.measureType() == (uint8_t)uwb::MeasurementType::TWO_WAY) {
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+
+ for(int j = 0; j < rangingData.available(); j++) {
+ if(twr[j].status == 0 && twr[j].distance != 0xFFFF) {
+ // Display current distance
+ Serial.print("User distance: ");
+ Serial.print(twr[j].distance);
+ Serial.println(" cm");
+
+ Serial.print("Workspace door: ");
+ Serial.println(doorUnlocked ? "UNLOCKED" : "LOCKED");
+
+ Serial.print("Equipment: ");
+ Serial.println(machineEnabled ? "ENABLED" : "DISABLED");
+
+ // Determine new system states based on proximity
+ bool newDoorState = (twr[j].distance <= WORKSPACE_ACCESS_THRESHOLD);
+ bool newMachineState = (twr[j].distance <= EQUIPMENT_OPERATION_THRESHOLD);
+
+ // Apply debouncing to prevent rapid state changes
+ if((newDoorState != doorUnlocked || newMachineState != machineEnabled) &&
+ (millis() - lastProximityStateChange > DEBOUNCE_TIME)) {
+
+ // Update door control
+ if(newDoorState != doorUnlocked) {
+ doorUnlocked = newDoorState;
+ digitalWrite(DOOR_CONTROL_PIN, doorUnlocked ? HIGH : LOW);
+ #if defined(ARDUINO_PORTENTA_C33)
+ digitalWrite(LEDG, doorUnlocked ? LOW : HIGH); // Green LED for door status
+ #endif
+ }
+
+ // Update machine control
+ if(newMachineState != machineEnabled) {
+ machineEnabled = newMachineState;
+ digitalWrite(MACHINE_CONTROL_PIN, machineEnabled ? HIGH : LOW);
+ #if defined(ARDUINO_PORTENTA_C33)
+ digitalWrite(LEDB, machineEnabled ? LOW : HIGH); // Blue LED for machine status
+ #endif
+ }
+
+ lastProximityStateChange = millis();
+ }
+ }
+ }
+ }
+}
+
+void setup() {
+ Serial.begin(115200);
+
+ // Initialize GPIO pins for control outputs
+ pinMode(DOOR_CONTROL_PIN, OUTPUT);
+ pinMode(MACHINE_CONTROL_PIN, OUTPUT);
+ digitalWrite(DOOR_CONTROL_PIN, LOW); // Start with door locked
+ digitalWrite(MACHINE_CONTROL_PIN, LOW); // Start with machine disabled
+
+#if defined(ARDUINO_PORTENTA_C33)
+ // Initialize RGB LEDs for status indication (only on Portenta C33)
+ pinMode(LEDR, OUTPUT); // Red: System status
+ pinMode(LEDG, OUTPUT); // Green: Door status
+ pinMode(LEDB, OUTPUT); // Blue: Machine status
+ digitalWrite(LEDR, LOW); // System initializing
+ digitalWrite(LEDG, HIGH); // Door locked (OFF)
+ digitalWrite(LEDB, HIGH); // Machine disabled (OFF)
+#endif
+
+ Serial.println("UWB Workspace Control System");
+ Serial.println("Initializing...");
+
+ // Define the source (this device) and destination MAC addresses, using 2-bytes MACs
+ // This device is the controlee/responder, so it uses 0x11,0x11
+ // and expects the controller/initiator at 0x22,0x22
+ uint8_t devAddr[] = {0x11, 0x11};
+ uint8_t destination[] = {0x22, 0x22};
+ UWBMacAddress srcAddr(UWBMacAddress::Size::SHORT, devAddr);
+ UWBMacAddress dstAddr(UWBMacAddress::Size::SHORT, destination);
+
+ // Register the ranging notification handler before starting
+ UWB.registerRangingCallback(rangingHandler);
+
+ UWB.begin(); // Start the UWB stack, use Serial for the log output
+ Serial.println("Starting UWB ...");
+
+ // Wait until the stack is initialized
+ while(UWB.state() != 0)
+ delay(10);
+
+ Serial.println("Starting session ...");
+ // Setup a session with ID 0x11223344
+ UWBRangingControlee myControlee(0x11223344, srcAddr, dstAddr);
+
+ // Add the session to the session manager
+ UWBSessionManager.addSession(myControlee);
+
+ // Prepare the session applying the default parameters
+ myControlee.init();
+
+ // Start the session
+ myControlee.start();
+
+#if defined(ARDUINO_PORTENTA_C33)
+ digitalWrite(LEDR, HIGH); // System ready (RED OFF)
+#endif
+
+ Serial.println("System ready!");
+ Serial.println("Door unlocks at: " + String(WORKSPACE_ACCESS_THRESHOLD) + " cm");
+ Serial.println("Machine enables at: " + String(EQUIPMENT_OPERATION_THRESHOLD) + " cm");
+
+#if defined(ARDUINO_PORTENTA_C33)
+ // Initialization complete signal
+ for(int i = 0; i < 3; i++) {
+ digitalWrite(LEDR, LOW);
+ digitalWrite(LEDG, LOW);
+ digitalWrite(LEDB, LOW);
+ delay(100);
+ digitalWrite(LEDR, HIGH);
+ digitalWrite(LEDG, HIGH);
+ digitalWrite(LEDB, HIGH);
+ delay(100);
+ }
+#endif
+}
+
+void loop() {
+#if defined(ARDUINO_PORTENTA_C33)
+ unsigned long currentTime = millis();
+
+ // Blink red LED to indicate system is running
+ if(currentTime - lastRedLedBlink >= RED_LED_BLINK_INTERVAL) {
+ lastRedLedBlink = currentTime;
+ digitalWrite(LEDR, !digitalRead(LEDR));
+ }
+#endif
+
+ delay(10);
+}
+```
+
+In this code, you can adjust the perimeters and the pins to use as triggers in the following lines:
+
+```arduino
+// Define proximity thresholds (centimeters)
+#define WORKSPACE_ACCESS_THRESHOLD 100 // 1 meter for door unlock
+#define EQUIPMENT_OPERATION_THRESHOLD 30 // 30 cm for machine enable
+
+// GPIO pin definitions
+#define DOOR_CONTROL_PIN 2 // Pin D2 for door lock control
+#define MACHINE_CONTROL_PIN 3 // Pin D3 for machine enable control
+```
+
+### Personal Stella Implementation
+
+The Arduino Stella provides user identification and proximity sensing. It is configured as a **Controller/Initiator**, meaning it initiates the ranging requests and processes the distance information. The Arduino Stella controls its built-in LED (`p37`) based on its proximity to the base station, with dynamic blinking rates based on distance.
+
+Below is the complete code for the Arduino Stella. To compile and upload the code to Arduino Stella, please select **Arduino Nano 33 BLE** as the target board:
+
+```arduino
+/**
+ UWB Tag (Controller/Initiator) with Dynamic Proximity Detection
+*/
+
+// Include required UWB library for Arduino Stella
+#include
+
+// Define proximity thresholds (centimeters)
+#define WORKSPACE_ACCESS_THRESHOLD 100 // 1 meter for door unlock
+#define EQUIPMENT_OPERATION_THRESHOLD 30 // 30 cm for machine enable
+
+// Variables for LED feedback
+int blinkInterval = 0;
+bool ledState = false;
+bool lastLedPhysicalState = true;
+unsigned long lastStateChange = 0;
+unsigned long lastBlinkTime = 0;
+#define DEBOUNCE_TIME 200
+
+// Stella's built-in LED
+#define LED_PIN p37
+
+/**
+ Processes ranging data and provides visual feedback
+ @param rangingData Reference to UWB ranging data object
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+
+ if(rangingData.measureType() == (uint8_t)uwb::MeasurementType::TWO_WAY) {
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+
+ for(int j = 0; j < rangingData.available(); j++) {
+ if(twr[j].status == 0 && twr[j].distance != 0xFFFF) {
+ Serial.print("Distance to base: ");
+ Serial.print(twr[j].distance);
+ Serial.println(" cm");
+
+ // Determine LED behavior based on proximity zones
+ int newBlinkInterval;
+ if(twr[j].distance > WORKSPACE_ACCESS_THRESHOLD) {
+ newBlinkInterval = 0; // Outside workspace - LED off
+ Serial.println("Status: Outside workspace");
+ }
+ else if(twr[j].distance <= EQUIPMENT_OPERATION_THRESHOLD) {
+ newBlinkInterval = 100; // Equipment zone - very fast blink
+ Serial.println("Status: Equipment operation zone");
+ }
+ else if(twr[j].distance <= WORKSPACE_ACCESS_THRESHOLD) {
+ newBlinkInterval = 500; // Workspace zone - slow blink
+ Serial.println("Status: Workspace access zone");
+ }
+
+ // Apply debouncing
+ if(newBlinkInterval != blinkInterval && (millis() - lastStateChange > DEBOUNCE_TIME)) {
+ blinkInterval = newBlinkInterval;
+ lastStateChange = millis();
+ lastBlinkTime = millis();
+ }
+ }
+ }
+ }
+}
+
+void setup() {
+ Serial.begin(115200);
+
+ pinMode(LED_PIN, OUTPUT);
+ digitalWrite(LED_PIN, HIGH); // Start with LED off
+ lastLedPhysicalState = true;
+
+ Serial.println("UWB Personal Access Tag - Stella");
+
+ // Define the source (this device) and destination MAC addresses, using 2-bytes MACs
+ // This device is the controller/initiator, so it uses 0x22,0x22
+ // and targets the responder/controlee at 0x11,0x11
+ uint8_t devAddr[] = {0x22, 0x22};
+ uint8_t destination[] = {0x11, 0x11};
+ UWBMacAddress srcAddr(UWBMacAddress::Size::SHORT, devAddr);
+ UWBMacAddress dstAddr(UWBMacAddress::Size::SHORT, destination);
+
+ // Register the ranging notification handler before starting
+ UWB.registerRangingCallback(rangingHandler);
+
+ UWB.begin(); // Start the UWB stack, use Serial for the log output
+ Serial.println("Starting UWB ...");
+
+ // Wait until the stack is initialized
+ while(UWB.state() != 0)
+ delay(10);
+
+ Serial.println("Starting session ...");
+
+ // Setup a session with ID 0x11223344 as Controller/Initiator (default role)
+ UWBTracker myTracker(0x11223344, srcAddr, dstAddr);
+
+ // Add the session to the session manager
+ UWBSessionManager.addSession(myTracker);
+
+ // Prepare the session applying the default parameters
+ myTracker.init();
+
+ // Start the session
+ myTracker.start();
+
+ Serial.println("Personal tag ready!");
+ Serial.println("Proximity zones:");
+ Serial.println("- Outside workspace: LED off");
+ Serial.println("- Workspace zone (≤" + String(WORKSPACE_ACCESS_THRESHOLD) + "cm): Slow blink");
+ Serial.println("- Equipment zone (≤" + String(EQUIPMENT_OPERATION_THRESHOLD) + "cm): Fast blink");
+
+ // Initialization complete signal
+ for(int i = 0; i < 3; i++) {
+ digitalWrite(LED_PIN, LOW);
+ delay(100);
+ digitalWrite(LED_PIN, HIGH);
+ delay(100);
+ }
+}
+
+void loop() {
+ unsigned long currentTime = millis();
+
+ // Handle LED control based on proximity zones
+ if(blinkInterval == 0) {
+ // Outside workspace - LED off
+ if(lastLedPhysicalState != true) {
+ digitalWrite(LED_PIN, HIGH);
+ lastLedPhysicalState = true;
+ ledState = false;
+ }
+ } else {
+ // Inside workspace - blink at appropriate interval
+ if(currentTime - lastBlinkTime >= blinkInterval) {
+ lastBlinkTime = currentTime;
+ ledState = !ledState;
+
+ bool newPhysicalState = !ledState;
+ if(newPhysicalState != lastLedPhysicalState) {
+ digitalWrite(LED_PIN, newPhysicalState ? HIGH : LOW);
+ lastLedPhysicalState = newPhysicalState;
+ }
+ }
+ }
+
+ delay(10);
+}
+```
+
+In this code, you can adjust the perimeters in the following lines:
+
+```arduino
+// Define proximity thresholds (centimeters)
+#define WORKSPACE_ACCESS_THRESHOLD 100 // 1 meter for door unlock
+#define EQUIPMENT_OPERATION_THRESHOLD 30 // 30 cm for machine enable
+```
+
+## System Operation & Deployment
+
+Once you have uploaded the corresponding code to the **Arduino Stella** and the **Portenta C33** with the **Portenta UWB Shield**, you will have a UWB workspace control system operating with dual zone proximity detection to provide automated access control and equipment safety management. With this, the system will do the following tasks:
+
+
+
+**Workspace Access Zone:** When an authorized user approaches within 1 meter of the Portenta UWB Shield station, the system automatically unlocks the workspace door by activating the door control relay connected to pin D2.
+
+The base station's **green LED** illuminates to confirm the unlocked status. At the same time, the user's Arduino Stella begins slow blinking at 500 ms intervals to indicate workspace access authorization.
+
+
+
+**Equipment Operation Zone (30 centimeters):** When the user moves within 30 centimeters of the Portenta UWB Shield station, the pin D3 connected to the machine control relay is activated, enabling connected equipment for operation.
+
+The base station's **blue LED** illuminates to show that the equipment is enabled. At the same time, the Arduino Stella switches to rapid blinking at 100 ms intervals to indicate the equipment operation zone.
+
+The system provides comprehensive visual feedback through multiple LED indicators, allowing users and supervisors to quickly understand the current system status.
+
+The Portenta UWB Shield station uses three different colored LEDs to indicate different aspects of system operation.
+
+- **Red LED** continuously blinks to indicate that the UWB system is operational and actively monitoring user proximity.
+- **Green LED** provides visual confirmation of workspace door status, remaining illuminated when the workspace is unlocked and turning off when the area is secured.
+- **Blue LED** indicates equipment status, glowing when machinery is enabled for operation and turning off when equipment is disabled.
+
+The user's Arduino Stella also provides visual feedback about their authorization status. The LED remains off when the user is outside the workspace beyond the 1 meter threshold, indicating they are beyond the authorization required area.
+
+Upon entering the workspace zone within 1 meter of the base station, the LED begins slow blinking at 500 ms intervals to confirm workspace access authorization.
+
+When the user approaches equipment within the 30 centimeter operation zone, the LED switches to fast blinking at 100 ms intervals, providing feedback that they are in position to operate the machinery.
+
+## System Testing
+
+The following animation illustrates a workflow where an Arduino Stella user approaches the workspace, operates machinery, completes their task and leaves. The system automatically manages workspace access and equipment control and then secures everything when the authorized user leaves.
+
+
+
+You can test out the UWB-activated workspace and equipment control by following these testing steps:
+
+**Workspace Access Testing:** approach the workspace from multiple directions while monitoring the 1 meter activation zone. Verify that the door control pin activates consistently at the correct distance and test action reversal when you move beyond the threshold. The LED indicators should represent door status throughout these movements.
+
+**Equipment Operation Testing:** test the 30 cm equipment activation zone from various approach angles and verify immediate equipment shutdown when you move beyond the safety radius. Check that equipment control only activates when workspace access is already granted and test quick entry and exit movements to verify that debouncing prevents false activations.
+
+**System Integration Testing:** Validate the operations visually from approach to operation to departure. Test system responsiveness during quick zone transitions, check LED feedback to ensure it matches control outputs, and check system behavior with multiple approach patterns.
+
+With this, you will have tested an example of the UWB technology's centimeter level precision through immediate response to proximity changes and visual feedback of operational status, showing its intuitive implementation for industrial applications.
+
+## Complete UWB Activated Workspace & Equipment Control Example
+
+All the necessary files to test this application note example can be downloaded [here](assets/uwb-access-control-system.zip).
+
+[](assets/uwb-access-control-system.zip)
+
+## Conclusion
+
+In this application note, you have learned to create a basic UWB-based workspace control system that can provide security and safety improvement in industrial environments requiring quick area transitions. By implementing the centimeter level precision of UWB technology, we have made a system that provides uninterrupted automatic access control and equipment operation management using Arduino Stella and the Portenta UWB Shield as a base station.
+
+The application note's dual-zone implementation example shows UWB's capability to create multiple control levels within a single system, from broad workspace access to precise equipment operation zones. You can extend this system to support multiple users, additional equipment zones, and integration with existing industrial control systems.
+
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/compatibility.yml b/content/hardware/05.pro-solutions/solutions-and-kits/stella/compatibility.yml
new file mode 100644
index 0000000000..5697b67ad1
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/compatibility.yml
@@ -0,0 +1,6 @@
+software:
+ - arduino-ide
+ - arduino-cli
+ - iot-cloud
+ - cloud-editor
+hardware:
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/featured.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/featured.png
new file mode 100644
index 0000000000..dc2c7d794a
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/featured.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-block-diagram.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-block-diagram.png
new file mode 100644
index 0000000000..03bed08053
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-block-diagram.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-connectors-bottom.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-connectors-bottom.png
new file mode 100644
index 0000000000..ece99c9b5b
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-connectors-bottom.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-connectors-top.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-connectors-top.png
new file mode 100644
index 0000000000..1cf4928206
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-connectors-top.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-dimensions.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-dimensions.png
new file mode 100644
index 0000000000..797f193d72
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-board-dimensions.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-pinout-v3.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-pinout-v3.png
new file mode 100644
index 0000000000..87551896f9
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-pinout-v3.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-power-tree.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-power-tree.png
new file mode 100644
index 0000000000..3616094521
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/assets/stella-power-tree.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/datasheet.md b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/datasheet.md
new file mode 100644
index 0000000000..10f8fb3392
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/datasheet/datasheet.md
@@ -0,0 +1,352 @@
+---
+identifier: ABX000131
+title: Arduino® Stella
+type: pro
+variant: 'Datasheet'
+author: José Bagur
+---
+
+
+
+# Description
+
+
The Arduino Stella redefines location tracking with its advanced microcontroller, the nRF52840 from Nordic Semiconductor, and the DCU040 Ultra-Wide Band (UWB) module from Truesense. Tailored for modern tracking needs, the Stella excels in pinpointing warehouse assets, ensuring healthcare safety and automating smart buildings. Seamlessly integrating with the Portenta UWB Shield and UWB-enabled smartphones through the dedicated NXP® Trimension App, Apple's Nearby Interaction APIs or Android's UWB Jetpack library, the Stella delivers robust finder functionality, precise point-to-point triggering and comprehensive tracking capabilities for applications demanding reliable, real-time location data.
+
+# Target Areas
+
+
High precision RTLS, industrial applications, finder for IoT, consumer applications, smart home applications
+
+
+
+# CONTENTS
+
+## Application Examples
+
+
The Arduino Stella is a versatile tool for implementing high-precision location tracking and monitoring solutions across various industries. Explore the possibilities of integrating Ultra-Wide Band (UWB) technology into your projects with the following application examples:
+
+- **Asset tracking and management:** Optimize your inventory and resource tracking with the Stella, enabling real-time location monitoring for:
+ -
Warehouse management: Deploy the Stella tags throughout your warehouse to track high-value inventory, equipment and assets with centimeter-level precision, dramatically improving inventory accuracy and reducing search times.
+ -
Equipment monitoring: Attach the Stella to critical equipment in manufacturing environments to track location, monitor usage patterns and ensure proper utilization across facilities.
+ -
Retail inventory: Implement a real-time inventory system that provides accurate stock location data, reducing out-of-stock situations and improving customer satisfaction.
+
+- **Healthcare applications:** Enhance patient safety and medical asset tracking with the Stella's precise location capabilities:
+ -
Medical equipment tracking: Monitor the real-time location of critical medical devices and equipment across hospital facilities, ensuring rapid access during emergencies and optimizing its use.
+ -
Patient monitoring: Create wearable tags for patients that provide precise location data within healthcare facilities, improving safety for vulnerable individuals and enabling rapid response to emergencies.
+ -
Staff workflow optimization: Analyze movement patterns of healthcare providers to identify inefficiencies and improve response times to patient needs.
+
+- **Smart building automation:** Transform your building management systems with the Stella, providing location-aware functionality for:
+ -
Personalized environment control: Automatically adjust lighting, temperature and other environmental factors based on occupant location and preferences, improving comfort and energy efficiency.
+ -
Occupancy analytics: Gather precise data about space use, dwell times and movement patterns to optimize building layout and resource allocation.
+ -
Contactless access: Enable seamless, proximity-based access control that automatically unlocks doors or activates elevators as authorized personnel approach.
+
+- **Consumer applications:** Create innovative user experiences with the Stella's UWB capabilities:
+ -
Item finding: Develop tag-based systems that allow users to precisely locate misplaced items through smartphone interactions, providing both distance and directional guidance.
+ -
Proximity-based triggers: Implement context-aware applications that automatically execute actions when specific tags come within a defined range, such as unlocking vehicles, activating smart home scenes or triggering notifications.
+ -
Interactive entertainment: Create location-based gaming experiences, augmented reality applications or interactive exhibits that respond to user movement with centimeter-level accuracy.
+
+
+
+## Features
+
+### General Specifications Overview
+
+
The Arduino Stella is a powerful microcontroller and Ultra-Wide Band (UWB) technology board designed for RTLS, tag and tracker applications. Based on the advanced nRF52840 microcontroller from Nordic Semiconductor, it meets the challenges of sophisticated applications that need protocol concurrency and a rich and varied set of peripherals and features.
+
+Below is a summary of the board's key features.
+
+| **Feature** | **Description** |
+|------------------|-----------------------------------------------------------------------------------------------------------------------|
+| Microcontroller | Nordic Semiconductor nRF52840 Arm® Cortex®-M4 32-bit processor running at 64MHz |
+| Internal Memory | 1 MB Flash and 256 kB RAM |
+| Connectivity | UWB CH5, CH9 and Bluetooth® 5.0 |
+| USB Connectivity | USB-C® port for power and data |
+| Power Supply | Various options: USB-C® port, single-cell CR2032 battery and external power supply connected through J-Link connector |
+| Peripherals | Buzzer x1, I2C (x1) on QWIIC connector, reset button (x1), user-programmable button (x1), user-programmable LED (x1) |
+| Debugging | JTAG/SWD debug port |
+| Dimensions | 38 mm x 38 mm |
+
+Below is a summary of the board's microcontroller features.
+
+| **Feature** | **Description** |
+|----------------------------|-----------------------------------------------------------------------------------------------------|
+| Microcontroller | Nordic Semiconductor nRF52840 32-bit Arm® Cortex®-M4 CPU with floating point unit running at 64 MHz |
+| Wireless Protocol | Bluetooth® 5, IEEE 802.15.4-2006, 2.4 GHz transceiver |
+| Memory | 1 MB Flash, 256 kB RAM |
+| Security Features | ARM TrustZone® CryptoCell cryptographic unit |
+| Interfaces and Peripherals | UART, SPI, TWI, PDM, I2S, QSPI, PWM, 12-bit ADC, NFC-A, USB 2.0 |
+
+Below is a summary of the board's UWB module's (DCU040) key features.
+
+| **Feature** | **Description** |
+| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
+| Module | Truesense DCU040 (based on the NXP Trimension™ SR040 UWB IC, with power management, clock control, filters and peripheral components) |
+| Ranging | 2-way ranging, achieving an accuracy of <±10 cm |
+| Frequency Range | 6.24–8.24 GHz |
+| Max Output Power (EIRP) | 14.7 dBm |
+
+
+
+Below is a summary of the board's accelerometer features.
+
+| **Feature** | **Description** |
+| ------------------ | ---------------------------------------------------------------------- |
+| Accelerometer | 3-axis MEMS digital output accelerometer (SC7A20) |
+| Scale Range | ±2 G / ±4 G / ±8 G / ±16 G (user-selectable) |
+| Detection Features | 6D/4D orientation, free-fall, single/double click and motion detection |
+| Interrupt | Programmable interrupt generator |
+| Self Test | Embedded self test |
+| Memory | Embedded FIFO |
+| Durability | 10000 G (high shock survivability) |
+| Power | Low power mode consumption (down to 2 µA) |
+
+Below is a summary of the board's buzzer features.
+
+| **Feature** | **Description** |
+|-------------|--------------------------|
+| Model | FUET-5020 |
+| Frequency | 4 kHz |
+| Sound Level | 75 dB at 10 cm |
+| Dimensions | 5.0 mm x 5.0 mm x 2.0 mm |
+
+
+
+### Included Accessories
+
+- No accessories are included
+
+### Related Products
+
+- Arduino® Portenta C33 (SKU: ABX00074)
+- Arduino® Portenta UWB Shield (SKU: ASX00074)
+- Arduino USB Type-C® Cable 2-in-1 (SKU: TPX00094)
+
+
+
+## Ratings
+
+### Recommended Operating Conditions
+
+
The table below provides a comprehensive guideline for the optimal use of the Arduino Stella, outlining typical operating conditions and design limits. The operating conditions of the Stella are largely a function based on its component's specifications.
+
+| **Parameter** | **Symbol** | **Min** | **Typ** | **Max** | **Unit** |
+|:----------------------------:|:-----------------:|:-------:|:-------:|:-------:|:--------:|
+| USB Supply Input Voltage | VUSB | - | 5.0 | - | V |
+| Battery Supply Input Voltage | VBAT | 2.0 | 3.0 | 3.3 | V |
+| J-link Supply Input Voltage | VJLINK | 3.0 | 3.3 | 3.6 | V |
+| Operating Temperature | TOP | -20 | - | 70 | °C |
+
+### Current Consumption
+
+
The table below summarizes the power consumption of the Stella on different test cases. Notice that the operating current of the board will depend greatly on the application.
+
+| **Parameter** | **Symbol** | **Min** | **Typ** | **Max** | **Unit** |
+|:---------------------------------:|:---------------:|:-------:|:-------:|:-------:|:--------:|
+| Normal Mode with BLE Advertising¹ | INM1 | - | 7 | - | mA |
+| Normal Mode with UWB Ranging² | INM2 | - | 10.6 | - | mA |
+
+
1 BLE advertising, frequency is 10 Hz (100 ms). 2 UWB ranging, frequency is 5 Hz (200 ms).
+
+
+
+## Functional Overview
+
+
The core of the Arduino Stella is the nRF52840 microcontroller from Nordic Semiconductor. The board also contains several peripherals connected to its microcontroller.
+
+### Pinout
+
+
The Stella connectors pinput is shown in the figure below.
An overview of the Arduino Stella high-level architecture is illustrated in the figure below.
+
+
+
+
+
+### Power Supply
+
+
The Arduino Stella can be powered through one of these interfaces:
+
+- **USB-C® port:** The Stella can be powered through the onboard USB-C® port.
+- **+3 VDC battery:** Using the onboard CR2032 battery holder.
+- **Onboard J-Link connector:** The Stella can also be powered through the board's J-Link connector.
+
+
The figure below shows the power options available on the Stella and illustrates the main system power architecture.
System integrators can use the Arduino Stella's QWIIC connectors to expand signals of the board to a custom-designed daughter or carrier board. The table below summarizes the I2C pins mapping on the QWIIC connector and the shared peripherals/resources. Please refer to the board's pinout for the board's QWIIC connector pinout.
1Status column indicates the current status of the pins. "Free" means the pins are not in use by another resource or peripheral of the board and are available for usage, while "Shared" means the pins are used by one or several resources or peripherals of the board.
+
+
+
+## Device Operation
+
+### Getting Started - IDE
+
If you want to program your Arduino Stella while offline you need to install the Arduino® Desktop IDE [1]. To connect the Stella to your computer, you will need a USB-C® cable.
+
+### Getting Started - Arduino Cloud Editor
+
+
All Arduino devices work out of the box on the Arduino Cloud Editor [2] by installing a simple plugin. The Arduino Cloud Editor is hosted online. Therefore, it will always be up-to-date with all the latest features and support for all boards and devices. Follow [3] to start coding on the browser and upload your sketches onto your device.
+
+### Getting Started - Arduino Cloud
+
+
All Arduino IoT-enabled products are supported on Arduino Cloud, which allows you to log, graph, and analyze sensor data, trigger events, and automate your home or business. Take a look at the official documentation [3] to know more.
+
+### Sample Sketches
+
+
Sample sketches for the Stella can be found either in the "Examples" menu in the Arduino IDE or the "Arduino Stella Documentation" section of Arduino documentation [4].
+
+### Online Resources
+
+
Now that you have gone through the basics of what you can do with the device, you can explore the endless possibilities it provides by checking exciting projects on Arduino Project Hub [5], the Arduino Library Reference [6] and the Arduino online store [7], where you will be able to complement your project with additional extensions, sensors and actuators.
+
+
+
+## Mechanical Information
+
+
The Arduino Stella is a double-sided 38.0 mm x 38.0 mm board with a USB-C® port overhanging the top edge, a QWIIC connector on the top side of the board, a CR2032 battery connector and a J-Link connector on the bottom side of the board.
+
+### Board Dimensions
+
+
The Stella board outline dimensions can be seen in the figure below.
The connectors of the Stella are placed on the top and bottom side of the board. The placement of the connectors in the top side of the board can be seen in the figure below.
We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).
+
+### Declaration of Conformity to EU RoHS & REACH 191 11/26/2018
+
+
Arduino boards are in compliance with Directive 2011/65/EU of the European Parliament and Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.
Arduino boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.
+
+### Conflict Minerals Declaration
+
+
As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regards to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder, or as a component in metal alloys. As part of our reasonable due diligence Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.
+
+## FCC Caution
+
+
Any changes or modifications not expressly approved by the party responsible for compliance could void the user's authority to operate the equipment.
+
+This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions:
+
+1. This device may not cause harmful interference.
+2. This device must accept any interference received, including interference that may cause undesired operation.
+
+**FCC RF Radiation Exposure Statement:**
+
+1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter.
+2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment.
+3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body.
+
+
Note: This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures:
+
+- Reorient or relocate the receiving antenna.
+- Increase the separation between the equipment and receiver.
+- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected.
+- Consult the dealer or an experienced radio/TV technician for help.
+
+
English: User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions:
+
+1. This device may not cause interference
+2. This device must accept any interference, including interference that may cause undesired operation of the device.
+
+
French: Le présent appareil est conforme aux CNR d'Industrie Canada applicables aux appareils radio exempts de licence. L'exploitation est autorisée aux deux conditions suivantes:
+
+1. L'appareil ne doit pas produire de brouillage
+2. L'utilisateur de l'appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d'en compromettre le fonctionnement.
+
+**IC SAR Warning:**
+
+
English: This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body.
+
+
French: Lors de l'installation et de l'exploitation de ce dispositif, la distance entre le radiateur et le corps est d'au moins 20 cm.
+
+
Important: The operating temperature of the EUT can't exceed 70 °C and shouldn't be lower than -20 °C.
+
+
Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states.
+
+## Company Information
+
+| **Company name** | **Arduino S.r.l.** |
+|------------------|----------------------------------------------|
+| Company address | Via Andrea Appiani, 25 - 20900 Monza (Italy) |
+
+## Reference Documentation
+
+| **No.** | **Reference** | **Link** |
+|:-------:|:----------------------------:|-------------------------------------------------------|
+| 1 | Arduino IDE (Desktop) | https://www.arduino.cc/en/software |
+| 2 | Arduino IDE (Cloud) | https://create.arduino.cc/editor |
+| 3 | Cloud IDE Getting Started | https://docs.arduino.cc/arduino-cloud/guides/overview |
+| 4 | Arduino Stella Documentation | https://docs.arduino.cc/hardware/stella |
+| 5 | Project Hub | https://projecthub.arduino.cc/ |
+| 6 | Library Reference | https://www.arduino.cc/reference/en/ |
+| 7 | Arduino Store | https://store.arduino.cc/ |
+
+## Document Revision History
+
+| **Date** | **Revision** | **Changes** |
+|:----------:|:------------:|----------------------------------------|
+| 24/03/2025 | 1 | First release |
\ No newline at end of file
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-full-pinout.pdf b/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-full-pinout.pdf
new file mode 100644
index 0000000000..48298fa343
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-full-pinout.pdf differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-schematics.pdf b/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-schematics.pdf
new file mode 100644
index 0000000000..70ae541a7c
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-schematics.pdf differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-step.zip b/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-step.zip
new file mode 100644
index 0000000000..d9f49c810f
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/downloads/ABX00131-step.zip differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/essentials.md b/content/hardware/05.pro-solutions/solutions-and-kits/stella/essentials.md
new file mode 100644
index 0000000000..b36f10383b
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/essentials.md
@@ -0,0 +1,32 @@
+---
+productsLibrariesMap:
+ - arduinoble
+---
+
+
+
+ A quick guide to installing and setting up your board with the Arduino IDE.
+
+
+
+
+
+
+ The complete Arduino sketches from the Pro tutorials.
+
+
+ Ultra-Wideband communication library for the Arduino Stella board.
+
+
+
+
+
+ Built-in Examples are sketches included in the Arduino IDE and demonstrate all basic Arduino commands.
+
+
+ Discover interesting articles, principles and techniques related to the Arduino ecosystem.
+
+
+ Arduino programming language can be divided in three main parts: functions, values (variables and constants), and structure.
+
+
\ No newline at end of file
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/features.md b/content/hardware/05.pro-solutions/solutions-and-kits/stella/features.md
new file mode 100644
index 0000000000..cebce8ce13
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/features.md
@@ -0,0 +1,32 @@
+
+
+The **Arduino Stella** redefines location tracking using the advanced nRF52840 microcontroller from Nordic Semiconductor and the DCU040 UWB module from TrueSense. Tailored for modern tracking needs, it excels in pinpointing warehouse assets, ensuring healthcare safety and automating smart buildings. Seamlessly integrating with the **Portenta UWB Shield** and UWB-enabled smartphones through the dedicated NXP® Trimension App, Apple's Nearby Interaction APIs or Android's UWB Jetpack library, it delivers robust finder functionality, precise point-to-point triggering and comprehensive tracking capabilities for applications demanding reliable, real-time location data.
+
+
+
+
+
+
+Enjoy pinpoint accuracy in real-time location tracking, making finding and managing assets easy even in complex environments. Take advantage of the ready-to-use Arduino IDE library, making development faster and easier with plenty of examples and tutorials.
+Seamlessly integrate with Arduino Cloud for streamlined data management, remote monitoring, and advanced analytics.
+
+
+
+
+
+
+
+The nRF52840 is fully multiprotocol capable with full protocol concurrency. It supports Bluetooth Low Energy, Bluetooth Mesh, Thread, Zigbee, 802.15.4 and 2.4 GHz proprietary stacks.
+
+
+
+
+
+
+The onboard sensor and actuator, which include a buzzer and a 3-axis accelerometer (the SC7A20 from Silan), help you create the perfect solution for your use case.
+
+
+
+
+
+
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/image.svg b/content/hardware/05.pro-solutions/solutions-and-kits/stella/image.svg
new file mode 100644
index 0000000000..76ab916532
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/image.svg
@@ -0,0 +1,3 @@
+
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/interactive/ABX00131-pinout.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/interactive/ABX00131-pinout.png
new file mode 100644
index 0000000000..87551896f9
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/interactive/ABX00131-pinout.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/product.md b/content/hardware/05.pro-solutions/solutions-and-kits/stella/product.md
new file mode 100644
index 0000000000..82fb883162
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/product.md
@@ -0,0 +1,14 @@
+---
+title: Stella
+url_shop: https://store.arduino.cc/products/stella
+url_guide: /tutorials/01.user-manual
+primary_button_url: /tutorials/stella/user-manual/
+primary_button_title: Get Started
+core: arduino:mbed_nano
+forumCategorySlug: '/hardware/stella/91'
+certifications: [CE, FCC, UKCA, ROHS, REACH, WEEE]
+productCode: '211'
+sku: [ABX00131]
+---
+
+TrueSense powers the Arduino Stella. Within the Portenta family, harness the advanced Ultra-Wideband (UWB) technology for unmatched accuracy and real-time tracking capabilities.
\ No newline at end of file
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tech-specs.md b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tech-specs.md
new file mode 100644
index 0000000000..56d21b117f
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tech-specs.md
@@ -0,0 +1 @@
+Here you will find the technical specifications for the Arduino® Stella.
\ No newline at end of file
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tech-specs.yml b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tech-specs.yml
new file mode 100644
index 0000000000..13847e82e1
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tech-specs.yml
@@ -0,0 +1,33 @@
+Board:
+ Name: Arduino® Stella
+ SKU: ABX00131
+Microcontroller: nRF52840 Arm® Cortex®-M4 32-bit processor
+USB connector: USB-C®
+Ultra-wideband:
+ Module: DCU040 from TrueSense
+ Antenna: x1 (embedded PCB antenna)
+ Channels: 5, 9
+ Frequency range: 6.24 - 8.24 GHz
+ Max output power: 14.7 dBm
+Connectivity:
+ Bluetooth®: Bluetooth® 5.0
+Secure element: Arm® TrustZone® CryptoCell cryptographic unit
+Actuator: Buzzer (80dB min)
+Accelerometer: Silan SC7A20 3-axis
+Communication Interfaces:
+ I2C: Yes, 1
+ UART: Yes, 1
+ USB: USB 2.0
+Power:
+ Board operating voltage: +3.3 VDC
+ Board input voltage battery holder: +3 VDC
+ Board input voltage USB-C connector: +5 VDC
+ Board input voltage onboard JTAG connector: +3.3 VDC
+Clock speed: 64 MHz
+Memory:
+ Internal: 1 MB Flash, 256 kB RAM
+ External: 16 MB NOR Flash, 8 MB SDRAM
+Hardware debugging interface: JTAG/SWD
+Dimensions:
+ Width: 38 mm
+ Length: 38 mm
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/front-page.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/front-page.png
new file mode 100644
index 0000000000..def848d99a
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/front-page.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/hero-banner.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/hero-banner.png
new file mode 100644
index 0000000000..89ae092dcf
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/hero-banner.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-1.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-1.png
new file mode 100644
index 0000000000..0cf8adbb8e
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-1.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-2.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-2.png
new file mode 100644
index 0000000000..1cc4f27161
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-2.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-3.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-3.png
new file mode 100644
index 0000000000..4ff31b5393
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-3.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-4.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-4.png
new file mode 100644
index 0000000000..66b308c298
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-4.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-6.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-6.png
new file mode 100644
index 0000000000..091ace7b97
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-6.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-7.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-7.png
new file mode 100644
index 0000000000..b1c7e36c56
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-7.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-8.png b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-8.png
new file mode 100644
index 0000000000..1cec885af9
Binary files /dev/null and b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/assets/user-manual-8.png differ
diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/content.md b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/content.md
new file mode 100644
index 0000000000..d19a35d6d6
--- /dev/null
+++ b/content/hardware/05.pro-solutions/solutions-and-kits/stella/tutorials/01.user-manual/content.md
@@ -0,0 +1,1192 @@
+---
+title: 'Arduino® Stella User Manual'
+difficulty: intermediate
+compatible-products: [arduino-stella]
+description: 'Learn about the hardware and software features of the Arduino Stella.'
+tags:
+ - UWB
+ - Positioning
+ - Real-time location
+ - Sensors
+ - User manual
+author: 'José Bagur'
+hardware:
+ - hardware/06.portenta/boards/arduino-stella
+software:
+ - ide-v2
+---
+
+This user manual provides a comprehensive overview of the Arduino Stella, highlighting its hardware and software elements. With it, you will learn how to set up, configure and use all the main features of the Arduino Stella.
+
+
+
+## Hardware and Software Requirements
+
+### Hardware Requirements
+
+- [Arduino Stella (SKU: ABX00131)](https://store.arduino.cc/products/arduino-stella) (x1)
+- [Portenta UWB Shield (SKU: ASX00074)](https://store.arduino.cc/products/portenta-uwb-shield) (x1)
+- [Portenta C33 (SKU: ABX00074)](https://store.arduino.cc/products/portenta-c33) (x1)
+- [USB-C® cable (SKU: TPX00094)](https://store.arduino.cc/products/usb-cable2in1-type-c) (x2)
+- CR2032 battery (x1) (optional)
+
+### Software Requirements
+
+- [Arduino IDE 2.0+](https://www.arduino.cc/en/software)
+- [`StellaUWB` library](https://github.com/Truesense-it/StellaUWB) (designed for the Arduino Stella)
+- [`PortentaUWBShield` library](https://github.com/Truesense-it/PortentaUWBShield) (designed for the Portenta UWB Shield)
+- [`ArduinoBLE` library](https://github.com/arduino/ArduinoBLE)
+- [Arduino mbed OS Boards core](https://github.com/arduino/ArduinoCore-mbed) (required for the nRF52840 microcontroller of the Arduino Stella)
+
+## Arduino Stella Overview
+
+The Arduino Stella redefines location tracking with its advanced microcontroller, the nRF52840 from Nordic Semiconductor, and the DCU040 Ultra-Wide Band (UWB) module from Truesense. Tailored for modern tracking needs, the Arduino Stella excels in pinpointing warehouse assets, ensuring healthcare safety and automating smart buildings.
+
+
+
+Seamlessly integrating with the Portenta UWB Shield and UWB-enabled smartphones through the dedicated NXP® Trimension™ App, Apple's Nearby Interaction APIs or Android's UWB Jetpack library, the Arduino Stella delivers robust finder functionality, precise point-to-point triggering and comprehensive tracking capabilities for applications demanding reliable, real-time location data.
+
+### Understanding UWB Technology
+
+Ultra-Wideband (UWB) is a radio technology that uses very low energy levels for short-range, high-bandwidth communications over a large portion of the radio spectrum. Unlike traditional narrowband radio systems like Bluetooth® or Wi-Fi®, which operate in specific frequency bands, UWB transmits across a wide range of frequency bands (typically 500 MHz or more), allowing for greater precision in location tracking and higher data throughput.
+
+#### UWB vs. Traditional Narrowband Technologies
+
+The fundamental difference between UWB and traditional wireless technologies (Wi-Fi, Bluetooth®, Zigbee® and Cellular) lies in their transmission methods:
+
+| **Feature** | **Traditional Narrowband Radio** | **Ultra-Wideband Impulse Radio** |
+|:--------------:|:------------------------------------:|:----------------------------------:|
+| Transmit Power | Higher transmit power | Lower transmit power |
+| Initialization | Slow startup/initialization | Fast startup/initialization |
+| Latency | High latency | Very low latency |
+| Ranging | Poor ranging (signal strength based) | Excellent ranging (time of flight) |
+| Multipath | Poor multipath robustness | Very good multipath robustness |
+
+Traditional narrowband systems use frequency or amplitude modulation to send data, requiring a reference carrier frequency between the transmitter and the receiver. This slows down the initialization process and restricts data transmission speed. UWB, in contrast, uses impulse radio technology. This technology consists of short pulses of energy (typically less than 5 nanoseconds) spread across a wide frequency band, allowing quick link initialization and extremely fast data transmission.
+
+#### Key Characteristics of UWB
+
+- **High precision**: UWB can determine the relative position of devices with centimeter-level accuracy (typically 5-10 cm), far more precise than GPS (meters), Bluetooth® (1-3 meters) or Wi-Fi (2-15 meters).
+- **Low-power consumption**: Despite its high data rates, UWB consumes very little power, making it suitable for battery-operated devices like the Arduino Stella, which is optimized for energy efficiency.
+- **Short range**: Typically effective within 10-30 meters, making it ideal for indoor positioning applications where GPS signals are weak or unavailable.
+- **Strong security**: The unique physical layer characteristics of UWB, including its wide bandwidth and low power spectral density, make it more resistant to jamming, eavesdropping, and relay attacks compared to other wireless technologies.
+- **Immunity to multipath fading**: The wide bandwidth of UWB signals makes them highly resistant to multipath interference, where signals bounce off surfaces and create echoes.
+- **Coexistence with other standards**: Due to its low output spectral power, UWB can operate alongside other wireless technologies without causing interference—other radio systems interpret UWB signals simply as background noise.
+
+#### Spectrum and Frequencies
+
+UWB operates in specific frequency bands regulated by telecommunications authorities worldwide. The Arduino Stella's UWB module (DCU040) uses channels in the 6.0 to 8.5 GHz range, allowing for high bandwidth communication while minimizing interference with other wireless technologies. In general, UWB can operate in the 3.1-10.6 GHz range, with channel widths of 500 MHz or greater.
+
+#### How UWB Technology Works
+
+UWB primarily uses a technique called "Time of Flight" (ToF) or "Time Difference of Arrival" (TDoA) to determine the distance between UWB-enabled devices with extraordinary precision. In a nutshell, this technique consists of the following steps:
+
+1. An UWB transmitter sends a signal with a precise timestamp.
+2. An UWB receiver detects the signal and calculates the time it took to arrive.
+3. Since radio waves travel at the speed of light (approximately 30 cm per nanosecond), the system can calculate the distance with high precision.
+
+For even greater accuracy, UWB can use the "Two-Way Ranging" (TWR) technique, where devices exchange several messages to account for clock synchronization issues. In a nutshell, this technique consists of the following steps:
+
+1. Device A sends a message to device B and records the time (T1).
+2. Device B receives the message and sends a response after a known delay.
+3. Device A receives the response and records the time (T2).
+4. The round-trip time, minus processing delays, determines the distance.
+
+The Arduino Stella is typically configured as a Controller/Initiator in Two-Way Ranging scenarios, initiating the ranging process with other UWB devices like the Portenta UWB Shield. This mobile tag functionality makes it perfect for applications where tracking the position of moving objects is required.
+
+#### Low Latency Advantage
+
+The impulse radio technology of UWB provides an inherent advantage in terms of latency. The data latency is very low since each pulse is extremely short (5 nanoseconds or less). Narrowband systems must modulate their carrier signals more slowly to maintain their frequency allocation, resulting in longer data latency and startup times.
+
+In UWB systems, there's no need to establish a stable carrier signal for the receiver to lock onto, allowing data transmission to start immediately, representing a significant advantage for time-sensitive applications.
+
+#### UWB System Components
+
+In an UWB positioning system, devices typically operate in one of two roles:
+
+- **Anchors**: Fixed-position devices (like the Portenta UWB Shield with a Portenta C33) that provide reference points for the positioning system. A minimum of three anchors is typically needed for 2D positioning and four for 3D positioning.
+- **Tags**: Mobile devices that communicate with anchors to determine their position in space. The Arduino Stella is designed to function as a tag, with its compact form factor, battery operation and optimized power management, making it ideal for this role. Tags can also be integrated into smartphones, wearables or other IoT devices.
+
+#### Applications of Arduino Stella with UWB Technology
+
+The Arduino Stella's combination of UWB technology, compact form factor, and battery operation makes it ideal for numerous applications:
+
+- **Asset tracking**: Attach Stella tags to valuable items in warehouses, hospitals, or construction sites to monitor their location with centimeter-level accuracy.
+- **Wearable positioning**: Incorporate Arduino Stella into wearable devices for personnel tracking in industrial environments, healthcare settings, or event venues.
+- **Robot and drone navigation**: Enable precise indoor navigation for autonomous systems where GPS is unavailable.
+- **Social distancing solutions**: Create personal tags that can alert wearers when they come too close to others.
+- **Interactive installations**: Power location-aware exhibits in museums or public spaces that respond to visitors' precise positions.
+- **Sports performance analysis**: Track athletes' movements with high precision for training analysis and performance optimization.
+- **Security applications**: Create authorized personnel tags that can trigger secure access systems only when physically present (resistant to relay attacks).
+- **IoT sensor networks**: Deploy Arduino Stella devices as mobile sensor nodes that can report both environmental data and precise location information.
+
+The Arduino Stella's programmability, combined with its UWB capabilities, accelerometer, and Bluetooth® connectivity, makes it an extremely versatile platform for developing innovative positioning solutions.
+
+### Arduino Stella Architecture Overview
+
+The Arduino Stella features a secure, certified and durable design that suits various applications, such as asset tracking, healthcare monitoring, smart building automation and consumer applications.
+
+The top view of the Arduino Stella is shown in the image below:
+
+
+
+The bottom view of the Arduino Stella is shown in the image below:
+
+
+
+Here's an overview of the board's main components shown in the images:
+
+- **Microcontroller**: At the heart of the Arduino Stella is the nRF52840 microcontroller from Nordic Semiconductor. This powerful 32-bit Arm® Cortex®-M4 processor runs at 64 MHz and features 1 MB Flash and 256 kB RAM, providing ample processing power and memory for sophisticated applications.
+- **UWB Module**: The Truesense DCU040 module (based on the NXP Trimension SR040 UWB IC) enables precise distance measurement with accuracy better than ±10 cm using two-way ranging techniques.
+- **Connectivity**: Besides UWB, the Arduino Stella includes Bluetooth® 5.0 connectivity through the nRF52840's integrated radio, supporting IEEE 802.15.4-2006 and 2.4 GHz transceiver capabilities.
+- **Accelerometer**: A 3-axis MEMS digital output accelerometer (SC7A20) enhances the board's motion detection capabilities, with programmable sensitivity ranges of ±2G/±4G/±8G/±16G and features like orientation detection, free-fall detection, and click detection.
+- **User interfaces**: The board includes a user-programmable button, a user-programmable LED and a buzzer (FUET-5020) that can be used for audible alerts.
+- **Connectors**: The Arduino Stella features a USB-C port for power and data, a QWIIC connector for I²C expansion, a CR2032 battery holder and a J-Link connector for debugging and alternative power input.
+
+### Board Libraries
+
+The Arduino Stella and Portenta UWB Shield use different libraries and board cores due to their different microcontrollers and UWB modules:
+
+#### Arduino Stella Library
+
+The [`StellaUWB` library](https://github.com/Truesense-it/StellaUWB) contains an application programming interface (API) to read data from the Arduino Stella and control its parameters and behavior. This library is designed to work with the DCU040 module on the Arduino Stella and supports the following:
+
+- One-way ranging (Time Difference of Arrival - TDoA) and two-way ranging (TWR).
+- Power management for battery-efficient operation.
+- Accelerometer control for motion detection.
+- Bluetooth® Low Energy connectivity for configuration and communication.
+
+***The [Arduino mbed OS Boards core](https://github.com/arduino/ArduinoCore-mbed) is required to work with the Arduino Stella's nRF52840 microcontroller.***
+
+#### Portenta UWB Shield Library
+
+If you plan to use the Arduino Stella with a Portenta UWB Shield for two-way ranging, you'll also need the [`PortentaUWBShield` library](https://github.com/Truesense-it/PortentaUWBShield) for the Portenta UWB Shield. This library is specifically designed for the DCU150 module used in the shield.
+
+***The [Arduino Renesas Portenta Boards core](https://github.com/arduino/ArduinoCore-renesas) is required to work with the Portenta C33 board that hosts the UWB Shield.***
+
+#### Bluetooth® Communication
+
+For examples that use Bluetooth® Low Energy communication, you'll also need the [`ArduinoBLE` library](https://github.com/arduino/ArduinoBLE). This library enables Bluetooth® Low Energy functionality for device discovery and initial connection setup before UWB ranging begins.
+
+#### Installing the Libraries and Board Cores
+
+To install the required libraries:
+
+1. Navigate to `Tools > Manage libraries...` or click the **Library Manager** icon in the left tab of the Arduino IDE.
+2. In the Library Manager tab, search for the library name (`StellaUWB`, `PortentaUWBShield`, or `ArduinoBLE`).
+3. Click "Install" to install the latest version of each library.
+
+
+
+To install the required board cores:
+
+1. Navigate to `Tools > Board > Boards Manager...`
+2. For the Arduino Stella: Search for "Arduino mbed OS Boards" and install the latest version.
+3. For the Portenta C33: Search for "Arduino Renesas Boards" and install the latest version.
+
+
+
+***Important note: Make sure to install both the appropriate library and board core for your specific hardware. The Arduino Stella requires the `StellaUWB` library and Arduino mbed OS Boards core, while the Portenta UWB Shield with Portenta C33 requires the `PortentaUWBShield` library and Arduino Renesas Boards core. For examples involving Bluetooth® Low Energy communication, both devices will need the `ArduinoBLE` library installed.***
+
+### Pinout
+
+The full pinout is available and downloadable as PDF from the link below:
+
+- [Arduino Stella pinout](https://docs.arduino.cc/resources/pinouts/ABX00131-full-pinout.pdf)
+
+### Datasheet
+
+The complete datasheet is available and downloadable as PDF from the link below:
+
+- [Arduino Stella datasheet](https://docs.arduino.cc/resources/datasheets/ABX00131-datasheet.pdf)
+
+### Schematics
+
+The complete schematics are available and downloadable as PDF from the link below:
+
+- [Arduino Stella schematics](https://docs.arduino.cc/resources/schematics/ABX00131-schematics.pdf)
+
+### STEP Files
+
+The complete STEP files are available and downloadable from the link below:
+
+- [Arduino Stella STEP files](../../downloads/ABX00131-step.zip)
+
+## First Use
+
+### Unboxing the Product
+
+When you open the box of the Arduino Stella, you will find the board itself with its distinctive octagonal shape, featuring a USB-C port on one edge. The Arduino Stella is a compact board with dimensions of 38 mm x 38 mm, designed to be easily integrated into various tracking applications.
+
+The Arduino Stella comes ready to use, but you may want to add a CR2032 battery if you plan to use it in portable applications that require battery power.
+
+### Powering the Board
+
+The Arduino Stella can be powered through one of these interfaces:
+
+The Arduino Stella can be powered through its USB-C port or Qwiic connector for stationary applications. The USB-C port is the simplest and most common method, providing a stable +5 VDC power source when connected to a computer or wall adapter. The Qwiic connector can also supply power when connecting the board to a system that provides power through the Qwiic bus, enabling integration with other Qwiic-compatible components.
+
+
+
+For portable and wireless applications, the Arduino Stella offers two additional power options: the onboard CR2032 battery holder. The CR2032 battery holder allows you to install a +3 VDC coin cell battery, making the board completely wireless for mobile projects. The J-Link connector, while primarily used for debugging purposes, can also serve as a power input when needed.
+
+
+
+***Important note: When using battery power, ensure the correct polarity when inserting the CR2032 battery into the holder. The positive (+) side should face up, away from the PCB, as shown in the image below.***
+
+
+
+***Warning: When using Arduino Stella with USB-C power, remove the CR2032 battery; never power the Arduino Stella from both battery and USB simultaneously. The board is designed to prioritize USB power when connected. Removing the battery when working with USB will extend its life, ensure the most reliable operation and maximize battery lifespan.***
+
+### Connecting to Your Computer
+
+To program the Arduino Stella, connect it to your computer using a USB-C cable:
+
+1. Insert the USB-C connector into the port on the Arduino Stella.
+2. Connect the other end to an available USB port on your computer.
+
+Once connected, you should see a power indicator light up on the board, indicating it's receiving power from the USB port.
+
+### Nearby World Example
+
+Let's use the Arduino Stella to create a real-time distance measurement system using UWB technology. We will implement what we call the `Nearby World` example, which serves as our `Hello World` sketch for UWB technology. This example will verify the Arduino Stella's UWB capabilities and its ability to communicate with UWB-enabled smartphones.
+
+***This example sketch leverages Apple's Nearby Interaction protocol and similar UWB implementations on Android devices to establish a communication channel between the Arduino Stella and a UWB-enabled smartphone, allowing precise distance and angle measurements.***
+
+#### How It Works
+
+The `Nearby World` example demonstrates the core functionality of UWB technology through a simple example sketch that can be described in the following key steps:
+
+1. **Bluetooth® Low Energy connection setup**: The Arduino Stella broadcasts using Bluetooth Low Energy to make itself discoverable to compatible smartphone apps.
+2. **Configuration exchange**: The Bluetooth Low Energy connection is used to exchange necessary UWB configuration parameters between the Arduino Stella and the smartphone.
+3. **UWB ranging**: Once configured, the actual UWB ranging session begins, providing precise distance measurements.
+4. **Real-time feedback**: Distance data is continuously updated and can be viewed both on the IDE's Serial Monitor and on the smartphone app. The Arduino Stella's buzzer and LED can also provide feedback based on distance.
+
+This process demonstrates the working principle of many UWB applications, where Bluetooth Low Energy is used primarily for discovery and configuration, while UWB handles the precise ranging.
+
+#### Uploading the Sketch
+
+First, connect the Arduino Stella to your computer using a USB-C cable, open the Arduino IDE and connect the board to it.
+
+***If you are new to the Arduino Stella, ensure you have installed the required board support package by going to Tools > Board > Boards Manager and searching for "mbed OS Boards".***
+
+Copy and paste the example sketch below into a new sketch in the Arduino IDE:
+
+```arduino
+/**
+ Nearby World Example for Arduino Stella
+ Name: arduino_stella_nearby.ino
+ Purpose: This sketch demonstrates how to use the Arduino Stella
+ to measure distance between the board and a UWB-enabled smartphone.
+
+ Compatible with:
+ - NXP Trimensions AR (https://apps.apple.com/us/app/nxp-trimensions-ar/id1606143205)
+ - Qorvo Nearby Interaction (https://apps.apple.com/us/app/qorvo-nearby-interaction/id1615369084)
+ - NXP android demo (source code https://github.com/nxp-uwb/UWBJetpackExample)
+ - Truesense Android demo (source code https://github.com/Truesense-it/TSUwbDemo-Android)
+
+ @author Arduino Product Experience Team
+ @version 1.0 15/04/25
+*/
+
+// Include required libraries
+#include
+#include
+
+// Track the number of connected Bluetooth® Low Energy clients
+uint16_t numConnected = 0;
+
+// Buzzer activation thresholds (in mm)
+#define PROXIMITY_CLOSE 500 // 50cm
+#define PROXIMITY_MEDIUM 1500 // 1.5m
+#define PROXIMITY_FAR 3000 // 3m
+
+/**
+ @brief Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+
+ // Nearby interaction uses Double-sided Two-way Ranging method
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0; jImportant note for Android devices: If Developer Options is currently enabled on your Android device, please ensure all radio-related options remain at their default settings. We recommend keeping Developer Options disabled for optimal UWB functionality. If you previously enabled it, consider disabling it for the most stable device operation.***
+
+Install one of these apps on your smartphone and follow these steps:
+
+1. Open the app on your smartphone.
+2. Look for a device named `Arduino Stella` in the app's device list.
+3. Connect to the device.
+4. Once connected, the app will initiate a UWB ranging session, and you'll hear a single beep from the Arduino Stella.
+5. Move your phone closer to and further from the Arduino Stella.
+
+You should see the distance measurements updating in real-time both on your smartphone app and in the IDE's Serial Monitor. The distances are shown in millimeters, providing centimeter-level accuracy characteristic of UWB technology. Additionally, the Arduino Stella's LED and buzzer will provide feedback based on the measured distance, with more frequent responses as you get closer to the device.
+
+## NearbyDemo Example
+
+### About the NearbyDemo Example
+
+The `NearbyDemo` example sketch is a fundamental demonstration of the Arduino Stella's core capabilities. This example showcases how to implement a direct distance measurement system between the Arduino Stella (acting as a UWB tag) and a UWB-enabled smartphone (acting as a UWB anchor).
+
+This example sketch demonstrates the following:
+
+- **Hybrid communication protocol:** It shows the integration of Bluetooth® Low Energy for device discovery and configuration with UWB for precise distance measurements, a common pattern in production UWB applications.
+- **Standards compatibility:** The implementation is compatible with Apple's Nearby Interaction API and similar Android standards, demonstrating how the Arduino ecosystem can interact with mainstream consumer devices.
+- **Foundation for advanced applications:** The ranging capability demonstrated is the building block for more sophisticated applications such as indoor positioning systems, geofencing, secure access and proximity-based automation.
+
+Some of the real-life applications for this example sketch are the following:
+
+- **Asset tracking:** Creating systems where Arduino Stella boards attached to valuable items can be precisely located within warehouses or facilities.
+- **Smart building automation:** Implementing room-level presence detection that can adjust lighting, temperature, and other environmental factors based on the location of people wearing or carrying Arduino Stella devices.
+- **Healthcare:** Tracking the movement of patients, staff, and medical equipment with high accuracy within hospital environments.
+- **Retail analytics:** Analyzing customer movement patterns in stores to optimize layout and product placement.
+- **Consumer item finding:** Creating tag-based systems that allow users to precisely locate misplaced items through smartphone interactions.
+
+Now, let's take a closer look at the sketch:
+
+```arduino
+/**
+ NearbyDemo Example for Arduino Stella
+ Name: arduino_stella_nearbydemo.ino
+ Purpose: This sketch demonstrates how to use the Arduino Stella
+ to measure distance between the board and a UWB-enabled device.
+
+ @author Pierpaolo Lento from Truesense, modified by the Arduino Product Experience Team
+ @version 1.0 15/04/25
+*/
+
+// Include required libraries
+#include
+#include
+
+// Track the number of connected Bluetooth® Low Energy clients
+uint16_t numConnected = 0;
+
+/**
+ Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+
+ // Nearby interaction uses Double-sided Two-way Ranging method
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0; j
+#include
+
+uint16_t numConnected = 0;
+```
+
+The code includes two essential libraries:
+
+- `ArduinoBLE`: Provides Bluetooth® Low Energy functionality for device discovery and initial connection.
+- `StellaUWB`: The core library that enables interaction with the UWB hardware on the Arduino Stella.
+
+The `numConnected` variable tracks how many Bluetooth Low Energy clients are currently connected to the Arduino Stella.
+
+2. **Ranging Data Handler**
+
+```arduino
+void rangingHandler(UWBRangingData &rangingData) {
+ // ...
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ RangingMeasures twr = rangingData.twoWayRangingMeasure();
+ // ...
+ if(twr[j].status==0 && twr[j].distance!=0xFFFF) {
+ Serial.print("- Distance: ");
+ Serial.println(twr[j].distance);
+ }
+ }
+}
+```
+
+This callback function is the heart of the UWB functionality:
+
+- It's triggered whenever new ranging data is received from the UWB subsystem.
+- It checks if the measurement type is *Two-Way Ranging (TWR)*, which is the method used by Apple's Nearby Interaction protocol.
+- It extracts the distance measurements in millimeters and prints them to the IDE's Serial Monitor.
+- It validates the measurement (`status = 0` indicates a valid measurement, while `distance = 0xFFFF` is a reserved value indicating an invalid distance).
+
+3. **Connection Management**
+
+```arduino
+void clientConnected(BLEDevice dev) {
+ if (numConnected == 0) {
+ UWB.begin();
+ }
+ numConnected++;
+}
+
+void clientDisconnected(BLEDevice dev) {
+ numConnected--;
+ if(numConnected==0) {
+ UWB.end();
+ }
+}
+```
+
+These functions handle Bluetooth® Low Energy connection events:
+
+- `clientConnected` initializes the UWB subsystem when the first client connects.
+- `clientDisconnected` shuts down the UWB subsystem when no clients are connected.
+
+This approach saves power by only running the board's UWB hardware when it's needed, which is crucial for battery-powered applications.
+
+1. **Session Management**
+
+```arduino
+void sessionStarted(BLEDevice dev) {
+ Serial.println("- Session started!");
+}
+
+void sessionStopped(BLEDevice dev) {
+ Serial.println("- Session stopped!");
+}
+```
+
+These callbacks track the UWB session state:
+
+- A session begins after the Bluetooth® Low Energy connection is established and the UWB configuration is exchanged.
+- A session ends when the UWB communication is terminated, either by the client disconnecting or other factors.
+
+5. **Setup and Initialization**
+
+```arduino
+void setup() {
+ // ...
+ UWB.registerRangingCallback(rangingHandler);
+ UWBNearbySessionManager.onConnect(clientConnected);
+ UWBNearbySessionManager.onDisconnect(clientDisconnected);
+ UWBNearbySessionManager.onSessionStart(sessionStarted);
+ UWBNearbySessionManager.onSessionStop(sessionStopped);
+
+ UWBNearbySessionManager.begin("Arduino Stella");
+}
+```
+
+The setup function:
+
+- Registers all the callback functions with the UWB subsystem.
+- Initializes the Bluetooth® Low Energy advertising with the name `Arduino Stella`. This name is what will appear in the smartphone app's device list.
+
+6. **Main Loop**
+
+```arduino
+void loop() {
+ delay(100);
+ UWBNearbySessionManager.poll();
+}
+```
+
+The main loop is quite simple:
+
+- It calls the `UWBNearbySessionManager.poll()` function to process Bluetooth® Low Energy events.
+- The actual UWB ranging happens asynchronously through the callback system.
+
+This event-driven architecture allows the system to respond quickly to UWB and Bluetooth Low Energy events without blocking the main program flow.
+
+### Extending the Example Sketch
+
+The `NearbyDemo` example sketch provides a great foundation that you can build upon for more complex projects. Some possible extensions of this sketch include the following:
+
+- **Adding visual feedback:** Using the onboard LED to indicate distance ranges.
+- **Implementing audio feedback:** Using the onboard buzzer to create proximity alerts or distance-based tones.
+- **Incorporating accelerometer data:** Combining motion detection with UWB ranging for smarter tracking applications.
+- **Power optimization:** Implementing sleep modes and wake-on-motion features for extended battery life.
+- **Data logging:** Recording distance measurements over time for analysis and visualization.
+
+***Note: If you want to try this example yourself, please follow the same steps described in the [Nearby World Example](#nearby-world-example) section. The process for uploading the sketch and testing it with a smartphone is the same.***
+
+## Two-Way Ranging Example
+
+### About the Two-Way Ranging Example
+
+The Two-Way Ranging example demonstrates direct UWB communication between two Arduino devices: the Portenta UWB Shield (acting as a Controlee/Responder) and the Arduino Stella (acting as a Controller/Initiator). This example showcases the fundamental distance measurement capabilities of UWB technology in a dedicated device-to-device setup without requiring external UWB-enabled consumer devices such as smartphones.
+
+***Note: In UWB communication, the terms "Controller" and "Controlee" refer to specific roles within a ranging session. A __Controller__ (also called an Initiator) is the device that initiates and controls the ranging process, sending the initial signal and managing the timing of exchanges. A __Controlee__ (also called a Responder) is the device that responds to the Controller's signals. These terms are used interchangeably in UWB documentation: Controller/Initiator and Controlee/Responder refer to the same roles. In positioning systems, Controllers/Initiators often correspond to mobile "tags" while Controlees/Responders often serve as stationary "anchors".***
+
+This example demonstrates the following:
+
+- **Direct device-to-device communication:** Unlike the `NearbyDemo` example, which requires a smartphone, this example establishes direct UWB communication between two UWB-enabled Arduino devices.
+- **Controller-Controlee architecture:** It shows how to configure one device as a Controller (initiator of the ranging) and another as a Controlee (responder).
+- **Double-Sided Two-Way Ranging (DS-TWR):** This technique provides higher accuracy in distance measurements by accounting for clock drift between devices.
+- **Simple MAC addressing:** The implementation shows how to use short MAC addresses for device identification in UWB networks.
+
+Some of the real-life applications for this example include:
+
+- **Multi-node positioning systems:** Creating networks of UWB nodes for advanced indoor positioning.
+- **Robot navigation:** Enabling precise distance measurements between robots or between robots and fixed stations.
+- **Asset tracking:** Building custom tracking solutions with multiple Arduino-based UWB anchors.
+- **Proximity detection systems:** Creating safety systems that can detect precise distances between industrial equipment and personnel.
+- **Interactive installations:** Enabling position-based interactive exhibits in museums or public spaces.
+
+Here's the code for the Portenta UWB Shield, which acts as the Controlee (Responder) in this Two-Way Ranging scenario:
+
+```arduino
+/**
+ Two-Way Ranging Controlee Example for Portenta UWB Shield
+ Name: portenta_uwb_twr_controlee.ino
+ Purpose: This sketch configures the Portenta UWB Shield as a Controlee (Responder)
+ for Two-Way Ranging with an Arduino Stella configured as Controller.
+
+ @author Pierpaolo Lento from Truesense, modified by the Arduino Product Experience Team
+ @version 1.0 15/04/25
+*/
+// Include required UWB library
+#include
+/**
+ Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr=rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0;j
+/**
+ Processes ranging data received from UWB communication.
+ @param rangingData Reference to UWB ranging data object.
+*/
+void rangingHandler(UWBRangingData &rangingData) {
+ Serial.print("- GOT RANGING DATA - Type: ");
+ Serial.println(rangingData.measureType());
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ // Get the TWR (Two-Way Ranging) measurements
+ RangingMeasures twr=rangingData.twoWayRangingMeasure();
+
+ // Loop through all available measurements
+ for(int j=0;jImportant note: Notice how the MAC addresses are reversed between the two devices; this is critical for proper communication. In UWB communication, each device must know both its own address (`devAddr`) and the address of the device it is communicating with (`destination`). The Portenta UWB Shield identifies itself as `0x2222` and expects to communicate with `0x1111`, while the Arduino Stella identifies itself as `0x1111` and expects to communicate with `0x2222`. If these addresses don't match correctly, the devices won't be able to establish a ranging session. The prefix `0x` indicates these are hexadecimal values, which is a common notation in programming for representing memory addresses and identifiers.***
+
+The MAC addresses used in this example are short (2-byte) addresses for simplicity, but UWB also supports extended (8-byte) addresses for larger networks where unique identification is required. For basic two-device setups, these short addresses are enough, but for multi-node positioning systems, you may want to use extended addressing to avoid conflicts.
+
+2. **Setup and Initialization**
+
+The setup process for UWB communication differs between the two devices due to their different roles in the ranging session:
+
+**Portenta UWB Shield (Controlee/Responder):**
+
+```arduino
+// Configure the UWB session
+UWBSession session1;
+session1.sessionID(0x11223344); // Unique identifier for this session
+session1.sessionType(uwb::SessionType::RANGING);
+
+// Set application parameters
+if(!session1.appParams.addOrUpdateParam(AppConfigId::NO_OF_CONTROLEES,1))
+ Serial.println("could not add to app params");
+if(!session1.appParams.destinationMacAddr(dstAddr))
+ Serial.println("could not add to app params");
+
+// Apply default values for measurement repetition rate and antenna config
+session1.applyDefaults();
+// Configure ranging parameters
+session1.rangingParams.deviceMacAddr(srcAddr);
+session1.rangingParams.deviceRole(uwb::DeviceRole::RESPONDER);
+session1.rangingParams.deviceType(uwb::DeviceType::Controlee);
+session1.rangingParams.multiNodeMode(uwb::MultiNodeMode::UNICAST);
+session1.rangingParams.rangingRoundUsage(uwb::RangingMethod::DS_TWR);
+session1.rangingParams.scheduledMode(uwb::ScheduledMode::TIME_SCHEDULED);
+
+// Add the session to the manager and start it
+UWBSessionManager.addSession(session1);
+session1.init();
+session1.start();
+```
+
+**Arduino Stella (Controller/Initiator):**
+
+```arduino
+// Configure the UWB session
+UWBSession session1;
+session1.sessionID(0x11223344);
+session1.sessionType(UWBD_RANGING_SESSION);
+
+// Set application parameters
+if(!session1.appParams.addOrUpdateParam(UWB_SET_APP_PARAM_VALUE(NO_OF_CONTROLEES,1)))
+ Serial.println("could not add to app params");
+if(!session1.appParams.destinationMacAddr(dstAddr))
+ Serial.println("could not add to app params");
+
+// Apply default values for measurement repetition rate and antenna config
+session1.applyDefaults();
+// Configure ranging parameters
+session1.rangingParams.deviceMacAddr(srcAddr);
+session1.rangingParams.deviceRole(kUWB_DeviceRole_Initiator);
+session1.rangingParams.deviceType(kUWB_DeviceType_Controller);
+session1.rangingParams.multiNodeMode(kUWB_MultiNodeMode_UniCast);
+session1.rangingParams.rangingRoundUsage(kUWB_RangingRoundUsage_DS_TWR);
+session1.rangingParams.scheduledMode(kUWB_ScheduledMode_TimeScheduled);
+
+// Add the session to the manager and start it
+UWBSessionManager.addSession(session1);
+session1.init();
+session1.start();
+```
+
+***Important note: The session configuration is more detailed for the Portenta UWB Shield because it explicitly defines all the ranging parameters. The Arduino Stella uses the simplified `UWBTracker` class, which automatically sets up the device as a Controller/Initiator with appropriate defaults. However, both devices must use the same session ID (`0x11223344` in this example) to communicate with each other. This session ID is a shared identifier for the ranging session between these devices.***
+
+Let's examine some of the key configuration parameters:
+
+- `sessionID`: A unique 32-bit identifier (`0x11223344`) must match between devices in the same session.
+- `deviceRole`: Defines whether the device is a Responder (Controlee) or Initiator (Controller).
+- `multiNodeMode`: Set to UniCast for direct device-to-device communication.
+- `rangingRoundUsage`: Set to DS_TWR (Double-Sided Two-Way Ranging) for the highest accuracy.
+- `scheduledMode`: `TimeScheduled` mode allows the Controller to manage the timing of ranging exchanges.
+
+The initialization follows a specific sequence on both devices:
+
+- Register the ranging callback.
+- Start the UWB subsystem.
+- Configure the session parameters.
+- Initialize the session (apply the configuration).
+- Start the session (begin the ranging process).
+
+This process ensures both devices are properly configured before ranging begins, establishing a synchronized communication channel for precise distance measurements.
+
+1. **Ranging Data Handler**
+
+Both devices use nearly identical callback functions to process ranging data:
+
+```arduino
+void rangingHandler(UWBRangingData &rangingData) {
+ // ...
+ if(rangingData.measureType()==(uint8_t)uwb::MeasurementType::TWO_WAY) {
+ RangingMeasures twr=rangingData.twoWayRangingMeasure();
+ for(int j=0;j