Skip to the content
PCBKitNew board
2 layers122.5 × 110 mmSchmatics desk automation, the printed circuit board in 3D

Schmatics desk automation

aperico/deskautomation1

Ikea Desk Automation

Size
122.5 × 110 mm
Copper layers
2
Thickness
1.6 mm
Parts
15
Nets
46
Pads
87
Tracks, vias
0, 0
Routed
Not yet
KiCad
KiCad 9.0 (file 20241229)
Created
29 Dec 2025
Updated
22 Feb 2026

Overview

Schmatics desk automation is an open-source printed circuit board by aperico, from the aperico/deskautomation repository on GitHub. It is a 2-layer board of 122.5 × 110 mm with 15 parts on 46 nets.

It is built around the ARDUINO UNO R3. Its parts include 4 switches, 3 diodes, 1 connector and 1 inductor. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

1

README

README.md

Automated Mechanical Desk Lift System

Quick Start

Automated Development Pipeline (Recommended)

The fastest way to build and test the project:

bash
# Complete pipeline: build + dual motor validation + static analysis
python toolchain/run-pipeline.py all

# Build only
python toolchain/run-pipeline.py clean-build

# Run tests (validates both MT_BASIC and MT_ROBUST motor types)
python toolchain/run-pipeline.py test

# Quick unit test during development
python toolchain/run-pipeline.py unit

# Get help
python toolchain/run-pipeline.py help

📖 Detailed Instructions:


Project Overview

The Automated Mechanical Desk Lift System is a motorized solution for height-adjustable desks, enabling users to easily switch between sitting and standing positions. The system features responsive controls, safety mechanisms to prevent accidents, and reliable operation over the product lifetime. Key features include:

  • Configurable motor drivers: Support for both L298N (cost-optimized) and IBT_2 (high-capacity) motor controllers
  • Motorized height adjustment from 30 cm to 120 cm
  • Support for up to 20 kg load (monitor, keyboard, etc.)
  • UP/DOWN buttons for intuitive control
  • Immediate halt on button release or obstruction detection
  • Robust safety features including limit sensors and current sensing for jam detection
  • Smooth, predictable motion for user comfort
  • Designed for office environments to improve health and productivity
  • Modular architecture for maintainability and future feature expansion
  • Comprehensive documentation and testing to ensure quality and reliability
  • Open-source hardware and software design for community collaboration and innovation

Motor Driver Options

The system supports two motor driver configurations, selectable at compile-time:

DriverModelCostCapacityUse Case
MT_BASICL298N Dual H-BridgeLow (~$2-5)Standard (~50kg)Cost-optimized office desks
MT_ROBUSTIBT_2 Intelligent DriverModerate (~$10-15)High (~100kg+)Heavy-duty commercial desks

Both drivers share the same software (unified HAL interface) and provide equivalent safety and functionality. See Motor Driver Configuration Guide for build and switching instructions.

Motor Configuration Architecture

The system implements a robust motor configuration encapsulation pattern to support multiple motor driver types:

Design Approach

  • Compile-Time Configuration (Current): Motor type is defined at compile-time in src/motor_config.cpp with validation
  • Runtime-Ready (Future): Architecture is prepared for NVM-based runtime configuration without code changes
  • Encapsulation Interface: MotorConfig_getMotorType() function provides the sole accessor for motor configuration
  • Application Transparency: All application logic is motor-type-agnostic; HAL layer handles driver-specific details

Configuration Files

FileRoleDetails
src/motor_config.hPublic interfaceType definitions, feature documentation, function declaration
src/motor_config.cppPrivate implementationMOTOR_TYPE macro, validation, getter function, NVM migration comments

Switching Motor Drivers

bash
# Default: MT_BASIC (L298N)
cmake -S . -B build && cmake --build build

# To use MT_ROBUST (IBT_2): Edit src/motor_config.cpp line 44
# #define MOTOR_TYPE MT_BASIC        <- Change to MT_ROBUST
# Then rebuild:
cmake --build build

Test Coverage

All 37 unit and integration tests validate both motor configurations:

  • MT_BASIC: L298N driver (default)
  • MT_ROBUST: IBT_2 driver

