Skip to the content
PCBKitNew board
2 layers80.5 × 93.5 mmHaptic controller copy, the printed circuit board in 3D

Haptic controller copy

rrzhang139/haptic-controller-pcb

Haptic motor controller PCB — ESP32-S3 + 8x DRV2605L + TCA9548A I2C mux

Size
80.5 × 93.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
88
Nets
128
Pads
373
Tracks, vias
0, 0
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Mar 2026
Updated
8 Apr 2026

Overview

Haptic controller copy is an open-source printed circuit board by rrzhang139, from the rrzhang139/haptic-controller-pcb repository on GitHub. It is a 2-layer board of 80.5 × 93.5 mm with 88 parts on 128 nets.

It is built around the ESP32-S3-WROOM-1-N8, DRV2605LDGS and 74HC595, with the AP2112K-3.3 among its other parts. Its parts include 25 capacitors, 23 resistors, 16 diodes, 13 ICs and 9 connectors. It belongs with the robots and motor control boards and the ESP32 boards of this library.

Main components

4

README

README.md

Haptic Motor Controller PCB

A custom PCB that independently drives up to 16 haptic motors via I2C, with an LED status grid. Designed in KiCad as a first PCB project, with future use as a haptic feedback interface for robot teleoperation.

Architecture

text
USB-C 5V
  |
  +---> 5V Motor Rail ---> DRV2605L x8 ---> ERM Motors x8
  |
  +---> AP2112K LDO ---> 3.3V Logic Rail
                            |
                            +---> ESP32-S3-WROOM-1 (MCU)
                            +---> TCA9548A (I2C Mux, 8-channel)
                            +---> 74HC595 x2 (LED shift registers)
                            +---> 16x Status LEDs

How it works

  1. MCU sends I2C commands to the TCA9548A mux to select a channel (0-7)
  2. Each channel connects to one DRV2605L haptic driver (all share address 0x5A, but the mux isolates them)
  3. Each DRV2605L drives one ERM coin motor using its built-in H-bridge and 123-effect waveform library
  4. 74HC595 shift registers drive 16 status LEDs using only 3 GPIO pins
  5. Power: USB-C 5V feeds motors directly, AP2112K LDO drops to 3.3V for logic

Bill of Materials (Estimate ~$30-35)

PartQty~CostNotes
ESP32-S3-WROOM-11$3.00MCU module (Wi-Fi/BLE built-in)
TCA9548A1$1.50I2C mux, TSSOP-24
DRV2605L8$16.00Haptic drivers, VSSOP-10 (0.5mm pitch)
ERM coin motors8$3.208-10mm, 3V, off-board with connectors
AP2112K-3.31$0.153.3V LDO, SOT-23-5
74HC5952$0.20LED shift registers, SOIC-16
0805 LEDs16$0.32Status indicators
USB-C connector1$0.30Power input
Passives (R, C)~50$0.50Decoupling caps, pull-ups, LED resistors
PCB fab (JLCPCB, 5pcs)$5-82-layer, standard specs

Key Design Decisions

  • ERM over LRA motors: cheaper ($0.40 vs $2+), more forgiving, better LCSC availability
  • TCA9548A mux: solves the fixed-address DRV2605L problem (all 0x5A)
  • 74HC595 for LEDs: uses only 3 GPIO pins for 16 LEDs, vs burning 16 GPIOs
  • ESP32-S3 module: Wi-Fi/BLE for wireless control, large GPIO count, good KiCad libraries
  • 2-layer PCB: simpler and cheaper for a first board (4-layer if needed later)

Project Phases

Phase 1: Learn KiCad (1-2 days)

  • Install KiCad 9
  • Complete the official "Getting Started" tutorial (simple board with LED + resistor)
  • Learn: schematic editor, footprint assignment, PCB editor, DRC

Phase 2: Schematic Design (3-5 days)

  • Draw the power section (USB-C, LDO, bulk caps)
  • Draw the MCU section (ESP32-S3 module, USB, boot/reset buttons)
  • Draw the I2C mux + DRV2605L section (one driver first, then replicate x8)
  • Draw the LED status grid (74HC595 + LEDs)
  • Add decoupling caps to every IC (100nF ceramic, close to VCC/GND)
  • Add test points (3.3V, 5V, GND, SDA, SCL)
  • Run ERC (Electrical Rules Check), fix all errors

Phase 3: PCB Layout (3-5 days)

  • Assign footprints to all components
  • Import netlist into PCB editor
  • Place components (MCU center, power entry near edge, motors on one side)
  • Route critical traces first (power, I2C bus)
  • Use wider traces for 5V motor power (0.5mm+)
  • Add ground pour on bottom layer
  • Run DRC (Design Rule Check), fix all errors
  • Review 3D view

Phase 4: Fabrication & Assembly (1-2 weeks)

  • Export Gerber files
  • Upload to JLCPCB, select 2-layer, standard specs
  • Order components from LCSC (can ship with JLCPCB boards)
  • Solder components (start with passives, then ICs, then connectors)
  • Test power rails first before populating all ICs

Phase 5: Firmware & Testing

  • Flash ESP32-S3 with test firmware (Arduino or ESP-IDF)
  • Verify I2C mux communication (scan bus for TCA9548A at 0x70)
  • Test one DRV2605L channel (play waveform effect)
  • Test all 8 channels
  • Test LED shift register output
  • Write motor control library

