Skip to the content
PCBKitNew board
2 layers72 × 72 mmTinyDyno, the printed circuit board in 3D

esp32-s3 based board for measuring time and energy of edge AI. Its main use is to compare my kernels to ESP-DL and TensorFlow Lite Micro on identical inputs.

Size
72 × 72 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
53
Pads
190
Tracks, vias
255, 55
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
5 Oct 2026
Updated
23 Oct 2026

Overview

TinyDyno is an open-source printed circuit board by kgiorgi, from the kgiorgi/TinyDyno repository on GitHub, published under the MIT licence. It is a 2-layer board of 72 × 72 mm with 35 parts on 53 nets, routed with 255 tracks and 55 vias.

It is built around the ESP32-S3-WROOM-1-N16R8, LSM6DS3TR-C and TS-1187A-B-A-B, with the IM69D130V01, KT-0603R and TYPE-C-31-M-12 among its other parts. Its parts include 11 capacitors, 11 resistors, 5 ICs, 2 switches and 1 diode. It belongs with the ESP32 boards of this library.

Main components

6

README

README.md

TinyDyno

TinyDyno

An ESP32-S3 board that measures the speed and energy efficiency of one neural network inference.

What is it exactly? TinyDyno is a custom 72 by 72 mm, 2 layered PCB based on ESP32-S3.It is basically a test bench for machine learning on tiny devices (AKA edgeAI). It runs a neural network based on the data from sensors and measures every inference for time and energy. Time is how long the inference took and energy is how much ESP32-S3 has used during it.

