Arduino Uno Schematic Diagram: A Comprehensive Guide

The Arduino Uno is a widely used microcontroller board built around the ATmega328P. Its schematic shows how the microcontroller, USB interface, power circuitry, and headers work together—useful context when troubleshooting an Uno or adapting its design for a custom board.

In this article, we will discuss the key components of the Arduino Uno schematic, including the microcontroller, voltage regulator, USB interface, and passive components, and how they work together to make the board work.

Arduino Uno Schematic Diagram

The following Arduino Uno schematic diagram can be opened and forked in Flux so that you can create your own custom layout! This allows you to modify the position of components while maintaining the same pinouts. 

Components of the Arduino Uno

The Arduino Uno schematic consists of several components, including the microcontroller, voltage regulator, USB interface, and various other passive components. Let's take a closer look at each component and its function in the schematic.

  1. Microcontroller (Atmega328P)
    The microcontroller is the heart of the Arduino Uno board. It is an 8-bit microcontroller with 32 KB of flash memory and 2 KB of SRAM. The Atmega328P microcontroller on the Arduino Uno runs the firmware that controls the board's behavior. It receives inputs from sensors and other devices, processes the data, and outputs signals to control other components.
  1. Voltage Regulator
    The voltage regulator on the Arduino Uno board is used to regulate the voltage supplied to the board. The voltage regulator converts the voltage from the USB interface or external power source to the 5V needed by the microcontroller and other components. This is important to ensure the stability and reliability of the board, as well as to prevent damage to the components.
  1. USB Interface
    The USB interface on the Arduino Uno is used to connect the board to a computer for programming and to supply power to the board. The USB interface contains a USB-to-serial converter, which is used to translate the signals between the computer and the microcontroller. The USB interface also provides the 5V voltage required by the board.
  1. Other Passive Components
    The Arduino Uno schematic also includes various other passive components, such as resistors, capacitors, and diodes. These components are used to regulate the flow of electrical signals, filter noise, and protect the components from damage.

The Pinmode Function and Pinout

The Arduino Uno schematic provides a comprehensive pinout that gives electrical engineers access to various peripheral interfaces, such as I2C, SPI, and PWM. To utilize these interfaces, electrical engineers must first set the appropriate pinmode using the pinmode function. This function specifies whether a pin is set to input or output, which determines its behavior. The pinout of the Arduino Uno also includes connections to the GND and 3V pins, which are used to provide power to external devices and to ground the board.

The Arduino Uno provides 14 digital I/O pins, six of which support PWM output, plus six analog-input pins. Its headers also expose power, ground, I2C, and SPI connections. Check the board revision and official pinout when a project depends on a specific alternate pin function.

Digital Pins‍

The digital pins on the Arduino Uno can be used for both input and output and are designated as D0 to D13. These pins can be controlled using the digitalwrite and digitalread functions in the Arduino IDE.

Analog Pins‍

The analog pins on the Arduino Uno are designated as A0 to A5 and can be used to read analog signals, such as those from sensors. These pins are connected to an ADC (Analog-to-Digital Converter) on the ATmega328P microcontroller, which converts the analog signal into a digital representation that can be read by the microcontroller.

PWM Pins‍

The Arduino Uno provides 6 PWM pins, which can be used to control analog devices, such as motors and LEDs, by adjusting the duty cycle of a pulse. These pins are designated as D3, D5, D6, D9, D10, and D11.

I2C and SPI Interfaces

The Arduino Uno pinout also includes connections to the I2C and SPI interfaces, which allow electrical engineers to communicate with other devices and peripherals, such as sensors and actuators.

Power Pins‍

The power pins on the Arduino Uno include the GND and 3V pins, which are used to provide power to external devices and to ground the board. The 5V pin provides a regulated 5V supply, which can be used to power external devices, while the Vin pin can be used to power the board using an external power supply.

SmokeSensor Shield - Arduino Uno shield is used to monitor chimney smoke and provide feedback to the stove.

Programming the Microcontroller using the ICSP

The ATmega328P microcontroller on the Arduino Uno is programmed using the ICSP (In-Circuit Serial Programming) header. This header provides access to the MOSI, SCK, and other signals required for programming the microcontroller. The Arduino Integrated Development Environment (IDE) provides an easy-to-use interface for programming the microcontroller and uploading code to the board.

Controlling Digital Pins using Digitalwrite and Digitalread

The Arduino Uno exposes 14 digital I/O pins for devices such as LEDs, switches, and sensors. Use digitalWrite() to set an output HIGH or LOW, and digitalRead() to read a digital input. Pins 0 and 1 are also used for hardware serial communication, so avoid relying on them for general I/O while uploading sketches or using Serial.

