You're starting a project and the question comes up, "what Arduino should I use?" An Arduino might be just what you need, but sometimes an Arduino might not be the right choice. In this article I'm going to talk about what I would and wouldn't consider when choosing an Arduino for a new project.
There are a lot of choices when it comes to Arduinos, but there's also a lot of Arduinos that aren't Arduinos! To make matters worse there are also Arduino's from Arduino.cc and Arduino.org (two different companies). Overwhelmed yet? In this article I'm assuming you already know the basics about microcontrollers, but I do describe them in short detail.
Let's get started and break this down a bit...
WHAT IS AN ARDUINO & WHEN IS IT NOT THE RIGHT CHOICE?
First, what is an Arduino? Arduino's are typically built around an AVR microcontroller (basically a single chip computer). This is a product from a company named Atmel and introduced in the late 1990s. Most of the Arduinos you'll encounter have an AVR microcontroller, but some Arduinos have an ARM microcontroller instead (more performance). What an Arduino is really is the hardware built around this microcontroller that let's you more easily access its features, such as input/output, giving it power, etc. I'm not going to go into great detail about the construction and general specifications of an Arduino, because I'm hoping you have already discovered that before reading this article.
The first question you should be asking yourself is if an Arduino is even the right for the your project. If you answer any of the following questions with a "Yes", then an Arduino is probably not the right choice:
Ultimately, you have to decide to take the next step towards something like a Raspberry Pi and there are different versions of that board as well. An Arduino is going to have very limited resources. That means very little space for your code and libraries, very little memory for your program (sketch) to run in, and very little processing performance (slow). If you're used to writing applications for desktop computers then you're probably accustomed to having almost an unlimited amount of resources. Something like a Raspberry Pi or BeagleBone Black is going to be much more like an entire computer with lots of resources to waste. An Arduino might be slow and lack a lot of resources, but for turning motors, flashing lights, and even simple wireless communication it gets the job done and at a far less cost and simplicity than the next step up. There's also an immense amount of setup for something like a Raspberry Pi compared to an Arduino. You need to install & configure an entire operating system before you can actually write programs for it.
Another thing to consider is the programming language used to for these devices. Arduino's will use C/C++ for sketches so you need to already be familiar with that language or you're not going to get very far very fast. If you're very familiar with something like Python or C# (.NET is available with Windows 10 IoT) then you should give the Raspberry Pi a look instead. I would hate for you to decide to use something such as an Raspberry Pi when it could be extreme overkill for your project just because you didn't know C or C++. Pick up a book and get started! You don't need to master it, but you do need to know the core concepts which includes handling memory!
HOW TO CHOOSE THE RIGHT BOARD
The first and often the most important factor to think about is how large the project is going to be. There are large Arduinos, like the Mega, and there are really small Arduinos like the TinyDuino. For projects that need to be small you're probably going to have to do some soldering as they often don't come with headers already in place. Being small might be great because it's easier to embed in a project, because you might not want to have headers soldered on once it's in your final design. Larger Arduinos can often do a lot more because they often have more GPIO, sometimes more processing power, and are very easy to work with. So really what influences your choice is mostly, will it fit, and what do you need to use with your arduino for (is there enough GPIO?).
I'm going to break it down mostly by size, but often processing performance and the number of I/O pins (GPIO) will play a role in your decision. Usually the larger the board the more performance and GPIO, but that's not always the case. If you need lots of GPIO and a lot of processing performance in a small package then the board you choose is probably not going to be an Arduino even though it might be compatible. I'm going to stick with Arduinos and its derivatives here and save the non-Arduino topics for other articles.
X-SMALL OR WEARABLE ARDUINOS
For something really small, there is the TinyDuino . The advantage with a TinyDuino is that it's a really nice choice for small projects that want to do a lot and they're very easy to use. TinyCircuits makes a lot of shields for these that stack together (I especially like the TinyScreen ). The disadvantage to the TinyDuino is that you'll be stuck with mostly TinyShields that utilize a less common FPC socket instead of 0.1" (2.54mm) headers for jumper wires. Note: to program the TinyDuino you will also need a TinyShield USB Core Module, but you can use this for multiple TinyDuinos as this shield often not going to be embedded with your project.
If you're still in the mood for standard headers then the Adafruit Trinket (Mini Microcontroller). It uses an ATtiny and has a pinout you might be more accustomed to, but it's very small (27mm x 15mm). Keep in mind this one comes in two versions (5v and 3.3v), so any shields or other breakouts you plan on using with it need to be compatible.
For wearables, there are more suitable Arduinos, built just for this purpose, like the Adafruit Flora or the Adafruit Gemma (v2). The difference between the Gemma and the Flora is mostly size and performance. The Gemma is smaller and uses an ATtiny instead of an ATMega. It doesn't get much smaller than these. The smallest is roughly 24mm x 24mm (about 1 inch x 1 inch). The disadvantage to these is the lack of standard headers, less GPIO, and in some cases less features and performance.
SMALL EMBEDDABLE ARDUINOS
For something still small, but for semi-permanent embedding there are Arduinos just a bit larger than the ones mentioned above. The Arduino Pro Mini (developed by SparkFun Electronics) is one of my favorites. This small Arduino, uses a decent ATMega microcontroller, has plenty of GPIO, and has pinouts for standard headers. The disadvantage (depending on your use) is that it requires a Serial-To-USB adapter for programming. For this I normally use the SparkFun FTDI Basic Breakout. This makes it more costly, but I have lots of Pro Mini's and I only need one FTDI Breakout to program them all. Keep in mind, that this Arduino comes in 5v and 3.3v versions, so the FTDI Breakout you buy needs to be compatible with that voltage (there are two versions).
An Arduino similar to the Pro Mini is the Adafruit Pro Trinket which has a little more capability and built-in USB for programming. I have not tried the Pro Trinket yet, but when I run out of Pro Minis this will probably be my next choice (considering it's usually the same price).
The Arduino UNO (or derivative) is great if you're just experimenting, don't need anything special, and not concerned with small-scale. The UNO is the reference board for Arduino and it is the first board most newcomers encounter. There are many derivatives of this board (Currently in Revision 3). It's good to have some of these just laying around as it's the first board I pick up to prototype with; though it's probably not going to be the Arduino I embed in the project's final design. There are two types you'll see; one with a surface mounted microcontroller and the more common one with a DIP (through-hole) package microcontroller. The through-hole version will make it easy to embed just the microcontroller itself into your project later on (the chip is removable), if that's your goal.
The Adafruit Metro (click here for the one without headers) is my favorite derivative. I have a few of these instead of Unos because It makes a good dev board for playing with ideas and I haven't needed to embed microcontrollers (since I usually just switch to a different Arduino for my final design). Some of the features that I like about this board is being able to switch it from 5v logic to 3v3 logic, the placement of the LEDs near the front of the board, and being able to purchase one without headers. To be honest the main reason I have these laying around for is the microUSB connector since it's the kind of cable I use for just about everything. I really don't find this board great for embedding because the price is pretty high (around $20 USD), but I have a couple laying around so I might use one in an upcoming project. If you like the metro like I do and want to embed it in a project, maybe the Adafruit Metro Mini woudl be a good idea for your final design. It's at a lower cost, smaller size, and with mostly the same features.
If you need a ton of GPIO the Arduino Mega might be the right choice, but it is expensive! This board (revision 3) uses the ATmega2560 which has double the GPIO (compared to the Uno's ATmega328) and several hardware serial ports. This makes it a very good choice for projects that do not need to be small and need to have a lot of peripherals (breakouts, motors, LEDs, etc.). It also has a lot more SRAM (memory), flash memory (code space), and EEPROM, making it an excellent choice for a large program that could use a lot of libraries.
The Arduino Due is going to top the Mega with processing performance and capabilities built the same form factor. It does this with a 32-bit ARM microcontroller, Atmel SAM3X8E ARM Cortex-M3. It's just a little bit costlier than the Mega, but with a 3.3v logic as a major disadvantage. A majority of the breakouts, shields, and devices you might use with an Arduino are using 5v logic which might require additional steps to ensure compatibility or just totally limit what you can use with this Arduino. The Due also has two DAC (digital to analog converter) pins that could be great for a simple audio project, but I've found them to be extremely fragile. I've taken many precautions to avoid damaging the DAC pins on my Due, but just about everyone seems to blow DAC0 including me. An example for a good project with this board could be robotics. It can make quick calculations and connect to a lot of devices!
There was absolutely no way I could cover every possible Arduino, there are just too many (including clones) to choose from. This should give you a good start with selecting an Arduino and after looking at one of the choices I discussed you might find one that I didn't mention that's more suitable to your needs. It might be wise just to build out your project with something you keep on hand, like the Uno and replace it with something smaller and more suitable for your final design.
Do you use an Arduino that I didn't talk about? Let me know in the comments! Well, we're done here, get to work on that project!