To account for actual use cases it has an IMU(motion sensor) and a microphone which are for gesture recognition and keyword detector so the usual run look something like this:

  1. Record the input from either sensors
  2. Run the same model on the same input but with different libraries.(My kernels VS Espressif's ESP-DL VS TensorFlow Lite Micro)
  3. Measure each run using the INA226 (power monitor) which reports current/voltage going into the ESP32-S3 which does the power over time math
  4. Get the results and make conclusions

(A test pad (TP1) goes high during each inference, so the timing can be checked independently with an oscilloscope or logic analyzer.)

The WHY behind it all

Wanting to optimize the field I am currently curious about (AI) I brainstormed for a bit and came to the conclusion that you can't optimize something that you can't measure. After a bit of digging I found few issues it would solve on top of the qol it would provide for me:

  1. Most benchmarks only report speed so a faster kernel that uses more power can still drain the battery sooner.
  2. The USB power meters are quite slow. They update a few times per second, while one inference takes about 5–50 ms.

(Also it's not like you can find stuff like this easily to buy)

how does it work?

TinyDyno

Power: two separate 3.3V rails

USB-C gives 5V and two separate 3.3V regulators split it into two rails:

  1. Measured rail (3V3_MEAS): 5V goes through regulator U2, then solder jumper JP1, then the 75 mOhm shunt resistor R3 and then into the ESP32-S3. The ESP32 is the only thing on this rail.
  2. Peripheral rail (3V3_PERIPH): 5V goes through regulator U1 to everything else (INA226, IMU, mic, LED, pull-ups).

So none of the sensor or LED current goes through the shunt and the measurement is only the ESP32.

Measuring power

Current going through the shunt makes a small voltage across it (V = I * R). For example at 100mA it's 0.1A * 0.075 Ohm = 7.5mV, which is tiny, so the INA226 (U3) does the job:

  1. measures the voltage across the shunt to get the current
  2. measures the 3.3V rail to get the voltage
  3. multiplies them to get power
  4. pulls its ALERT pin low when a new reading is ready so the ESP32 knows when to read it

The shunt is read through a separate pair of thin traces that go straight from the shunt's pads to the INA226 (Kelvin sensing), so the voltage drop on the thick power traces doesn't mess up the reading.

From power to energy and time

Energy = power * time, so during an inference the ESP32 reads the power about once a millisecond and keeps adding up power * time. Time comes from the ESP32's internal microsecond timer.

One measurement looks like this:

  1. Load the recorded input
  2. Set TP1 high, start the timer and the energy sum
  3. Run the model
  4. Set TP1 low, stop, and send time and energy to the PC over USB

Known problem

The ESP32 reads its own power monitor, so the reading itself costs a bit of energy too. The plan is to do the measuring on one core and the model on the other, and subtract the idle power.

Schematic and PCB

Schematic

PCB

  1. Schematic: hardware/kicad/TinyDyno.kicad_sch
  2. PCB: hardware/kicad/TinyDyno.kicad_pcb
  3. Gerbers, assembly BOM and placement file: hardware/kicad/production/

PCB design notes

  1. 2 layers, 72 by 72mm, 1.6mm thick, made in KiCad
  2. GND pour on both layers with stitching vias
  3. No copper under the ESP32 antenna
  4. Track widths: 0.5mm for power, 0.25mm default, 0.2mm on fine-pitch pins
  5. Vias are 0.6mm with 0.3mm holes. The ESP32 module's thermal vias were 0.2mm, so I enlarged them to 0.3mm to fit JLCPCB's 2-layer minimum
  6. JP1 is a solder jumper that's closed by default. Cutting it opens the measured rail, so I can put a multimeter or bench supply in there to calibrate the INA226

Pin map

SignalESP32-S3 pin
I2C SDA / SCL (INA226 and IMU)IO4 / IO5
INA226 ALERT (new reading ready)IO6
IMU interrupt (INT1)IO7
Mic DATA / CLKIO41 / IO42
Timing marker (TP1)IO1
Status LED (on when the pin is low)IO2
Boot buttonIO0
USB D- / D+IO19 / IO20

I2C addresses: INA226 is 0x40, IMU is 0x6A.

What it can measure (INA226 + 75 mOhm shunt)

ItemValue
Current range+/- 1.09A
Current resolutionabout 33uA
Voltage resolution1.25mV
Fastest conversion140us (averaging adjustable)
Voltage lost across the shuntabout 37.5mV at 0.5A

BOM (bill of materials)

Every part on the board. Everything is from LCSC and soldered by JLCPCB. Quantities are per board (2 boards get assembled).

Chips and main parts:

RefQtyPartWhat it doesPackageLCSC
U41ESP32-S3-WROOM-1-N16R8Main microcontroller (16MB flash, 8MB PSRAM). Runs the models and the measuringModuleC2913202
U31INA226AIDGSRPower monitor, measures current through R3 and the rail voltageTSSOP-10C49851
U51LSM6DS3TR-C6-axis IMU (accelerometer + gyro), input for gesture modelsLGA-14C967633
MK11IM69D130V01Digital PDM microphone, input for keyword detectionLLGA-5C536262
U1, U22LR1107G-333.3V regulators. U1 is for the peripheral rail, U2 for the measured railSOT-223C171499
R3175 mOhm, 1%, 2512Shunt resistor in the ESP32's supply2512C76252
J11TYPE-C-31-M-12USB-C connector, 5V and USB dataSMDC165948
SW1, SW22TS-1187A-B-A-BButtons. SW1 = reset (EN), SW2 = boot (IO0)SMDC318884
D11KT-0603R red LEDStatus LED0603C2286

Resistors:

RefQtyValueWhat it doesPackageLCSC
R1, R225.1kUSB-C CC pull-downs, tell the PC/charger to give 5V0603C23186
R4, R525.1kI2C pull-ups on SCL and SDA0603C23186
R615.1kPull-up for the INA226 ALERT line0603C23186
R7110kESP32 EN (enable) pull-up0603C25804
R8110kIO0 (boot pin) pull-up so it boots normally0603C25804
R9, R11222 OhmSeries resistors on USB D+ / D-0603C23345
R1011kCurrent limit for the LED0603C21190

Capacitors:

RefQtyValueWhat it doesPackageLCSC
C1, C321uFInput caps of the two regulators (5V side)0603C15849
C811uFTogether with R7 delays EN so the ESP32 starts cleanly0603C15849
C2122uFOutput cap of U1 (peripheral rail)0805C45783
C4122uFOutput cap of U2 (before the shunt)0805C45783
C6122uFBulk cap at the ESP32 (after the shunt), handles Wi-Fi current spikes0805C45783
C71100nFDecoupling at the ESP32 power pin0603C14663
C5, C9, C10, C114100nFDecoupling for the INA226, IMU and mic0603C14663

Not actual parts (just copper on the PCB):

RefWhat it is
TP1Test pad, timing marker (high during an inference)
TP2Test pad, GND for the probe clip
JP1Solder jumper in the measured rail (closed by default)

In total that's 32 parts per board, 16 different ones. The full exported list is in hardware/kicad/production/bom.csv, and the cost list synced from Half Life is in BOM.csv.

Cost (JLCPCB: 5 PCBs, 2 of them assembled)

ItemCost
PCB, 2-layer, 72 by 72mm (x5)$4.00
ESP32-S3-WROOM-1-N16R8 (x2)$10.29
IM69D130V01 microphone (x2)$6.25
LSM6DS3TR-C IMU (x2)$3.04
INA226AIDGSR (x2)$1.52
LR1107G-33 regulators$0.86
75 mOhm shunt resistors$0.58
USB-C connectors (x2)$0.37
Resistors, capacitors, LED and buttons$2.42
Standard assembly for 2 boards (setup, stencil, part loading, placement)$66.86
Shipping situational in my case 29.82 but I cover itcovered
Total96.19

Fabrication notes

  1. Ordered from JLCPCB with Standard assembly, top side only. JLC adds 5mm edge rails on two sides, which you snap off along the V-cut.
  2. U3 change: I planned to use the INA228 but it was out of stock at JLC, so I swapped it for the INA226. Same footprint and pin order, so the layout didn't change. The INA226 doesn't have a built-in energy counter, so the energy gets added up in firmware instead.
  3. MK1 rotation: positions.csv says 180 degrees, but I rotated the mic by hand in JLC's placement preview. If you re-order, check it again.

Parts

35
QtyValueFootprintReferences
5100nCapacitor_SMD:C_0603_1608MetricC5, C7, C9, C10, C11
55.1kResistor_SMD:R_0603_1608MetricR1, R2, R4, R5, R6
31uCapacitor_SMD:C_0603_1608MetricC1, C3, C8
322uCapacitor_SMD:C_0805_2012MetricC2, C4, C6
210kResistor_SMD:R_0603_1608MetricR7, R8
222Resistor_SMD:R_0603_1608MetricR9, R11
2LR1107G-33Package_TO_SOT_SMD:SOT-223-3_TabPin2U1, U2
2TS-1187A-B-A-BButton_Switch_SMD:SW_Push_1P1T_XKB_TS-1187ASW1, SW2
2TestPointTestPoint:TestPoint_Pad_D1.5mmTP1, TP2
11kResistor_SMD:R_0603_1608MetricR10
175mResistor_SMD:R_2512_6332MetricR3
1ESP32-S3-WROOM-1-N16R8RF_Module:ESP32-S3-WROOM-1U4
1IM69D130V01Sensor_Audio:Infineon_PG-LLGA-5-1MK1
1INA226Package_SO:TSSOP-10_3x3mm_P0.5mmU3
1KT-0603RLED_SMD:LED_0603_1608MetricD1
1LSM6DS3TR-CPackage_LGA:LGA-14_3x2.5mm_P0.5mm_LayoutBorder3x4yU5
1SJJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP1
1TYPE-C-31-M-12Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1

Questions

How big is the TinyDyno PCB?

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

What parts does the TinyDyno use?

35 parts, built around the ESP32-S3-WROOM-1-N16R8, LSM6DS3TR-C, TS-1187A-B-A-B and IM69D130V01. 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 TinyDyno KiCad files?

From the kgiorgi/TinyDyno repository on GitHub, at the commit this page was made from: the board is hardware/kicad/TinyDyno.kicad_pcb and its schematic hardware/kicad/TinyDyno.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the TinyDyno 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).

Similar boards

  • 6 layers84 × 98 mmFujiNet-5200-Rev0, the printed circuit board in 3D

    FujiNet-5200-Rev0

    FujiNetWIFI/fujinet-hardware

    Schematics and design files for FujiNet hardware

    145 parts142
  • 2 layers64 × 46 mmWeatherframe, the printed circuit board in 3D

    Weatherframe

    amselgesang/weatherframe_v01

    My weather station hardver

    50 partsMIT
  • 4 layers65 × 45 mmLora gps tracker rev a, the printed circuit board in 3D

    Lora gps tracker rev a

    bogdan-kovalchuk/esp32-lora-gps-tracker

    Encrypted point-to-point GPS telemetry over 433 MHz LoRa between two ESP32 boards.

    69 partsMIT
  • 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
  • 4 layers32.4 × 40.2 mmSmartwatch, the printed circuit board in 3D

    Smartwatch

    Pedro-Seixas/Smartwatch

    A custom-designed smartwatch built around the ESP32-S3, combining BLE connectivity, a rectangular touch display, recharge capability, IMU and temperature sensors. Designed from the ground up in KiCad.

    55 partsMIT
  • 4 layers100 × 68 mmDevKit, the printed circuit board in 3D

    DevKit

    kaminaris/GigaESC

    209 parts47
  • 4 layers69.8 × 35.2 mmNerdYcontroller, the printed circuit board in 3D

    NerdYcontroller

    KidsLabDe/GamePadPico

    Lamp-PCB for kidslab.

    123 parts5