Skip to the content
2 layers103.5 × 52.7 mmDriver, the printed circuit board in 3D

This repository contains software and hardware work for a Rubik's Cube project: Python-based solvers and visualizers, a C++ solver prototype, firmware for a motorized mechanism, and KiCad PCB files.

Size
103.5 × 52.7 mm
Copper layers
2
Thickness
1.6 mm
Parts
16
Nets
58
Pads
100
Tracks, vias
46, 25
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
23 Oct 2025
Updated
15 Sep 2026

Overview

Driver is an open-source printed circuit board by Joe7700487, from the Joe7700487/Rubiks-Cube repository on GitHub. It is a 2-layer board of 103.5 × 52.7 mm with 16 parts on 58 nets, routed with 46 tracks and 25 vias.

It is built around the SM6T33A. Its parts include 9 ICs, 1 diode and 1 connector. It belongs with the ESP32 boards of this library.

Main components

1

README

README.md

Rubiks-Cube

This repository contains software and hardware work for a Rubik's Cube project: Python-based solvers and visualizers, a C++ solver prototype, firmware for a motorized mechanism, and KiCad PCB files.

Repository layout

  • Python Solver/
    • cube.py: 3x3 pygame-based cube visualizer and solver experiments. Based off this article https://observablehq.com/@onionhoney/how-to-model-a-rubiks-cube
    • 4x4solver.py: 4x4 solver work using pruning tables and iterative deepening search.
    • 4x4visual.py: helper script for converting or visualizing 4x4 facelet states.
    • MoveConverter.py: utility script that rewrites move sequences into the move vocabulary used by the robot.
    • *PruningTable.py, g3SolvedStates.py: precomputed search data and solved-state helpers used by the Python solvers.
  • C++ Cube Solver/
    • Visual Studio solution for a C++/SDL3 cube renderer and move application prototype.
  • Firmware/
    • 3motortest.ino: ESP32/Arduino firmware for driving three steppers and servos to execute cube moves.
  • PCB/Driver/
    • KiCad design files for the cube driver prototype board.
  • 3D models/
    • Reserved for CAD or printable mechanical parts.

Python solver tools

The Python code is where most of the cube logic currently lives. It includes:

  • Facelet-based move application.
  • Geometric sticker representations for cube state conversion.
  • Pruning-table-driven search for 3x3 and 4x4 solving stages.
  • A move conversion helper for translating notation into the robot-friendly move set.

Python requirements

Install Python 3.10+ and the runtime dependencies used by the scripts:

powershell
pip install pygame numpy

Running the Python scripts

From the repository root:

powershell
cd "Python Solver"
python MoveConverter.py
python cube.py
python 4x4solver.py
python 4x4visual.py

Notes:

  • MoveConverter.py is the simplest standalone utility and prints a converted move sequence.
  • cube.py, 4x4solver.py, and 4x4visual.py open pygame windows and are set up as interactive experiment scripts rather than polished command-line tools.
  • The pruning-table modules are committed directly in the repository, so there is no separate generation step required just to run the current Python code.

C++ solver prototype

The C++ Cube Solver folder contains a Visual Studio solution targeting Windows and SDL3. The current code focuses on:

  • Representing a 3x3 cube as a fixed-size array.
  • Applying face turns efficiently.
  • Rendering a cube net with SDL3.
  • Basic keyboard-triggered test actions.

C++ requirements

The Visual Studio project currently references SDL3 from a local path

Building the C++ project

  1. Open C++ Cube Solver/Cube Solver.sln in Visual Studio 2022.
  2. Install or point the project at a local SDL3 checkout.
  3. Select Debug|x64 or Release|x64.
  4. Build and run the Cube Solver project.

The current SDL application can render the cube net and respond to a few keyboard events for testing moves and performance.

Firmware

Firmware/3motortest.ino is an Arduino-style control program for a three-motor cube turning mechanism. It uses:

  • AccelStepper
  • Wire
  • Adafruit_PWMServoDriver

The firmware appears to target an ESP32-based setup with:

  • Three stepper channels for face turns.
  • A PCA9685 servo driver.
  • Servo-controlled hands and a blocking mechanism.
  • Serial move input such as R, U, B, wide moves, triple-layer moves, primes, and double turns.

Firmware setup

  1. Open Firmware/3motortest.ino in the Arduino IDE or PlatformIO.
  2. Install the required libraries.
  3. Select the correct ESP32 board and serial port.
  4. Upload the sketch.
  5. Send newline-terminated move commands over serial.

The special serial command S runs a built-in demonstration sequence.

PCB files

The PCB/Driver directory contains the KiCad project for the driver board, including schematic, PCB layout, footprints, symbols, drill files, and Gerber job data.

Open PCB/Driver/Driver.kicad_pro in KiCad to inspect or modify the design.

Project status

This repository is best understood as an actively developed project workspace rather than a packaged library. The main value is in the implementation details for cube state handling, solver experiments, and the integration path from software to physical hardware.

Parts

16
QtyValueFootprintReferences
3C100µFfootprints:CapacitorU6, U7, U8
2GNDTestPoint:TestPoint_Keystone_5000-5004_MiniatureTP1, TP5
124V powerConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ1
13.3VTestPoint:TestPoint_Keystone_5000-5004_MiniatureTP3
15VTestPoint:TestPoint_Keystone_5000-5004_MiniatureTP4
1C1000µFfootprints:Capacitor_1U9
1ESP32footprints:ESP32U1
1LOGOfootprints:cat2G***
1SM6T33Afootprints:D_SMBD1
1Servo Driverfootprints:PCA9685U5
1Stepper1footprints:TMC2209U2
1Stepper2footprints:TMC2209U3
1Stepper3footprints:TMC2209U4

Similar boards

  • 4 layers116.5 × 98 mmHw v1, the printed circuit board in 3D

    Hw v1

    Churrosoft/uEFI-v6.x

    Speeduino compatible board, x4 ignition channels, x4 injection channels, 2&4 wire IAC

    248 parts2
  • 4 layers100 × 100 mmPower Supply, the printed circuit board in 3D

    Power Supply

    bernau01/zh_power_supply

    Power management for mobile robotic

    318 parts
  • 4 layers45 × 46 mmHapcan cc led driver, the printed circuit board in 3D

    Hapcan cc led driver

    jankralx/hapcan_cc_led_driver

    Hapcan constant current LED driver with 3 channels

    40 parts
  • 4 layers107.5 × 102.5 mmNeo, the printed circuit board in 3D

    Neo

    kc099/kicad

    145 parts
  • 2 layers140.5 × 30 mmType e, the printed circuit board in 3D

    Type e

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    16 parts3kApache-2.0
  • 2 layers41.4 × 14.5 mmU2f zero, the printed circuit board in 3D

    U2f zero

    conorpp/u2f-zero

    U2F USB token optimized for physical security, affordability, and style

    16 parts2.4k
  • 2 layers122 × 37 mmV0-UmbilicalBoard, the printed circuit board in 3D

    V0-UmbilicalBoard

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    16 parts1.1kGPL-3.0

Questions

How big is the Driver PCB?

It measures 103.5 × 52.7 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Driver use?

16 parts, built around the SM6T33A. 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 Driver KiCad files?

From the Joe7700487/Rubiks-Cube repository on GitHub, at the commit this page was made from: the board is PCB/Driver/Driver.kicad_pcb and its schematic PCB/Driver/Driver.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Driver design in my own project?

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