This example Arduino code shows how to control digital pins using digitalWrite() and digitalRead() functions. In this example, we'll use a push button to control an LED. When the button is pressed, the LED will turn on; when the button is released, the LED will turn off.

// Define pin numbers for LED and button
const int ledPin = 13;   // LED connected to digital pin 13
const int buttonPin = 2; // Push button connected to digital pin 2

void setup() {
  // Set the LED pin as output
  pinMode(ledPin, OUTPUT);

  // Set the button pin as input with internal pull-up resistor
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  // Read the state of the button pin
  int buttonState = digitalRead(buttonPin);

  // If the button is pressed (LOW)
  if (buttonState == LOW) {
    // Turn on the LED
    digitalWrite(ledPin, HIGH);
  } else {
    // Turn off the LED
    digitalWrite(ledPin, LOW);
  }
}

This code assumes that you have a normally open push button connected to digital pin 2 and an LED connected to digital pin 13. When the button is not pressed, the internal pull-up resistor will cause the button pin to read HIGH. When the button is pressed, it will connect the pin to ground, causing the pin to read LOW.

Using PWM to Control Analog Devices

The Arduino Uno schematic provides access to 6 PWM (Pulse Width Modulation) pins, which can be used to control analog devices, such as motors and servos. PWM allows electrical engineers to control the brightness of LEDs, the speed of motors, and other devices by adjusting the duty cycle of the pulse. This provides a more versatile and smooth control of analog devices compared to using digital signals alone.

In this example, we'll use a potentiometer to control the brightness of an LED. The potentiometer will be read using an analog input, and the LED brightness will be controlled using a PWM output.

// Define pin numbers for LED and potentiometer
const int ledPin = 9; // LED connected to digital pin 9 (PWM-capable pin)
const int potentiometerPin = A0; // Potentiometer connected to analog pin A0

void setup() {
  pinMode(ledPin, OUTPUT); // Set the LED pin as output
}

void loop() {
  // Read the value of the potentiometer (0 to 1023)
  int potentiometerValue = analogRead(potentiometerPin);

  // Map the potentiometer value (0 to 1023) to a PWM value (0 to 255)
  int pwmValue = map(potentiometerValue, 0, 1023, 0, 255);

  // Set the LED brightness using the PWM value
  analogWrite(ledPin, pwmValue);

  // Small delay to smooth the LED transitions
  delay(20);
}

What are the 3 types of pins on Arduino?

The Arduino Uno’s pins can be grouped into digital I/O (D0–D13), analog inputs (A0–A5), and power/reference pins. Six digital pins also support PWM. The power header includes IOREF, RESET, 3.3V, 5V, two GND pins, and VIN; AREF provides an analog reference. Check the official pinout for alternate functions.

Arduino Uno R3 Shield Template - Include an official pinout so you will always know Arduino names and the alternative roles of pins.

How many ground pins are there on Arduino Uno board?

The Arduino Uno R3 pinout shows three GND pins: two on the power header and one on the digital header. Connect circuit components to a suitable GND pin to share the board’s common ground.

What are the 0 and 1 pins on Arduino Uno?

The "0" and "1" pins on an Arduino Uno refer to the RX (Receive) and TX (Transmit) pins, respectively. These are digital pins used for serial communication with other devices, such as a computer. The RX pin is used to receive data, and the TX pin is used to transmit data. These pins can also be used for general digital input/output if serial communication is not required.

Applications of the Arduino Uno

The Arduino Uno can be used in various applications, including hobby projects, IoT devices, and home automation. Engineers and hobbyists can use the schematic as a reference to create custom boards or modify existing boards to meet specific requirements. The schematic can also be used to troubleshoot issues with the board and to understand the behavior of the components.

One of the most significant advantages of using the Arduino Uno is its compatibility with the Arduino Integrated Development Environment (IDE). The Arduino IDE is a software platform that makes it easy to write, upload, and debug code for the Arduino Uno and other boards. The Arduino Uno schematic can be used in combination with the Arduino IDE to create and test new projects, making it an ideal choice for hobbyists and engineers.

The Arduino Uno schematic is a practical reference for understanding the board, diagnosing connections, and planning compatible shields or custom hardware.

About the author

Lance Cassidy

Co-Founder at Flux

Lance is Co-Founder & CDO of Flux, a hardware design platform that's revolutionizing how teams create and iterate on circuits. Find him on Flux @lwcassid

More in Component & Platform Guides

Let’s start building.

Let’s build your idea together. All you need to do is describe what you want to make, or what problem you want to solve. Flux will work with you to make it a reality.

Try it Free
Close-up of a Flux-designed printed circuit board