Skip to the content
2 layers98.9 × 91.4 mmCoin Cell Tester, the printed circuit board in 3D

Coin Cell Tester

tomrodinger/servomotor17

Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

Size
98.9 × 91.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
204
Nets
90
Pads
506
Tracks, vias
1,255, 184
Pours
1
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
31 Aug 2021
Updated
29 Oct 2026

Overview

Coin Cell Tester is an open-source printed circuit board by tomrodinger, from the tomrodinger/servomotor repository on GitHub, published under the MIT licence. It is a 2-layer board of 98.9 × 91.4 mm with 204 parts on 90 nets, routed with 1,255 tracks and 184 vias.

It is built around the STM32G030C8T6, RS485 and CJ431, with the ME6211C33R5G, SN75176BDRG and AO3400A among its other parts. Its parts include 120 resistors, 40 transistors, 10 diodes, 8 capacitors and 6 connectors. It belongs with the robots and motor control and interfaces and adapters boards and the STM32 boards of this library.

Main components

11

README

README.md

Gearotons M17 servomotor family: M17-60, M17-48, M17-40, M17-34

Gearotons M17 — an open-source servomotor you can talk to

The M17 is a NEMA-17 integrated servomotor: motor, closed-loop driver, motion controller and magnetic encoder in one unit. It daisy-chains over RS-485, ships with Python and Arduino libraries, and has a first-party MCP server so an AI assistant (Claude Desktop, Claude Code, Cursor, …) can drive real motors from plain English.

Hardware, firmware and software are all in this repository under the MIT license.

M17-34M17-40M17-48M17-60
Length33.5 mm40.1 mm48.7 mm59.7 mm
Holding torque0.28 N·m0.42 N·m0.55 N·m0.65 N·m
Weight210 g285 g360 g470 g

All sizes: 12–24 V, up to ~1.1 A, up to 560 RPM, closed-loop 32 kHz control, RS-485 at 230400 baud, 64-bit unique ID + one-byte alias per motor, standard NEMA-17 mount. Indoor use (IP20).

Buy one: gearotons.com (from $20; ships worldwide from Shenzhen). Documentation: 9o.at/M17_1.5 · Datasheet (PDF) · Python API · Arduino API

Quick start (Python)

bash
pip install servomotor
python
import time, servomotor

servomotor.open_serial_port()                      # prompts for the USB–RS-485 adapter the first time
m = servomotor.M3("X", time_unit="seconds", position_unit="shaft_rotations")
m.enable_mosfets()
m.trapezoid_move(1.0, 1.0)                         # one full turn, in one second
time.sleep(1.1)
m.disable_mosfets()
servomotor.close_serial_port()

That is python_programs/example_trapezoid_move.py. Units are yours to choose (degrees, rotations, radians, encoder counts; seconds or milliseconds) — the library converts. No STEP/DIR timing, no microstep configuration.

Quick start (Arduino / ESP32)

Install the Servomotor library by Gearotons from the Arduino Library Manager, or from Arduino_library/. Wire the board's UART to an RS-485 transceiver, then:

cpp
#include <Servomotor.h>

void setup() {
  Servomotor motor('X', Serial1);                  // alias 'X'; the port opens on first use
  motor.setPositionUnit(PositionUnit::SHAFT_ROTATIONS);
  motor.setTimeUnit(TimeUnit::SECONDS);
  motor.enableMosfets();
  motor.trapezoidMove(2.0f, 3.0f);                 // two rotations over three seconds
  delay(4000);
  Serial.println(motor.getPosition());             // where it actually is, from the encoder
}
void loop() {}

That is a trimmed Arduino_library/example_one_move.cpp (the full file adds the ESP32 RS-485 pin definitions).

Quick start (talk to it)

bash
uvx --from servomotor-mcp servomotor-mcp        # runs with a simulated motor if no hardware is attached

Add it to Claude Desktop or run claude mcp add gearotons-motor -- uvx --from servomotor-mcp servomotor-mcp, then ask: "Find my motors, then move the one on the bench to 90 degrees and tell me where it ended up." Details and the full tool list: Gearotons/servomotor-mcp.

Claude Code driving a real M17 over MCP: find the motor, turn it two rotations, back, read the encoder

▶ 50-second video: the real motor and this session side by side (recorded 2026-09-09 on a bench M17).

Wiring: computer, USB to RS-485 adapter, two daisy-chained M17 motors, 12–24 V supply

What is in this repository