Tests can be run against either driver by changing the MOTOR_TYPE definition. See 05_SoftwareArchitecture.md (AD-009: Motor Configuration Encapsulation) and 06_00_DetailedDesign.md (Motor Configuration Module) for detailed technical documentation.


Documentation Index

Development Guidelines

DocumentDescription
toolchain/coding_guides_and_checks.md⚠️ Coding standards for safety-critical code (NASA Power of Ten, MISRA C:2012, ISO 25119)
toolchain/README.mdDevelopment pipeline and automated testing guide
toolchain/ARCHITECTURE.mdPipeline architecture and design details

Requirements and Design

DocumentDescription
01_MissionStatement.mdProject mission and overall purpose
01_SystemObjectives.mdHigh-level system objectives and goals
02_ConceptOfOperations.mdOperational concept and use cases
02_01_HARA-prep.mdHARA preparation (draft)
02_02_HARA-complete.mdHazard analysis and risk assessment (HARA)
02_03_SafetyGoals.mdSafety goals derived from HARA
03_00_SystemRequirements.mdSystem-level requirements specification
03_01_SystemArchitecture.mdSystem architecture and interfaces
03_01_01_TechnicalSafetyConcept.mdTechnical safety concept
03_02_RequirementsTraceabilityMatrix.mdRequirements traceability matrix
04_SoftwareRequirements.mdSoftware requirements and functional specifications
04_01_SoftwareVerificationSpecification.mdSoftware test specifications and verification methods
05_SoftwareArchitecture.mdSoftware architecture design and component structure
06_00_DetailedDesign.mdDetailed software design and implementation details
06_01_DetailedDesign_InteractionDiagrams.mdSequence diagrams and data flow visualizations
07_MotorDriverConfiguration.mdMotor driver configuration guide (L298N vs IBT_2)
10_SystemTestSpecification.mdSystem test plan and test specifications
10_01_SystemTestReport.mdSystem test report and results
11_HardwareDocumentation.mdHardware components and wiring documentation
02_ConceptOfOperations_Reviews.mdConOps review protocol and records
03_00_SystemRequirements_Reviews.mdSystem requirements review protocol and records
03_01_01_TechnicalSafetyConcept_Reviews.mdTechnical safety concept review protocol and records
03_01_SystemArchitecture_Reviews.mdSystem architecture review protocol and records
04_SoftwareRequirements_Reviews.mdSoftware requirements review protocol and records
05_SoftwareArchitecture_Reviews.mdSoftware architecture review protocol and records
06_DetailedDesign_Reviews.mdDetailed design review protocol and records
10_SystemTestSpecification_Reviews.mdSystem test specification review protocol and records
feature-pdrs/System feature concept reviews

Project Structure

Root Directory

File/DirectoryDescription
CMakeLists.txtCMake build configuration file
CMakePresets.jsonCMake preset configurations
README.mdProject overview and instructions (this file)
.github/GitHub workflows and CI/CD configuration

Source Code (src/)

FileDescription
desk_app.cpp/hMain application logic and state machine
desk_types.hType definitions and data structures
hal.cpp/hHardware Abstraction Layer (HAL) interface
motor_config.hMotor driver type configuration (MT_BASIC or MT_ROBUST)
motor_controller.cpp/hMotor control logic and algorithms
pin_config.hArduino pin assignments (configurable per motor type)
src.inoArduino firmware entry point

Tests (tests/)

FileDescription
UnitTests.cppUnit tests for individual functions and classes
ComponentTests.cppComponent-level integration tests
IntegrationTests.cppFull system integration tests
hal_mock/Mock implementations of HAL for testing on host
└── HALMock.cpp/hMock HAL implementation
└── SerialMock.cpp/hMock Serial communication for testing

Training Materials (00_training_context/)

FileDescription
00_agenda.mdTraining overview and agenda
01_hello-world.mdGetting started guide
02_aisetup.mdAI/Copilot setup instructions
03_prompting-techniques.mdAI prompting best practices
04_00_deskautomation-syseng.mdSystems engineering overview
04_01_00_system-definition.mdSystem definition guide
04_01_01_system-definition-architecture.mdArchitecture definition guide
04_02_software-construction.mdSoftware construction practices
04_03_00_component-verification.mdComponent testing guide
04_03_01_software_integration-verification.mdIntegration testing guide
04_03_03_system-testing.mdSystem testing guide
05_traceability-matrix.mdRequirements traceability
06_workflow-pipelines.mdCI/CD pipeline documentation
07_process-assessment.mdProcess quality assessment

