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.
The Arduino hardware is based on Atmel's AVR microcontrollers, in particular the ATmega8, the ATmega168, the ATmega328, and the ATmega1280. 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:
Arduino on a breadboard: construct your own USB Arduino using individual components on a breadboard (from the ITP physical computing tutorials). See also the serial version.
DIY breadboard shield: make your own breadboard shield to snap onto an Arduino board.
DIY Arduino shields: instructions for designing and etching your own Arduino shield.
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.