The open source Arduino concept has proved to be tremendously successful among hobbyists and makers. It has also been embraced by professional designers for early development and prototyping, and more recently for full-on designs. With the emergence of applications such as wearables and health monitoring, both types of users require higher performance and more functionality in ever smaller board form factors.
This article briefly discusses how Arduino boards have evolved to meet the needs of makers and professionals for high performance and functionality in low-power, space-constrained applications. It then introduces and shows how to get started with a recent addition to the Arduino family, the Seeeduino XIAO from Seeed Technology Co.
How Arduino evolved to meet demands of wearable designs
Many hobbyists and designers are interested in developing physically small products for deployment in space-constrained environments, including wearables. These are typically smart electronic systems that are often based on a microcontroller in conjunction with sensing and/or display devices. In some cases, they serve as high-tech jewelry. In other cases, they are worn close to and/or on the surface of the skin, where they may detect, analyze, and transmit body data such as temperature, heart rate, and pulse oxygenation, as well as environmental data. In some cases, they provide immediate biofeedback to the wearer.
For such designs, many hobbyists and makers use Arduino microcomputer development boards. So, too, do an increasing number of professional engineers who may use these development boards as evaluation and prototyping platforms to accelerate and lower the cost of evaluating ICs, sensors, and peripherals. Such users typically start with the A000073 Arduino Uno Rev3, which is billed as, “The board everybody gets started with” (Figure 1). This board is based on the ATMEGA328P-AUR microcontroller from Atmel (now Microchip Technology). The 5 volt processor offers 14 digital inputs/outputs (I/O), six of which can provide pulse width modulation (PWM) capability, along with six analog input pins, which can also be used as digital I/O if required. It also supports two external interrupts on digital I/O pins 2 and 3, along with one each of the UART, SPI, and I2C interfaces.
Figure 1: The Arduino Uno Rev3 development board is based on the 8-bit ATmega328P microcontroller running at 16 megahertz (MHz). The footprint of its headers, with 14 digital I/O pins, 6 analog input pins, and various, power, ground, and reference pins, is the basis for a huge ecosystem of daughter boards called shields. (Image source: Arduino.cc)
Besides the limitation of an 8-bit data path and a 16 MHz clock, coupled with the fact that the Arduino Uno offers only 32 Kbytes of flash program memory and 2 Kbytes of SRAM, this development board is too large for many applications, measuring 68.6 x 53.4 millimeters (mm) (36.63 centimeters (cm)2). One way to reduce the microprocessor development board’s physical footprint is to move to an ABX00028 Arduino Nano Every, which is based on the ATMEGA4809-MUR microcontroller from Atmel (Figure 2). It has 50% more program memory than the Arduino Uno (48 Kbytes) and 3x the amount of SRAM (6 Kbytes). Like the Arduino Uno, the Arduino Nano Every is based on a 5 volt processor that offers 14 digital I/O along with six analog input pins, which can also be used as digital I/O if required. Also, like the Uno, the Nano Every offers one each of a UART, SPI, and I2C interface. However, unlike the Uno which supports only two external interrupts, all of the Nano Every’s digital pins can be used as external interrupts.
Figure 2: The Arduino Nano Every is an evolution of the traditional Arduino Nano but features a significantly more powerful processor, the ATMEGA4809, which has 50% more program memory than the Arduino Uno, and much more space for variables as the SRAM is 3x larger at 6 Kbytes. (Image source: Arduino.cc)
Although the Arduino Nano Every still has the limitation of an 8-bit data bus, it has a faster clock (20 MHz) and more memory (48 Kbytes of flash and 6 Kbytes of SRAM). More importantly for size-limited projects, the Arduino Nano Every is only 45 x 18 mm (8.1 cm2). Another popular alternative that can be programmed using the Arduino’s integrated development environment (IDE) is the DEV-13736 Teensy 3.2 from SparkFun Electronics (Figure 3). When it comes to I/O, this 3.3 volt development board really ups the ante, with 34 digital pins, 12 of which support PWM, along with 21 high-resolution analog inputs.
Figure 3: The Teensy 3.2 is a small, breadboard‐friendly development board designed by Paul Stoffregen at PRJC.com. This user-friendly development board brings a low‐cost 32-bit Arm Cortex-M4 platform to hobbyists, students, and professional engineers. (Image source: PRJC.com)
The Teensy 3.2 is powered by an MK20DX256VMC7R Kinetis K20 microcontroller from NXP. The K20 features a 32-bit Arm Cortex-M4 processor core running at 72 MHz, with 256 Kbytes of flash memory and 64 Kbytes of SRAM. Of particular interest for size-constrained projects is the fact that, measuring in at 35 x 18 mm (6.3 cm2), the Teensy 3.2 is approximately three quarters the size of the Arduino Nano Every.
Introducing the Seeeduino XIAO Even though the Teensy 3.2 is only 6.3 cm2, this is still too large for many applications. The solution for those seeking yet smaller and more powerful platforms lies within the vast Arduino ecosystem. A relatively new option is the Seeeduino XIAO from Seeed Technology (Figure 4), which measures only 23.5 x 17.5 mm (4.11 cm2), or the size of a standard postage stamp. The designers of the Seeeduino XIAO also focused on ultra-low cost.
Figure 4: Currently the smallest Arduino-compatible microcontroller development board in the Seeeduino family, the breadboard-friendly Seeeduino XIAO provides users with a powerful 32-bit Arm Cortex-M0+ processor running at 48 MHz. (Image source: Seeed Studio)
The XIAO is powered by an ATSAMD21G18A-MUT SAMD21G18 microcontroller from Atmel. This microcontroller features a 32-bit Arm Cortex-M0+ processor core running at 48 MHz and supported by 256 Kbytes of flash memory and 64 Kbytes of SRAM. Although the XIAO provides only 11 data pins, each of these pins can be used as a digital I/O or as an analog input (Figure 5). Ten of the pins support PWM, and one is equipped with a digital-to-analog converter (DAC), thereby allowing it to provide a true analog output capability. Additionally, the XIAO supports one each of the UART, SPI, and I2C interfaces.
Figure 5: All eleven data pins can act as digital I/O (D0 to D10) or analog inputs (A0 to A10). Furthermore, A0 can act as a true analog output, D4 and D5 can act as an I2C interface, D6 and D7 can be used as a UART interface, and D8, D9, and D10 can act as an SPI interface. (Image source: Seeed Studio)
Deploying and using the Seeeduino XIAO
Generally speaking, working with the Seeeduino XIAO is as easy as working with any other Arduino or Arduino-compatible development board, but there are some tips and tricks that are worth noting.
A good starting point is to make sure to work with the most current version of the Arduino IDE. Next, visit the Seeeduino XIAO Wiki for instructions on how to augment the Arduino IDE with the appropriate board manager. Many Seeeduino XIAO projects—wearable and otherwise—will involve the use of tricolored WS2818-based NeoPixels from Adafruit, such as the 2970 strip with 144 NeoPixels per meter (Figure 6).
Figure 6: A single pin on the Seeeduino XIAO can be used to individually control hundreds of tricolored NeoPixels, such as those found on the 144 NeoPixels per meter black strip from Adafruit. (Image source: Adafruit.com)
One potential problem is that, while traditional Arduino development boards may continue to work with older versions of the Adafruit NeoPixel library, the Seeeduino XIAO requires the latest and greatest version.
If an older NeoPixel library is installed, strange and confusing error messages may ensue. The solution is to remove any older versions of the library from the system, and then follow the instructions on Adafruit’s NeoPixel Überguide to install the latest and greatest version. One potential concern is that NeoPixels are sensitive to overshoot and undershoot on their data pins. The problem is that the fast edge rates of signals from modern microcontrollers can result in such characteristics. The solution is to add a series resistor as close as possible to the first element in the NeoPixel chain (Figure 7). A suitable example would be a 5% tolerance, 1/4 watt, 390 ohm (Ω) resistor, such as a CF14JT390R carbon film resistor from Stackpole Electronics Inc.
Figure 7: A series resistor placed as close as possible to the first NeoPixel in the chain eliminates overshoot and undershoot on the edges of the MCU data stream. (Image source: Max Maxfield)
Another NeoPixel-related issue is that the Seeeduino XIAO’s 3.3 volt digital outputs may not be sufficient to drive the NeoPixel’s 5 volt data inputs. One solution would be to employ a BOB-12009 logic level converter breakout board from SparkFun (Figure 8).
Figure 8: The BOB-12009 logic level converter from SparkFun provides four bi-directional channels that can be used to translate signals between the 3.3 volt and 5 volt domains. (Image source: Adafruit.com)
All that is required for a NeoPixel application is a single unidirectional channel. The problem with the BOB-12009 is that it provides four bi-directional channels, making it a relatively large solution for a space-constrained project, and a relatively expensive solution for a cost-sensitive project. One simple alternative is to use a single 1N4001 diode from Comchip Technology (Figure 9).
Figure 9: Using a 1N4001 diode to provide a voltage drop of 0.7 volts, a “sacrificial” NeoPixel can be coerced to act in the role of a voltage level converter. (Image source: Max Maxfield)
NeoPixels consider a logic 1 to be anything above 0.7 * VCC. In this case, the NeoPixel will regard a logic 1 as being 0.7 * 5 = 3.5 volts.
Powering a “sacrificial” pixel via a IN4001 diode, which has a forward voltage drop of 0.7 volts, results in it being powered by a VCC of 5 – 0.7 = 4.3 volts, which means it will regard a logic 1 as being 0.7 * 4.3 = 3.01 volts. In turn, this means a 3.3 volt signal from the Seeeduino XIAO is more than capable of driving the sacrificial pixel. Meanwhile, the 4.3 volt output from the sacrificial pixel is more than sufficient to drive the data input to the next NeoPixel in the chain.
Early Arduino development boards, like the 8-bit, 16 MHz Arduino Uno, were physically large and limited in terms of capacity and performance. Today, the Arduino ecosystem includes a tremendous variety of boards encompassing a wide range of shapes, sizes, and capabilities. For size-constrained projects such as wearables, the Seeeduino XIAO offers a 32-bit Arm-Cortex-M0+ processor core running at 48 MHz with 256 Kbytes of flash memory and 64 Kbytes of SRAM. This is all presented on a tiny, breadboard-friendly, platform measuring only 4.11 cm2 with broad ecosystem support.