Week 15 Assignments - System Integration
![]() |
![]() |
|---|---|
Locus Pocus Clock Design Showing Casing - Front and Back Panels Joined by Clockwork Frame
Individual Assignment
The individual assignment for this week was to:
- Design and document the system integration for your final project
Application Context
As part of system integration, I selected a name for the project. Given the connections with location and the roots in magical fiction, the project is called Locus Pocus. Locus Pocus is a kind of whereabouts clock - instead of time, it shows the locations or status of friends or family on the clock face. It is conceptually inspired by the magical Weasley clock from the Harry Potter book series.
In practice, it is an internet-of-things device to support connectedness between people through situated awareness. You can keep in touch with others through an ambient social connection.
General Situated Awareness System Architecture
The general system architecture for a situated awareness application has several primary elements:
- A person involved in some activity, such as going to a particular location.
- The person has a device that can sense activities, such as their GPS location. Typically this would be a smart device, such as a mobile phone. In general, this could measure other things such as straightforward movement (person is up and about), or vitals such as heart rate.
- The device has an App installed specifically for (1) gathering different kinds of activity data from the device; (2) communicating data to the central online App service; (3) conducting analytics on the data; in order to (4) generate actionable events. For example, GPS location data from the device can be analyzed to find when someone has entered the vicinity of a particular location. For example, they are arriving home.
- The stream of actionable events can be made available as a data source for use in other applications. The distribution is often handled by a data broker, which specializes in collecting and publishing streams of data from different sources. Other applications can then subscribe to the published data streams. So, an application could subscribe to a stream of entered-location events for the person with the device & App.
- An embedded computing device can be set up to subscribe to activity event streams, enabling different applications (e.g., smart home) to respond to specific activity events.
- Embedded computing devices are used to drive specific applications. For example, a smart home device could turn the lights on when a person arrives home. For Locus Pocus, the application is to visualize current locations for people on a clock-themed display.

General Architecture for Situated Awareness Application
Locus Pocus System Architecture
The Locus Pocus system can be considered to have two primary components:
- Activity Architecture - for capturing, processing, and distributing location data
- Clock Architecture - for receiving and processing location events and translating the events into clock display actions
Locus Pocus Activity Architecture
The Locus Pocus activity architecture follows the general situated awareness structure for capturing, processing, and distributing location data. I developed specific project implementations for each of these elements, as follows.

Locus Pocus Activity Architecture
Detail for each of the primary elements of the activity architecture can be found in the links for each of the sections.
- IFTTT - Activitiy Sensing - uses the IFTTT (If This Then That) service. A set of location-based triggers is defined on the service that will send data if a connected device enters or exits a defined, geo-fenced area. The IFTTT App is installed on a user's device and is connected to the IFTTT Service. The IFTTT App on the device sends notifications to the IFTTT Service when triggered.
- Adafruit IO - Data Broker - uses the Adafruit IO data broker service. Adafruit IO has a plug-in ("Power Up") connection with the IFTTT service. From the Adafruit IO service account, the IFTTT service can be selected and paired to provide a data stream for Adafruit IO. Adafruit IO then provides an API Library for connecting with the service to utilize publish/subscribe data streams.
- XIAO ESP32C3 Development Board - the XIAO ESP32C3 serves as the primary application controller for communication with the data broker, application control logic, and issuing clock commands.
- Primary Control Application Code - the XIAO ESP32C3 uses C/C++ code for the application. The primary control application code connects to the Adafruit IO data broker service, listens for location activity events, interprets each event for clock display, and issues clock commands to update via Bluetooth BLE networking. It also controls the onboard input (button) / output (LED) for clock control and status indication.
Locus Pocus Clock Architecture
The Locus Pocus clock architecture receives and processes location events, translating the events into mechanical clock display actions. The following diagram shows the clock architecture, and the primary elements are described below.

