Skip to the content
2 layers162 × 100 mmCurve tracer, the printed circuit board in 3D

An Arduino UNO R4-based automated I–V curve tracer for semiconductor characterization. Uses programmable gate and drain drive, an ADS1115 ADC, and switched 10 Ω/1 kΩ current-sensing ranges to measure MOSFET characteristics. Python tools process measurements, extract device parameters, plot curves, and generate LaTeX-based characterization reports.

Size
162 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
24
Nets
20
Pads
108
Tracks, vias
314, 31
Routed
Yes
KiCad
KiCad 10.0 (file 20241229)
Created
27 Oct 2026
Updated
27 Oct 2026

Overview

Curve tracer is an open-source printed circuit board by Divyansh12-86, from the Divyansh12-86/semiconductor-parameter-daq-bench repository on GitHub. It is a 2-layer board of 162 × 100 mm with 24 parts on 20 nets, routed with 314 tracks and 31 vias.

It is built around the ARDUINO UNO R3 and BC547. Its parts include 9 resistors, 5 ICs, 3 connectors, 2 capacitors and 2 diodes. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

2

README

hardware/kicad/README.md

Automated I–V Curve Tracer Bench — KiCad Schematic & PCB

Location: kicad_project/
KiCad Version: 10.0.6 (Fully compatible with KiCad 8.x / 9.x / 10.x)
Verification Status:

  • ERC (Electrical Rules Check): 0 Errors, 0 Warnings (100% PASS)
  • DRC (Design Rules Check): 0 Errors, 0 Warnings (100% PASS)
  • Unconnected Items: 0 Unconnected Pads (100% ROUTED)

1. Quick Start: Opening the Project in KiCad

  1. Launch KiCad and choose File → Open Project...
  2. Navigate to this folder and select:
    text
    curve_tracer.kicad_pro
  3. From the KiCad Project Manager:
    • Click Schematic Editor to open curve_tracer.kicad_sch
    • Click PCB Editor to open curve_tracer.kicad_pcb

[!NOTE] All custom breakout board symbols (MCP4725, ADS1115) are self-contained in curve_tracer.kicad_sym and pre-configured in sym-lib-table. Opening the schematic on any system requires no external symbol libraries.


2. Visual Reference Files (Breadboard Assembly)

If you don't have KiCad open or want printable / high-res visual references while wiring your breadboard, use the pre-rendered files in this folder:

FileFormatDescription
schematic_reference.pdf [blocked]Vector PDFCrisp, fully zoomable vector schematic diagram. Ideal for printing or viewing on a laptop while breadboarding.
schematic_reference.png [blocked]High-Res PNG (300 DPI)Full schematic diagram image for quick viewing in image viewers or web browsers.
schematic_reference.svg [blocked]Vector SVGScalable vector graphic of the complete schematic.
pcb_layout_reference.pdf [blocked]Vector PDFComplete 2-layer PCB layout with title block, component placements, tracks, and silkscreen labels.
pcb_3d_top.png [blocked]1080p Image3D photorealistic top-view render showing component layout, connectors, and test points.
pcb_3d_iso.png [blocked]1080p Image3D photorealistic perspective render of the assembled bench PCB.

3. Breadboard Circuit Wiring Guide (Pin-to-Pin Reference)

This table provides the exact wiring map to transfer the KiCad schematic to a solderless breadboard:

A. Arduino Uno R3 Connections

Arduino Uno PinSignal NameConnects ToPurpose
5V (Power)+5VSystem 5V Power RailPowers op-amp, DACs, ADC, and relay coil
GND (Power)GNDSystem Ground RailCommon reference ground
A4/I2C_SDAU2 (Pin 4), U3 (Pin 4), U4 (Pin 4)I²C Serial Data
A5/I2C_SCLU2 (Pin 3), U3 (Pin 3), U4 (Pin 3)I²C Serial Clock
D2/ESTOPSW1 (Pushbutton Pin 1)Active-low Emergency Stop interrupt (internal pullup)
D7/RELAY_CTRLR6 (1 kΩ base resistor to Q1)Shunt range select: LOW = 10 Ω (High-I), HIGH = 1 kΩ (Low-I)
D8/STATUS_LEDR5 (330 Ω resistor to LED D2 anode)Sweep active / fault indicator

B. DAC Breakouts (MCP4725)

Breakout PinMCP4725 U2 (Gate/Base Drive, I²C 0x60)MCP4725 U3 (Drain Drive, I²C 0x61)
1 (VCC)Connect to +5V railConnect to +5V rail
2 (GND)Connect to GND railConnect to GND rail
3 (SCL)Connect to Arduino A5Connect to Arduino A5
4 (SDA)Connect to Arduino A4Connect to Arduino A4
5 (ADDR)Connect to GND (sets address 0x60)Connect to +5V (sets address 0x61)
6 (VOUT)Connect to Op-Amp U5 Pin 3 (InA+)Connect to Op-Amp U5 Pin 5 (InB+)

