Skip to the content
PCBKitNew board
2 layers31.3 × 49 mmLED shield, the printed circuit board in 3D

Wake up naturally with LED lighting that activates 10 minutes before your alarm.

Size
31.3 × 49 mm
Copper layers
2
Thickness
1.58 mm
Parts
11
Nets
23
Pads
37
Tracks, vias
25, 0
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
9 Oct 2026
Updated
9 Oct 2026

Overview

LED shield is an open-source printed circuit board by CodingGreatOwl, from the CodingGreatOwl/Light-Alarm-Clock repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 31.3 × 49 mm with 11 parts on 23 nets, routed with 25 tracks and 0 vias.

Its parts include 4 connectors, 2 capacitors, 1 resistor, 1 IC and 1 diode. It belongs with the lEDs and displays boards of this library.

README

README.md

LightAlarmClock

A hardware-software alarm clock system that combines an Android app, BLE communication, and an ESP32 firmware controller to trigger a pre-alarm light sequence before the alarm rings.

This project demonstrates end-to-end product engineering across mobile, embedded firmware, and electronics design.

Why this project

Traditional alarms wake you up abruptly with sound. LightAlarmClock introduces a softer wake-up flow:

  1. 10 minutes before alarm: Android app sends a BLE command
  2. ESP32 receives command: firmware starts a timed IR/light transmission sequence
  3. Alarm time: full alarm rings on phone with dismiss/snooze UI

This creates a practical blueprint for a smart alarm + ambient wake-up device.

System Architecture

1) Android App (Android/)

  • Built with Kotlin + Jetpack Compose
  • Vibecoded Android implementation focused on fast iteration and feature validation
  • Lets users:
    • create/edit/delete alarms
    • configure recurring schedules
    • choose ringtone
    • toggle vibration/notification
    • configure BLE target (device address, service UUID, characteristic UUID, message)
  • Uses AlarmManager.setExactAndAllowWhileIdle for precise alarms
  • Triggers a BLE foreground service (BleMessageService) 10 minutes before alarm
  • Launches a full-screen alarm activity (AlarmActivity) and ringing service (AlarmRingingService) at alarm time

2) ESP32 Firmware (Rust - ESP32/)

  • Built in Rust using esp-idf-svc + esp32-nimble
  • Exposes a custom BLE service/characteristic
  • On write, starts a state-machine-driven transmission (PWM + timer interrupts)
  • Generates a modulated sequence (38.2 kHz carrier) suitable for IR/light control workflows

3) Hardware Shield (LED_shield/)

  • KiCad project for custom LED/IR driver shield
  • Includes:
    • schematic (.kicad_sch)
    • PCB layout (.kicad_pcb)
    • Gerber outputs (GBR/)
    • BOM (BOM.csv)
  • Components include an IR LED (LD271), regulator (LM7805), and supporting passives/connectors

Key Features

  • End-to-end alarm pipeline from mobile UI to physical actuation
  • Foreground services for reliable background BLE and alarm behavior
  • Lock-screen alarm UX with Snooze / Dismiss actions
  • Recurring alarm scheduling and day selection
  • Hardware manufacturing assets included (Gerbers + BOM)

Tech Stack

Android

  • Kotlin
  • Jetpack Compose (Material 3)
  • Android AlarmManager / BroadcastReceiver / Foreground Service

Embedded

  • Rust (edition 2021)
  • esp-idf-svc
  • esp32-nimble (BLE stack)

Hardware

  • KiCad (schematic + PCB)
  • Through-hole + connector-based shield design

Repository Structure

text
LightAlarmClock/
├── Android/           # Kotlin Android app (UI, alarms, BLE client)
├── Rust - ESP32/      # ESP32 Rust firmware (BLE peripheral + signal generation)
├── LED_shield/        # KiCad hardware design + Gerbers + BOM
└── LICENSE            # GPL-3.0

Getting Started

Prerequisites

  • Android Studio (latest stable)
  • Android device running API 33+ (for current app config)
  • ESP32 development board
  • Rust + esp-idf toolchain for ESP32 builds
  • BLE-capable phone and ESP32 in range

1) Run Android App

bash
cd Android
./gradlew assembleDebug

Then install from Android Studio or via adb.

2) Flash ESP32 Firmware