Locus Pocus Clock Architecture
Detail for each of the primary elements of the clock architecture can be found in the links for each of the sections.
- Stepper Motor - the clockwork elements are actuated using 28BYJ-48 5V stepper motors.
- Clockwork - the clockwork mechanism consists of 3D printed, nested clock shafts. The clock shafts are driven by geared ends. The geared ends are actuated by driver gears (1:1 gear ratio) on the stepper motor shafts.
- Clock Face - the clock face is a 2D designed and laser cut in 1/8 inch Baltic Birch plywood. It shows a visual representation of the locations on a clock-themed display.
- Clock Hands - the clock hands are 3D designed and printed. They connect to the clock shafts and indicate specific locations on the clock face, each for a unique individual.
- Arduino UNO R4 WiFi - the Arduino UNO R4 WiFi board serves as the secondary motor controller for the clockwork - it receives application commands from the XIAO ESP32C3 and actuates the clockwork.
- Secondary Control Clockwork Code - the Arduino UNO R4 WiFi uses C/C++ code for motor control. The secondary clockwork control application code receives clockwork commands via Bluetooth BLE networking from the XIAO ESP32C3 primary application controller. It actuates the motors / clock shafts / clock hands in accordance with the clock commands.
Locus Pocus Case
In order to embody the Locus Pocus, I chose to create a new case design, rather than search for an existing clock body for retrofit. The case design consisted of front and back panels joined by the clockwork frame itself. The panels were designed with a stylized grandfather clock aesthetic. The case design, coupled with the clock face and clock hands, provides a finished look to the project.
Addititional detail is provided on the case design page.
![]() |
![]() |
|---|---|
Locus Pocus Clock Design Showing Casing - Front and Back Panels Joined by Clockwork Frame
Locus Pocus Packaging
Beyond the structural elements (hands, face, clockwork, case) already described, the embedded computing elements needed organization and packaging. This included PCB mounting, wire connection management, and layout. The back panel of the case was used as a platform to organize the embedded computing components.
While this stage of Locus Pocus development is complete, I fullly expect to continue revisons, which will likely require reorganization. So, both in developing the packaging and in mounting, I made design choices to allow for greater flexibility in revision. This included design of PCB mounts for easy board removal and removable adhesive mounting for components. Naturally, each of these could be strengthened in the longer term with fixed casings and mechanical fasteners.

Locus Pocus Project Packaging
PCB Mounting
There were 3 types of PCBs that needed to be mounted.
- x1 XIAO ESP32C3 Development Board
- x1 Arduino UNO R4 WiFi Board
- x4 ULN2003 Driver Board for Stepper Motors
For the Arduino UNO R4 WiFi mounting, I used a SunFounder Acrylic Case.
For the XIAO ESP32C3 board and the ULN2003 motor driver boards, I designed an edge-fit casing, which holds the bottom edge of the board. This holds the boards in place with a light press fit and allows for easy removal and replacement.

PCB Mount for XIAO ESP32C3 Development Board

PCB Mount for Motor Driver Boards
In order to mount the boards on the back panel, I used Command Strips. These allow for click removal and refastening. The design choice here was for near-term flexibility. The mounting could be strengthened with mechanical fasteners.
Wiring
There are 5 types of wiring used in Locus Pocus
- Stepper motor wires - these come attached to the motors with a dedicated connector for the motor driver board
- Motor driver control wires - stepper motor control requires 4 lines. I created dedicated 4-line ribbon cables with crimp-pin connections and 4-point connector blocks.
- Power distribution - each stepper motor also needs a power and ground line. I used a 2-in-8-out terminal block to distribute the power lines. I created 5 dedicated 2-line ribbon cables with crimp-pin connections and 2-point connector blocks - 1 for the power input and 4 for the connection to each motor.
- XIAO ESP32C3 Cable - the XIAO ESP32C3 uses a USB C cable for logic power and data.
- Arduino UNO R4 WiFi - the Arduino UNO R4 WiFi uses a USB C cable for logic power and data. It also uses a barrel jack connection for motor power.
In order to manage wiring, I used Command Clips that allow for manual addition / removal of wiring / cables. The design choice here was for near-term flexibility. The mounting could be strengthened with mechanical fasteners.

