
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.
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.
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.
Location: kicad_project/
KiCad Version: 10.0.6 (Fully compatible with KiCad 8.x / 9.x / 10.x)
Verification Status:
curve_tracer.kicad_procurve_tracer.kicad_schcurve_tracer.kicad_pcb[!NOTE] All custom breakout board symbols (MCP4725, ADS1115) are self-contained in
curve_tracer.kicad_symand pre-configured insym-lib-table. Opening the schematic on any system requires no external symbol libraries.
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:
| File | Format | Description |
|---|---|---|
schematic_reference.pdf [blocked] | Vector PDF | Crisp, 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 SVG | Scalable vector graphic of the complete schematic. |
pcb_layout_reference.pdf [blocked] | Vector PDF | Complete 2-layer PCB layout with title block, component placements, tracks, and silkscreen labels. |
pcb_3d_top.png [blocked] | 1080p Image | 3D photorealistic top-view render showing component layout, connectors, and test points. |
pcb_3d_iso.png [blocked] | 1080p Image | 3D photorealistic perspective render of the assembled bench PCB. |
This table provides the exact wiring map to transfer the KiCad schematic to a solderless breadboard:
| Arduino Uno Pin | Signal Name | Connects To | Purpose |
|---|---|---|---|
5V (Power) | +5V | System 5V Power Rail | Powers op-amp, DACs, ADC, and relay coil |
GND (Power) | GND | System Ground Rail | Common reference ground |
A4 | /I2C_SDA | U2 (Pin 4), U3 (Pin 4), U4 (Pin 4) | I²C Serial Data |
A5 | /I2C_SCL | U2 (Pin 3), U3 (Pin 3), U4 (Pin 3) | I²C Serial Clock |
D2 | /ESTOP | SW1 (Pushbutton Pin 1) | Active-low Emergency Stop interrupt (internal pullup) |
D7 | /RELAY_CTRL | R6 (1 kΩ base resistor to Q1) | Shunt range select: LOW = 10 Ω (High-I), HIGH = 1 kΩ (Low-I) |
D8 | /STATUS_LED | R5 (330 Ω resistor to LED D2 anode) | Sweep active / fault indicator |
| Breakout Pin | MCP4725 U2 (Gate/Base Drive, I²C 0x60) | MCP4725 U3 (Drain Drive, I²C 0x61) |
|---|---|---|
1 (VCC) | Connect to +5V rail | Connect to +5V rail |
2 (GND) | Connect to GND rail | Connect to GND rail |
3 (SCL) | Connect to Arduino A5 | Connect to Arduino A5 |
4 (SDA) | Connect to Arduino A4 | Connect 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+) |
| MCP6002 Pin | Signal / Function | Wiring Connection |
|---|---|---|
Pin 1 (OutA) | /VBUF | Connect to Pin 2 (InA-) for unity-gain; connects to J1 Drive Select & ADC A3 |
Pin 2 (InA-) | Feedback A | Tie directly to Pin 1 (OutA) |
Pin 3 (InA+) | Input A | Connect to DAC 1 output (/DAC1_OUT from U2 Pin 6) |
Pin 4 (VSS) | Power | Connect to GND |
Pin 5 (InB+) | Input B | Connect to DAC 2 output (/DAC2_OUT from U3 Pin 6) |
Pin 6 (InB-) | Feedback B | Tie directly to Pin 7 (OutB) |
Pin 7 (OutB) | /VA (High-drive output) | Connect to Relay K1 Common (Pin 2) & ADC A0 |
Pin 8 (VDD) | Power | Connect to +5V with 100 nF ceramic bypass capacitor C1 to GND |
| ADS1115 Pin | Connection | Purpose / Channel Mapping |
|---|---|---|
1 (VDD) | +5V | ADC Supply Voltage |
2 (GND) | GND | System Ground (Point of Star Ground return) |
3 (SCL) | Arduino A5 | I²C Serial Clock |
4 (SDA) | Arduino A4 | I²C Serial Data |
5 (ADDR) | GND | Sets I²C Address to default 0x48 |
6 (ALRT) | No Connection | Alert / 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 |
| Component | Pin / Terminal | Connects 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 |
| Anode | Connect to Q1 Collector & Relay Coil Pin 5 (Clamps flyback spike) | |
| Relay K1 (Songle SRD-05VDC-SL-C) | Coil Pin 1 | Connect to +5V |
| Coil Pin 5 | Connect 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 & R4 | Other ends of R1 and R4 | Tie together at /VD (DUT Socket Pin 1 Drain/Collector) |
| Header | Pin | Function |
|---|---|---|
| J1 (3-Pin Drive Select) | Pin 1 | MOSFET Direct Gate Drive: connects /VBUF through R2 ($100,\Omega$) to /VG |
| Pin 2 | Central Pin: connects directly to /VG and DUT Socket Pin 2 (Gate/Base) | |
| Pin 3 | BJT 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 |
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.
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).
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).
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}$.
The schematic and PCB layout have been formally verified using kicad-cli 10.0.6:
erc_report.rpt):
***** Sheet /
** ERC messages: 0 Errors 0 Warnings 0drc_report.rpt):
** Found 0 DRC violations **
** Found 0 unconnected pads **
** Found 0 Footprint errors **| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R4, R6 |
| 2 | 4.7k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R8, R9 |
| 2 | MCP4725_Breakout | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | U2, U3 |
| 1 | 10 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | 100 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2 |
| 1 | 100k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3 |
| 1 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm | C1 |
| 1 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R7 |
| 1 | 10uF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C2 |
| 1 | 1N4148 | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D1 |
| 1 | 330 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5 |
| 1 | ADS1115_Breakout | Connector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_Vertical | U4 |
| 1 | Arduino_UNO_R3 | Module:Arduino_UNO_R3 | U1 |
| 1 | BC547 | Package_TO_SOT_THT:TO-92_Inline_Wide | Q1 |
| 1 | Cal_Header | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J3 |
| 1 | DUT_Socket | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J2 |
| 1 | Drive_Select | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J1 |
| 1 | Green | LED_THT:LED_D5.0mm | D2 |
| 1 | MCP6002-xP | Package_DIP:DIP-8_W7.62mm | U5 |
| 1 | Relay_SPDT | Relay_THT:Relay_SPDT_Omron-G5Q-1 | K1 |
| 1 | SW_Push | Button_Switch_THT:SW_PUSH_6mm | SW1 |

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.


Sharan21-cmd/climate-control-pcb-design
A compact and efficient Climate Control PCB designed for monitoring and regulating temperature and humidity using embedded electronics.

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.

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

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.

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.

It measures 162 × 100 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask Divyansh12-86 before reusing the design.