Getting Started Right Now

1. Install KiCad

bash
brew install --cask kicad

2. Install useful plugins (after opening KiCad)

  • Open Plugin and Content Manager
  • Install: Fabrication Toolkit (JLCPCB Gerber export)
  • Install: Interactive HTML BOM (visual assembly guide)

3. Get component libraries

  • Most parts are in KiCad's built-in library
  • For missing parts: download from SnapEDA or Component Search Engine
  • Search for: DRV2605L, TCA9548A, ESP32-S3-WROOM-1, AP2112K

4. Start the KiCad tutorial

Design Rules to Remember

  1. Decoupling caps: 100nF ceramic cap as close as possible to every IC's VCC pin
  2. I2C pull-ups: ONE set of 4.7k resistors on the upstream bus only (MCU side), NOT on each TCA9548A downstream channel
  3. Power traces: 0.5mm+ width for 5V motor rail, 0.25mm is fine for signals
  4. Ground plane: pour copper on bottom layer, connected to GND net
  5. Test points: add pads for 3.3V, 5V, GND, SDA, SCL for debugging
  6. DRC before ordering: fix every error, review every warning

Resources

Parts

88
QtyValueFootprintReferences
16330Resistor_SMD:R_0805_2012MetricR8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23
16LEDLED_SMD:LED_0805_2012MetricD1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16
13100nFCapacitor_SMD:C_0805_2012MetricC5, C6, C7, C9, C10, C12, C14, C16, C18, C20, C22, C24, C25
101uFCapacitor_SMD:C_0805_2012MetricC2, C3, C8, C11, C13, C15, C17, C19, C21, C23
8DRV2605LDGSPackage_SO:TSSOP-10_3x3mm_P0.5mmU4, U5, U6, U7, U8, U9, U10, U11
310kResistor_SMD:R_0805_2012MetricR3, R4, R5
210uFCapacitor_SMD:C_0805_2012MetricC1, C4
24.7kResistor_SMD:R_0805_2012MetricR6, R7
25.1kResistor_SMD:R_0805_2012MetricR1, R2
274HC595Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU12, U13
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U1
1BOOTButton_Switch_SMD:SW_Push_1TS009xxxx-xxxx-xxxx_6x6x5mmSW2
1ESP32-S3-WROOM-1RF_Module:ESP32-S3-WROOM-1U2
1MOTOR0Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ6
1MOTOR1Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ2
1MOTOR2Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ5
1MOTOR3Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ4
1MOTOR4Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ3
1MOTOR5Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ8
1MOTOR6Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ7
1MOTOR7Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ9
1RESETButton_Switch_SMD:SW_Push_1TS009xxxx-xxxx-xxxx_6x6x5mmSW1
1TCA9548APWRPackage_SO:TSSOP-24_4.4x7.8mm_P0.65mmU3
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1

Questions

How big is the Haptic controller copy PCB?

It measures 80.5 × 93.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Haptic controller copy use?

88 parts, built around the ESP32-S3-WROOM-1-N8, DRV2605LDGS, 74HC595 and AP2112K-3.3. 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 Haptic controller copy KiCad files?

From the rrzhang139/haptic-controller-pcb repository on GitHub, at the commit this page was made from: the board is haptic-controller_copy.kicad_pcb and its schematic haptic-controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Haptic controller copy design in my own project?

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

Similar boards

  • 2 layers485.4 × 48.3 mmMTR LED System Map, the printed circuit board in 3D

    MTR LED System Map

    Hong-Kong-Public-Transport/MTR-LED-System-Map

    A replica of an M-Train LED system map using the ESP32.

    1,053 parts
  • 2 layers287.8 × 126.7 mmNoName, the printed circuit board in 3D

    NoName

    AlaaSaadAbdo/battoota

    Keyboards

    267 parts188
  • 4 layers166.6 × 94 mmPanel, the printed circuit board in 3D

    Panel

    nrdsp/rvPhone

    The goal of the this project is to develop a privacy enhanced, simple and fully featured mobile phone.

    319 parts
  • 2 layers116.8 × 89.1 mmPipra, the printed circuit board in 3D

    Pipra

    ssbb/mini-pipra

    50 parts
  • 4 layers38 × 55 mmDoubleSports.kicad pro, the printed circuit board in 3D

    DoubleSports.kicad pro

    Ameister621/Double-Sports

    COMP3200 Individual Project - Aidan Reidy

    54 parts
  • 4 layers66 × 40 mmESP32 PRELIM DESIGN, the printed circuit board in 3D

    ESP32 PRELIM DESIGN

    ece49022-team9/slate

    Keep the team's native schematic and board sources here, including any project-specific libraries needed to open them.

    82 parts
  • 2 layers27 × 45 mmAlarmshock protofinal, the printed circuit board in 3D

    Alarmshock protofinal

    Enoch36Yi/AlarmShock

    As a chronic deep sleeper, I created AlarmShock to help me wake up on time when standard alarms don't work. The design uses a BMI160 accelerometer and gyroscope to measure wrist movement, an ESP32-S3 MCU, and a DRV2605L…

    30 parts
  • 4 layers72 × 75 mmNrf52480 Dev board, the printed circuit board in 3D

    Nrf52480 Dev board

    brendena/Nordic_Pebble_Steel

    The goal of this project is to replace the main motherboard in the pebble steel with newer parts. Specifically the cpu will be a Nordic NRF52840.

    75 parts9