C. Op-Amp Buffer (MCP6002 Dual Rail-to-Rail)

MCP6002 PinSignal / FunctionWiring Connection
Pin 1 (OutA)/VBUFConnect to Pin 2 (InA-) for unity-gain; connects to J1 Drive Select & ADC A3
Pin 2 (InA-)Feedback ATie directly to Pin 1 (OutA)
Pin 3 (InA+)Input AConnect to DAC 1 output (/DAC1_OUT from U2 Pin 6)
Pin 4 (VSS)PowerConnect to GND
Pin 5 (InB+)Input BConnect to DAC 2 output (/DAC2_OUT from U3 Pin 6)
Pin 6 (InB-)Feedback BTie directly to Pin 7 (OutB)
Pin 7 (OutB)/VA (High-drive output)Connect to Relay K1 Common (Pin 2) & ADC A0
Pin 8 (VDD)PowerConnect to +5V with 100 nF ceramic bypass capacitor C1 to GND

D. ADC Breakout (ADS1115 16-Bit 4-Channel)

ADS1115 PinConnectionPurpose / Channel Mapping
1 (VDD)+5VADC Supply Voltage
2 (GND)GNDSystem Ground (Point of Star Ground return)
3 (SCL)Arduino A5I²C Serial Clock
4 (SDA)Arduino A4I²C Serial Data
5 (ADDR)GNDSets I²C Address to default 0x48
6 (ALRT)No ConnectionAlert / Ready interrupt
7 (A0)/VA (Op-amp Buffer B Out)High side of current sense shunt
8 (A1)/VD (DUT Drain/Collector)Low side of shunt; differential $I_{DUT} = (V_{A0} - V_{A1}) / R_{shunt}$
9 (A2)/VG (DUT Gate/Base)True terminal voltage applied to DUT
10 (A3)/VBUF (Op-amp Buffer A Out)Raw buffer A voltage before drive selector

E. Range Selection Relay & Transistor Driver

ComponentPin / TerminalConnects To
Transistor Q1 (BC547 TO-92)Base (Pin 2)R6 (1 kΩ from Arduino D7) and R7 (10 kΩ pulldown to GND)
Collector (Pin 1)Relay K1 Coil Pin 5 and Diode D1 Anode
Emitter (Pin 3)Connect directly to GND
Diode D1 (1N4148)Cathode (Band)Connect to +5V
AnodeConnect to Q1 Collector & Relay Coil Pin 5 (Clamps flyback spike)
Relay K1 (Songle SRD-05VDC-SL-C)Coil Pin 1Connect to +5V
Coil Pin 5Connect to Q1 Collector & D1 Anode
Common Pin 2 (COM)Connect to /VA (MCP6002 Pin 7)
Normally Closed Pin 4 (NC)Connect to R1 ($10,\Omega, 1%$, High-Current Shunt)
Normally Open Pin 3 (NO)Connect to R4 ($1\text{ k}\Omega, 0.1%$, Low-Current Shunt)
Shunts R1 & R4Other ends of R1 and R4Tie together at /VD (DUT Socket Pin 1 Drain/Collector)

F. Drive Selector Header (J1) & DUT Socket (J2)

HeaderPinFunction
J1 (3-Pin Drive Select)Pin 1MOSFET Direct Gate Drive: connects /VBUF through R2 ($100,\Omega$) to /VG
Pin 2Central Pin: connects directly to /VG and DUT Socket Pin 2 (Gate/Base)
Pin 3BJT Base Drive: connects /VBUF through R3 ($100\text{ k}\Omega$) to /VG
J2 (3-Pin DUT Socket)Pin 1 (Drain / Collector)Connects to /VD (low side of current sense shunts)
Pin 2 (Gate / Base)Connects to /VG (output of drive selector J1 Pin 2)
Pin 3 (Source / Emitter)Connects directly to ADS1115 GND via Kelvin Ground Return

4. Four Critical Breadboard Rules (From Simulation Auditing)

  1. Kelvin Ground Return:
    Do NOT daisy-chain the DUT Source (J2 Pin 3) through random breadboard ground rails. Breadboard spring contact resistance of $0.2\text{ to }0.5,\Omega$ creates negative source degeneration, inflating $R_{ds(on)}$ measurements by $>8%$.
    Action: Run a dedicated, short wire directly from the DUT Source terminal to the ADS1115 GND pin.

  2. I²C Pull-Up Resistors (SC-1):
    The three breakout modules (MCP4725 $\times 2$, ADS1115) already contain on-board $10\text{ k}\Omega$ pull-up resistors on SDA and SCL, yielding an effective parallel pull-up of $3.33\text{ k}\Omega$ (well within the $3\text{ mA}$ I²C sink limit).
    Action: Do NOT populate discrete resistors R8 and R9 ($4.7\text{ k}\Omega$) on the breadboard (mark them DNP).

  3. Decoupling Capacitors (SC-4):
    Breadboard rails have significant inductive reactance.
    Action: Place a $100\text{ nF}$ ceramic capacitor directly across the $V_{CC}$ and $GND$ pins of each breakout board (U2, U3, U4) and the MCP6002 op-amp (U5).

  4. Power Supply Headroom (T2 Failure Resolution):
    The unbuffered MCP6002 op-amp output stage drops $\sim 400\text{ mV}$ at $10\text{ mA}$. If powered from standard laptop USB that droops to $4.75\text{ V}$, the maximum reachable $V_A$ is $4.345\text{ V}$ (causing clipping on $4.50\text{ V}$ commands).
    Action: Power the Arduino from an externally powered USB hub or regulated $5.0\text{ V}$ bench supply so that $V_{DD} \ge 4.95\text{ V}$, or limit software test sweeps to $4.30\text{ V}$.


