Final Project - DESKO


Final Project - DESKO

DESKO is an ambient desk and bedside clock that combines a time display, programmable lighting, alarm functions, a countdown timer, a stopwatch, physical controls, and a local browser interface in one custom-made object.


Table of Contents


Project Summary

DESKO is a multifunctional clock for a desk, study area, or bedside table. It uses an e-paper display for the main interface and NeoPixel LEDs for visual feedback. The clock can show time, set an alarm, create a warm wake-up light before the alarm, run a countdown timer, run a stopwatch, and create different ambient lighting modes.

The project is built around a Seeed Studio XIAO ESP32-C3. The ESP32-C3 controls the display, NeoPixels, buzzer, buttons, and web interface. The user can control DESKO in two ways:

  • directly from the physical buttons on the device
  • from a phone or computer through a local browser interface

Final DESKO prototype showing the alarm screen.


Presentation Slide and Video

The final summary slide and final video are placed in the root of the website repository also at the end of this decumentation.


What Does It Do?

DESKO is a physical clock with lighting and productivity features.

The main functions are:

FunctionDescription
ClockShows the current time on the e-paper display
Set timeAllows the software clock time to be adjusted
AlarmStores an alarm time and triggers sound and light
Wake-up lightSlowly increases warm light before the alarm
Ambient lightProvides selectable NeoPixel lighting modes
CountdownCounts down from a selected duration
Countdown LED feedbackChanges the NeoPixels as the countdown progresses
StopwatchTracks elapsed time
Buzzer feedbackGives sound feedback for alarm and countdown
Physical controlsUses buttons to move through menus and change values
Web interfaceLets the user control DESKO from a browser

The wake-up feature is one of the main parts of the project. When the alarm is enabled, the NeoPixels begin a gradual warm light effect before the alarm time. This makes the clock more than a simple buzzer alarm. The light gives a visual transition before the sound starts.

DESKO countdown screen on the e-paper display.

The countdown feature also uses light as information. During the countdown, the LEDs visually show the passage of time. This makes the timer easier to understand from a distance without constantly looking at the screen.

DESKO countdown screen on the e-paper display.

NeoPixels used as visual feedback while the countdown runs.


Previous Work and Inspiration

At the beginning of the project, I wanted to combine RGB light with everyday life. I looked at previous Fab Academy projects and found Alok Sethi’s 2019 Oulu FabLab project, a wake-up alarm lamp. That project used light as part of an alarm routine, which was close to the direction I wanted to explore.

DESKO is also related to existing alarm clocks, wake-up lights, smart clocks, Pomodoro timers, and desk lamps. However, I did not want to copy a commercial product. My aim was to make my own integrated clock prototype using the skills from Fab Academy.

Compared with a normal alarm clock, DESKO combines:

  • a clock interface
  • ambient lighting
  • wake-up light behavior
  • countdown and stopwatch tools
  • a local browser control panel
  • a custom fabricated enclosure
  • embedded programming and system integration

The main difference is that the project is not just a bought clock placed in a box. I designed the physical form, assembled the electronics, wrote the code, created the web interface, and integrated the parts into one object.

Wake-up alarm lamp inspiration used during the early project direction.


What I Designed

I designed the main physical and digital parts of DESKO.

The designed parts include:

Designed partPurpose
Enclosure layoutHolds the display, buttons, LEDs, buzzer, controller, and wiring
Display openingPositions the e-paper screen on the front face
Button placementMakes the physical controls accessible from the top
Internal layoutOrganizes the electronics and wires inside the body
NeoPixel placementAllows the LEDs to act as ambient and feedback lighting
Magnetic / removable accessMakes the inside easier to open for debugging
E-paper UIShows the clock, menu screens, alarm, countdown, and stopwatch
Button menu systemAllows local control without a computer
Web interfaceAllows control from a phone or computer
Final integrated codeCombines all functions in one program

Early sketches explored different shapes, including a triangular version and a round version. I chose a rectangular prism because it was cleaner, easier to fabricate, and better for organizing the internal components.

Early sketch 1

Early sketch 2


System Diagram

The final system can be understood as a single controller connected to input, output, interface, and power systems.

DESKO final system diagram.

Diagram visualized by ChatGPT

                  Physical buttons
                         |
                         v
