Since this project requires gathering and relaying data while maintaining a relatively small form factor, the obvious choice to control it all is a microcontroller.

Microcontrollers range from the small devices found inside point of sale system all the way up to systems controlling intricate assembly lines. Essentially, they are like desktop computers or laptops, except far smaller, less powerful, and more ready to interface with whatever sensors you require.

There are a variety of microcontrollers available for commercial use. Three of the most common brands are Arduino, Raspberry Pi, and Beaglebone. It's not entirely fair to group them together, as they each make a variety of different products that serve different needs. However, we had to decide which one to use somehow, so we looked at the most general purpose, entry level models from each brand.

Raspberry Pi 3 Model B+

Raspberry Pi 3 Model B+
Raspberry Pi's are some of the oldest names in the microcontoller business and therefore are the name most often mentioned for projects requiring lots of power in a small form-factor. What makes them so powerful? Well, a Raspberry Pi contains all the ports necessary to plug into a monitor, keyboard and, mouse. This allows the Raspberry Pi to be used as a traditional desktop computer, with a graphical desktop, web browser and all. This provides a user friendly way to set-up and interface with the Raspberry Pi. This makes the Raspberry Pi perfect for beginners, that want to experiment with embedded devices but don't want to deal with the often esoteric interfaces. However, the Raspberry Pi is also well suited for more advanced users. The easiest way to access it is to connect to a LAN and then SSH in the Raspberry Pi.

The limitations of the Raspberry Pi often come down to depth, not breadth. It can do lots of things very well, but when you start getting into tasks requiring an excessive amount of GPIO pins or processing power, the Beaglebone Black below is better suited. An example of the features that make the Raspberry Pi so versatile include: wireless networking, 40 pins (28 GPIO), 4 USB ports, 5V and 3.3V output, and power via a microUSB port. The large amount of pins and wireless networking capability make the Raspberry Pi perfect for IoT utilizations.

Beaglebone Black

Beaglebone Black

In many ways, the Beaglebone Black is a Raspberry Pi on steroids. It is a credit card sized computer, just like the Raspberry Pi, that allows you to access a desktop, run programs and manipulate files in all the ways a laptop or normal desktop computer would. The real changes over the Raspberry Pi are under the hood. For instance, the Raspberry Pi requires an SD card to run, as it keeps all files there. The Beaglebone Black has permanent on board memory that a system image can be written to. Additionally, the Beaglebone has a faster processor and more GPIO pins. This allows for interfacing with more sensors and outputs, although it does come at the cost of having half as many USB ports as the Raspberry Pi.

The Beaglebone Black also has some smaller improvements that can make it easier to use, for instance being able to power it from a standard 5V barrel jack, and being able to easily SSH into it even when not connected to WiFi by utilizing the Beaglebone Black's ingenious network over USB system. Simply plug the Beaglebone Black into your computer with a male-to-male USB and it will show up on your local network, giving you SSH access.

Arduino Uno

Arduino Uno
Arduinos are a relatively different beast than the two other microcontrollers mentioned so far. Arduino makes a wide variety of boards, but the Uno is the original and the most popular. These are true embedded devices, with a low price, a small form factor and a single-thread processor. Further, they have quite limited standard I/O. The primary method for connecting sensors and peripherals is expansion capes that attach to the pins and expose greater functionality. What does all this mean in practice? Uno's are great for doing one specific task consistently for an extended period. If you need to collect humidity information every 15 minutes for 3 days, an Uno and a humidity sensor will do that perfectly. If you want to collect humidity information and push it to a web server running on the Uno, you're out of luck.

Arduino's have become as popular as Raspberry Pi's due to their low cost and ease of use (the Arduino foundation provides a very straightforward IDE for developing and cross compiling for Arduino boards). They also have the widest range of expansion capes available of any microcontroller, making setup for any task you can think of a breeze.

Which to Use for Our Project?

We decided to use an Arduino Uno for the start gate, and a Raspberry Pi Model 3+ B for the finish line. This choice came from the idea that the start gate should be fairly bare bones, with most of the hard work done by the finish line. The start gate will simply be an Arduino listening for a button to be pressed by the start wand, which will trigger the sending of a packet through an Xbee to the finish line.

The finish line will be a Raspberry Pi with an Xbee listening for packets. The start signal will be received which will start a timer on the Pi. The timer will be stopped when an IR break beam sensor at the finish is tripped. While the Pi is doing all this, it will also be running a local area network and a web server hosted on said network. This will allow users to connect to the Pi and then retrieve results through an app or a web browser.