Arduino Uno R3 Hardware Platform
Core Specifications
- •MCU: ATmega328P
- •Operating Voltage: 5V
- •Input Voltage: 7-12V (recommended), 6-20V (limits)
- •Clock Speed: 16 MHz
- •Flash Memory: 32 KB (0.5 KB used by bootloader)
- •SRAM: 2 KB
- •EEPROM: 1 KB
GPIO Pin Capabilities
Digital I/O Pins
Available: D0-D13 (14 pins)
- •Can be INPUT, OUTPUT, or INPUT_PULLUP
- •Each pin can source/sink up to 40 mA (20 mA recommended)
- •Total current across all pins: 200 mA max
PWM-Capable Pins (marked with ~)
PWM Pins: 3, 5, 6, 9, 10, 11
- •8-bit PWM (0-255 via
analogWrite()) - •Pins 5, 6: ~980 Hz frequency
- •Pins 3, 9, 10, 11: ~490 Hz frequency
- •⚠️ Pins 5 and 6 share a timer with
millis()anddelay()
Analog Input Pins
Analog Pins: A0-A5 (6 pins)
- •10-bit resolution (0-1023)
- •0-5V input range
- •Can also be used as digital I/O (pins 14-19)
- •Reference voltage: AREF pin (default 5V)
Interrupt-Capable Pins
External Interrupts: Pin 2 (INT0), Pin 3 (INT1)
- •Triggered on: RISING, FALLING, CHANGE, LOW
- •Use
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) - •Pin Change Interrupts available on all pins (more complex)
Communication Interfaces
UART (Serial)
Pins: RX=D0, TX=D1
- •Connected to USB-to-Serial chip
- •Baud rates: 300 to 115200 (higher rates unreliable)
- •Standard: 9600 baud
- •⚠️ D0 and D1 should not be used while Serial communication is active
I2C (Wire)
Pins: SDA=A4, SCL=A5
- •Master or slave mode
- •Standard (100 kHz) and Fast (400 kHz) modes
- •Internal pull-up resistors available
- •External 4.7kΩ pull-ups recommended for reliable operation
SPI
Pins:
- •MOSI=D11
- •MISO=D12
- •SCK=D13
- •SS=D10 (user-defined, typically D10)
Special Pin Functions
Pin 13 (Built-in LED)
- •Has built-in LED and 1kΩ series resistor
- •LED is on when pin is HIGH
- •May interfere with SPI (shares SCK)
- •Good for basic testing without external components
Pin 0 (RX)
- •Serial receive
- •Avoid using during Serial communication
- •Can cause upload failures if externally loaded
Pin 1 (TX)
- •Serial transmit
- •Avoid using during Serial communication
- •Can cause upload failures if externally loaded
AREF Pin
- •Analog reference voltage for ADC
- •Default: connected to 5V internally
- •Can use external reference (1.1V internal, 5V, or external via AREF pin)
- •⚠️ Never connect voltage to AREF if using internal reference
IOREF Pin
- •Provides reference voltage (5V on Uno)
- •Used by shields to detect board voltage level
Pin Selection Best Practices
For Digital Output (LED, Relay, etc.)
Best choices: 2, 4, 7, 8, 12, 13 Avoid: 0, 1 (Serial), 10-13 if using SPI
For Digital Input (Button, Sensor)
Best choices: 2, 3, 4, 7, 8 Recommended for interrupts: 2, 3
For PWM (Servo, Motor, LED dimming)
Available: 3, 5, 6, 9, 10, 11 Best for servo: 9, 10 (490 Hz is better for servos) Best for LED dimming: 5, 6 (980 Hz reduces flicker)
For Analog Input (Sensors)
Available: A0-A5 Can also use as digital: Refer to as pins 14-19 in code
For I2C
Fixed pins: SDA=A4, SCL=A5 Cannot be remapped on Uno
For SPI
Fixed pins: MOSI=11, MISO=12, SCK=13 SS (Slave Select): User-defined, typically D10
Timing Considerations
millis() and delay()
- •Resolution: 1 millisecond
- •Based on Timer0
- •⚠️ Affected by PWM on pins 5 and 6
micros() and delayMicroseconds()
- •Resolution: 4 microseconds
- •Also uses Timer0
Timer Usage
- •Timer0: millis(), delay(), PWM on pins 5 and 6
- •Timer1: Servo library, PWM on pins 9 and 10
- •Timer2: tone(), PWM on pins 3 and 11
Servo Library
- •Uses Timer1
- •Disables PWM on pins 9 and 10
- •Can control up to 12 servos (Uno has only 2 timers available)
Power Specifications
Per-Pin Current
- •Maximum: 40 mA per pin
- •Recommended: 20 mA per pin
- •Total: 200 mA across all I/O pins
Current-Limiting Resistors
For LEDs:
- •Red LED: 220Ω to 1kΩ
- •Blue/White LED: 100Ω to 220Ω
- •Always use resistors to prevent pin damage
Power Supply
- •USB: 5V, up to 500 mA
- •DC Jack: 7-12V (9V recommended), regulated to 5V
- •5V Pin: Can supply 5V if powered via DC jack
- •3.3V Pin: 50 mA maximum (from onboard regulator)
Pin Conflict Checker
Before assigning a pin, verify:
- •✅ Pin supports required function (PWM/Analog/Digital)
- •✅ Not pins 0 or 1 if using Serial
- •✅ Not pins 10-13 if using SPI (except for SPI itself)
- •✅ Not A4 or A5 if using I2C (except for I2C itself)
- •✅ Not already used by another peripheral
- •✅ If using Servo library, PWM on pins 9 and 10 will be disabled
Common Pin Assignments
Safe General Purpose Pins
These are the safest pins for most projects:
- •D2, D3: Good for interrupts (buttons, encoders)
- •D4, D7, D8: Good for general digital I/O
- •D5, D6: Best for high-frequency PWM (LED dimming)
- •D9, D10: Best for servo control
Pins to Avoid or Use Carefully
- •D0, D1: Used by Serial (USB), avoid for general I/O
- •D13: Has built-in LED and resistor, may affect sensitive circuits
- •A4, A5: Used for I2C, can be repurposed but not recommended
Hardware Constraints
Memory Limitations
- •
Flash: 32 KB total, ~30.5 KB available
- •Use
F()macro for string literals to save RAM - •Use PROGMEM for large constant arrays
- •Use
- •
SRAM: Only 2 KB
- •Avoid large arrays or strings
- •Use
Stringclass carefully (causes fragmentation) - •Static allocation preferred over dynamic
- •
EEPROM: 1 KB
- •100,000 write cycles per location
- •Use for configuration storage, not frequent logging
Timing Limitations
- •No floating-point unit (FPU) - float math is slow
- •Integer math preferred
- •16 MHz clock limits processing speed
Upload Process
Reset Pin
- •Automatically resets via DTR signal from USB
- •Can be manually reset via button
- •Reset required before upload
Bootloader
- •Occupies 0.5 KB of flash
- •Allows USB upload without external programmer
- •Timeout: ~1 second after reset