MakerLab
ArduinoArduino Serial

Arduino Uno: The Classic Microcontroller for Makers

The Arduino Uno is the de facto standard for introductory microcontroller projects, offering a robust platform for learning and experimentation.

Arduino Serial

The Arduino Uno is the most popular board in the Arduino family, released in 2005. It was designed to be an easy-to-use platform for hobbyists, students, and artists to create interactive projects without needing extensive electronics or programming knowledge. Its widespread adoption has made it a cornerstone of the maker movement, providing a consistent and well-supported entry point into the world of embedded systems.

At the heart of the Arduino Uno is the ATmega328P microcontroller, an 8-bit AVR RISC architecture chip. This microcontroller provides a good balance of processing power, memory, and peripheral capabilities for a wide range of applications. It features 32KB of Flash memory for program storage, 2KB of SRAM for variables, and 1KB of EEPROM for persistent data storage, making it suitable for many common sensor reading, actuator control, and communication tasks.

The Uno sits in the mid-range of Arduino boards, offering more features and memory than the earlier Arduino Diecimila but less power than more advanced boards like the Arduino Due or Arduino Mega. Its simplicity and the vast community support make it ideal for beginners learning about digital logic, analog inputs, serial communication, and basic programming concepts. For those looking to build their first robot, a simple weather station, or an interactive art installation, the Uno is an excellent choice.

Its enduring popularity is a testament to its well-designed feature set and the extensive ecosystem of shields (add-on boards) and libraries that have been developed for it. The Arduino IDE, a free and open-source software environment, simplifies the programming process, allowing users to write code in C/C++ and upload it to the board with ease. This accessibility has empowered countless individuals to bring their ideas to life.

Watch

Related video, embedded from YouTube.

Specifications

Microcontroller / SoCATmega328P
Architecture8-bit AVR RISC
Clock speed16 MHz
Flash / Storage32 KB (ATmega328P)
RAM / SRAM2 KB (ATmega328P)
EEPROM1 KB (ATmega328P)
Operating voltage5V
Digital I/O pins14 (of which 6 provide PWM output)
Analog / ADC6 analog input pins (A0-A5)
PWM6 pins (3, 5, 6, 9, 10, 11)
Connectivity1x UART (Serial), 1x SPI, 1x I2C
USBATmega16U2 (for USB-to-Serial communication)
Power input7-12V recommended via barrel jack or VIN pin
Dimensions68.6mm x 53.4mm

Pinout & pin functions

PinFunction
GNDGround
GNDGround
5VPower output (regulated 5V)
3.3VPower output (regulated 3.3V)
IOREFVoltage reference for the I/O pins
RESETResets the microcontroller
D0 (RX)Serial Receive pin
D1 (TX)Serial Transmit pin
D2General purpose digital I/O
D3General purpose digital I/O, PWM output
D4General purpose digital I/O
D5General purpose digital I/O, PWM output
D6General purpose digital I/O, PWM output
D7General purpose digital I/O
D8General purpose digital I/O
D9General purpose digital I/O, PWM output
D10General purpose digital I/O, PWM output, SPI SS
D11General purpose digital I/O, PWM output, SPI MOSI
D12General purpose digital I/O, SPI MISO
D13General purpose digital I/O, SPI SCK, built-in LED
A0Analog Input pin, Digital I/O
A1Analog Input pin, Digital I/O
A2Analog Input pin, Digital I/O
A3Analog Input pin, Digital I/O
A4Analog Input pin, Digital I/O, I2C SDA
A5Analog Input pin, Digital I/O, I2C SCL
AREFAnalog Reference voltage
VINPower input (7-12V)

Wiring & circuit basics

Powering the Arduino Uno can be done via the USB port or the DC barrel jack. When using the barrel jack, a 7-12V power supply is recommended. The board has an onboard voltage regulator that steps this down to 5V for the microcontroller and other components. Avoid supplying more than 12V, as this can overheat the regulator. When powering via USB, the board is powered directly from the computer's USB port, which typically provides 5V at up to 500mA. Ensure your power source can supply sufficient current, especially when driving motors or many LEDs.

The Arduino Uno operates at a logic level of 5V. This means that digital HIGH signals are represented by 5V, and LOW signals by 0V. When interfacing with external components, it's crucial to respect these voltage levels. For example, when connecting an LED, always use a current-limiting resistor (typically 220-330 ohms) to prevent damaging the LED or the Arduino pin. Connect the longer leg (anode) of the LED to the resistor, and the other end of the resistor to a digital pin (e.g., D13). Connect the shorter leg (cathode) of the LED to a GND pin.

For sensors or modules operating at 3.3V, you will need a logic level shifter to prevent damage to the 3.3V device. Some I2C sensors, for instance, might be 3.3V compatible. To connect an I2C sensor to the Uno, you would typically connect its VCC to the Uno's 5V pin (if the sensor supports 5V logic or has its own regulator), its GND to a GND pin, its SDA line to the Uno's A4 (SDA) pin, and its SCL line to the Uno's A5 (SCL) pin. Always check the sensor's datasheet for its operating voltage and logic levels.

Programming & getting started

The primary toolchain for the Arduino Uno is the Arduino IDE, available for Windows, macOS, and Linux. This integrated development environment allows you to write code in a simplified C/C++ language, compile it, and upload it to the board via USB. The IDE includes numerous example sketches and libraries that simplify common tasks like reading sensors or controlling actuators. To get started, download the Arduino IDE, select 'Arduino Uno' from the Tools > Board menu, and choose the correct COM port under Tools > Port.

To upload your first program, connect the Arduino Uno to your computer using a USB cable. Open the Arduino IDE, paste the following simple 'Blink' sketch into the editor, and click the Upload button (the right-arrow icon). The built-in LED on pin 13 will start blinking. This process demonstrates the basic workflow: write code, compile, and upload. For more advanced development, platforms like PlatformIO or using MicroPython/CircuitPython (though less common for the ATmega328P Uno compared to ESP32 or SAMD boards) are also options.

Project ideas

Simple LED ControlTurn an LED on and off using a digital pin. This project teaches basic digital output and the use of the `digitalWrite()` function, fundamental for controlling any digital device.
Traffic Light ControllerSimulate a traffic light sequence using three LEDs (red, yellow, green) and digital output pins. This project introduces timing concepts using `delay()` and sequential logic.
Temperature and Humidity MonitorRead data from a DHT11 or DHT22 sensor using analog or digital pins and display it on the Serial Monitor. This project teaches analog input reading and serial communication for debugging and data logging.
Ultrasonic Distance SensorMeasure distances using an HC-SR04 ultrasonic sensor connected to digital pins. This project involves pulse timing and calculations, introducing basic sonar principles.
I2C LCD DisplayInterface with a 16x2 I2C LCD display to show sensor readings or messages. This project utilizes the I2C communication protocol (pins A4/SDA and A5/SCL) and external libraries.
Simple Robot Car ControlControl two DC motors via a motor driver shield or module using PWM pins for speed control and digital pins for direction. This project introduces motor control and basic robotics concepts.

Buying tips & gotchas

When purchasing an Arduino Uno, be aware of official boards versus clones. Official boards are manufactured by Arduino AG, while clones are produced by third parties, often at a lower cost. Clones typically use the same ATmega328P chip and are compatible with the Arduino IDE, but may have slight variations in component quality or USB-to-serial chip (e.g., CH340 instead of ATmega16U2). Common pitfalls include miswiring, exceeding voltage limits, or forgetting current-limiting resistors for LEDs. Accessories like a set of jumper wires, a breadboard, and a variety of sensors and actuators are highly recommended for experimentation.