FolderContents
firmware/Motor firmware (STM32G0), plus bootloader_STM32G030/ and bootloader_STM32G031/
PCB/Schematics, board layouts and 3D (STEP) models of the controller board
python_programs/The servomotor Python library source, examples, test and characterisation scripts
Arduino_library/The Arduino/ESP32 C++ library and examples
API_documentation/Generated Python and Arduino API references (Markdown and PDF)
servomotor_datasheets/Datasheet sources and PDFs (EN, DE, ES, FR, IT, PT), dimension drawings
production_test_system/, motor_tests/How we test motors before they ship
marketting_page/Source of the gearotons.com product page

The command set is data-driven: every firmware command is defined once in motor_commands.json and the Python library, the Arduino library and the MCP server are generated from it, so they always agree.

Firmware 0.16.0.0

This backward-compatible M17 release adds Get PID constants (command 48). It returns the configured raw P, I and D values without changing controller or motion state. With the updated Python bindings in this repository:

python
p, i, d = m.get_pid_constants()

The release image targets M17 hardware 1.5, software compatibility code 3. See the release notes for the wire contract, upgrade/rollback commands, client requirements and test evidence.

Where the M17 is not the right tool

Direct-drive torque tops out at 0.65 N·m (gear it or go up a frame size for more), it is IP20 and indoor-only, and it is not a STEP/DIR drop-in for an existing 3D-printer board — it wants a serial bus and a host that sends it moves. We would rather you know that before you buy.

Community and support

Questions and builds: GitHub Discussions · email info@gearotons.com. Issues and pull requests welcome — the whole stack is here to be read, modified and improved.

Built and assembled by Gearotons in Shenzhen. MIT license — see LICENSE.

Parts

204
QtyValueFootprintReferences
32DNPResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR10, R14, R16, R18, R19, R20, R30, R31, R32, R33, R34, R35, R42, R43, R44, R45 +16
184.7KResistor_SMD:R_0603_1608MetricR2, R3, R6, R7, R25, R29, R36, R37, R38, R39, R40, R41, R57, R58, R59, R60 +2
16AO3400APackage_TO_SOT_SMD:SOT-23Q10, Q11, Q12, Q13, Q14, Q15, Q25, Q26, Q27, Q28, Q29, Q30, Q37, Q38, Q39, Q40
16MMBT3904Package_TO_SOT_SMD:SOT-23Q1, Q2, Q3, Q4, Q6, Q8, Q16, Q17, Q18, Q19, Q21, Q23, Q31, Q32, Q33, Q35
101KResistor_SMD:R_0603_1608MetricR28, R71, R113, R114, R115, R116, R117, R118, R119, R120
9KT-0603RLED_SMD:LED_0603_1608MetricD1, D2, D3, D5, D6, D7, D8, D9, D10
82N3906Package_TO_SOT_SMD:SOT-23Q5, Q7, Q9, Q20, Q22, Q24, Q34, Q36
8DNPResistor_SMD:R_0603_1608MetricR75, R76, R77, R90, R91, R92, R104, R105
8DNPResistor_SMD:R_1210_3225MetricR84, R85, R86, R99, R100, R101, R110, R111
8DNPResistor_SMD:R_0805_2012MetricR78, R79, R80, R93, R94, R95, R106, R107
8DNPResistor_SMD:R_0402_1005MetricR72, R73, R74, R87, R88, R89, R102, R103
8DNPResistor_SMD:R_1206_3216MetricR81, R82, R83, R96, R97, R98, R108, R109
710KResistor_SMD:R_0603_1608MetricR1, R4, R5, R13, R15, R17, R24
4100nFCapacitor_SMD:C_0603_1608MetricC7, C9, C18, C35
4MountingHoleMountingHole:MountingHole_3.2mm_M3MH1, MH2, MH3, MH4
3MountingHoleCoin_Cell_Tester:Wire holeMH5, MH6, MH7
21uFCapacitor_SMD:C_0603_1608MetricC6, C41
2LOGOLOGOG***, G***
2PWRConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3, J5
2TS-1187A-B-A-BButton_Switch_SMD:SW_SPST_TL3342RST1, SW1
2TestPointTestPoint:TestPoint_Plated_Hole_D2.0mmTP1, TP2
11.5KResistor_SMD:R_0603_1608MetricR12
1100k 1% NTCResistor_SMD:R_0402_1005MetricTH1
110K/0.1%Resistor_SMD:R_0603_1608MetricR27
1150Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR23
115KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR65
119-217/GHC-YR1S2/3TLED_SMD:LED_0603_1608MetricD4
12.2uFCapacitor_SMD:C_0603_1608MetricC1
12.8K/0.1%Resistor_SMD:R_0402_1005MetricR26
1300Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR66
1300KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR21
13KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR22
14.7uFCapacitor_SMD:C_0603_1608MetricC11
1470Resistor_SMD:R_0603_1608MetricR11
15RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR112
1600Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR49
160KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR48
175Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR50
1BATConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ6
1CJ431Package_TO_SOT_SMD:SOT-23U3
1CR2477Battery:BatteryHolder_Keystone_105_1x2430BT1
1LEDLED_SMD:LED_0603_1608MetricPWR1
1ME6211C33Package_TO_SOT_SMD:SOT-23-5U1
1ProgrammingConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ2
1RS485Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ4
1SN75176BDRPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU5
1STM32G030C8T6Package_QFP:LQFP-48_7x7mm_P0.5mmU2
1Serial PortConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ1

