The Arduino is an electronics prototyping platform that makes it easy to build fun and useful projects, learn about electronics, and quickly test new ideas. In this article we will take an in-depth look at each part of the Arduino Uno’s PCB to get a better understanding of how the Arduino works at the hardware level.

The ATMEGA328 Microcontroller

The heart of the Arduino is a microcontroller called the ATMEGA328. The ATMEGA328 was originally intended for industrial automation systems, and working with it directly requires advanced electrical engineering and programming skills. The Arduino was designed to make programming and connecting devices to the ATMEGA328 microcontroller much easier.

The ATMEGA328 microcontroller is attached to the PCB with a female pin socket so it can be removed from the PCB:

Arduino ATMEGA328.jpg

GPIO Pins

The pins on the top and bottom of the board are general purpose input and output (GPIO) pins. GPIO pins are used to connect external circuits, sensors, and other devices to the Arduino:

Arduino GPIO Pins.jpg

Digital Pins

Digital pins can supply a high (5V) or low (0V) signal to external components and devices. Some of the digital pins have special functions that will be explained below. The digital pins are labelled 0 to 13:

Arduino Digital Pins.jpg

Analog Pins

The analog pins can generate or detect any voltage between 0V and 5V. They are labelled A0 to A5:

Arduino Analog Pins.jpg

Power and Ground Pins

The power and ground pins can supply 5 volts or 3.3 volts to external devices and circuits:

Arduino Vcc and Ground Pins.jpg

SDA and SCL Pins

The SDA and SCL pins are used for I2C communication:

Arduino SDA and SCL Pins.jpg

Tx and Rx Pins

The TX and RX pins are used for UART communication:

Arduino Tx and Rx Pins

Pulse Width Modulation Pins

The pins labelled with squiggly lines are pulse width modulation pins:

Arduino Pulse Width Modulation Pins.jpg

Reset Button

The reset button re-starts the Arduino and makes the sketch start over from the beginning:

Arduino Reset Button.jpg

Crystal Oscillator

The crystal oscillator gives the Arduino the ability to keep track of time and generate pulse width modulation and serial communication signals. The crystal oscillator is 16 Mhz, which means the Arduino can execute binary instructions at 16 Mhz, or 16 million times per second:

Arduino Crystal Oscillator.jpg

Power Supply

The power supply is in the lower left side of the Arduino’s PCB:

Arduino Power Supply.jpg

Power Input Jack

The Arduino can be powered from the 5V supplied by the USB cable. But for running the Arduino away from a computer, it can be powered by a 7 to 12V AC to DC power supply adapter. The power adapter connects to the Arduino through the power input jack:

Arduino Power Input Jack.jpg

Power Supply Decoupling Capacitors

The power supply decoupling capacitors filter the incoming power supply to reduce voltage spikes that could damage the board:

Arduino Power Supply Decoupling Capacitors.jpg

Voltage Regulator

The voltage regulator steps down the 7 to 12 volt input power to 5 volts, which is the operating voltage of the Arduino:

Arduino Power Supply Voltage Regulator.jpg

USB Connector

Programs are uploaded from your computer to the Arduino using USB communication. Serial data generated by the Arduino is also sent via USB to your computer when it is displayed on the serial monitor. The USB cable can also power the Arduino while it is connected to your computer. This is the connector for the USB cable:

Arduino USB Connector.jpg

USB Control Chip

The USB control chip is an ATMEGA16U2 microcontroller. It controls all of the USB communications between the Arduino and your computer:

Arduino ATMEGA16U2.jpg

USB Control Chip Programming Pins

This group of pins is the in circuit serial programming header (ICSP header) for the USB controller. These pins are used for programming and re-flashing the firmware on the ATMEGA16U2:

Arduino ICSP Pins for the ATMEGA16U2.jpg

ATMEGA328 Programming Pins

These pins are the ICSP pins for the ATMEGA328. They’re used for programming and re-flashing the firmware on the ATMEGA328:

Arduino ICSP Pins for the ATMEGA328.jpg

Pin 13 LED

This is a surface mounted LED which is connected to digital pin 13. Whenever pin 13 is in a high voltage state the LED will light up:

Arduino Pin 13 LED.jpg

Tx and Rx LEDs

The TX and RX LEDs light up whenever data is transferred between the Arduino and your computer:

Arduino Tx and Rx LEDs.jpg

Power LED

The power LED turns on when the Arduino is powered up:

Arduino Power LED.jpg