System Integration

clock-on-dock.png

1. Week Assignments

Design and document the system integration for your final project.

2. Prior Knowledge

Oh my… this is definitely a first for me! It feels like packing for some outlandish expedition and designing all it at the same time…

3. Work!

I composed all the components of my final project into a 3D model using OpenSCAD. Before I did that, I checked that all PCB board sizes were multiples of 5mm to make it easier to fit them onto a frame and into the exterior. using OpenSCAD. Before I did that, I checked all PCB board sizes to be multiples of 5mm to make it easier to fit them onto a frame and into the exterior.

3.1. Overview

This system has the following logical components:

3.1.1. Time display

An array of 30 NeoPixels displaying time in 24-hours notation using 7-segment digits and a colon to separate the hours and minutes.

3.1.2. Automatic time synchronization

Time is kept by the microcontroller's internal clock, which is synchronized from DCF77, a German longwave time signal and standard-frequency radio station.

3.1.3. Audio playback

A microcontroller-driven audio player and speaker will provide wake-up sounds.

3.1.4. Snooze detection

Using step response, a hand can be detected when placed on top of the clock with two embedded copper pads.

3.1.5. Docking station

The clock is battery-powered and will be charged on the docking station. This station also provides a rotary dial to change the wake-up time.

3.1.6. Controller

An RP2350 will control all peripherals and will be programmed to preform all logic functions. These functions include:

  • Driving the time display.
  • Synchronizing time in regular intervals.
  • Playing sounds on wake up time.
  • Detecting and applying snooze when in wake-up mode.
  • Stopping wake-up mode when placed on docking station.
  • Setting and displaying wake-up time from rotary dial.

3.2. Bill of Materials

Below is a list of components to build this clock.

Amount Description Price Sum Function
1 SEEED STUDIO XIAO 5.75 5.75 Main / RP2350
1 DCF77 2.69 2.69 Main / Radio Clock Receiver
1 DFPLAYER - A MINI MP3 PLAYER 5.01 5.01 Main / Audio source
1 8Gb TF (Mini SD) 12.40 12.40 Main / Audio storage
1 Speaker 2.00 2.00 Main / Audio output
1 RES 0 OHM JUMPER 1/4W 1206 0.10 0.10 Main / Electrical
1 RES 1K OHM 1% 1/4W 1206 0.10 0.10 Main / Electrical
1 Makerfocus 3.7V 3000mAh Lithium 15.00 15.00 Main / Battery
10 M3*8 nuts and bolts 0.10 1.00 Main
30 ADDRESS LED SERIAL RGB 0.25 7.50 Display / Light
4 CAP CER 1UF 50V X7R 1206 0.25 1.00 Display / Electrical
1 KY-040 Rotary Encoder 2.44 2.44 Docking / Time selection
1 CONN SPRING MOD MALE 6POS SMD 1.95 1.95 Docking / Connector dock
1 CONN SPRING MOD FEMALE 6POS SMD 1.92 1.92 Docking / Connector clock
4 Magnets 0.30 1.20 Docking / Placement
1 USB-C PD Trigger Board 1.67 1.67 Docking / Power
1 12mm plywood 20.00 20.00 Housing and dock
2 3mm clear acrylic 5.00 10.00 Housing
4 M5 nuts and bolts 0.10 0.40 Housing
  Total ex. VAT   €92.13  

3.3. PCBs

I exported all PCBs to STL models and imported them into OpenSCAD.

digit.png
Figure 1: Single digit
dots.png
Figure 2: Dots go between hours and minutes

The above are connected as in the picture below.

display.png
Figure 3: Display side of the clock

Note the holes on the top and bottom edges. They'll be used to mount them on a frame.

main.png
Figure 4: Main board

The main board goes on the back of the display, so the holes in this board align with the holes in the display. Note that the board is incomplete; I do not have 3D models for the DFPLAYER and DCF77 boards.

3.4. Electrical components

Apart from the PCBs, there are some more components: a battery, a DCF77 antenna, a speaker and the snooze copper pads. I arranged them as follows.

