There are various aspects of this project on the hardware side of things, which will be discussed in this section. The microcontroller we chose to use for breakout testing was the Arduino Zero, which is built around a SAMD21 microcontroller made by Atmel. The Zero is more powerful than the common Arduino Uno and had enough I/O and communication (I2C and SPI) pins for our purposes, so it was not a difficult choice. We had originally begun to build the system using an ATSAM4S8B microcontroller from Atmel, but decided to switch to the Arduino after a few weeks once we realized that a great deal of the code we needed was provided by Adafruit and Sparkfun as example Arduino based code for our sensors. With the Zero having 3.3 V logic levels, we needed to make sure all the sensors we used were compatible with that. As an additional constraint, we were also looking for sensors that could communicate using I2C so that we would only need to worry about one data line and one clock line. 

As a base for our sensors, we chose the BNO055 breakout from Adafruit because it offers a great deal, such as orientation and acceleration. When researching the BNO055, we noted that it has an acceleration limit of 16g, which would easily be surpassed in our usage, leading us to purchase a second, high-g tolerant accelerometer, the H3LIS331DL. 

The H3LIS chip does not provide a great deal of accuracy but it does have very high acceleration limits, up to 400g. It can also survive a shock of 10,000g, which is a nice feature since rocket launches can sometimes go awry. With the high g-force tolerance, it was a good choice for a chip that would sense the rocket being launched by detecting acceleration and waking up the system from low power mode. 

The BMP388 is used to track the altitude of the rocket. The altitude a rocket reaches is an important characteristic of the flight as the rockets are often intended to reach a very specific height. The BMP388 is pressure based so it needs to be calibrated with the daily barometric pressure at sea level if the user wants the absolute altitude to be correct. Otherwise, without calibration, the absolute altitude will be incorrect but the relative altitude will still be correct. For our purposes, we only need relative altitude to know the apex that the rocket reaches, so we had no need to calibrate it daily. The BMP388 is accurate to ±0.5 m, meaning it provides an extremely accurate reading.

One of the main features of our system is the GPS tracking of the rocket, which is done by the SAM-M8Q GPS unit. The main purpose of the GPS is to locate the rocket after the flight, which can sometimes be difficult. Currently, the main method of rocket retrieval is using a handheld detector, which can be a very cumbersome process. With the GPS unit in place, one could simply pull the coordinates off the website and know exactly where the rocket is immediately. The GPS unit we chose has horizontal accuracy of 2.5 m, which is more than enough to find a rocket when looking for one. It also has a maximum altitude of 50,000 m, which the rockets we are using will never come close to. 

The next piece of hardware we used was the Sparkfun Battery Babysitter, which consists of both the BQ24075 battery charger and the BQ27441-G1A fuel gauge. The Battery Babysitter is used to charge and manage the 3.7 V 1200 maH lithium ion polymer battery, which powers the whole system. The battery can be charged at different rates, which are selectable by switches. With the battery plugged into the Battery Babysitter, the charge can be read directly over I2C based on the mA currently being used by the system. 

As a method of storing data, we included a microSD card chip along with everything else. While all the other chips have used I2C so far, the microSD card is written to using SPI. The...

Read more »