Phone / Computer -> ESP32-C3 controller -> E-paper display
   Web browser          |                  Clock and menus
   192.168.4.1          |
                        |-> NeoPixel LEDs
                        |   Ambient light, wake-up light, countdown feedback
                        |
                        |-> Buzzer
                        |   Alarm and timer sound
                        |
                        |-> 5V power input
                        |
                        v
                  Custom enclosure

The physical buttons and the browser interface control the same functions. This was important because I wanted DESKO to be usable as a normal physical object, but also easier to configure through a browser when needed.


Main Systems

DESKO is made from several connected systems.

SystemRole
Microcontroller systemRuns the full program on the ESP32-C3
Display systemShows time, screen titles, settings, and hints
Lighting systemControls NeoPixel ambient modes and visual feedback
Alarm systemStores alarm time and triggers buzzer and wake-up light
Countdown systemTracks remaining time and updates the LEDs
Stopwatch systemTracks elapsed time
Button systemProvides local interaction
Web interface systemProvides browser-based control
Power systemSupplies the ESP32-C3, display, LEDs, and buzzer
Enclosure systemHolds and protects all parts

The main challenge was avoiding conflicts between systems. For example, the ambient light mode should run normally, but the alarm and countdown need to override it when they are active.


Mechanical Design and Fabrication

Enclosure Design

The enclosure was designed around the largest and most visible component, the e-paper display. The display is placed on the front face so the time and menu screens are easy to read. The buttons are placed on the top so the user can change screens, adjust values, and stop alarms without opening the device.

The enclosure also needed space for:

  • ESP32-C3 controller
  • e-paper display wiring
  • two NeoPixel sticks
  • buzzer
  • physical buttons
  • internal wires
  • power input
  • removable or magnetic access for debugging

3D Design

The main enclosure geometry was developed digitally before fabrication. The model was used to check the proportions, display placement, button placement, and internal space.

CAD model of the DESKO enclosure shown during design work.

Clean CAD layout of the DESKO body and parts.

The 3D design stage helped me think about:

  • how the user sees the clock from the front
  • how the buttons are reached from the top
  • how much space the electronics need inside
  • how the back or bottom can be opened for maintenance
  • where the LEDs should be placed for visible light effects

3D Printing

3D printing was used for the custom body parts of DESKO. This was useful because the shape had to match my specific components, not a standard commercial box. The 3D printed part gave the project its main physical form and made it possible to place the electronics inside one object.

Laser Cutting

Laser cutting was used for flat parts which are the light diffusers ont the back of DESKO. Flat laser-cut parts are useful because they can be produced quickly and accurately. I used a semi transparent acrylic and laser cut with our XTool laser that I used in the previous weeks.

Back opening and NeoPixel stick placement inside the enclosure.

Assembly

During assembly, the main focus was packaging. I wanted the final device to look like a finished object from the outside, while keeping the inside accessible enough for debugging.

Removable or magnetic back access used for assembly and debugging.

The packaging methods were:

ComponentPackaging method
E-paper displayMounted behind the front opening
ButtonsFixed through top holes
NeoPixelsPlaced inside the enclosure for light effects
ESP32-C3Mounted inside with access to wiring
BuzzerPlaced inside but not fully sealed
WiresRouted inside the enclosure
Power cableRouted from the back

Electronics

Main Controller

DESKO uses a Seeed Studio XIAO ESP32-C3 as the main controller. I chose it because it is small, supports Wi-Fi, can be programmed with Arduino IDE, and has enough GPIO capability for this prototype.

The ESP32-C3 controls:

  • e-paper display
  • NeoPixel LEDs
  • buttons
  • buzzer
  • web server
  • software clock
  • alarm logic
  • countdown logic
  • stopwatch logic

Inputs

The main physical inputs are the buttons on the top of the clock.

Top physical button layout on the DESKO enclosure.

The button interface uses three main control buttons:

ButtonFunction
MODEMove between screens
UPChange values or cycle light modes
OKSelect fields, toggle options, or stop alarm

This kept the physical interface simple. Instead of adding many separate buttons, I used a small menu system with only a few controls.

Outputs

Controller board and connected modules used for the DESKO prototype.

The main output devices are:

OutputPurpose
E-paper displayShows time, menu screens, settings, and hints
NeoPixelsCreates ambient light and visual timer feedback
BuzzerMakes sound for alarm and countdown completion