Schematics (schematics/)

DirectoryDescription
schmatics_desk_automation/KiCad project files for desk automation
└── DeskAutomation_MotorControl/Motor control circuit schematics
└── DeskAutomation.pretty/Custom KiCad footprints

Parts

15
QtyValueFootprintReferences
5330Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P2.54mm_VerticalR_LED_DOWN1, R_LED_ERROR_1, R_LED_UP1, R4, R5
1Arduino_UNO_R3Module:Arduino_UNO_R3A1
1BT_DOWNButton_Switch_THT:SW_PUSH_6mm_H5mmSW3
1BT_UPButton_Switch_THT:SW_PUSH_6mm_H5mmSW1
1Conn_01x15_MountingPinConnector_PinHeader_1.27mm:PinHeader_2x08_P1.27mm_VerticalJ2
1ERROR_LEDLED_THT:LED_D5.0mmD3
1L298N_InterfaceDeskAutomation:L298N InterfaceL298N-Breakout1
1LED UPLED_THT:LED_D5.0mmD2
1LED_DOWNLED_THT:LED_D5.0mmD1
1Lower LimitButton_Switch_THT:SW_PUSH_6mm_H5mmSW2
1Uppr LimitButton_Switch_THT:SW_PUSH_6mm_H5mmSW4

Questions

How big is the Schmatics desk automation PCB?

It measures 122.5 × 110 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Schmatics desk automation use?

15 parts, built around the ARDUINO UNO R3. 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 Schmatics desk automation KiCad files?

From the aperico/deskautomation repository on GitHub, at the commit this page was made from: the board is schematics/schmatics_desk_automation/schmatics_desk_automation.kicad_pcb and its schematic schematics/schmatics_desk_automation/DeskAutomation_MotorControl/motor_controls.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Schmatics desk automation design in my own project?

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

Similar boards

  • 2 layers68.8 × 53.6 mmRelatively Universal ROM Programmer, the printed circuit board in 3D

    Relatively Universal ROM Programmer

    AndersBNielsen/Relatively-Universal-ROM-Programmer

    Hardware to program W27C512 EEPROM or any 24/28/32 pin ROM requiring from 5V to 27V programming voltage.

    149 parts257GPL-3.0
  • 2 layers69.1 × 53.8 mmMotor controller, the printed circuit board in 3D

    Motor controller

    AlanFord/self-balancing-stick

    Dual Axis Reaction Wheel Inverted Pendulum

    25 parts79MIT
  • 2 layers68.6 × 53.3 mmProtogasm Board V2, the printed circuit board in 3D

    Protogasm Board V2

    Edging-Machines/Edging-Machines

    This repository is intended to contain as much information as possible about building, designing, prototyping, and using automated edging machines.

    14 parts67MIT
  • 2 layers53.8 × 69.6 mmEVSE V2 2, the printed circuit board in 3D

    EVSE V2 2

    PedroCNeves/AC_ChargingStation

    A learning project to create an EV AC Charging station based on an Arduino Uno

    32 parts50
  • 2 layers113.7 × 61 mmArduTester SMD, the printed circuit board in 3D

    ArduTester SMD

    jonsag/arduTester

    An arduino component tester based on https://create.arduino.cc/projecthub/plouc68000/ardutester-v1-13-the-arduino-uno-transistor-tester-dbafb4

    17 parts14
  • 4 layers65.9 × 52.9 mmMotor shield, the printed circuit board in 3D

    Motor shield

    DCC-EX/EX-MotorShield8874

    Design files for the open source 5A Motor Shield

    114 parts12
  • 4 layers68.6 × 53.3 mm101 PCB, the printed circuit board in 3D

    101 PCB

    ICRS/101

    The all-new open source Robotics 101 course from ICRS. It's specifically designed to be run in hackspaces, after school clubs and university societies.

    89 parts10CC-BY-4.0
  • 2 layers53.3 × 68.3 mmAnac 2040, the printed circuit board in 3D

    Anac 2040

    rallekralle11/Anna2040

    RP2040-based board in the shape of the Arduino uno

    63 parts9