Arduino Uno Circuit Diagram
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
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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
| Microcontroller | ATmega328P (Microchip/Atmel), 8-bit AVR, 16 MHz |
|---|---|
| Flash memory | 32 KB (0.5 KB used by bootloader) |
| SRAM | 2 KB |
| EEPROM | 1 KB |
| Operating voltage | 5 V |
| Input voltage (recommended / absolute) | 7–12 V / 6–20 V |
| Digital I/O pins | 14 (D0–D13); 6 with PWM output (D3, D5, D6, D9, D10, D11) |
| Analogue input pins | 6 (A0–A5); 10-bit ADC; 0–5 V input range |
Safety warnings
- Do not connect voltages above 5 V directly to any Arduino Uno I/O pin (digital or analogue). The ATmega328P's absolute maximum input voltage at any pin is VCC + 0.5 V (approximately 5.5 V). Exceeding this permanently damages the microcontroller. Use logic level converters when interfacing with 3.3 V device outputs and avoid connecting directly to higher-voltage signals.
- Never exceed the 40 mA per-pin or 200 mA total I/O current limits. Driving loads (motors, solenoids, relays) directly from Uno pins without driver transistors or motor driver ICs will damage or destroy the microcontroller. Always use an appropriate driver circuit with its own power supply for any load above 20–30 mA.
- Do not connect inductive loads (relay coils, small motors) directly to I/O pins without a flyback diode. The voltage spike when the inductive load is de-energised can exceed the pin's maximum rating and damage the ATmega328P.
- The VIN pin and barrel jack supply 7–12 V before regulation — these are not safe for direct connection to 5 V devices. Only use the regulated 5 V pin or the 3.3 V pin to power peripheral electronics.
- When using the Uno near mains-connected circuits or in high-voltage experimental setups, adequate isolation is essential. The Uno itself is a 5 V/3.3 V device with no inherent isolation from higher voltages. Use optocouplers or isolated modules for any interface to mains or high-voltage circuits.
Tools needed
- Computer with Arduino IDE installed (for programming and serial monitoring)
- USB-A to USB-B cable
- Digital multimeter (voltage and continuity checking)
- Solderless breadboard and jumper wires
- Oscilloscope (optional but valuable for signal timing and PWM verification)
- Logic level converter breakout board (for 3.3 V device interfacing)
- Soldering iron and solder (for permanent shield or custom PCB assembly)
Common mistakes
- Connecting loads directly to I/O pins without current limiting: LEDs without a series resistor draw unlimited current from the pin until the pin or microcontroller is damaged.
- Supplying more than 5 V to the 5 V pin: this reverse-feeds through the 5 V bus and can destroy the regulator, ATmega328P, and ATmega16U2 simultaneously.
- Using D0 (RX) and D1 (TX) as general GPIO while the USB serial connection is active: data conflict causes garbled serial communication and may prevent programming.
- Floating analogue inputs: an unconnected analogue input pin floats and produces noisy, meaningless readings — tie unused analogue inputs to GND or 5 V through a resistor.
- Forgetting that the ATmega328P ADC reference is 5 V by default: applying a signal exceeding 5 V to an analogue input (even momentarily) can permanently damage the ADC.
- Programming an Uno at 3.3 V logic levels through an external SPI programmer at 5 V: always ensure the programmer and target share the same logic voltage level.
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
- Arduino Circuit Design for Beginners: From Breadboard to Schematic
- How to Wire a Potentiometer: Complete Guide
Related diagrams
- arduino circuit diagram
- arduino uno board diagram
- 1 to 4 demultiplexer circuit diagram
- 12v bms circuit diagram
- 12v dc power supply circuit diagram
- 12v inverter circuit diagram