5. Verification Proofs

The schematic and PCB layout have been formally verified using kicad-cli 10.0.6:

  • ERC Verification (erc_report.rpt):
    text
    ***** Sheet /
     ** ERC messages: 0  Errors 0  Warnings 0
  • DRC Verification (drc_report.rpt):
    text
    ** Found 0 DRC violations **
    ** Found 0 unconnected pads **
    ** Found 0 Footprint errors **

Parts

24
QtyValueFootprintReferences
21kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR4, R6
24.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR8, R9
2MCP4725_BreakoutConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalU2, U3
110Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1
1100Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2
1100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR3
1100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmC1
110kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR7
110uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC2
11N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD1
1330Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR5
1ADS1115_BreakoutConnector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_VerticalU4
1Arduino_UNO_R3Module:Arduino_UNO_R3U1
1BC547Package_TO_SOT_THT:TO-92_Inline_WideQ1
1Cal_HeaderConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ3
1DUT_SocketConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ2
1Drive_SelectConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ1
1GreenLED_THT:LED_D5.0mmD2
1MCP6002-xPPackage_DIP:DIP-8_W7.62mmU5
1Relay_SPDTRelay_THT:Relay_SPDT_Omron-G5Q-1K1
1SW_PushButton_Switch_THT:SW_PUSH_6mmSW1

Similar boards

  • 2 layers170.2 × 119.4 mmSentinel, the printed circuit board in 3D

    Sentinel

    YousefAliAicha/sentinel-arduino-firmware

    Adaptive traffic-light FSM on the Arduino UNO R3 — pedestrian preemption, LDR-gated night mode with HC-SR04 vehicle detection, and a multiplexed 7-segment countdown. Fully non-blocking.

    25 parts2MIT
  • 2 layersDemo, the printed circuit board in 3D

    Demo

    ram-kumar-shrestha/minor-project

    31 parts1
  • 2 layers98.1 × 101.3 mmClimatecontrolpcb, the printed circuit board in 3D

    Climatecontrolpcb

    Sharan21-cmd/climate-control-pcb-design

    A compact and efficient Climate Control PCB designed for monitoring and regulating temperature and humidity using embedded electronics.

    16 parts1
  • 2 layers89 × 110 mmPPS, the printed circuit board in 3D

    PPS

    GCA-ROBOTICA/Simulador-ECU-Tablero

    El sistema permite interoperar con un tablero diseñado originalmente para señales analógicas y discretas, emulando una arquitectura moderna basada en CAN Bus, similar a la utilizada en vehículos actuales.

    17 partsGPL-3.0
  • 2 layersMcuwith3subsheet, the printed circuit board in 3D

    Mcuwith3subsheet

    karthikkrishnaa/Internship1_PCB_files

    Internship1_PCB_files(Kakunje software private limited) the repo consists of the pcb design files.

    40 parts
  • 2 layers134 × 135.5 mmMjp10, the printed circuit board in 3D

    Mjp10

    meghashreejpbhat-hue/PCB-Design-KiCad

    A collection of PCB design mini-projects completed using KiCad as part of my Value Added Course on PCB Design.

    35 parts
  • 2 layers95.2 × 63.7 mmOpentribhw, the printed circuit board in 3D

    Opentribhw

    nurbano/opentribhw

    Este proyecto presenta una plataforma abierta y de bajo costo para la instrumentación, medición y control en ensayos tribológicos de tipo Pin-on-Disk y Block-on-Ring.

    38 parts
  • 4 layers100.6 × 101.6 mmClassThingy, the printed circuit board in 3D

    ClassThingy

    SaltyMelonYT/PCB-Projects

    I'm a nerd

    7 partsMIT

Questions

How big is the Curve tracer PCB?

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

What parts does the Curve tracer use?

24 parts, built around the ARDUINO UNO R3 and BC547. 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 Curve tracer KiCad files?

From the Divyansh12-86/semiconductor-parameter-daq-bench repository on GitHub, at the commit this page was made from: the board is hardware/kicad/curve_tracer.kicad_pcb and its schematic hardware/kicad/curve_tracer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Curve tracer design in my own project?

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