The Arduino is an immensely popular microcontroller that allows designers to quickly prototype projects. It provides many GPIO and peripherals, and it’s easily programmable. In this how-to, we will learn how to choose an Arduino shield.
The Arduino series of microcontrollers usually have many IO connectors and peripherals, but, unfortunately, this may not be enough. Imagine, for example, that an Arduino Uno user wishes to integrate Wi-Fi capabilities into their project. They could purchase a Wi-Fi module (such as the ESP8266), connect it to the specific GPIO pins it requires, and then program the Uno to use the module. However, the designers of the Arduino thought ahead! They specifically designed their boards so that they could stack with other boards that have extra features.
So, now that we know that Arduino shields are awesome, we still don’t know what they look like or how we should go about choosing one. First, you MUST identify your board! The name Arduino covers a whole range of development boards, and, because of the variety, some shields may not be compatible with all Arduinos.
Once you have identified the type of Arduino you have, you then need to check the following:
Just about every electronic device has something called a pinout; this essentially refers to where the input/output pins are positioned, as well as their function. It is imperative that any shield you use has the same pinout as the Arduino you are using. There are many ways you can do this, and the list below shows the different methods you can use (ordered in importance).
While a shield may look compatible due to the pinout, it may still be incompatible due to voltage levels. Some Arduino boards use 3.3V, while others may use 5V. Because of this, your shield could either damage the Arduino or be damaged by it. You can check the voltage levels by looking at the shield’s datasheet, which should include information such as supply voltage, I/O voltage, current draw, and power dissipation. Most shields are designed with the Arduino Uno in mind, which means they are most likely to operate at 5V. ARM-based Arduino (such as the Due) operate at 3.3V.
Just because a shield is both pin compatible and voltage compatible with an Arduino devboard does not mean the libraries for that shield will work. This may occur because many libraries do not use the Arduino library for determining I/O pin numbers and use of hardware. Instead, the libraries directly access the hardware via registers that are unique to AVR or ARM cores. While this results in a performance boost, it also means that a library written for the Uno may not work on the Due (because one is an AVR core, while the other is an ARM core, and they are completely different architectures).
So, now that you understand what technical details to look for when choosing a shield for your project, it’s now time to actually pick one! To find the shield for you, decide why you need a shield and what it needs to do. For example, the Uno does not have any type of internet capability, so something like a Wi-Fi circuit or Ethernet circuit would be highly ideal. There are literally thousands of shields. Here at Digi-Key we are here to help you navigate through that sea of confusion. Here are our Top 10 favorite shields:
For a complete list of Arduino shields available at Digi-Key click here.
Going back to my example, I want an ethernet shield or something that can give me internet capabilities. A simple search on ShieldList.org reveals multiple results, as seen in the image below.
One result that looks promising is the Arduino Ethernet Shield v5.0. Click on the link for more information, including which pins the shield will take control of, details about the main IC (W5100), and other specs that may otherwise not be entirely obvious.
Now that we know what board to look for, we can now search for one from Digi-Key! Going to the Digi-Key website and searching for an “Arduino Ethernet shield” returns a couple of results. While the Arduino V5.0 Ethernet Shield is not listed, a more modern version is (based on the W5500), and a datasheet is also available for the shield (this is very important).
Opening the datasheet link takes us to wiki.seed.cc, which describes the module, lists all pin information on the shield, provides a tutorial with code examples, and also links to downloads, including an SD library and a library specifically for the W5500 IC!
The information provided on the seed website indicates that this module works with the Arduino Uno, and so, it is a suitable option for my internet-enabled Arduino!
The bare number of shields that are available for Arduino devboards is staggering, and all of these many shields can stack on top of each other. While shields are not required for any project (you could feasibly customize a setup with jumper wires or even your own shield), they can be incredibly helpful. They could be the key to getting your project up and running!