The e-paper display is used because it gives a clean clock-like visual style. The NeoPixels make the project more interactive by turning light into information. The buzzer gives clear feedback when an alarm or timer ends.

Power

The project uses a 5V USB-C power supply. All electronic modules share a common ground.

The power system was kept simple for the prototype. A future version could improve this with a battery, charging circuit, protection, and a more finished power board.

PCB and Electronics Production Connection

During the electronics design and electronics production weeks, I designed and milled ESP32-C3 based boards and tested input and output devices. These weeks helped me understand routing, ground strategy, soldering, continuity testing, and debugging.

For the final prototype, the main focus was integrating the controller, display, LEDs, buttons, and buzzer inside DESKO. The final wiring is still more prototype-like than a commercial product, but the earlier PCB work helped me understand how the final electronics should be organized.

A future revision should combine more of the wiring into a custom final PCB. That would make the inside cleaner, easier to assemble, and more reliable.

PCB milling and electronics production process connected to the final controller work.

Hands-on soldering and electronics assembly during the project.


Embedded Programming

The final code combines several systems into one ESP32-C3 program.

Uploading and testing the DESKO code on the ESP32-C3.

The software also includes browser control panel.

The code is organized so the main loop repeatedly checks the web server, updates time, reads buttons, handles alarm/countdown/stopwatch behavior, updates lighting, and refreshes the display only when needed.

void loop() {
  server.handleClient();

  updateSoftwareClock();

  if (btnMode.pressed()) handleModeButton();
  if (btnUp.pressed())   handleUpButton();
  if (btnOk.pressed())   handleOkButton();

  handleMinuteDisplayUpdate();
  handleAlarm();
  handleCountdown();
  handleStopwatchDisplay();
  applyAmbientLighting();

  if (displayDirty) updateDisplay();
}

This structure was important because all parts need to work together. If the code stayed as separate test programs, DESKO would not function as a final integrated project.

E-paper Display Screens

The display interface has six main screens:

ScreenPurpose
1/6 HomeShows time, alarm status, and light mode
2/6 Set TimeAllows hour and minute adjustment
3/6 Ambient LightShows and changes the selected light mode
4/6 AlarmSets alarm hour, minute, and ON/OFF
5/6 CountdownSets and controls countdown
6/6 StopwatchStarts, pauses, and resets stopwatch

Each screen includes short hints at the bottom. This was necessary because the same three buttons do different things depending on the active screen.

Display Refresh Strategy

The e-paper display refreshes more slowly than a normal OLED or LCD. Because of that, I did not want the display to refresh constantly. I used a displayDirty flag so the screen only updates when something important changes.

This improved the user experience and reduced unnecessary refreshes.

Ambient Light Modes

The NeoPixel system includes several modes:

DESKO web interface and physical prototype being tested together.

ModeDescription
OFFTurns the LEDs off
WARMWarm steady light
BEIGE BREATHSlowly rising and falling beige light
BLUE NIGHTDim blue night light
RAINBOWAnimated color effect
FOCUS WHITEBright warm white light

The maximum brightness can be controlled from the code so the LEDs do not become too intense.

Dark-room test showing the ambient RGB light output.

Side light output from the integrated DESKO body.

Alarm and Wake-up Light

The alarm has two parts:

  1. A warm light sequence before the alarm
  2. A buzzer and brighter light at the alarm time

The wake-up light starts before the alarm and slowly increases. In the final code, this behavior is designed for a 20-minute wake-up period. The important point is that the wake-up light can turn on even if the ambient lighting is currently off.

Countdown LED Feedback

The countdown timer uses the LEDs as a progress indicator. As time passes, the LEDs gradually shift to show that the timer is running out. When the countdown finishes, the buzzer rings and the LEDs turn into a clear alert color.

NeoPixels used as visual feedback while the countdown runs.

Stopwatch

The stopwatch tracks elapsed time and can be controlled from the clock interface. Because the e-paper does not need to update every second, the display refresh is controlled to avoid unnecessary screen updates.


Web Interface

The web interface allows the user to control DESKO from a phone, tablet, or computer.

The ESP32-C3 creates its own Wi-Fi network:

const char* WIFI_SSID = "DESKO_Control";
const char* WIFI_PASSWORD = "12345678";

