Skip to the content
PCBKitNew board
2 layers98 × 76 mmStandingDesk, the printed circuit board in 3D

Code and PCB files for Yeah Nah DIY YouTube video

Size
98 × 76 mm
Copper layers
2
Thickness
1.6 mm
Parts
32
Nets
38
Pads
96
Tracks, vias
154, 0
Pours
2
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
29 Jan 2025
Updated
5 Oct 2025

Overview

StandingDesk is an open-source printed circuit board by handya, from the handya/Standing-Desk-Controller repository on GitHub. It is a 2-layer board of 98 × 76 mm with 32 parts on 38 nets, routed with 154 tracks and 0 vias.

Its parts include 9 resistors, 7 connectors, 4 diodes, 2 transistors and 2 switches. It belongs with the AVR (ATmega, ATtiny) boards of this library.

README

README.md

Standing Desk Controller (macOS + Arduino)

This repo contains a macOS test app and matching Arduino firmware to control a custom-built standing desk using serial communication.

Watch the video

Find out more on YeahNahDIY.com

⚠️ This project is experimental and not production ready. The code is rough and intended for testing purposes only.


🔌 Arduino Firmware

This firmware runs on an Arduino-compatible board to control the physical desk hardware (motor driver, buttons, rotary encoder).

Features

  • Manual buttons for up/down
  • Rotary encoder for height tracking
  • 3 preset memory buttons
  • EEPROM save/restore of height
  • Serial interface for remote commands and status
  • Homing support
  • Movement timeouts

Pin Mapping

FunctionPin
Rotary AD3
Rotary BD2
Button: DownD4
Button: UpD5
Button: AD8
Button: BD7
Button: CD6
Motor: DownD11
Motor: UpD12

Serial Protocol (Same as macOS)

  • Send a, b, c to go to presets

  • Send s to stop

  • Send a number like 950 to go to that height in mm

  • Desk replies with state + height every cycle, e.g.:

    text
    movingUp
    850

Notes

  • EEPROM is used to persist height between restarts
  • Desk must be homed (manually or via a/HOME button) for presets to work
  • Height is calculated using encoder steps with a conversion factor (heightOffset)
  • All output is in mm

🛠 Requirements

  • Arduino-compatible board (Uno, Nano, etc.)
  • Motor driver circuitry
  • Rotary encoder (TWO03 latch mode)
  • Desk with UP/DOWN inputs
  • macOS app built via Xcode
  • USB serial connection

💻 macOS App

Features

  • Control your desk height via a slider
  • Three preset position buttons (a, b, c)
  • Realtime desk state and height display
  • Serial communication via ORSSerialPort

Setup

  1. Open the project in Xcode.

  2. Find your serial port:

    swift
    let ports = ORSSerialPortManager.shared().availablePorts
    print(ports)
  3. Update this line in ViewController.swift with the correct serial path:

    swift
    serialPort = ORSSerialPort(path: "/dev/cu.usbserial-840")!
  4. Build and run.

Serial Protocol

The macOS app sends the following over serial:

ActionSerial Output
Preset 1a\n
Preset 2b\n
Preset 3c\n
Stop Movements\n
Set Height950\n (in mm)

⚠️ Disclaimer

This is test software. No safety limits or failsafes are implemented. Use at your own risk.

Parts

32
QtyValueFootprintReferences
510kΩResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_HorizontalR1, R2, R3, R4, R5
4~MountingHole:MountingHole_3mm_PadH1, H2, H3, H4
2100kΩResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_HorizontalR6, R9
2220ΩResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_HorizontalR7, R8
22N7000Package_TO_SOT_THT:TO-92_InlineQ1, Q2
2DDiode_THT:D_5W_P12.70mm_HorizontalD1, D2
2LEDLED_THT:LED_D3.0mmD3, D4
2LOGOLOGOG***, G***
1+28VConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ3
1+5vConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ6
1Arduino_Nano_EveryModule:Arduino_NanoA1
1ButtonsConnector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_VerticalJ2
1DeskConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ1
1EncoderConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ7
1FuseResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalF1
1GNDConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ4
1GND1Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ5
1Relay 1Relay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_CK1
1Relay 2Relay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_CK2

Questions

How big is the StandingDesk PCB?

It measures 98 × 76 mm and has 2 copper layers, 1.6 mm thick.

What parts does the StandingDesk use?

32 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 StandingDesk KiCad files?

From the handya/Standing-Desk-Controller repository on GitHub, at the commit this page was made from: the board is PCB/StandingDesk/StandingDesk.kicad_pcb and its schematic PCB/StandingDesk/StandingDesk.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the StandingDesk design in my own project?

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

Similar boards

  • 2 layers50 × 23.2 mmAnalog, the printed circuit board in 3D

    Analog

    hoglet67/RGBtoHDMI

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

    32 parts1kGPL-3.0
  • 2 layers136.8 × 54.2 mmRetropie zero, the printed circuit board in 3D

    Retropie zero

    hackclub/OnBoard

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

    32 parts915
  • 2 layersMooltipass top, the printed circuit board in 3D

    Mooltipass top

    limpkin/mooltipass

    Github repository dedicated to the mooltipass project

    32 parts531
  • 2 layers16 × 20 mmESPKey, the printed circuit board in 3D

    ESPKey

    octosavvi/ESPKey

    Wiegand data logger, replay device and micro door-controller

    32 parts353GPL-2.0
  • 2 layers82 × 40.9 mmDisplay7447, the printed circuit board in 3D

    Display7447

    zmaker/arduino_cookbook

    gli sketch del nuovo progetto Arduino Cookbook e dei video di YouTube

    32 parts269
  • 2 layers40 × 38 mmShield, the printed circuit board in 3D

    Shield

    murexrobotics/electrical

    Highly integrated electronics design and printed circuit boards (PCBs) for the MATE ROV Competition. Attempt the impossible.

    32 parts192MIT
  • 2 layers47 × 39 mmQrss clock tx, the printed circuit board in 3D

    Qrss clock tx

    swharden/AVR-projects

    A collection of standalone AVR projects written in C

    32 parts184MIT
  • 2 layers30.9 × 63 mmStm32-io extend, the printed circuit board in 3D

    Stm32-io extend

    hardenedlinux/cheap-pcb

    Cheap PCB: Better understanding the current status of hardware supply chain

    32 parts170CC0-1.0