Blog1 - Roadtest - Modulino Integration with AKX00069 Plug and Make Kit
Evaluating Modulino® Nodes and Qwiic® I2C Daisy-Chain Integration on the Arduino® UNO Q Hybrid Single-Board Computer
Primary Hardware Under Test: AKX00069 Plug and Make Kit, 3.3V, Modulino Distance/Pixels/Knob/Buzzer/Movement Nodes, Spacer & Screws (ARDUINO)
Core Test Objective: Daisy-chaining the seven Modulino® nodes included in the Plug and Make Kit via the Qwiic® connector to test the solderless I2C plug-and-play capabilities and dual-brain hybrid architecture of the Arduino UNO Q.
Reference Documents:
Technical Datasheet PDF:
Farnell Technical Datasheet – Arduino Plug and Make Kit AKX00069 (PDF)
AKX00069 Official Arduino Docs:
Official Arduino Plug and Make Kit Hardware Documentation
Arduino_Modulino GitHub Repository
In this first dedicated RoadTest (Modulino Integration with AKX00069 Plug and Make Kit), I unbox the kit, inventory its mechanical and electronic components, examine the electrical and I2C architectural specifications of all seven Modulino nodes, evaluate the official documentation, and build a dual-brain hybrid application in Arduino App Lab that links all daisy-chained nodes to a live Linux web telemetry dashboard.
1. Overall Rating Score & Detailed Breakdown
The scoring matrix below evaluates how effectively the AKX00069 Plug and Make Kit expands the Arduino UNO Q platform across hardware integration, driver stability, and interface flexibility.
Hardware Integration & Mechanical Form Factor — 9.5 / 10: The 140 × 140 × 1.6 mm Modulino Base (ASX00071) and standardized 41 × 25.36 mm node footprints with M3 mounting hardware eliminate breadboard clutter and mechanical strain on the UNO Q's onboard Qwiic connector.
Qwiic I2C Plug-and-Play & Daisy-Chain Stability — 9.5 / 10: All seven included Modulino nodes have distinct default hexadecimal I2C addresses (0x29, 0x3C, 0x44, 0x6A, 0x6C, 0x76, 0x7C), enabling zero-conflict daisy-chaining on a single 3.3V bus without level shifters.
Driver & Library Stability (Arduino_Modulino) — 9.0 / 10: Evaluates how cleanly the official Arduino_Modulino library compiles and executes on the UNO Q's STM32U585 Cortex-M33 MCU running Arduino Core over Zephyr RTOS.
Documentation & Learning Resources — 8.5 / 10: The 45-page Product Reference Manual provides thorough pinouts, I2C address tables, and mechanical drawings, though footnote URLs ([1]–[8]) are buried on page 44 rather than hyperlinked inline.
Value & Ecosystem Versatility — 9.5 / 10: At $87.40 for the full kit ($69.69 worth of individual Modulino nodes plus an Arduino UNO R4 WiFi, Modulino Base, USB-C cable, 7 Qwiic cables, and M3 hardware), it delivers strong value for both UNO R4 and UNO Q prototyping.
Overall Rating Score — 9.2 / 10 (4.6 / 5 Stars): A cohesive, solder-free 3.3V I2C sensor and actuator ecosystem that pairs naturally with the Arduino UNO Q's Qwiic expansion port.
2. Unboxing & Packaging Overview
This section documents the physical unboxing experience, packaging engineering, and first impressions upon receiving the AKX00069 Plug and Make Kit:
Outer Packaging & Presentation: Inspect the retail box graphics, structural rigidity and internal tray organization designed to keep the mainboard, mechanical base plate, and seven modular nodes separated during transit.
My Conclusion: "The retail packaging features strong structural rigidity and appealing graphics, though as noted in the tray organization, the internal compartments could be improved to prevent components from shifting during transit."
ESD & Moisture Protection: Verify whether the Arduino UNO R4 WiFi (ABX00080) and the seven static-sensitive 3.3V Modulino® nodes are individually boxed or sealed in anti-static shielding bags.
My Conclusion: "While the mainboard and nodes arrived safe from damage, the presence of loose anti-static bags highlights a slight gap in internal compartmentalization that Arduino could refine for future production runs."
PCB Silkscreen & Labeling Clarity: Examine the blue solder mask finish, top-side pinout silkscreens, and the dedicated white identification rectangle on the bottom silkscreen of each Modulino node (designed for writing custom I2C addresses when chaining duplicate node types).
My Conclusion: "The PCB build quality is high, featuring a clean blue solder mask, legible top-side pinout silkscreens, and a very practical white identification rectangle on the bottom for custom I2C address mapping."
Readiness Check 1 – Packaging & Seals: Photographs of the outer retail sleeve, security seals, and internal compartmentalized packaging.image


Figure 1: AKX00069 Plug and Make Kit retail packaging and box graphics (Photographed on bench).
PLUG AND MAKE KIT Bottom Panel text
-
1 ARDUINO UNO R4 WiFi
-
7 Modulino® nodes
-
1 Modulino base
-
1 USB-C® cable
-
7 Qwiic cables
-
24 Screws
-
4 Spacers
-
20 Nuts
Packaging & Unboxing Inspection

