Skip to the content
4 layers149.9 × 125.7 mmHelios, the printed circuit board in 3D

A real-time controller that automatically turns on a lamp in my room every morning based on an alarm

Size
149.9 × 125.7 mm
Copper layers
4
Thickness
1.6 mm
Parts
91
Nets
96
Pads
254
Tracks, vias
276, 34
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
1 Jul 2026
Updated
18 Sep 2026

Overview

Helios is an open-source printed circuit board by kyriosaa, from the kyriosaa/helios repository on GitHub. It is a 4-layer board of 149.9 × 125.7 mm with 91 parts on 96 nets, routed with 276 tracks and 34 vias.

It is built around the 74HC138, 74HC595 and CC56-12EWA, with the BC557 and DS3231S# among its other parts. Its parts include 30 resistors, 8 capacitors, 8 transistors, 6 ICs and 4 switches. It belongs with the lEDs and displays boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

5

README

README.md

Helios

KiCad PCB [blocked] Arduino C++

A real-time lamp controller for my room. Keeps the time (even when unplugged) and flips a relay once the clock and alarm values match.

My room doesn't have windows so I created this device to automatically turn on my bedside lamp and put myself into fight or flight every morning to help me wake up in time for work/school.

🎥 Demo Video 🎥

Design

Some notes on why the board is built the way it is.

A DS3231 instead of the MCU's own timer

The RTC has its own coin-cell backup, so the clock survives a power outage or being moved to another room. Keeping time on the MCU would mean re-setting the clock every time the device lost power, which is exactly the kind of small annoyance that would make me stop using it.


Discrete multiplexing over a dedicated driver

A MAX7219 or TM1637 would have done this with fewer parts and less code. I used two 74HC595s for the segments and a 74HC138 plus PNP high-side drivers per display because I to practice building the multiplexing myself instead of buying it in a chip.


A polled encoder, not an interrupt

Every input has a 10k resistor and a 100nF capacitor on it to filter out switch bounce. The tradeoff to this is that signals now fade between HIGH and LOW over about a millisecond instead of snapping. During that fade, the Arduino can't really tell which one it's looking at, so a little noise makes it read HIGH-LOW-HIGH-LOW a few times before settling. An interrupt on ENC_CLK (D2) would count every one of those HIGH-LOW flips, so one click of the encoder knob would add 3 or 4 counts. However, reading the pin in the loop() function only ever sees the value after it settles, which solves the issue.


Two board versions

The 2-layer version is meant to be manually etched. But I know most people dont have an etching machine, so the 4-layer version is for anyone who doesn't have an etching setup and would rather send it to a manufacturer (I'm also experimenting with curved traces on the 4-layer version).

Features

FeatureDescription
24/7 TimekeepingA coin battery supports the DS3231, so pulling the plug doesn't require a manual time recalibration
Dual DisplaysSeparate 7-segment displays for the current time and alarm
Manual OverrideOne button forces the lamp on and disarms the alarm. The armed state is shown by a decimal point on the alarm display
System ON/OFFPressing the encoder blanks the displays and cuts the relay
Multiplexed DigitsTwo 74HC595s (daisy-chained) drive segments, 74HC138s + PNP high-side drivers select digits

Hardware

RefQtyPartRole
A11Arduino Nano v3.xMCU, socketed so it can be swapped without desoldering
U1, U4274HC595Daisy-chained shift registers driving the segment lines
U2, U5274HC1383-to-8 decoders selecting which digit is lit
U3, U62CA56-12EWACommon-anode 4-digit 7-segment displays (time and alarm)
Q1–Q88BC557 (PNP)High-side drivers sourcing current into the selected digit
SW11ALPS EC11E rotary encoder w/ switchSets values; pressing it toggles the system on/off
SW2–SW436mm tactile push buttonMode, set, and manual lamp override
J11JST-XH 1x03Relay / lamp output
J211x04 pin socketDS3231 RTC module (VCC, GND, SDA, SCL)
R1–R6610kPull-ups on the encoder and buttons
R7–R10, R27–R3081kBase resistors for the PNP digit drivers
R11–R2616330Segment current limiting
C1–C88100nFDebounce caps on the inputs, paired with the 10k pull-ups

Full parts list: helios_bom.csv

PCB Design

Schematic

Images

Parts

91
QtyValueFootprintReferences
25LOGOLOGOG***, G***, G***, G***, G***, G***, G***, G***, G***, G***, G***, G***, G***, G***, G***, G*** +9
16150Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26
8100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmC1, C2, C3, C4, C5, C6, C7, C8
81KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR7, R8, R9, R10, R27, R28, R29, R30
8BC557Package_TO_SOT_THT:TO-92_Inline_WideQ1, Q2, Q3, Q4, Q5, Q6, Q7, Q8
610KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R2, R3, R4, R5, R6
6MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4, H9, H10
3SW_PushButton_Switch_THT:SW_PUSH_6mmSW2, SW3, SW4
274HC138Package_DIP:DIP-16_W7.62mmU2, U5
274HC595Package_DIP:DIP-16_W7.62mmU1, U4
2CC56-12EWADisplay_7Segment:CA56-12EWAU3, U6
1Arduino_Nano_v3.xModule:Arduino_NanoA1
1DS3231Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ2
1MountingHoleRelay_THT:Relay_Module_5V_MountingH5
1Rotary EncoderRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmSW1
1To RelayConnector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ1

More from kyriosaa/helios

1
  • 2 layers149.9 × 125.7 mmHelios, the printed circuit board in 3D

    Helios

    kyriosaa/helios

    A real-time controller that automatically turns on a lamp in my room every morning based on an alarm

    67 parts

Similar boards

  • 2 layers65 × 56 mmToy Ikea MicrowaveController, the printed circuit board in 3D

    Toy Ikea MicrowaveController

    SkullKill/Toy-Ikea-MicrowaveController-PCB

    PCB for Microwave Controller for Ikea Kitchen DUKTIG

    73 parts1GPL-3.0
  • 2 layers48.3 × 30.5 mmNightclock, the printed circuit board in 3D

    Nightclock

    encukou/hodiny

    14 parts
  • 2 layers150 × 130 mmRoboDay, the printed circuit board in 3D

    RoboDay

    GlemR/temp

    temporary

    38 parts
  • 2 layers68.6 × 27.9 mm7Segment, the printed circuit board in 3D

    7Segment

    riktw/YASSD

    Yet Another Seven Segment Display

    38 parts
  • 2 layers200 × 66 mmNixie control board, the printed circuit board in 3D

    Nixie control board

    shengwen-tw/nixie-clock

    IN-14 Russian nixie tube clock

    79 parts9MIT
  • 2 layers148.8 × 132.2 mmUsbflashprog, the printed circuit board in 3D

    Usbflashprog

    robsonsmartins/usbflashprog

    A memory device programmer (Flash/EPROM/E2PROM) board and software, connected to PC by USB port.

    125 parts36
  • 2 layers100 × 100 mmFluxgate, the printed circuit board in 3D

    Fluxgate

    yjmwxwx/stm32asm

    122 parts16GPL-3.0

Questions

How big is the Helios PCB?

It measures 149.9 × 125.7 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Helios use?

91 parts, built around the 74HC138, 74HC595, CC56-12EWA and BC557. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Helios KiCad files?

From the kyriosaa/helios repository on GitHub, at the commit this page was made from: the board is 4layer/helios/helios.kicad_pcb and its schematic 2layer/helios/display_alarm.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Helios design in my own project?

Its repository states no licence, so its author keeps all rights: ask kyriosaa before reusing the design.