More from tomrodinger/servomotor

6
  • 2 layers46.7 × 87.5 mmServo motor, the printed circuit board in 3D

    Servo motor

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    112 parts17MIT
  • 2 layers39 × 56.4 mmServo motor, the printed circuit board in 3D

    Servo motor

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    104 parts17MIT
  • 2 layers37.8 × 44.4 mmServomotor3, the printed circuit board in 3D

    Servomotor3

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    79 parts17MIT
  • 2 layers38 × 44.6 mmM3-V5, the printed circuit board in 3D

    M3-V5

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    71 parts17MIT
  • 2 layers38 × 56.5 mmServomotorStepper V2I1, the printed circuit board in 3D

    ServomotorStepper V2I1

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    70 parts17MIT
  • 2 layers38 × 44.6 mmServomotor3, the printed circuit board in 3D

    Servomotor3

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    69 parts17MIT

Similar boards

  • 4 layers408.7 × 50 mmPartial Drawer Controller v1, the printed circuit board in 3D

    Partial Drawer Controller v1

    Robast-GmbH/PCB_Designs

    This repository contains all the necessary files and instructions for the PCBs that are designed using KiCad. Here is an overview of the main components: - .github: Contains Github-specific configurations, including…

    619 parts1MIT
  • 4 layers70 × 70 mmAi camera, the printed circuit board in 3D

    Ai camera

    maxlab-io/tokay-lite-pcb

    Tokay AI Camera - ESP32 camera development board

    161 parts130CERN-OHL-P-2.0
  • 4 layers100 × 68 mmDevKit, the printed circuit board in 3D

    DevKit

    kaminaris/GigaESC

    209 parts47
  • 4 layers33.5 × 66.8 mmNet bmp, the printed circuit board in 3D

    Net bmp

    elagil/net-bmp

    An Ethernet-connected SWD/JTAG debug adapter (blackmagic probe)

    97 parts3GPL-3.0
  • 4 layers100 × 90 mmOpentouch s3, the printed circuit board in 3D

    Opentouch s3

    JoeMighty/opentouch-s3

    A modern remake of the Bare Conductive Touch Board: 12 capacitive touch electrodes, MP3/WAV/MIDI audio, and now WiFi, Bluetooth LE, USB-C, a proper LiPo power path, a fuel gauge, line-in, MIDI out, Qwiic and an RGB LED.

    185 parts
  • 4 layers76.5 × 76.9 mmBlus mini mk2, the printed circuit board in 3D

    Blus mini mk2

    blus-audio/hardware

    Audio hardware

    168 parts1CERN-OHL-S-2.0
  • 4 layers70 × 70 mmMaxlab io tokay lite pcb ai camera, the printed circuit board in 3D

    Maxlab io tokay lite pcb ai camera

    punkfab/pcb-corpus

    235 real KiCad boards from open-source hardware repositories, prepared as a placement and routing benchmark

    176 parts1

Questions

How big is the Coin Cell Tester PCB?

It measures 98.9 × 91.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Coin Cell Tester use?

204 parts, built around the STM32G030C8T6, RS485, CJ431 and ME6211C33R5G. 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 Coin Cell Tester KiCad files?

From the tomrodinger/servomotor repository on GitHub, at the commit this page was made from: the board is PCB/Coin_Cell_Tester/PCB/V2/Coin_Cell_Tester.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Coin Cell Tester design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).