After connecting to this network, the user opens:

http://192.168.4.1

The browser page then shows the DESKO control panel.

The web interface includes:

SectionFunction
StatusShows clock time, alarm status, light mode, and countdown
Set Clock TimeChanges the software clock
AlarmSets alarm hour, minute, and ON/OFF
Ambient LightChanges the NeoPixel mode
CountdownSets, starts, pauses, and resets the countdown
Quick ControlsStops the buzzer or turns LEDs off

The web interface uses routes such as:

server.on("/", handleWebPage);
server.on("/setTime", handleSetTimeWeb);
server.on("/setAlarm", handleSetAlarmWeb);
server.on("/ambient", handleAmbientWeb);
server.on("/countdown", handleCountdownWeb);
server.on("/countdownToggle", handleCountdownToggleWeb);
server.on("/countdownReset", handleCountdownResetWeb);
server.on("/stopAlarm", handleStopAlarmWeb);
server.on("/ledOff", handleLedOffWeb);

This made DESKO easier to demonstrate and use because the user does not have to do every setting from the physical buttons.


System Integration

System integration was the most important part of the final project.

Before final integration, I had tested many parts separately:

  • buttons
  • buzzer
  • NeoPixels
  • display
  • web interface
  • alarm logic
  • countdown logic
  • stopwatch logic

The final project required all of these to work together in the same object.

Internal packaging of display, controller, wires, buttons, and LEDs.

Existing system integration photo showing the parts inside the prototype.

Integration Goals

The integration goals were:

  • the device should look like one finished clock, not separate modules
  • the display, buttons, LEDs, buzzer, and web interface should run from one codebase
  • the internal wiring should fit inside the enclosure
  • the physical buttons and web interface should control the same state variables
  • alarm and countdown functions should override ambient lighting when needed
  • the e-paper display should refresh only when needed

Physical Integration

The physical parts were integrated by placing the display on the front, buttons on the top, lighting inside or behind the body, and electronics inside the enclosure. The enclosure hides the electronics during normal use but still allows access for debugging.

Electronic Integration

The electronics were connected around the ESP32-C3 PCB board. The main integration rule was that all parts share a common ground. This is especially important for the NeoPixels, buzzer, and display communication.

The wiring was planned so each component had a clear role:

ComponentConnection type
ButtonsDigital inputs
BuzzerDigital output
NeoPixelsSingle data line output
E-paper displayDisplay communication
Web interfaceESP32-C3 Wi-Fi
Power5V and common ground

Software Integration

The software integration was more difficult than writing separate test codes. The program needed to decide which function has priority.

The priority logic is:

  1. Alarm ringing and countdown finished states have highest priority
  2. Wake-up light overrides normal ambient mode
  3. Countdown LED feedback overrides ambient mode while active
  4. Ambient mode runs when no higher-priority function is active
  5. Display refresh only happens when displayDirty is true

This prevented different light functions from fighting each other.

After a draft of the complete software done by myself with the seperate test codes for component testing, I rewrote the code with the help of AI, Claude, to have a cleaner and more efficient working code as it does the UI better.


Bill of Materials

The exact cost depends on which parts are already available in the lab. This is an approximate bill of materials for the final prototype.

ItemPurposeEstimated Cost
Seeed Studio XIAO ESP32-C3Main controller$6
E-paper displayMain clock and menu display$35-45
NeoPixel LED sticks 8Ambient light and timer feedback$8-12
BuzzerAlarm and countdown sound$1
Push buttonsPhysical controls$1-2
Wires and connectorsInternal wiring$3
5V USB-C power supplyPower$5-8
3D printing filamentEnclosure/body/mounts$3-5
Laser cut materialPanels/diffuser/structure$5-10
Magnets, screws, tape, small hardwareAssembly$4

Estimated total cost:

Approximately $70-95

The cost is given as an estimate rather than an exact number because taxes and customs regulations in Turkey rapidly change over time, the final cost can be slightly different from the values listed here.

The e-paper display is the most expensive component. A cheaper future version could use a smaller display or a different screen type, but the e-paper screen gives DESKO a clean clock-like look.


Testing and Evaluation

I evaluated DESKO by checking whether the full system worked as one device, not just as separate tests before putting everything together i ran a final check of the components.

Early e-paper display test before full integration.

