Materials Required

The materials needed for projects in this blog are simple:

  1. Arduino Uno:IMG_20160501_212154286_HDR[1]
    Self-explanatory: this is the heart and brain of all projects conducted here.
  2. USB Cable:
    This, specifically, is a USB Type B male-to-male cable used to connect the Arduino to the computer.
  3. Breadboard:
    This is a circuit prototyping board. These can be purchased very cheaply at Radio Shack or various online stores. These are used to connect components to voltage sources and input/output lines on the Arduino.
  4. Jumper wires:
    These wires have pins on either end that make it easy to connect and disconnect devices, and the pin size is standard for both the breadboards and the Arduino I/O sockets.
  5. LEDs:
    These will blink and fade depending on how the Arduino is programmed, and provide a visual indicator of the program logic.
  6. Resistors:
    These are used in series with the LEDs to control the amount of current provided to the LED. The values will be explained in each post.

Cool, but what IS an Arduino?

That is a very good question, and ultimately depends on what the meaning of the word “is” is.

Arduino refers to a family of products, all based around the same concept: a microcontroller, on a small form factor circuit board, augmented with additional circuitry to make the platform simple to use and learn. The product used in projects on this blog is the Arduino Uno, so named because it was the first product they officially released. (Note: I bought my Uno in 2013, and the design has undergone a few incremental changes since then. However, the differences between the Uno used on this blog and one purchased brand-new today are only visual; all programs, wiring diagrams, breadboard layouts, etc. will be identical.)


Top view of Arduino Uno. Image source:

The Uno is based on the Atmel ATmega328P microprocessor. An in-depth technical description of this processor is beyond the scope of this website, but the Arduino platform takes this microprocessor and builds around it a platform that includes a USB port, a USB controller, a bootloader and multiple jumper sockets connected to the various input/output devices on the processor. This platform allows the Arduino to be used by starters to build circuits without needing any knowledge of fabrication techniques; you don’t need to solder together connections, which is precise and frustrating; etch your own PCBs, which requires harsh chemicals and can ruin components if not done properly; or flash program any devices, which requires expensive hardware and extensive knowledge of programming in Assembly. Devices can be connected by sticking jumper wires into a breadboard, and programs can be written in C and transferred via USB cable.

[[homebrew image of arduino]]

In addition to the simplicity and ease of use with which the Arduino has been designed, there is a massive community of homebrewers, with diverse spectra of backgrounds and experiences.

What the heck is an “Arduino”?

Before I can explain Arduino, I need to explain microcontrollers:

A microcontroller is a miniaturized computer on a single chip, which may contain any number of inputs and outputs. They are usually much more minimal and constrained in what they are capable of, compared to what people usually think when you say “computer”, but they are physically quite small and use very little electricity. They are called “microcontrollers” because they are often used as controllers: when a minimal, autonomous solution to control a machine or process is required. To put these size differences in context: your PC could have a 2.5GHz quad core processor, 8GB of RAM, 500GB or more of storage available, and can handle an arbitrarily large number of inputs (it can communicate with many devices simultaneously, some at very fast speeds). A microcontroller, like the one you’d find in a microwave or vending machine, might have a 25MHz clock (1/100 the speed of your pc), ~128Kb or less of memory, and could only handle 15-30 simple binary inputs. However, your PC is 2 feet tall, 6 inches wide and a foot deep, and requires 300-500 watts to power; a microcontroller, on the other hand, might be just a few square millimeters in size and some can operate on milliwatts of power or less.

For example, your refrigerator has a microcontroller inside that controls the heat pump and fans. It would have a temperature sensor and the temperature control knob as inputs, and the outputs are connected to relays that activate the heat pump. The microcontroller would be programmed to repeat the same loop over and over: read the internal temperature of the fridge from the temperature sensor and compare that value to the desired temperature (as determined by the control knob); then, if the actual temperature is higher than the desired temperature, it will activate the heat pump to start lowering the temperature within the box. It will leave the heat pump on until it measures the internal temperature to be equal to or lower than the desired temperature, whereupon it will open the heat pump relay, turning it off. The microcontroller will loop this same program indefinitely, until the fridge is unplugged.

So what’s the point? Well, compared to your laptop, iPad, or desktop computer, the microcontroller is very small, but completely sufficient for running simple math operations and controlling simple outputs. Microcontrollers are everywhere and in everything: automated toilets, printers, toll booths, all sorts of kitchen appliances, televisions, etc. Microcontroller programs are often simpler and smaller than programs for full-sized computers, no more complicated than they need to be. However, most microcontrollers require advanced hardware and knowledge of manufacturing/fabrication techniques to use. To create a project using raw hardware requires circuit fabrication materials and knowledge of techniques, oscilloscopes and logic analyzers for debugging, and special hardware to load the programming onto the chip; such a setup can cost upwards of tens of thousands of dollars. In addition, programs are often written in Assembly language, which is unique to each microprocessor architecture, and each with its own esoteric (and in some cases, quite archaic) set of commands and syntax rules.