From Rust - ESP32/, build/flash with your ESP-IDF Rust setup (tooling varies by environment). The firmware advertises BLE service:

  • Service UUID: 6827989e-079a-404f-946a-da39f968ce82
  • Characteristic UUID: c696a5a1-827f-4df2-8260-5cdc7f0a4f44

3) Configure BLE in App

In the app:

  • Open Bluetooth Settings
  • Enter ESP32 MAC address
  • Confirm service/characteristic UUIDs
  • Set message payload
  • Use Test Connection and Send Test Message

Alarm Flow (Runtime)

  1. User schedules alarm in app
  2. App registers:
    • main alarm trigger
    • BLE pre-alarm trigger (10 minutes earlier)
  3. Pre-alarm fires -> BlePreAlarmReceiver starts BleMessageService
  4. BLE write triggers ESP32 transmission sequence
  5. Main alarm fires -> alarm UI + ringing foreground service
  6. User snoozes or dismisses

Recruiter Highlights

This project showcases:

  • Cross-domain engineering: mobile + embedded + PCB
  • Real-world Android architecture: alarms, receivers, services, lock-screen behavior
  • Low-level firmware work: timers, PWM, BLE GATT handling
  • System integration mindset: one product, multiple layers, clear signal path
  • Product thinking: user-centric wake-up experience, not just a technical demo

Known Improvements / Roadmap

  • Add automated tests (unit + instrumentation) for alarm scheduling edge cases
  • Improve BLE retry/backoff and connection lifecycle handling
  • Add screenshots/GIFs for app UX in this README
  • Add hardware bring-up and calibration guide
  • Harden production alarm reliability across OEM battery optimizations

License

This project is licensed under GNU GPL v3.0. See LICENSE.

Parts

11
QtyValueFootprintReferences
2Screw_Terminal_01x02TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ3, J4
10.1uFCapacitor_THT:C_Rect_L7.0mm_W2.0mm_P5.00mmC2
10.33uFCapacitor_THT:C_Rect_L7.0mm_W2.0mm_P5.00mmC1
168Resistor_THT:R_Axial_DIN0411_L9.9mm_D3.6mm_P15.24mm_HorizontalR1
1CON-RightConnector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_VerticalJ2
1CON-leftConnector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_VerticalJ1
1LD271LED_THT:LED_D5.0mm_IRGreyD1
1LM7805_TO220Package_TO_SOT_THT:TO-220-3_VerticalU1

The 9 most common of 11 parts.

Questions

How big is the LED shield PCB?

It measures 31.3 × 49 mm and has 2 copper layers, 1.58 mm thick.

What parts does the LED shield use?

11 parts. 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 LED shield KiCad files?

From the CodingGreatOwl/Light-Alarm-Clock repository on GitHub, at the commit this page was made from: the board is LED_shield/LED_shield.kicad_pcb and its schematic LED_shield/LED_shield.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the LED shield design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers60 × 30 mmController, the printed circuit board in 3D

    Controller

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    11 parts3kApache-2.0
  • 2 layers103 × 30.5 mmTS Front Endcap, the printed circuit board in 3D

    TS Front Endcap

    EEVengers/ThunderScope

    ThunderScope GitHub Repo

    11 parts1.3kMIT
  • 2 layers26 × 30 mmExpansion Card, the printed circuit board in 3D

    Expansion Card

    FrameworkComputer/ExpansionCards

    Reference designs and documentation to create Expansion Cards for the Framework Laptop

    11 parts1.1kCC-BY-4.0
  • 2 layers53.9 × 23.2 mmBuffer, the printed circuit board in 3D

    Buffer

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    11 parts1kGPL-3.0
  • 2 layers10 × 20 mm2 connector Sensor Board, the printed circuit board in 3D

    2 connector Sensor Board

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    11 parts915
  • 2 layersFet module, the printed circuit board in 3D

    Fet module

    ByteWelder/Decktility

    A handheld PC

    11 parts855CC-BY-SA-4.0
  • 2 layers47 × 33 mmSevensegment led display module, the printed circuit board in 3D

    Sevensegment led display module

    tardate/LittleArduinoProjects

    a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

    11 parts803MIT
  • 2 layers42.5 × 36.8 mmDevboard, the printed circuit board in 3D

    Devboard

    basilfx/TRADFRI-Hacking

    Hacking IKEA TRÅDFRI products, such as light bulbs, window blinds and other accessories.

    11 parts743CC-BY-4.0