Hacking Arduino: Extending and Developing it

Arduino is designed to be easily extensible, being based on standard and powerful components. This section of the site includes information on how Arduino works and ways you can extend it.


  • Writing an Example: writing clear Arduino examples that can be read by beginners and advanced users alike.

  • Writing a Library: creating libraries to extend the functionality of Arduino. Goes step-by-step through the process of making a library from a sketch.

  • Preferences: the Arduino preferences file contains many options for customizing the way Arduino compiles and upload sketches.

  • Build Process: find out what steps your sketch goes through on its way to the Arduino board.

  • Bootloader: the bootloader is a small piece of software that allows uploading of sketches onto the Arduino board. It comes preprogrammed on the microcontrollers on Arduino boards. Additional instructions on bootloading the Mini are available.

  • Programmer: how to use the Arduino software with a hardware programmer (eliminating the need for the bootloader and saving program space on the chip).

  • Upgrading 8U2 Firmware upgrading the firmware of the Atmega8U2 chip on an Uno or Mega2560. This chip acts as the usb-to-serial converter and can be updated via USB.

  • Upgrading the WiFi Shield firmware: The ATmega32UC3A1256 take care of implement the TCP/IP stack and talk with the HDG104 WiFi module. Upgrading the firmware could improve or change the behavior of the shield.

  • Upgrading the 16U2 firmware on the Due: The Atmega16U2 on the Arduino Due acts as USB-to-Serial converter on the Programming port. When a new release comes out, you will need to upgrade it.

  • Source: online browsing of the Arduino source code (on an external website)

  • Bugs: the current list of Arduino software bugs and planned enhancements (on an external website).


  • Information about the ATMEGA 328P
  • Pin Mapping (ATmega8, ATmega168): a diagram showing the correspondence between the pins on an Arduino board and those of the ATmega8 or ATmega168 microcontroller.
  • SERCOM - Adding more Serial Interfaces to SAMD microcontrollers: a tutorial to create other hardware serial ports with I2C, SPI or UART protocols on SAMD based boards.
  • NG Auto Reset: how to modify your Arduino NG so you can upload sketches without having to physically press the reset button on the board.

  • Parallel Programmer: instructions for making a cheap piece of hardware that lets you burn the bootloader to an Arduino board or upload sketches to a board with no bootloader (only works on computers with a parallel port).

  • Breadboard Circuit: instructions for replicating the circuit of an Arduino board on a breadboard.

The Arduino hardware is based on Atmel's AVR microcontrollers, in particular the ATmega8, the ATmega168, the ATmega328, the ATmega1280 the SAMD21. Arduino sketches are C/C++ based and compiled with the open-source compiler avr-gcc and linked against the open-source AVR Libc. The Arduino language comes from Wiring. The Arduino environment is based on Processing and includes modifications made by Wiring.

Other tutorials for extending Arduino include:

Other resources:

  • AVR fuse calculator: useful for figuring out which fuse settings to use for custom circuits.

  • Minty Boost process: no microcontroller, but a great explanation on how to put together a kit, from idea to product.

Last revision 2016/08/10 by AR