When we talk about Arduino boards, the choice of the boards available can be overwhelming, the naming of the boards are often not really helpful and sometime quite confusing. I like to take a different approach to see what are the things in common for some of the most popular boards so that you will have better idea on which Arduino board you are going to buy.
What is Arduino?
There are three elements to the Arduino: the boards and the software which includes the Arduino IDE and the Arduino Core. Arduino is an open source hardware platform. The term Arduino is often used to refer to the physical Arduino baord. Only boards from Arduino.cc can officially be called an “Arduino.” and used the trademarked logo. On the software side, the core is a C++ library called the “Arduino core,” which is unique for each processor type. Arduino IDE is a cross-platform Integrated Development Environment that run on the desktop computer for user to write and upload programs to Arduino boards, and with the help of 3rd-party cores, to other vendor non-Arduino boards as well.
Many articles or books that you found about Arduino discusses different Arduino boards based on its model (such as Uno, Nano, Leonardo, etc.), and went on to compare the differences among the boards. This approach can be overwhelming and often confusing by the time you finished reading. One of the reasons being that Arduino.cc does not do a very good job in naming its products. So I want to take a diffrent approach with the following chart which looks like a family tree. I think most of people can easily understand the concept of father, grandfather, cousin and sisters….
Arduino boards based on AVR 8-bit MCUs
With very few exception, All the official Arduino boards (excluding those boards capable of running its own Arduino Core, such as STM32, ESP8266/32, etc.) use the micro controllers (MCUs) from Microchip. Until recent years, many of the boards are based on Microchip’s AVR micro controller architecture. There are many MCUs within the AVR MCU family, with different memory sizes, number of GPIOs, etc., but they are all 8-bit MCUs.
Although the AVR MCUs that Arduino are used are capable of running at 20MHz, but all the Arduino boards (with exception of Pro Mini) with AVR MCUs are running at 16MHz.
AVR MCU family consists of many MCUs with different memory size, number of ports and functionalities. But so far we see only 3 AVR MCUs are used in Arduino Boards, they are ATmega328P, ATmega32U4, and ATmega2560.
To fully understand the differences between boards, let’s start with a question of what Arduino Uno, Nano and Pro Mini have in common? As you can see from the family tree chart that I created, they all use the same MCU – ATmega328P, and because of that, they all share many common characteristics, such as memory size, number of GPIO available, number of I2C, UART, etc.. Obviously they all have very differnt form factor, and they may use different USB interface, but they are more similar than different, they are like brothers and sisters coming from the same family. Giving that Arduino Uno was the first available Arduino board, it make sense why Arduino Uno, Nano and Pro Mini remain the most popular boards in the market so far, as they are all based on ATmega328P. Although Arduino.cc listed Pro Mini as a retired product, it is still distributed by its designer/manufacturer SparkFun and the compatible Pro Mini from China manufacturers are widely available.
Now if you look at Arduino Leonardo, it uses a different MCU ATmega32U4 from Arduino Nano’s ATmega328P, technically speaking, ATmega32U4 has slightly more memory (0.5KB more than ATmega328P), it has a built-in USB interface on the chip so that it doesn’t need an external chip and components for USB interface, and arguably supposed to be cheaper than ATmega328P as an Arduino, it has two serial ports, more PWM-capable ports than ATmega328P. ATmega32U4 also has dedicated I2C pins than shared pins with Analog pins in the case of ATmega328P. In many respects, it is also a better design than the Uno. It like an over-spec Arduino. However, for many reasons, it never as popular as Arduino Uno. Arduino Leonardo has a sister(or brother) – Arduino Micro which is also based on ATmega32U4.
Another AVR MCU used in Arduino boards is ATmega2560, which is used in Arduino Mega 2560 and Arduino Mega ADK. ATmega2560 does not run faster than any other AVR chips, but it does have far more of every type of memory (256KB flash, 8KB SRAM, and 4KB EEPROM) and many more ports than other AVR MCUs used in Arduino boards.
Arduino boards based on ARM 32-bit MCUs
After a year long of negotiation, Arduino.cc announced its partnership with Arm holdings in 5 October, 2017 to develop Arduino boards based on ARM MCUs. Since then, Arduino.cc has released a series of Arduino boards based on Microchip’s ARM MCUs.
Interestingly the first Arduino board based on ARM chip was announced 5 years earlier in 2012 than the partnership announcement, that is the Arduino Due. Arduino Due is based on Microchip’s ARM Cortex-M3 MCPU ATSAM3X8E. Arduino Due is so far the most powerful and feature rich boards among all, with 512KB Flash memory, 96KB SRAM running at 84MHz and offers 54 GPIO ports and many other programmable interfaces (for UART, SPI and I2C, etc.). Naturally, it is also the most expensive Arduino board so far. Arduino Due is the 32-bit version of Arduino Mega 2560 with the same form factor and same number of header pins, but with more memory and faster MCU.
One thing worth to mentioned is that the I/O ports of ARM MCUs are highly programmble as General Purpose I/O (GPIO) or as special purpose I/O or bus like SPI, I2C, UARTs, etc., when we talk about ARM MCUs used in the Arduino boards, we therefore need to understand of what’s available and can be offered by the chip, and what’s actually available on the Arduino board. Due to Arduino.cc’s consious decision to remain the look-and-feel and number of ports available on each of its ARM-based Arduion boards to be similar to its AVR cousins, or due to the physical limitation of the board, the number of ports exposed for the user to interact with on an ARM-based Arduino board are often limited by each of the board, and it does not utilised the full potential of the on-board ARM chip offers. Take Arduino Due as an example, the AT91SAM3X8E chip that the Due is based on however offers a maximum of 103 ports, but only 54 is exposed and available through the Due headers.
Almost all the Arduino 32-bit boards since the partnership announcement are based on Microchip’s ATSAMD21G18 – an ARM Cortex-M0 MCU, with a couple of exceptions on the older Arduino Due and Arduino Nano 33 BLE and BLE Sense (we are going to talk about it in more details later). Again, like mentioned before, ATSAMD21G18 offers 6 highly configurable serial communication modules (SERCOM) configurable as UART/USART, SPI or I2C, and maximum of 38 I/O ports. It is up to Arduino.cc to decide how to configure the number of UART, SPI and I2C available on each of its ARM-based boards.
Among all the ATSAMD21G18-based Arduino boards, Arduino Zero looks like a drop-in replacement of its 8-bit cousin Arduino Uno with the similar form factor and number of header pins. All the ATSAMD21G18-based boards share the same CPU clock speed of 48 MHz, memory size of 256KB flash, 32KB SRAM. Arduino Zero offers 2-UART versus 1 in the Uno, it has 20 GPIO Pins and among all those pins, all are PWM-capable except pin 2 and 7. It remains as the Uno with 6 ADC channels, but with 12-bit resolution instead of 10-bit in the Uno, it also has 1 10-bit DAC. If you are used to Arduino Uno’s form factor, Adruino Zero will probably your choice for the 32-bit Arduino board. Arduino Zero however is expensive and almost double the price of Arduino Uno. As at the time of this writing, Arduino Zero costs US$42.00 versus Arduino Uno of $22.00.
Arduino MKR is not a single product, but a series of products. Each of the MKR series come with different on-board module to support different technology or functionality. Another unique feture about MKR series is that they are all have built-in connector for interfacing with Li-Ion/Li-Po battery and can be powered with a single-cell 3.7V Li-Po battery.
|Model||On-board Technology and Module|
|MKR Zero||SD Card|
|MKR1000 Wifi||WiFi with WINC1500 module|
|MKR WiFi 1010||WiFi with u-blox NINA-W102|
|MKR FOX 1200||Sigfox (EU only)|
|MKR WAN 1300||LoRa with 2xAA/AAA battery connector|
|MKR WAN 1310||LoRa with Li-Ion/Li-Po connector|
|MKR GSM 1400||3G GSM|
|MKR NB 1500||NB-IoT|
|MKR Vidor 4000||FPGA with PCIe interface|
Arduino Nano 33 IoT is another ATSAMD21G18-based board, but with Arduino Nano form factor. The Nano 33 IoT offers a lot of more features and functionalities than Nano. It has built-in 2.4GHz Wifi and Bluetooth module, a crypto chip and a IMU(accelerometer/gyroscope ) chip. All in a small Nano form factor and at a price that even slightly lower than the Arduino Uno.
Under the Arduino Nano 33 branding, other than the Nano 33 IoT, there are two odd sisters that I does not shown on the Arduino family chart, Nano 33 BLE and Nano 33 BLE Sense. The reason I call those boards odd is because they are not based on SAMD21G18 chip, but based on Nordic Semiconductor’s nRF52840 chip, so although they are all under the Arduino Nano 33 series, but they are more like adopted kids, if you follow the family tree analogy. nRF52840 is an ARM Cortex-M4 chip and support latest Bluetooth 5.0, it is a much more powerful chip than SAMD21G18, running at clock speed of 64MHz, it also offers more memory with 1MB flash and 256KB SRAM.
It is uncertain whether Arduino.cc will continue to develop boards based on Nordic’s chips or this is just a one time partnership.
|Model||Nano 33 IoT||Nano 33 BLE||Nano 33 BLE Sense|
|MCU||ATSAMD21G18 (Cortex-M0)||nRF52840 (Cortex-M4)|
|Interfaces||14 x GPIO (11 PWM)
8 x ADC (8/10/12-bit)
1 x 10-bit DAC
1 x UART
1 x SPI
1 x I2C
|14 x GPIO (14 PWM)
8 x 12-bit ADC
1 x UART
1 x SPI
1 x I2C
|Sensors||6 axis IMU||9 axis IMU||9 axis IMU
Ambient Light and RGB
Arduino Compatible Boards
All Arduino boards are Open Source Hardware with both PCB design and schematic published. Over the years, thare are many compatible boards come up to the market with either copy the design or modified based on the original design. These boards can’t used the Arduino logo and often come from China, these products are not counterfeit products, they are Arduino-compatible. One obvious different between those boards against official Arduino boards is that they often use different chip and components for USB interface circuit or use different packaging of the same MCU, for the goal of reducing component counts and cost.
Take this Uno R3 compatible board as an example, it use an SMD ATmega328P instead of the DIP ATmega328P. Another difference is that in the official Arduino Uno R3, an ATmega16U2 MCU is used to provide the interface between USB and serial, the compatible board uses a CH340 chip to achieve the same function with less components. This is also often the case in Nano compatible board where the FDTI chip is replaced with CH340 chip.
When using those compatible boards, it may need to install the ch340 USB driver on your computer. The driver can be downloaded from ch340 manufacturer WCH web site.
For ARM-based compatible boards, if you search SAMD21 board on Amazon, you will find two main products, SAMD21 M0 is a board that has the same form factor as Arduino Zero and is compatible with Arduino Zero. The M0 is referred to Arduino M0 which is quite similar to Arduino Zero but no longer listed on the Arduino.cc official store. Arduino Zero is a little bit over-engineering, this gives SANDM21 a lot of room to reduce the component counts and simplified the design, yet maintain the compatibility with Arduino Zero with much lower price.
Another SAMD21 board is called SAMD21 Mini, which has the same functionality as Arduino Zero/M0, but in a small breadboard-friendly form factor like Nano. SAND21 Mini is not an Arduino MKR Zero or Arduino Nano 33 IoT drop-in replacement, SAMD21 Mini does not have the built-in IMU, crypto chip and Wifi/BLE as in the Nano 33 IoT, nor the Li-Po battery connector and IMU that you see on the Arduino MKR Zero. It is really a mini version of SAMD21 (or Arduino Zero).
5V MCUs versus 3.3v MCUs
Although AVR microcontrollers are capable of operating between 2.7v to 5.5v, but all the Arduino boards based on AVR MCUs are designed to operate at 5V supply, with the except of Arduino Pro Mini, which have two versions available, one operated at 16MHz for operating at 5v and another operates at 8MHz with operating voltage of 3.3v. When we say Arduino boards are 5v MCU development boards, we are not just saying it require 5v power supply, it means that all the I/O ports could output 5v, this means that when you interface with some sensors or another board (e.g. using an ESP8266 as WiFi interface) that is operated at 3.3v, you will need some sort of level shifters between the Arduino board and those sensors/ports that are connected to the Arduino. This is the most common mistakes made on many of the online tutorials that connects Arduino board directly with 3.3v devices without any level shifter. Your 3.3v sensors/boards may not be damaged immediately, but it will certain damaging those 3.3v devices in long run.
When you connecting Arduino board with 3.3v-capable sensors or board (e.g. ESP8266), use level shifter between Arduino and those sensors/boards to avoid potential damage on 3.3v sensors/boards.
GPIO Current Limit between different MCU families
This is another area that many noobs and those without hardware background often neglected. The AVR MCUs’ GPIO are not only capable of provide an output voltage at 5v, they are also capable to handle a current drain of 40mA. While the Microchip’s SAMD series are 3.3v MCUs, their GPIO current drain limit is very limited at 7mA. This is quite limited even when compare with other ARM chips. For example, the Nordic chip nRF52840 used in Arduino Nano 33 BLE and BLE Sense is also ARM chip operated at 3.3v, it is however capable of handling a current drain of 15mA.
While AVR-based Arduino boards can provides a GPIO current drain of 40mA, the Arduino Boards based on Microchip ARM MCUs only can provide a current drain of 7mA on its GPIO pins. The Nordic nRF52840-based Arduino Nano 33 BLE/BLE Sense is capable of handling current drain up to 15mA.
In the case of SAMD21G18-based Arduino Boards, with the current drain of 7mA on its GPIOs, it sufficient for driving an LED indicator, but it is definite not sufficient if you are intend to drive a motor or even a relay. You will need to have a driver circuit/shield.