Figure 2 - Internal trays of the retail package

Figure 3 - Kit Contents On my bench (also shown is my RICOL DM858 Digital Multimetter)
-
Figure 1 – Outer Retail Packaging: Good condition, structurally sound.
-
Security Seals: None present.
-
Figure 2 – Internal Tray Organization: Poor design for electronic component transit.
-
After removing the outer sleeve and opening the book-like box, two compartments covered with cardboard panels are revealed.
-
Removing the cardboard panels exposes the entire contents of the kit bundled with seven empty anti-static bags on the right-hand side, leaving components free to shift and bounce around during shipment. This is less than ideal practice for shipping sensitive electronics; fortunately, no boards appeared to be damaged during transit from Arduino.
-
The left-hand compartment remains empty, containing molded placeholders intended for the mainboard and Modulino® nodes.
-
- Figure 3 – Kit Contents On my bench
- Inventory check with all the components included in the kit.
1 ARDUINO UNO R4 WiFi
7 Modulino® nodes
1 Modulino base
1 USB-C® cable
7 Qwiic cables
24 Screws
4 Spacers
20 Nuts
- Inventory check with all the components included in the kit.
PASSED -- Readiness Check 2 – Qwiic Connector Inspection: Inspect all dual-sided JST SM 1.0 mm 4-pin Qwiic connectors on the seven nodes for bent pins or solder joint defects.
7 Modulino® nodes

Figure 4 - 7 Modulino® nodes
PASSED - Readiness Check 3 – Hardware & Fastener Count: Verify that all 7 Qwiic cables, 24 M3×10 screws, 20 M3 nuts/bolts, and 4 M3×20 female spacers are accounted for.
Hardware fasteners and Qwiic cables
7 Qwiic cables
24 Screws
4 Spacers
20 Nuts

Figure 5 - Hardware fasteners and Qwiic cables
PASSED - Readiness Check 4 – Base Plate Fit Check: Mount the Arduino UNO Q (in place of the bundled UNO R4 WiFi) onto the Modulino Base (ASX00071) to verify hole alignment and mechanical clearance for stacked shields.
In order to mount the Arduino UNO Q in place of the bundled UNO R4 WiFi onto the Modulino Base (ASX00071) , I used the clear plastic bottom case that is attached to UNO R4 WiFi. Since the Plate hole alignment is meant for the UNO R4 WiFi, this works quite well to mount the UNO Q.

Figure 6 - Assembled ASX00071 Modulino Base plate with M3 standoffs and the clear plastic bottom case from the UNO R4 WiF

