Arduino Uno Circuit Diagram

Arduino Uno Circuit Diagram — circuit diagram showing component connections+12V/24V SupplySensorPull-up RARDUINOUNOMCU / ReaderIndicatorSensor Circuit
Arduino Uno Circuit Diagram — interactive diagram. Open it in the editor to customise components and wiring.

This is a free printable arduino uno circuit diagram: download the diagram as SVG or open it and print to paper or PDF.

An Arduino Uno circuit diagram shows how the ATmega328P microcontroller, USB-to-serial converter, voltage regulators, crystal oscillator, and pin headers are interconnected to create a self-contained prototyping platform.

The Arduino Uno is an open-source prototyping board built around the Atmel (now Microchip) ATmega328P 8-bit AVR microcontroller. Understanding its internal circuit diagram is essential for designing add-on shields, troubleshooting power faults, and working near the board's electrical limits.

Microcontroller: the ATmega328P runs at 16 MHz (driven by a 16 MHz ceramic resonator or crystal on most boards), has 32 KB of flash program memory (0.5 KB used by the bootloader), 2 KB of SRAM, and 1 KB of EEPROM. It operates at 5 V (the Uno's native logic level).

Power supply paths: the Uno has three input options: - USB (5 V via the USB connector): the host computer supplies 5 V through a polyfuse to the 5 V bus. No 3.3 V regulator powers its full current budget from USB alone. - DC barrel jack (7–12 V recommended, 6–20 V absolute): feeds an NCP1117 (or equivalent) LDO linear regulator producing a regulated 5 V rail, and a separate LDO producing 3.3 V. The input passes through a reverse-polarity protection diode (a P-MOSFET on modern revisions) before reaching the regulator. - VIN pin: alternative access to the same DC input path after the protection diode but before the regulator.

A power selection circuit (MOSFET or comparator-based on different revisions) automatically selects between USB and external DC without user intervention.

Digital I/O pins (14 total, D0–D13): each pin can source or sink a maximum of 40 mA, with an absolute maximum of 200 mA total across all digital I/O pins combined. Six pins (D3, D5, D6, D9, D10, D11) support PWM output via the AVR timers. D0 and D1 are the UART receive and transmit pins — using them while the USB-serial converter is active causes conflicts.

Analogue inputs (A0–A5): 10-bit ADC, 0–5 V input range, approximately 10 kΩ input impedance. A4 and A5 are shared with the I²C (TWI) bus.

SPI bus: MOSI (D11), MISO (D12), SCK (D13), and SS (D10) — these pins are shared with the ICSP header.

USB-to-serial converter: the Uno R3 uses an ATmega16U2 microcontroller to bridge USB to the ATmega328P's UART. Older Uno revisions used an FTDI chip or an ATmega8U2.

How to wire arduino uno circuit diagram

  1. Connect the power supply Supply 5 V via the USB cable for programming and low-power circuits. For standalone or higher-power operation, use a 7–12 V regulated DC adapter with a 2.1 mm centre-positive barrel plug. Never supply more than 5 V directly to the 5 V pin, as this bypasses all protection and regulation circuitry.
  2. Connect a LED with a current-limiting resistor (basic output example) Connect a resistor in series with an LED between a digital output pin and GND. Calculate resistor value: R = (5 V − V_f) / I_f. For a standard LED with V_f = 2 V and desired I_f = 20 mA: R = (5 − 2) / 0.02 = 150 Ω. Use the nearest standard value of 150 Ω or 180 Ω. Configure the pin as OUTPUT in code: pinMode(pin, OUTPUT); and control with digitalWrite(pin, HIGH/LOW).
  3. Connect a sensor to an analogue input Connect the sensor output (0–5 V range) to any of A0–A5. Connect sensor supply to 5 V and sensor ground to GND. In code, call analogRead(A0) to receive a 10-bit integer (0–1023) proportional to 0–5 V. If the sensor output range is different from 0–5 V, use a voltage divider or scaling circuit to bring the signal within the ADC input range.
  4. Use I²C devices (sensors, displays) Connect I²C devices using the dedicated pins: SDA on A4 and SCL on A5. Both lines require pull-up resistors (typically 4.7 kΩ to 5 V) — many breakout boards include these. Include the Wire library in the sketch: #include <Wire.h>. Multiple I²C devices share the same two wires, differentiated by their unique 7-bit addresses.
  5. Use SPI devices Connect SPI devices to MOSI (D11), MISO (D12), SCK (D13), and a dedicated chip-select pin of your choice. Include the SPI library: #include <SPI.h>. Do not use D10 as a general GPIO if the Uno is operating as SPI master — the ATmega328P uses D10 as the SS pin to determine master/slave mode.
  6. Connect the USB-to-serial converter for programming Connect a standard USB-A to USB-B cable between the Uno and a computer with Arduino IDE installed. The IDE communicates via the ATmega16U2 USB-to-serial bridge. Select 'Arduino Uno' as the board and the correct COM port. The Uno auto-resets when the IDE initiates programming via the DTR/RTS signal line.
  7. Add decoupling capacitors for noise-sensitive circuits When building sensing or communication circuits, place 100 nF ceramic capacitors as close as possible to each IC's supply and ground pins. This suppresses high-frequency noise from the ATmega328P's digital switching — particularly important when using the ADC for accurate measurements. The Uno board itself has bulk decoupling but external circuit ICs require their own local bypass.

Specifications

MicrocontrollerATmega328P (Microchip/Atmel), 8-bit AVR, 16 MHz
Flash memory32 KB (0.5 KB used by bootloader)
SRAM2 KB
EEPROM1 KB
Operating voltage5 V
Input voltage (recommended / absolute)7–12 V / 6–20 V
Digital I/O pins14 (D0–D13); 6 with PWM output (D3, D5, D6, D9, D10, D11)
Analogue input pins6 (A0–A5); 10-bit ADC; 0–5 V input range

Safety warnings

Tools needed

Common mistakes

Troubleshooting

Arduino Uno does not appear as a COM port on the computer
Cause: Missing USB driver for ATmega16U2, faulty USB cable, damaged polyfuse due to overcurrent, or failed ATmega16U2 Fix: Try a known-good USB-B cable. Install or reinstall the Arduino IDE drivers. If the board appears as an unknown device, reinstall the ATmega16U2 firmware. Check the polyfuse resistance — it resets after cooling but may have elevated resistance if repeatedly stressed.
Upload fails with 'avrdude: stk500_recv() timeout'
Cause: Incorrect COM port selected, wrong board selected in IDE, bootloader corrupted, or a sketch that disables the auto-reset circuit Fix: Verify COM port and board selection in Tools menu. Try pressing the reset button on the Uno just before the IDE shows 'Uploading'. If bootloader is corrupted, use an ICSP programmer to reflash the bootloader via the Tools > Burn Bootloader function.
I/O pin reads incorrect values or is permanently stuck
Cause: Pin damaged by overcurrent or overvoltage, a floating input pin picking up interference, or a short circuit in external circuitry Fix: Test the pin in isolation with no external connections — it should be configurable as OUTPUT and switch between HIGH and LOW. If it does not respond or produces unexpected values with no load, the ATmega328P pin is likely damaged. Verify external circuits for shorts to VCC or GND before replacing the IC or board.
5 V power rail voltage is low (< 4.7 V) under load
Cause: Excessive current draw exceeding the on-board 5 V regulator capacity, or USB host port limiting current, or degraded LDO regulator Fix: Measure total current draw from the 5 V pin. If powered via USB, the host port typically limits to 500 mA; power from a barrel jack adapter instead. Reduce external load current by using separate supply rails for motors or high-power LEDs with their own 5 V adapter.

Frequently asked questions

What microcontroller does the Arduino Uno use?

The Arduino Uno uses the ATmega328P from Microchip Technology (formerly Atmel). It is an 8-bit AVR microcontroller running at 16 MHz, with 32 KB of flash (0.5 KB used by the bootloader), 2 KB of SRAM, 1 KB of EEPROM, 14 digital I/O pins, 6 analogue input pins, and operating voltage of 5 V.

What is the safe voltage and current output from an Arduino Uno pin?

Each digital or analogue I/O pin can source or sink a maximum of 40 mA and should ideally be limited to 20 mA for reliable long-term operation. The total current across all I/O pins simultaneously must not exceed 200 mA. The 5 V pin can supply approximately 400 mA when powered from a barrel jack (regulator limited); from USB alone it is limited by the host USB port.

What is the recommended input voltage for the Arduino Uno power jack?

The recommended input voltage at the DC barrel jack (or VIN pin) is 7–12 V DC. The absolute minimum is 6 V; below this the on-board 5 V regulator cannot maintain regulation. The absolute maximum is 20 V, but sustained operation above 12 V causes the LDO regulator to dissipate significant heat. A 9 V or 12 V centre-positive 2.1 mm barrel plug supply is the standard recommendation.

Can I connect 5 V and 3.3 V devices directly to Arduino Uno pins?

The Arduino Uno's ATmega328P runs at 5 V logic. Connecting a 3.3 V device output directly to an Uno input is generally safe — the Uno's input threshold for logic HIGH is approximately 3 V, so a 3.3 V signal is recognised correctly. However, driving a 3.3 V device input from an Uno output (which produces 5 V) may exceed the 3.3 V device's absolute maximum input rating and damage it. Use a logic level converter for bidirectional or output connections.

What is the ICSP header on an Arduino Uno?

The ICSP (In-Circuit Serial Programming) header is a 6-pin 2×3 header that exposes the SPI bus and reset pin for programming the ATmega328P directly via an external programmer (without using the bootloader). The pins are MOSI, MISO, SCK, RESET, VCC, and GND. A second ICSP header near the USB connector is used to program the ATmega16U2 USB-to-serial converter chip separately.

Full written guides

Related diagrams

Free electrical calculators

Edit this diagram free in the online editor