NeoPixel light test before enclosure integration.

Buzzer module test for alarm and countdown feedback.

Testing the physical button interaction.

Test Checklist

TestResult
ESP32-C3 uploads and runs codeWorked
E-paper display shows the interfaceWorked
Home screen shows clock timeWorked
Physical buttons navigate screensWorked
Time setting can be changedWorked
Ambient modes change LEDsWorked
Alarm can be setWorked
Wake-up light starts before alarmWorked in testing
Buzzer rings for alarmWorked
Countdown can be set and startedWorked
Countdown LEDs show progressWorked
Stopwatch runsWorked
Web interface creates local Wi-FiWorked
Browser opens the control panelWorked
Web interface changes settingsWorked
Enclosure holds the partsWorked, but could be improved
Internal wiring fitsWorked, but could be improved

Evaluation Criteria

The project is successful if:

  • it shows the time clearly
  • the buttons can control the interface
  • the web interface can control the same main functions
  • the alarm and countdown work reliably
  • the NeoPixels give useful light feedback
  • the buzzer gives clear sound feedback
  • the device fits inside its enclosure
  • the final video can demonstrate the main functions clearly

Problems and Fixes

ProblemFix
Too many separate test codesCombined the functions into one main program
E-paper refresh was slowUsed displayDirty so the display only refreshes when needed
LED modes could conflictGave alarm and countdown priority over ambient lighting
Button interface could be confusingAdded screen numbers and on-screen hints
Web interface needed to work without a routerMade the ESP32-C3 create its own Wi-Fi access point
Countdown needed better visual feedbackUsed NeoPixels to show countdown progress
Alarm needed more than just soundAdded gradual warm wake-up light
Internal wiring could become messyPlanned the enclosure around component placement and cable routing
Project risked becoming too feature-heavyFocused on stabilizing the main features instead of adding new ones

What Worked and What Did Not

What Worked

The main functions worked together in the final code. The e-paper display shows the clock interface and menu screens. The physical buttons can move through the interface. The NeoPixels produce ambient lighting and timer feedback. The buzzer gives alarm and countdown feedback. The local web interface can control important settings from a browser.

The web interface was especially useful because setting time, alarm, and countdown values is easier from a phone or computer than from only three physical buttons.

The system integration also worked well enough to demonstrate the final project as a single device.

What Did Not Work Perfectly

The final prototype still has areas that could be improved.

The e-paper screen is slower than a normal display, so it is not ideal for fast animations or second-by-second updates. The wiring works, but a future version should use a more integrated PCB and cleaner connectors. The web interface works, but it could be made more polished visually. The power system is fine for a prototype, but a final product would need a safer and more complete power design.

The biggest lesson was that finishing the project was not about adding more features. It was about making the existing features reliable and understandable.


Implications and Future Development

DESKO currently makes the most sense as an open-source educational prototype. It shows how a student can combine digital fabrication, electronics, embedded programming, interface design, and system integration into one object.

Future improvements could include:

  • a rtc module for more accurate timekeeping
  • cleaner internal wiring
  • better power management
  • rechargeable battery option
  • improved enclosure tolerances
  • more polished e-paper graphics
  • improved web interface design
  • saved settings using non-volatile memory

If the design becomes even more reliable, this could be sold to customers as well.


Files

Final project file links:


These weeks contributed directly to the final project:


License

For the documentation and design files, I chose:

Creative Commons Attribution-ShareAlike 4.0 International
CC BY-SA 4.0

This allows others to share and adapt the documentation and design files as long as they give credit and share their version under similar conditions.

For the code, I chose:

MIT License

This allows others to use, modify, and improve the code while keeping the original license notice.


Acknowledgements

DESKO was developed as my Fab Academy final project at Hisar Fab Lab.

I used ideas, documentation methods, and technical references from Fab Academy assignments and previous student projects.

Some technical info throughout my fab academy journey was gotten from ChatGPT, and I reffered to it when needed so ChatGPT was used for technical clarification.

Seperate component tests were done by code written myself; for the code integration and creating a more reliable final code, I got help from Claude.

I also used documentation and examples for the ESP32-C3, e-paper display, NeoPixel library, Arduino WebServer, and previous Fab Academy weekly assignments. The final design, integration, code structure, enclosure, and interface decisions were developed for my own project.