components-front.png
Figure 5: Component arrangement display side
components-back.png
Figure 6: Component arrangement main board side

Note the two floating bits on top, they are the small pieces of copper to detect a hand on top of the clock using step response. They stick out above the rest of the components because they will be embedded in the housing.

I created a frame (to be 3D printed) to mount the components on.

frame.png
Figure 7: Frame to mount components
framed-front.png
Figure 8: Framed display side
framed-back.png
Figure 9: Framed main board side

Note that the speaker is not attached to the frame. It will vibrate and should be attached to the housing.

IMG_20260514_172832.jpg
Figure 10: 3D printed frame with battery and antenna
IMG_20260514_161957.jpg
Figure 11: Speaker in 3D printed frame

3.5. Housing

For the outside, I decided on a basic box with rounded sides. The clock will be in the center with transparent acrylic on the outsides, allowing one to see the internals. I am planning on CNC milling these "rings" and providing slits in the edges to lock in the components frame and acrylic windows.

exterior.png
Figure 12: Exterior with slits for mounting
exterior-front.png
Figure 13: All in one front
exterior-back.png
Figure 14: All in one back

3.5.1. Stacking and locking

The position of the slits will depend on the thickness of the wood to be milled because it is not possible to make a horizontal cut.

exterior-sliced-layout.png
Figure 15: Sliced into millable pieces flattened

Note that in the picture above, that some of the slices are flipped with the pockets / slits to be milled on top.

3.5.1.1. TODO locking with M5 bolts

The corners of the housing need a hole all the way through to allow locking the slices together.

3.5.2. Connector

I designed a basic PCB for this (both sides have a similar footprint), and made some sketches for 3D printable components to hide the wires and attach it to the housing and docking station.

screenshot-2026-05-12_18-36-25.png.jpg
Figure 16: PCB design for connector (male)
connector-sketches.png
Figure 17: 3D model sketch to embed the PCB in
3.5.2.1. TODO position and wire access through housing
3.5.2.2. TODO 3D model for holder with magnets and screw holes to fix to wood

3.5.3. Snooze

To detect a snooze action, the clock needs two metal plates to perform step response detection of a hand. Small copper pads will easily detect a hand through a thick layer of wood.

IMG_20260513_143315.jpg
Figure 18: Small pads attached to microcontroller
IMG_20260513_115532.jpg
Figure 19: Pads covered by wood

3.5.4. USB access to microcontroller

To make updating the software easier, it would be really nice to have access to the USB port on the microcontroller without taking the clock apart. There are plenty of USB-C extension options. I ordered some variants to get a feel for them.

3.5.4.1. TODO add access through housing when extension arrives

3.6. Dock

The base docking station will look something like below.

dock-base.png
Figure 20: Base docking station
clock-on-dock.png
Figure 21: Clock on dock

3.6.1. Connector

See also 3.5.2.

3.6.2. TODO Rotary Encoder

A big 3D printed knob on a rotary encoder. I do not yet know how to attach this properly to the dock. The dock will probably have two layers of wood to allow placing the components in a milled pocket on the bottom layer.

3.7. Other Loose Ends

  • Wiring (pretty ribbon wire with pin header / connectors + heat shrink)
  • Power adapter (USB-C or some other 5V adapter)
  • And probably lots more…

4. Reflection

The final project stress is rising! This has been a grueling week because there's so much work to do for this assignment. I underestimated the extra "hardware" dimension of this project; there are so many details I want to get right before continuing.

4.1. Good

Putting everything together like this helps finding details I had not yet thought about, and doing all this in OpenSCAD gives me confidence it will be somewhat nice to look at.

4.2. Bad

Having prices in the BOM is nice (half of them are guessed), but just looking at the materials: man, this is an expensive clock!

4.3. Ugly

There is so much work left to do! I thought I was keeping it simple by building an alarm clock but it feels like it is getting out of hand.

5. Source Files

Copyright © 2026 Remco van 't Veer

Licensed under a
CC BY 4.0

Build using
GNU Emacs, Org Mode and GNU Guix

Source code hosted at
gitlab.fabcloud.org