Skip to the content
PCBKitNew board
2 layers53.5 × 28.5 mmKicad ctrlboard, the printed circuit board in 3D

Kicad ctrlboard

Simou28/Stepper-Motor-

This project automates the rotation of a polarization lenses in a microscope system. The polarization lens modifies the color of the observed sample by filtering specific light waves, allowing polarization microscopy to…

Size
53.5 × 28.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
7
Nets
16
Pads
27
Tracks, vias
48, 0
Pours
3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
26 Feb 2026
Updated
30 Mar 2026

Overview

Kicad ctrlboard is an open-source printed circuit board by Simou28, from the Simou28/Stepper-Motor- repository on GitHub. It is a 2-layer board of 53.5 × 28.5 mm with 7 parts on 16 nets, routed with 48 tracks and 0 vias.

Its parts include 2 capacitors, 2 connectors and 1 IC. It belongs with the ESP32 and RISC-V boards of this library.

README

README.md

Motorized polarization lenses

Overview

This project automates the rotation of a polarization lenses in a microscope system. The polarization lens modifies the color of the observed sample by filtering specific light waves, allowing polarization microscopy to enhance contrast and reveal structural and optical properties of the sample.

The project was developed during my internship at IRIMAS (Institut de Recherche en Informatique, Mathématiques, Automatique et Signal) in Mulhouse, France.

Project Goals

The main objectives of this project were :

  1. Automate the rotation of a polarization lenses
  2. Test the deviation

Hardware Components

MarerialDataSheets
Esp32-C3 oled 0.42Esp32-C3 oled 0.42
Stepper_motorStepper Motor DataSheet
Capacitor 1000uFCapacitor Datasheet
Capacitor 100 nF Capacitor 100nF DataSheet

Circuit on Breadboard

Kicad Design

  • I drew the electric scheme of PCB.
  • Since the footprint for this specific ESP32 did not exist, I created my own footprint by measuring the width and length of the board and the spacing between each pin.

PCB Design

Software

  • ESP32 functions for the servo-motor: main.cpp.
c
void go_to_90() {
  for (pos=0; pos<=90; pos+=1) {
    int angle = map (pos,0, 90,500, 2500);
    servo.writeMicroseconds(angle);
 
    display.clearDisplay();
    display.setCursor(0, 0);
    display.println("Angle :");
    display.setTextSize(2);
    display.setCursor(0, 16);
    display.print(pos);
    display.print("°");
    display.display();

    delay(20);
  }

}

void go_to_0() {
  servo.write(0);

  display.clearDisplay();
  display.setCursor(0, 0);
py
import serial
import serial.tools.list_ports
  • These functions go through available port and connect to the right one
py
def find_esp32_port():
    ports = serial.tools.list_ports.comports()
    for p in ports:
        if "USB" in p.description or "CDC" in p.description:
            return p.device
    return None

def connect():
    global ard
    port = find_esp32_port()
    if port is None:
        status_label.configure(text="ESP32 not found !")
        return False
    try:
        ard = serial.Serial(port, 115200, timeout=1)
        sleep(2)
        status_label.configure(text=f"Connected to port {port}")
        return True
    except serial.SerialException:
        status_label.configure(text=f"Connection to {port} is not possible")
        return False
  • Using customTkinter (or tkinter) library in order to create a User Window to control the servo-motor : index.py
py
root = customtkinter.CTk()
root.title("ESP32 OLED Controller")
root.geometry("300x500")

frame = customtkinter.CTkFrame(master=root)
frame.place(relx=0.5, rely=0.5, anchor="center")

status_label = customtkinter.CTkLabel(master=frame, text="Connexion...")
status_label.pack(pady=10)

btn_90 = customtkinter.CTkButton(master=frame, text="Turn to 90°", command=turn_to_90)
btn_90.pack(pady=5)

btn_0 = customtkinter.CTkButton(master=frame, text="Turn to 0°", command=turn_to_0)
btn_0.pack(pady=5)
  • Functions that use serial connection to send a '1' to turn the servo motor to 90 an sends '0' to turn to go back to 0°
py
def turn_to_90():
    try:
        ard.write(b"1")
        status_label.configure(text="Servo motor tuning to 90°")
    except serial.SerialException:
        status_label.configure(text="ESP32 disconnected")
        
def turn_to_0():
    try:
        ard.write(b"0")
        status_label.configure(text="Servo motor tuning to 0°")
    except serial.SerialException:
        status_label.configure(text="")

3D models designs

esp32

For my 3d designs I used the online software Onshape.com an easy software to use with a user freidly interface.

Servo-motor deviation error test

In order to enhance the ouput of the result, we need to study the

Parts

7
QtyValueFootprintReferences
11000FCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC1
1100nFCapacitor_THT:CP_Radial_Tantal_D6.0mm_P2.50mmC2
1Conn_01x02_PinTerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ2
1Conn_01x03_SocketConnector_Wire:SolderWire-0.1sqmm_1x03_P3.6mm_D0.4mm_OD1mmJ1
1ESP32-C3--02esp32_Github_Boards:ESP32-C3_oled0.4_2U3

The 5 most common of 7 parts.

Questions

How big is the Kicad ctrlboard PCB?

It measures 53.5 × 28.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Kicad ctrlboard use?

7 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 Kicad ctrlboard KiCad files?

From the Simou28/Stepper-Motor- repository on GitHub, at the commit this page was made from: the board is Kicad/kicad_ctrlboard.kicad_pcb and its schematic Kicad/kicad_ctrlboard.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Kicad ctrlboard design in my own project?

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

Similar boards

  • 2 layersEncoder, the printed circuit board in 3D

    Encoder

    byrantech/laptop

    anyon_e, a highly integrated, high end, open source laptop. Attempt the impossible.

    7 parts4.3kMIT
  • 2 layers40 × 20 mmSensor smd, the printed circuit board in 3D

    Sensor smd

    scottbez1/splitflap

    DIY split-flap display

    7 parts4.2k
  • 2 layers19.8 × 30 mmZ limit, the printed circuit board in 3D

    Z limit

    opulo-inc/lumenpnp

    The LumenPnP is an open source pick and place machine.

    7 parts3.7k
  • 2 layers35.6 × 58.2 mmDisplay Carrier, the printed circuit board in 3D

    Display Carrier

    AxxAxx/AxxSolder

    STM32 Based soldering station for JBC cartridges, 9-24 VDC and USB-PD power

    7 parts1.7kGPL-3.0
  • 2 layers20.3 × 16.3 mmMap MPX, the printed circuit board in 3D

    Map MPX

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    7 parts1.2k
  • 2 layers26 × 44 mmCompact carrier board, the printed circuit board in 3D

    Compact carrier board

    jamro/tiny-engineer

    A small desktop robot that brings an AI coding assistant to life, physically acting out when it reads files, thinks, writes code, and finishes work.

    7 parts1.1k
  • 2 layers26.4 × 53.8 mmAtari pickup, the printed circuit board in 3D

    Atari pickup

    hoglet67/RGBtoHDMI

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

    7 parts1kGPL-3.0
  • 2 layersRj45 breakout, the printed circuit board in 3D

    Rj45 breakout

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    7 parts990GPL-3.0