Figure 7 - Arduino UNO Q mounted on ASX00071 Modulino Base plate
3. Components & Accessories Inventory
The AKX00069 Plug and Make Kit ($87.40 retail at Newark) bundles a complete mainboard, structural mounting base, seven Qwiic-compatible I2C sensor/actuator nodes, interconnect cables, and M3 fasteners. Purchasing the seven Modulino nodes individually totals $69.69, meaning the kit includes the Arduino UNO R4 WiFi board, Modulino Base plate, USB-C cable, 7 Qwiic cables, and 48-piece M3 fastener pack for an incremental cost of just $17.71.
3.1 Electronic Modules & Base Plate Inventory
SKU ABX00087
ABX00087 – Arduino® UNO R4 WiFi | IC: Renesas RA4M1 (48 MHz) + ESP32-S3 | Qty: 1 | Standalone Price: Included in Kit — Programmable 5V mainboard with 12×8 red LED matrix and Qwiic port.
ASX00071 – Modulino® Base | Material: Mechanical FR4/Composite Plate | Qty: 1 | Standalone Price: Included in Kit — 140 × 140 × 1.6 mm mounting base plate with 3.5 mm holes.
ABX00101 – Modulino® Movement | IC: STMicroelectronics LSM6DSOXTR | Qty: 1 | Standalone Price: $12.76 — 6-axis IMU measuring 3D acceleration and 3D angular rate (rotation).
ABX00102 – Modulino® Distance | IC: STMicroelectronics VL53L4CDV0DH/1 | Qty: 1 | Standalone Price: $13.20 — Time-of-Flight (ToF) laser-ranging proximity and distance sensor (0–1200 mm).
ABX00103 – Modulino® Thermo | IC: Renesas HS3003 | Qty: 1 | Standalone Price: $9.14 — High-accuracy digital relative humidity and temperature sensor.
ABX00107 – Modulino® Knob | IC: Bourns PEC11J Encoder + STM32C011F4 | Qty: 1 | Standalone Price: $8.65 — Quadrature rotary encoder with integrated SPST push-button switch.
ABX00108 – Modulino® Buzzer | IC: Murata PKLCS1212E4001 + STM32C011F4 | Qty: 1 | Standalone Price: $7.04 — Piezoelectric acoustic tone generator for alerts and audible feedback.
ABX00109 – Modulino® Pixels | IC: 8× LC8822-2020 LEDs + STM32C011F4 | Qty: 1 | Standalone Price: $10.68 — Addressable 8-LED RGB visual status bar with programmable brightness and color.
ABX00110 – Modulino® Buttons | IC: 3× SPST Push Buttons + STM32C011F4 | Qty: 1 | Standalone Price: $8.22 — Tactile 3-button input cluster (Buttons A, B, C) with 3× yellow status LEDs.
3.2 Cabling & Mechanical Fasteners Inventory
USB-C® Cable | Qty: 1 | Spec: USB-C male-to-male data and power cable — Powers the board and connects to the host PC or USB-C hub.
I2C Qwiic® Cables | Qty: 7 | Spec: 4-conductor (GND, 3.3V, SDA, SCL) with 1.0 mm pitch JST SM connectors — Daisy-chains the UNO Q Qwiic port across all 7 Modulino nodes.
M3×10 Screws | Qty: 24 | Spec: Metric M3 machine screws, 10 mm length — Secures the UNO Q and Modulino nodes to the ASX00071 Base.
M3 Bolts / Nuts | Qty: 20 | Spec: Metric M3 hex nuts/bolts — Locks down mounting screws on the underside of the Modulino Base.
M3×20 Female Spacers | Qty: 4 | Spec: Metric M3 hex standoffs, 20 mm height — Elevates the Modulino Base plate off the workbench surface.
4. Specification Notes & Architectural Overview
4.1 Common Modulino® Mechanical & Electrical Architecture
Per Section 8.1 of the Arduino Plug and Make Kit Datasheet, all seven Modulino® nodes share a unified mechanical and electrical standard designed for seamless daisy-chaining:
Standardized PCB Footprint: Every node measures 41.0 mm × 25.36 mm × 1.6 mm (±0.2 mm) with four 3.2 mm mounting holes spaced on a 16 mm vertical × 32 mm horizontal grid.
3.3V Logic & Power Rail: All Modulino nodes operate exclusively on the 3.3V rail routed through the 4-pin Qwiic connector (GND, 3.3V, SDA, SCL). Each board includes a green power LED connected to the 3V3 net through a 1 kΩ series resistor, drawing approximately 1 mA ((3.3V - 2.2V) / 1 kΩ).
Dual Side-Mounted Qwiic Connectors: Each node features two surface-mount 4-pin JST SM series connectors (1.0 mm pitch) on opposite edges, allowing any node to plug into the upstream controller and pass the I2C bus downstream to the next node.
Dedicated I2C Co-Processor Architecture (STM32C011F4): While the Movement (LSM6DSOXTR), Distance (VL53L4CDV0DH/1), and Thermo (HS3003) sensors feature native I2C interfaces, the four interactive/actuator nodes—Knob, Buzzer, Pixels, and Buttons—incorporate an onboard STM32C011F4 (ARM Cortex-M0+) microcontroller. This dedicated I2C interface controller offloads quadrature encoder decoding, PWM tone generation, RGB LED timing, and button debouncing from the main host processor, exposing a clean, uniform I2C register interface and allowing users to reassign I2C addresses in software.
Optional I2C Pull-Up Resistor Footprints: To prevent excessive parallel pull-up loading when many nodes are chained together, the STM32C011F4-based nodes ship with unpopulated SMD 0402 pads near the power LED side (or between buttons B and C on the Buttons node) where 4.7 kΩ pull-up resistors can be soldered if needed on long bus runs.
4.2 Comprehensive Modulino® Node Specifications & I2C Address Matrix
| Modulino Node (SKU) | Primary IC / MCU | Default I2C | Voltage | Active / Peak Current |
|---|---|---|---|---|
| Movement (ABX00101) | LSM6DSOXTR 6-Axis IMU | 0x6A (Jumper) |
1.71V – 3.6V | 0.72 mA (+1 mA LED) |
| Distance (ABX00102) | VL53L4CDV0DH/1 ToF | 0x29 (Soft) |
2.6V – 3.5V | 24 mA active / 40 mA peak |
| Thermo (ABX00103) | HS3003 Temp/Humidity | 0x44 (Soft) |
2.3V – 5.5V | 24.4 µA (+1 mA LED) |
| Knob (ABX00107) | PEC11J + STM32C011F4 | 0x76 (Soft) |
2.0V – 3.6V | 3.4 mA (+1 mA LED) |
| Buzzer (ABX00108) | PKLCS1212 + STM32C011F4 | 0x3C (Soft) |
2.0V – 3.6V | 6.4 mA (+1 mA LED) |
| Pixels (ABX00109) | 8x LC8822 + STM32C011F4 | 0x6C (Soft) |
2.0V – 3.6V | Up to 267.4 mA (full white) |
| Buttons (ABX00110) | 3x SPST + STM32C011F4 | 0x7C (Soft) |
2.0V – 3.6V | Up to 10.9 mA (+1 mA LED) |
Movement (ABX00101) | IC: LSM6DSOXTR (Native I2C/SPI/I3C) | Default I2C: 0x6A (Hardware Solder Jumper for 0x6A or 0x6B) | Supply: 1.71 V – 3.6 V | Current: Accel 170 µA, Gyro 0.55 mA (+1 mA LED) | Specs & Breakout Pins: ±125 to ±2000 dps, ±20 mg accel accuracy; 1×10 header exposes VDDIO (cuttable jumper), GND, INT1, INT2, SDO/SA0, SDX, SCX, CS, SDOAUX, and OCSAUX.
Distance (ABX00102) | IC: VL53L4CDV0DH/1 (Native I2C) | Default I2C: 0x29 (Software configurable via XSHUT/register) | Supply: 2.6 V – 3.5 V | Current: 24 mA active ranging, 40 mA peak, 4 mA I2C | Specs & Breakout Pins: 0 to 1200 mm range, 1 mm resolution, ±7 mm to ±3% accuracy; 1×4 header exposes GPIO1 and XSHUT (with 10 kΩ pull-ups to 3.3V).
Thermo (ABX00103) | IC: HS3003 (Native I2C) | Default I2C: 0x44 (Software configurable) | Supply: 2.3 V – 5.5 V | Current: 24.4 µA @ 3.3 V (14-bit resolution) | Specs & Breakout Pins: -40°C to +125°C (±0.25°C accuracy), 0–100% RH (±2.8% RH accuracy), 14-bit resolution; standard 1×4 I2C breakout header (GND, 3.3V, SDA, SCL).
Knob (ABX00107) | IC: PEC11J-9215F-S0015 Encoder + STM32C011F4 MCU | Default I2C: 0x76 (Software configurable via STM32C011F4 firmware) | Supply: 2.0 V – 3.6 V | Current: 3.4 mA (+1 mA LED) | Specs & Breakout Pins: 360° continuous quadrature rotation with SPST push switch; 1×10 header exposes PA0 (PinA), PA1 (PinB), PA2 (Switch), RX1, TX1, SWDIO, SWCLK, and PF2/NRST.
Buzzer (ABX00108) | IC: PKLCS1212E4001 Piezo + STM32C011F4 MCU | Default I2C: 0x3C (Software configurable via STM32C011F4 firmware) | Supply: 2.0 V – 3.6 V | Current: 6.4 mA (+1 mA LED) | Specs & Breakout Pins: Programmable frequency and duration tone generation; 1×8 header exposes PA0 (Buzzer Signal), RX1, TX1, SWDIO, SWCLK, and PF2/NRST.
Pixels (ABX00109) | IC: 8× LC8822-2020 RGB LEDs + STM32C011F4 MCU | Default I2C: 0x6C (Software configurable via STM32C011F4 firmware) | Supply: 2.0 V – 3.6 V | Current: Up to 267.4 mA (33 mA × 8 LEDs + 3.4 mA MCU) | Specs & Breakout Pins: 8 addressable RGB LEDs; 1×10 header exposes CO (Clock Out) and DO (Data Out) to daisy-chain external LEDs, plus RX1, TX1, SWDIO, SWCLK, and PF2/NRST.
Buttons (ABX00110) | IC: 3× SPST Push Buttons + 3× Yellow LEDs + STM32C011F4 MCU | Default I2C: 0x7C (Software configurable via STM32C011F4 firmware) | Supply: 2.0 V – 3.6 V | Current: Up to 10.9 mA (2.5 mA × 3 LEDs + 3.4 mA MCU) | Specs & Breakout Pins: 3 push buttons (A, B, C) with independent yellow indicator LEDs; 1×10 header exposes PA0 (Button A), PA1 (Button B), PA2 (Button C), RX1, TX1, SWDIO, SWCLK, and PF2/NRST.
4.3 Host Comparison & Electrical Compatibility: UNO R4 WiFi vs. Arduino UNO Q
While the AKX00069 Plug and Make Kit ships with the Arduino UNO R4 WiFi (ABX00080), this RoadTest replaces the UNO R4 WiFi with the Arduino UNO Q to evaluate ecosystem portability:
Logic-Level Synergy (3.3V Native vs. Split 5V/3.3V): On the bundled UNO R4 WiFi, the primary Renesas RA4M1 MCU operates at 5V on the standard headers (Wire), while the Qwiic connector (Wire1) is tied to the 3.3V domain shared with the ESP32-S3 module. On the Arduino UNO Q, both the STM32U585 real-time MCU and the Qwiic I2C bus operate natively at 3.3V, eliminating any risk of 5V overvoltage damage to the 3.3V Modulino nodes.
Daisy-Chain Power Budget Analysis: According to Section 8.1.3 of the datasheet, up to ~50 Modulino nodes can theoretically be chained depending on power draw and cable capacitance.
Baseline Sensor & MCU Idle Draw: Chaining all 7 kit nodes simultaneously on the UNO Q's Qwiic port draws approximately ~55 mA across all 7 nodes (including the seven 1 mA power LEDs and active ToF ranging at 24 mA).
Peak Actuation Draw: Total current reaches up to ~325 mA if all eight LC8822-2020 RGB LEDs on the Pixels node are driven at 100% white brightness (264 mA) while the Buzzer, Buttons LEDs, and Distance sensor are active. Capping Pixels brightness at 25–30% in firmware keeps total Qwiic bus current under 110 mA, well within the 3.3V regulator envelope of the UNO Q.
5. Documentation & Learning Resources Review
To prepare for bench testing, I evaluated the official documentation provided by Arduino and Farnell/Newark for the AKX00069 Plug and Make Kit:
5.1 Product Reference Manual / Datasheet
Datasheet Source: Product Reference Manual / Datasheet (AKX00069, 45 Pages)
Documentation Strengths: Exceptionally detailed Section 8 coverage of every Modulino node, including exact IC part numbers, current consumption formulas, 1×4 and 1×8/1×10 breakout header pinouts, cuttable jumper diagrams, and mechanical dimension drawings.
Usability Observation (Resolving the Missing Inline Footnotes): In Section 9 (Device Operation, page 40), the text references bracketed numbers [1] through [8] without clickable inline links, which initially makes the manual feel incomplete. Upon inspecting Page 44 (Reference Documentation table), all eight footnote URLs are listed at the very end of the document.
5.2 Arduino Plug and Make Kit
Documentation Source: Arduino Plug and Make Kit
Documentation Strengths: Provides a clear high-level overview of the AKX00069 kit ecosystem, highlighting the seven guided beginner-to-maker projects (Eco Watch, Game Controller, Sonic Synth, Smart Lights, Weather Station, Touchless Lamp, and Hourglass), complete kit contents, FAQs, and verified user reviews on the official store page.
Usability Observation (Marketing Overview vs. Technical Depth): While the store page is an inviting entry point for understanding what the kit can build and includes direct links to the downloadable datasheet and Arduino Docs, it focuses primarily on high-level project inspiration and Arduino Cloud promotion rather than low-level electrical or I2C integration details.
5.3 Official Arduino Plug and Make Kit Hardware Documentation
Documentation Source: Official Arduino Plug and Make Kit Hardware Documentation
Documentation Strengths: Serves as the central online engineering hub for the AKX00069 kit, providing direct downloadable links for the board pinout PDF, full electrical schematics, CAD/STEP mechanical files, compatibility matrices, and suggested libraries alongside a clear structural overview of the ASX00071 Modulino Base and Qwiic daisy-chain topology.
Usability Observation (Target Board Scope vs. UNO Q Expansion): While the portal makes downloading hardware schematics and mechanical files effortless, its wiring diagrams and compatibility notes are written exclusively around the bundled Arduino UNO R4 WiFi (ABX00080). Developers integrating the Modulino nodes with the newer Arduino UNO Q must cross-reference the UNO Q's native 3.3V Qwiic bus mapping and Zephyr pin definitions independently.
5.4 Arduino Library for Modulinos
Documentation Source: Arduino Library for Modulinos
Documentation Strengths: Delivers structured API documentation and usage examples for the official Arduino_Modulino library, detailing the object-oriented C++ classes for all seven kit modules (ModulinoMovement, ModulinoDistance, ModulinoThermo, ModulinoKnob, ModulinoBuzzer, ModulinoPixels, and ModulinoButtons) so developers can initialize and poll the Qwiic chain with minimal boilerplate code.
Usability Observation (Multi-Bus Wire Port & Address Reassignment Details): The online library reference clearly illustrates basic single-node setup (Modulino.begin()), but offers limited documentation on passing alternate TwoWire instances (Wire vs. Wire1) across different host boards or changing default I2C addresses in software when multiple identical Modulino nodes are chained together.
5.5 Arduino_Modulino GitHub Repository
Documentation Source: https://github.com/arduino-libraries/Arduino_Modulino
Documentation Strengths: Hosted under the MPL-2.0 open-source license with over 215 commits and 17 release tags, the repository provides complete access to src/Modulino.h, docs/api.md, and the examples/ directory, including utilities for the STM32C011F4 firmware updater and I2C address changer (PR #77) as well as recent hardware updates like Modulino Thermo V2 support (PR #82). Inspecting src/Modulino.h and docs/api.md directly reveals how Modulino.begin(HardwareI2C& wire) uses compile-time preprocessor guards to select Wire1 versus Wire depending on the target board architecture.
Usability Observation (Qwiic Bus Wire1 Preprocessor Guards & Datasheet Link Mismatch): While Footnote [7] in the AKX00069 datasheet points only to the top-level https://github.com/arduino-libraries/ organization page (requiring users to hunt for this specific repo), inspecting the repository issues and pull requests (such as PR #75 for Q-series Wire1 defaults) is essential for UNO Q developers to verify whether the Zephyr-based STM32U585 core maps the onboard Qwiic connector to Wire or Wire1 during compilation.
6. Develop, Implement, and Document an App Lab Hybrid Application
6.1 System Architecture & Telemetry Dashboard
To thoroughly test the plug-and-play capabilities of the AKX00069 Plug and Make Kit on the Arduino UNO Q, I designed a unified 7-Node Modulino Environmental & Proximity Telemetry Station using Arduino App Lab:
Physical Topology: The Arduino UNO Q is mounted to the ASX00071 Modulino Base using M3×10 screws and M3×20 standoffs. All seven Modulino nodes (Movement, Distance, Thermo, Knob, Buzzer, Pixels, and Buttons) are secured to the base grid and daisy-chained in series using the seven bundled Qwiic I2C cables starting from the UNO Q's onboard Qwiic connector.
[image placeholder: 7-Node Modulino Telemetry Station Hardware Bench Setup]
Real-Time MCU Layer (STM32U585 Cortex-M33) – Step 1 (I2C Bus Discovery): Runs a deterministic C++ sketch that performs an initial I2C bus scan across 0x08–0x77 to confirm all 7 default hexadecimal addresses (0x29, 0x3C, 0x44, 0x6A, 0x6C, 0x76, 0x7C) respond cleanly on the Qwiic chain.
Real-Time MCU Layer – Step 2 (Sensor Polling): Polls environmental telemetry (HS3003 temperature and relative humidity), 6-axis inertial motion (LSM6DSOXTR X/Y/Z acceleration and gyroscope), and Time-of-Flight proximity (VL53L4CD distance in mm).
Real-Time MCU Layer – Step 3 (Interactive User Input): Reads user input from the Modulino Knob rotary encoder and the 3 tactile switches on Modulino Buttons (Buttons A, B, C) to switch operating modes on the fly (Mode A: Distance Bar Graph, Mode B: Temperature Gauge, Mode C: Tilt/Motion Level).
Real-Time MCU Layer – Step 4 (Local Actuation): Drives real-time visual feedback across the 8 LC8822-2020 RGB LEDs on ModulinoPixels and triggers an audible proximity alarm on ModulinoBuzzer when an object approaches closer than the Knob-selected threshold.
Linux MPU & App Lab Layer (Qualcomm Dragonwing QRB2210): Runs a Python service connected to the MCU via the internal Router Bridge / IPC serial link. It parses the incoming JSON telemetry stream, logs time-series sensor data to local eMMC storage, and serves a live local web dashboard for real-time visualization and remote threshold control.
6.1.1 STM32U585 MCU Firmware (C++ Sketch for All 7 Daisy-Chained Modulino Nodes)
#include <Wire.h>
#include <Modulino.h>
// Instantiate all 7 Modulino node objects from the AKX00069 kit
ModulinoMovement movement;
ModulinoDistance distanceSensor;
ModulinoThermo thermo;
ModulinoKnob knob;
ModulinoBuzzer buzzer;
ModulinoPixels pixels;
ModulinoButtons buttons;
// Expected default I2C addresses per AKX00069 Datasheet Section 8.1.3
const uint8_t EXPECTED_ADDRS[] = {0x29, 0x3C, 0x44, 0x6A, 0x6C, 0x76, 0x7C};
const char* NODE_NAMES[] = {
"Distance (0x29)", "Buzzer (0x3C)", "Thermo (0x44)",
"Movement (0x6A)", "Pixels (0x6C)", "Knob (0x76)", "Buttons (0x7C)"
};
int activeMode = 0; // 0 = Distance Bar, 1 = Thermal Gauge, 2 = Motion Tilt
bool alarmEnabled = true;
void scanQwiicBus() {
Serial.println(F("{\"event\":\"i2c_scan_start\"}"));
for (size_t i = 0; i < 7; i++) {
Wire.beginTransmission(EXPECTED_ADDRS[i]);
uint8_t err = Wire.endTransmission();
Serial.print(F("{\"node\":\""));
Serial.print(NODE_NAMES[i]);
Serial.print(F("\",\"status\":\""));
Serial.print(err == 0 ? F("ONLINE") : F("MISSING"));
Serial.println(F("\"}"));
}
}
void setup() {
Serial.begin(115200);
while (!Serial && millis() < 3000);
// Initialize Modulino bus and Qwiic I2C interface at 400 kHz Fast Mode
Modulino.begin();
Wire.begin();
Wire.setClock(400000);
scanQwiicBus();
// Initialize all 7 daisy-chained Modulino nodes
movement.begin();
distanceSensor.begin();
thermo.begin();
knob.begin();
buzzer.begin();
pixels.begin();
buttons.begin();
// Set initial Knob range (e.g., proximity threshold 50mm to 800mm)
knob.set(200);
buttons.setLeds(true, false, false); // Highlight Button A (Mode 0)
pixels.clear();
pixels.show();
}
void loop() {
// 1. Poll interactive inputs (Buttons A/B/C & Rotary Knob)
if (buttons.update()) {
if (buttons.isPressed(0)) {
activeMode = 0;
buttons.setLeds(true, false, false);
} else if (buttons.isPressed(1)) {
activeMode = 1;
buttons.setLeds(false, true, false);
} else if (buttons.isPressed(2)) {
activeMode = 2;
buttons.setLeds(false, false, true);
}
}
if (knob.isPressed()) {
alarmEnabled = !alarmEnabled;
buzzer.tone(alarmEnabled ? 1200 : 400, 80);
}
int knobVal = knob.get();
int thresholdMm = constrain(knobVal, 50, 1000);
// 2. Poll environmental, ToF distance, and 6-axis IMU sensors
float tempC = thermo.getTemperature();
float humidity = thermo.getHumidity();
int distMm = -1;
if (distanceSensor.available()) {
distMm = distanceSensor.get();
}
movement.update();
float accX = movement.getX();
float accY = movement.getY();
float accZ = movement.getZ();
// 3. Update 8x RGB Pixels (ABX00109) based on active mode (capped brightness for power budget)
pixels.clear();
int litLeds = 0;
if (activeMode == 0 && distMm >= 0) {
litLeds = map(constrain(distMm, 0, 800), 0, 800, 8, 1);
for (int i = 0; i < litLeds; i++) {
pixels.set(i, distMm < thresholdMm ? RED : GREEN, 25);
}
} else if (activeMode == 1) {
litLeds = map(constrain((int)tempC, 15, 35), 15, 35, 1, 8);
for (int i = 0; i < litLeds; i++) {
pixels.set(i, BLUE, 25);
}
} else {
int tiltIdx = constrain((int)map((long)(accX * 100), -100, 100, 0, 7), 0, 7);
pixels.set(tiltIdx, VIOLET, 25);
}
pixels.show();
// 4. Trigger Buzzer (ABX00108) on proximity breach
if (alarmEnabled && distMm > 0 && distMm < thresholdMm) {
buzzer.tone(2000, 50);
}
// 5. Stream JSON telemetry payload to Qualcomm Linux MPU / App Lab Bridge
Serial.print(F("{\"mode\":"));
Serial.print(activeMode);
Serial.print(F(",\"temp_c\":"));
Serial.print(tempC, 2);
Serial.print(F(",\"rh_pct\":"));
Serial.print(humidity, 1);
Serial.print(F(",\"dist_mm\":"));
Serial.print(distMm);
Serial.print(F(",\"thresh_mm\":"));
Serial.print(thresholdMm);
Serial.print(F(",\"acc\":["));
Serial.print(accX, 2); Serial.print(F(","));
Serial.print(accY, 2); Serial.print(F(","));
Serial.print(accZ, 2);
Serial.print(F("],\"alarm_en\":"));
Serial.print(alarmEnabled ? F("true") : F("false"));
Serial.println(F("}"));
delay(200);
}
6.1.2 Qualcomm Dragonwing QRB2210 Linux MPU Backend (Python Telemetry & Dashboard Logger)
import csv
import datetime
import json
import time
import serial
SERIAL_PORT = "/dev/ttyACM0" # Adjust to UNO Q Router Bridge / IPC device node
BAUD_RATE = 115200
CSV_LOG_FILE = "modulino_qwiic_telemetry.csv"
def run_telemetry_bridge():
"""Reads JSON telemetry from the UNO Q STM32U585 MCU and logs for the App Lab dashboard."""
try:
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
time.sleep(2.0)
print(f"[UNO Q MPU] Connected to STM32 MCU bridge on {SERIAL_PORT}")
except Exception as exc:
print(f"[UNO Q MPU] Error opening bridge port: {exc}")
return
with open(CSV_LOG_FILE, mode="a", newline="", encoding="utf-8") as csv_file:
writer = csv.writer(csv_file)
if csv_file.tell() == 0:
writer.writerow([
"timestamp", "mode", "temp_c", "rh_pct",
"dist_mm", "thresh_mm", "acc_x", "acc_y", "acc_z", "alarm_en"
])
while True:
if ser.in_waiting > 0:
raw_line = ser.readline().decode("utf-8", errors="replace").strip()
if not raw_line:
continue
try:
payload = json.loads(raw_line)
if "temp_c" in payload:
ts = datetime.datetime.now().isoformat(timespec="seconds")
acc = payload.get("acc", [0.0, 0.0, 0.0])
writer.writerow([
ts, payload.get("mode"), payload.get("temp_c"),
payload.get("rh_pct"), payload.get("dist_mm"),
payload.get("thresh_mm"), acc[0], acc[1], acc[2],
payload.get("alarm_en")
])
csv_file.flush()
print(
f"[{ts}] Mode={payload.get('mode')} | "
f"Temp={payload.get('temp_c')}C | RH={payload.get('rh_pct')}% | "
f"Dist={payload.get('dist_mm')}mm (Thresh={payload.get('thresh_mm')}mm) | "
f"Acc={acc}"
)
else:
print(f"[Bus Event] {payload}")
except json.JSONDecodeError:
print(f"[MCU Raw] {raw_line}")
time.sleep(0.05)
if __name__ == "__main__":
run_telemetry_bridge()
6.2 Bus Communication & Router Bridge Analysis
During bench execution, the following quantitative and architectural tests will be recorded and analyzed in this section:
I2C Signal Integrity Across 7 Daisy-Chained Cables: Compare transaction error rates (Wire.endTransmission() return codes) at 100 kHz Standard Mode versus 400 kHz Fast Mode with all seven Qwiic cables chained in series (~35–50 cm total bus length). Verify whether the UNO Q's internal I2C pull-up resistors are sufficient for a 7-node chain or if the optional SMD 0402 4.7 kΩ pull-up pads on the terminal Modulino node are ever required.
Native I2C Sensors vs. STM32C011F4 Bridged Nodes: Measure polling latency differences between the three direct I2C sensors (LSM6DSOXTR @ 0x6A, VL53L4CD @ 0x29, HS3003 @ 0x44) and the four STM32C011F4-bridged nodes (Knob @ 0x76, Buzzer @ 0x3C, Pixels @ 0x6C, Buttons @ 0x7C), including testing dynamic software I2C address reassignment.
Dual-Brain Router Bridge Throughput: Evaluate CPU/memory utilization and IPC latency across Arduino_RouterBridge when streaming 5 Hz–20 Hz multi-sensor telemetry from the Zephyr-based STM32U585 MCU to the Debian Linux QRB2210 MPU while hosting the App Lab web interface.
6.3 Implementation using Arduino AppLab
With the 7-node Modulino chain secured to the Modulino Base and connected via Qwiic to the Arduino UNO Q, follow this step-by-step procedure to develop, compile, and execute the dual-brain application using Arduino App Lab on your Windows 11 host connected via USB:
Host Setup & USB Connection:
- Connect your Windows 11 PC to the Arduino UNO Q using a high-quality USB-C cable.
- Launch Arduino App Lab on Windows 11 and verify that the target board (Arduino UNO Q) and active COM port are correctly recognized in the device connection manager.
In AppLab
paste the C++ code from section 6.1.1 in the directory sketch with a filename sketch.ino
Paste the Python Code from section 6.1.2 in the directory python with a filename main.py
include all necessary libraries
[image placeholder: the AppLab implementation code]
6.4 Running the 7-Node Modulino Environmental & Proximity Telemetry Station
[video placeholder: a demo of the Environmental & Proximity Telemetry Station]
7. Final Verdict & Product Recommendations
7.1 Preliminary Pros & Cons Summary
Pro 1 – Zero-Conflict Default I2C Addressing: All seven included Modulino nodes have unique factory I2C addresses (0x29, 0x3C, 0x44, 0x6A, 0x6C, 0x76, 0x7C), allowing all seven modules to be daisy-chained on a single Qwiic bus immediately out of the box.
Pro 2 – Native 3.3V Compatibility with UNO Q: Because every Modulino node operates at 3.3V via standard 4-pin Qwiic connectors, they interface directly with the Arduino UNO Q without level-shifting circuitry or occupying the standard UNO shield headers.
Pro 3 – Smart Co-Processor Offloading (STM32C011F4): Using an onboard ARM Cortex-M0+ MCU on the Knob, Buzzer, Pixels, and Buttons nodes simplifies I2C polling and allows software-defined I2C address changes (complete with a bottom-silk write-in label).
Pro 4 – Complete Mechanical Mounting System: The 140 × 140 mm ASX00071 Modulino Base and 48-piece M3 screw/spacer assortment keep multi-node prototypes rigid and organized on the test bench.
Pro 5 – Bonus UNO R4 WiFi Included: Even when purchased primarily as a Modulino Qwiic expansion pack for the UNO Q ($69.69 standalone node value vs. $87.40 kit price), the user gains a full Arduino UNO R4 WiFi board for secondary IoT builds.
Point to Watch 1 – High Peak Current on Modulino Pixels (ABX00109): Driving all eight LC8822-2020 RGB LEDs at full brightness draws up to 267.4 mA on the 3.3V Qwiic rail; developers should cap LED brightness in firmware when powering long chains alongside other peripherals.
Point to Watch 2 – Datasheet Footnote Formatting: The 45-page Product Reference Manual uses unlinked bracketed numbers ([1]–[8]) in Section 9 whose URLs are placed four pages later on page 44.
7.2 Ideal Use Cases & Next Steps
Because the entire 7-node Modulino daisy-chain connects exclusively through the single onboard Qwiic port on the Arduino UNO Q, 100% of the standard Arduino UNO pin headers remain free. This architectural advantage directly enables Mega RoadTest 4, where this 7-node Qwiic sensor/UI chain will operate concurrently alongside the stacked Infineon BLDCSHIELDTLE9879TOBO1 BLDC Motor Driver Shield (using the Knob, Buttons, and Distance/Thermo nodes to dynamically control and monitor brushless motor speed while the Qualcomm Linux MPU logs telemetry in Arduino App Lab).