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.
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 / SoC | ATmega328P |
| Architecture | 8-bit AVR RISC |
| Clock speed | 16 MHz |
| Flash / Storage | 32 KB (ATmega328P) |
| RAM / SRAM | 2 KB (ATmega328P) |
| EEPROM | 1 KB (ATmega328P) |
| Operating voltage | 5V |
| Digital I/O pins | 14 (of which 6 provide PWM output) |
| Analog / ADC | 6 analog input pins (A0-A5) |
| PWM | 6 pins (3, 5, 6, 9, 10, 11) |
| Connectivity | 1x UART (Serial), 1x SPI, 1x I2C |
| USB | ATmega16U2 (for USB-to-Serial communication) |
| Power input | 7-12V recommended via barrel jack or VIN pin |
| Dimensions | 68.6mm x 53.4mm |
Pinout & pin functions
| Pin | Function |
|---|---|
| GND | Ground |
| GND | Ground |
| 5V | Power output (regulated 5V) |
| 3.3V | Power output (regulated 3.3V) |
| IOREF | Voltage reference for the I/O pins |
| RESET | Resets the microcontroller |
| D0 (RX) | Serial Receive pin |
| D1 (TX) | Serial Transmit pin |
| D2 | General purpose digital I/O |
| D3 | General purpose digital I/O, PWM output |
| D4 | General purpose digital I/O |
| D5 | General purpose digital I/O, PWM output |
| D6 | General purpose digital I/O, PWM output |
| D7 | General purpose digital I/O |
| D8 | General purpose digital I/O |
| D9 | General purpose digital I/O, PWM output |
| D10 | General purpose digital I/O, PWM output, SPI SS |
| D11 | General purpose digital I/O, PWM output, SPI MOSI |
| D12 | General purpose digital I/O, SPI MISO |
| D13 | General purpose digital I/O, SPI SCK, built-in LED |
| A0 | Analog Input pin, Digital I/O |
| A1 | Analog Input pin, Digital I/O |
| A2 | Analog Input pin, Digital I/O |
| A3 | Analog Input pin, Digital I/O |
| A4 | Analog Input pin, Digital I/O, I2C SDA |
| A5 | Analog Input pin, Digital I/O, I2C SCL |
| AREF | Analog Reference voltage |
| VIN | Power 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.