• Sun. Dec 1st, 2024

DIY Game Controllers

Homemade hardware to take your gaming experience to the next level!

Arduino Uno R3 - Arduino Uno
The Arduino Uno R3.
The Arduino Uno R3.

Introduction

This is part of our multipart rundown of microcontrollers for hobbyists and tinkerers. See here for our microcontroller board comparison table of all of the microcontroller boards covered thus far.

The Arduino Uno is an open-source microcontroller board based on the Microchip ATmega328P microcontroller and developed by Arduino. It was initially released in 2010.

Features

The board is equipped with sets of digital and analog input/output (I/O) pins. The board has 14 digital I/O pins (six capable of PWM output), 6 analog I/O pins, and is programmable with the Arduino IDE (Integrated Development Environment), via a type B USB cable.

It can be powered by a USB cable or a barrel connector that accepts voltages between 7 and 20 volts. The hardware reference design is distributed under a Creative Commons Attribution Share-Alike 2.5 license and is available on the Arduino website. Layout and production files for some versions of the hardware are also available. The ATmega328 chip on the board comes preprogrammed with a bootloader that allows uploading new code to it without the use of an external hardware programmer.

Programming

The Uno communicates using the STK500 protocol, however it does not use a FTDI USB-to-UART serial chip as previous models did. Instead, it uses the Atmega16U2 (Atmega8U2 up to version R2) programmed as a USB-to-serial converter.

Headers

Pinout of the Arduino Uno R3.
Pinout of the Arduino Uno R3

General pin functions

  • LED: There is a built-in LED driven by digital pin 13. When the pin is high value, the LED is on, when the pin is low, it is off.
  • VIN: The input voltage to the Arduino Uno when it is using an external power source (as opposed to 5 volts from the USB connection or other regulated power source). You can supply voltage through this pin, or, if supplying voltage via the power jack, access it through this pin.
  • 5V: This pin outputs a regulated 5V from the regulator on the board. The board can be supplied with power either from the DC power jack (7 – 20V), the USB connector (5V), or the VIN pin of the board (7-20V). Supplying voltage via the 5V or 3.3V pins bypasses the regulator, and can damage the board.
  • 3V3: A 3.3V supply generated by the on-board regulator. Maximum current draw is 50 mA.
  • GND: Ground pins.
  • IOREF: This pin on the Arduino Uno provides the voltage reference with which the microcontroller operates. A properly configured shield can read the IOREF pin voltage and select the appropriate power source or enable voltage translators on the outputs to work with the 5V or 3.3V.
  • Reset: Typically used to add a reset button to shields that block the one on the board.

Special pin functions

Each of the 14 digital pins and 6 analog pins on the Uno can be used as an input or output, under software control using pinMode(), digitalWrite(), and digitalRead() functions.

They operate at 5V. Each pin can provide or receive 20mA of current and has an internal pull-up resistor (disconnected by default) of 20-50K ohm. The maximum current of 40mA must not be exceeded on any I/O pin to avoid permanent damage to the microcontroller. The Uno has 6 analog inputs, labeled A0 through A5; each provides 10 bits of resolution (i.e. 1024 different values). By default, they measure from ground to 5 volts, though it is possible to change the upper end of the range using the AREF pin and the analogReference() function.

Special Functions

  • Serial / UART: pins 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to the corresponding pins of the ATmega8U2 USB-to-TTL serial chip.
  • External interrupts: pins 2 and 3. These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value.
  • PWM (pulse-width modulation): pins 3, 5, 6, 9, 10, and 11. Can provide 8-bit PWM output with the analogWrite() function.
  • SPI (Serial Peripheral Interface): pins 10 (SS), 11 (MOSI), 12 (MISO), and 13 (SCK). These pins support SPI communication using the SPI library.
  • TWI (two-wire interface) / I²C: pin SDA (A4) and pin SCL (A5). Support TWI communication using the Wire library.
  • AREF (analog reference): Reference voltage for the analog inputs.

For more information about the Arduino Uno, you can check out the Arduino.cc website or go straight to the datasheet.