Multidisciplinary Senior Design Conference Kate Gleason College of Engineering Rochester Institute of Technology Rochester, New York 14623

Project Number: P17551

Sandia Instrumented 3D Printer

Justin Rueb Maseo Browning Industrial and Systems Engineer Electrical Engineer

Ryan Thorna Edward Hanzlik Jonathan Eames Electrical Engineer Project Guide Electrical Engineer

Mike Muldoon Jacob Lowe Mechanical Engineer Computer Engineer

Abstract The Sandia Instrumented 3D Printer is a project in which a commercial printer was purchased and rigged with a variety of sensors to monitor individual prints with the goal of improving the print process by improving part quality and reducing the printer error rate. The BCN3D Sigma printer was purchased and temperature sensors and a thermal camera were mounted to monitor bed temperature, ambient temperature, extruder temperature and part temperature throughout the print process. All of this data is written to a comma-separated value (csv) file that can be analyzed by the user after the print is completed. The printer has the ability to detect errors as they occur and determine if they can be fixed and how they can be compensated for. Print properties including bed temperature, extruder temperature, layer thickness and infill percentage were optimized to determine which properties give the best warping, stringing, bed adhesion, layer adhesion, tensile strength and geometric accuracy characteristics. The printer has some visual representations of the data including a thermal image display as well as an LED array that displays the print bed temperature gradient. Nomenclature

TERM DEFINITION

CSV Comma Separated Value(s)

DOE Design of Experiments

FDM Fused Deposition Modeling; additive manufacturing utilizing successive layers of material, most common in consumer level 3D printers

FOV Field of View

Page 2

HD High Definition; image/video with the potential of 1920x1080 resolution

I2C Inter-Integrated Circuit; a type of serial device communication within electronics

NIST National Institute of Standards and Technology

PCB Printed Circuit Board

PLA Polylactic acid; a type of filament used in FDM 3D printers

RGB LED Red, Green, Blue Light-Emitting-Diode

Introduction Additive manufacturing has increased in popularity due to advances in 3D printing technology. An FDM 3D printer is a device that fabricates a physical object from a three-dimensional digital model by laying down successive layers of a heated plastic or other material. Companies that utilize 3D printing and additive manufacturing can benefit from a quicker time-to-market for a product, a decrease in engineering time due to rapid prototyping capabilities, and a decrease in the physical design constraints realized in traditional manufacturing. However, quality control of a 3D printed part is a major drawback that restricts these parts from use in high consequence applications. The Sandia Instrumented 3D Printer project aims to eliminate quality concerns with the implementation of various sensors to monitor and control the 3D print process, resulting in a history of sensor data that will allow the part to be classified. This "part history" will be associated with various mechanical tests that verify the part's structural integrity. When this process is verified, feedback into the 3D print process will be introduced to control the quality of a part while it is being printed, resulting in less material waste and more reliable parts. This project was first proposed by Sandia National Laboratories to the RIT Multidisciplinary Senior Design program. A Project Readiness Package (PRP) was drafted and outlined the goals of the project as well as preliminary customer requirements. The main goal of this project acknowledges the lack of feedback within additive manufacturing processes and stand to address this issue by implementing data collection and control systems in a consumer level DFM 3D printer. While the exact technology implemented in the DFM printer would not be able to scale to other types of additive manufacturing, i.e., metal printing, many of the data analysis and control techniques could be adapted and expanded upon. The PRP, as defined by Sandia National Laboratories, was separated into two major phases based upon the amount of progress completed in instrumenting and controlling the printer. The first portion of the project defined the basic requirements for instrumenting an off-the-shelf FDM 3D printer, detailing many types of data that may be of interest. The first portion of the project involved interpreting these suggestions and determining which sensors would be feasible to implement and the most appropriate method to record this data. The second portion of the project, as detailed in the PRP, involved exploring options of closed-loop feedback and direct control of the printer. Based upon the collected data and conclusions from the first portion, direct feedback would allow the printer to make decisions based upon previous states. This control would allow the printer to understand when a potential manufacturing issue has occurred and whether it should continue the print. A handful of issues can arise during a print, such as excessive warping, loss of bed adhesion, extruder heat creep, and filament jamming. Detecting these failures will reduce excess waste, increase production time and create higher quality parts. Furthermore, in the process of implementing the monitoring systems tensile, impact and geometric accuracy testing was to be done to validate print quality. These tests should trace differences in print parameters to changes in tensile strength, modulus of elasticity, impact energy, geometric accuracy, etc. While this testing will not map directly to metal printing it could help determine how sensitive print parameters are to these test values.

Page 3

Customer Requirements and Engineering Requirements

Sandia wanted to discover the different parameters’ effects on a part and the how print quality changed as ​ the parameters changed. To do this, sensors would be placed in the printer to monitor the parameters and send recorded information to a CSV file to be analyzed. The data collected could be used to determine whether it had affected the part’s quality by running an experiment to test different parameters and their effect on quality. With a closed loop feedback system, the printer could determine if a print would fail and whether this failure would be critical or recoverable, and would notify the user of the error and how the error occurred.

The team compiled the customer requirements and developed a set of engineering requirements to evaluate progress on the customer needs. The original set included measuring and sensing material flow, bed and extruder temperature, thermal history ambient temperature, humidity and pressure, as well as XYZ position, though of those requirements, only bed, extruder and ambient temperature made the final list due to scope restrictions. Other engineering requirements were the ability to record a CSV file for the three temperature types, the ability to enter desired temperature limits, and the ability to detect geometric errors.

Thermal Camera and HD Pi Camera The implementation of the thermal camera and HD Pi camera would allow the print to be monitored and the operation data to be recorded and used live or in a post-processing application. The thermal camera would ideally observe the temperature of the filament being extruded and record the thermal history of the artifact being printed. This thermal history would allow the user to characterize different prints thermally and associate certain thermal conditions with results obtained from mechanical tests. After enough data had been gathered and correlations were able to be made, an image processing algorithm would then be able to make decisions on part quality when presented thermal image data. While the much of the image processing data would be out of scope for this project, the goal was to instrument the printer with a thermal camera and record timelapsed images or a video of each print. This would allow future iterations of this project with a platform that could be easily developed upon. Monitoring of the print with the HD Pi camera was only a small part of the theory behind implementation of this device. The ideal operation of this device would involve using an edge detection algorithm to track the edges of the artifact being printed. The recorded profile of the artifact would then be compared to an ideal profile generated by a modified version of Cura when the STL file is sliced. Image processing software would then be able to compare the current progress of the artifact to an equivalent layer value in the sliced STL file and verify the correctness of the shape. This principle, when fed back into the printer control loop, would allow the device to understand when a print has malfunctioned or if there are any major geometric inaccuracies in the profile. While this would not only save material on a failed print, it would also record any inaccurate movements leading up to the failure and help the user understand why the print had failed. The physical implementation of the cameras, based upon the desired functionality, would have to be at the bed level to observe the most accurate status of the artifact. This presented many challenges including potential thermal issues from the ambient temperature and difficulty mounting based upon the existing bed structure. A mount was 3D printed to accommodate the thermal camera and HD camera at a proper distance from the end of the bed, allowing large part to be fully captured in the images. Upon completion of this mount, the cameras were connected to the Pi and development began. Since this subsystem was more research based and involved proof of concept designs, explicit tests were not defined or conducted.

Sensor Network Subsystem and Data Logging The design of the sensor network subsystem involved creating a data logging circuit controlled by an 2560 MEGA. The purpose of the design was to capture temperature measurements gradients from the heat bed on which the part is printed and the ambient temperature of the 3D printer as a whole. The two sensors used for the heat bed take measurements as individual pixels in a 16x4 array and positioned so that each pixel represents an area of the bed. An algorithm is then used to to adjust the data readings as the bed moves lower on the Z axis do to the change in the sensor’s FOV. Currently, two array sensors are used to measure the center area of the heat bed as

Page 4 to capture the area around and underneath the part. Thermocouples are used to capture ambient temperature during print time; thermocouples are sensitive enough for air temperatures measurements due to the fact that it takes the thermal difference between the two metals strands that make up the thermocouple. Four thermocouples are placed at four corners of the 3D printer to holistically cover the effective area of the inside of the printer. Besides for clear uniformity, the thermocouples are placed this way so that they can properly measure convection as the path of air flows through the system. The data logging aspect incorporates an SD card breakout as well as a real time clock. These are implemented so that accurate timestamping can be done for each log file as well as for individual rows of data needed for parsing. The CSV is sent to the SD card as a string which is easier to extract data from for the client. Currently, the subsystem samples the temperature data at a rate of 1 second with the potential to sample at a maximum rate of 512 hertz; this is due to the limitations of the array sensors themselves as that is their fastest refresh rate. To test these sensors, control charts were made from the resulting CSV files. These control charts showed a visual of the temperature change over time of both the bed and the ambient temperature as a part is being printed. Initial results concluded that the overall temperature of the printer is asymmetrical with the right side being noticeably cooler than the left. This was used to successfully demonstrate that there were in fact parameters that could be altered and helped address what the next steps in the process would be.

RGB LED Matrix The RGB LED Matrix board was selected over making one to put less stress on the schedule to do the project. A 32x32 LED display was selected because the price was cheaper and had more room on the board to work with. Once the board was selected it was ready to be tested on an Arduino Uno. Using Adafruit’s libraries for Arduino code the first version of the code displayed a 16x16 square of data points and a test above and below the square. The first problem encountered was the array taking 41% of the Dynamic Memory on the Uno causing the program to not fully execute. This issue was solved by putting the array into program memory which brought the Dynamic Memory usage down to 13% on the Uno. After the program was successful it was then integrated with the sensor network system. When tested in the Arduino Mega the program only used 4% of the Dynamic Memory. It was then decided that the 16x16 was too small and not smooth enough. The program was then changed to expand the 16x16 to 32x32 by using the average of 2 points in-between. This fills the board and presents a smoother display while filling the board.

Firmware Subsystem The BCN3D Sigma firmware was developed in C++ as this language is fairly low-level and was implemented on the Arduino Mega 2560 as these this was provided with the printer system and our requirements did not need anything more for the firmware modifications. The general goal of the firmware subsystem was to provide additional transparency in the printing process via internal data already within the system. This data includes print timing data, thermal data, positioning data, and other variables of importance. After analyzing the initial firmware design, several points of interest were recorded including potential modifications that would be required to provide access to important printer data. The first code stub that was modified was the portion responsible for thermal readings. Specifically, degHotend(extruder_number) was modified to get the current extruder temperature, degTargetHotend(extruder_number) was modified to get the current target extruder temperature, degBed() was modified to get the current bed temperature, and degTargetBed() was modified to get the current target bed temperature. These modifications were fairly simple once the system was understood, and mainly required very minor changes. After providing access to the most basic form of data that our system requires, timing information also need to be logged to give these thermal reading meaning. The code was analyzed again to find if there was already a variable used to track time for a given print and the variables starttime and stoptime were identified which tracks the time a given print starts (not including preheat) and when a print stops using the system time since boot as reference. In order to provide more information, an additional variable called prestarttime was added that also tracks the time since preheat started. In order to get a duration for a given print, one of the three formulas were used depending on the time interval of interest: <<< formula print_time_elapsed = (starttime – stoptime)/1000 >>> <<< formula ​ pre_time_elapsed = (prestarttime – starttime)/1000 >>> <<< formula total_time_elapsed = (prestarttime – stoptime)/1000 >>> Once some methods for accessing information and timing was written, the method to create the internal log

Page 5 line was developed. The idea behind this method is very simple; it merely takes in an empty character string variable and calls the developed and modified functions for data collection of the important internal data, and records this data in the empty character string, separating each value with a comma to prepare the given line to be written to a log file. It does so using the format “print_time_elapsed, total_time_elapsed, extruder_1_temp, extruder_2_temp, bed_temp, extruder_1_position, extruder_2_position, bed_position”. As the final and most complicated step, the SD card implementation had to be modified to allow multiple SD file interactions at once to be able to write out the pre-constructed string to the printer’s internal SD card. After iterating on the solution several times, the conclusion was the entire system needed to be expanded to allow for another SD file module specifically for tracking the log file that is being written as the print process is ongoing. To implement this, several ideas and function were copied from the base SD card implementation and modified for more specific needs. Before the final integration into the printer system, a large amount of cleanup, error checking, and safety features were added to the code to minimize the chance for error (both critical and minor). This was done to minimize the debugging time since there were major time constraints by the time the modified firmware was written.

3D Benchy Quality Testing The Benchy was designed to be used as a qualitative benchmarking part, rather than a quantitative one, and so the decision was made to create a set of guidelines to use when grading a print in each of the four major categories: warping, stringing, bed adhesion, and layer adhesion. Each was graded on a ten point scale. In order to keep the grading objective and consistent, two members of the team had to sign off on each scorecard.

Tensile Testing Tensile testing created some unique challenges as described above however it did yield some interesting results once the parts were printed solid.

Figure 1: Tensile test stress-strain curves

● From the plot above it can be seen that specimens 2 and 3 had a very similar stress strain relationship while specimen 1 had a much lower yield point and fracture. ● Specimen 1 was the most geometrically accurate test part and did not have any warping while 2 and 3 had significant warping. Although it may seem that a more accurate part would produce better results, this shows quite the opposite. ● Specimen 1 was printed with a extruder temperature of 200C while the others were at 220C. It can’t be said with absolute certainty that this caused the discrepancy however it can be said with confidence that the lower extruder temperature caused worse layer adhesion which allowed specimen 1 to break easier. ● Specimens 2 and 3 were printed with the same settings and exhibited a similar stress strain relationship.

Page 6

More tests are needed to say with any certainty that the printer produces specimens with the same structural integrity within error when they are printed with the same settings.

NIST Specimen Geometric Testing ● 3 NIST test specimens were printed. [1] ● These parts were measured using calipers to determine the geometric accuracy of the part. ● All specimens were printed with the same print settings however they did not have the same geometric properties. ● All of the specimens measured gave a random error about the nominal value for measurement of all the features on the specimen with the exception of one feature. The diameter of all of the pegs on the specimen were printed undersized by at least .006 inches. The nominal size was 0.126” and they all varied between 0.117” and 0.120”.

Engineering Challenges and Solutions

The various engineering groups within the P17551 team faced challenges during the design, testing, and integration stages. The noted challenges and solutions are detailed in the following sections, categorized by engineering discipline.

Electrical Engineering Challenges Within the implementation of the sensor network and data logging systems, the challenge of implementing I2C serial communication for multiple sensors of the same slave address was problematic. Since the devices has the same slave address, they all try to respond to the same request, which causes the data that is read from them to become inaccurate as the is trying to read data from multiple places at once. The solution to this was to implement and I2C multiplexer that takes multiple inputs and switches between them at the discretion of the software created by the user. The solution was successfully implemented and allowed for successful communication with each device. In the physical implementation of the network, the breadboarding used to test the sensor network was inefficient due to the risk of connection loss from wires being pulled out. Due to this, a PCB was designed for the sensor network subsystem to consolidate wiring and allow the circuit to be transferred to a case for mounting. The PCB allowed the network to appear more professional and drastically decreased the amount of wiring harnesses necessary, as well as simplified documentation of the various connections. The other major challenge encountered in the software implementation of the sensor network subsystem was that of the sampling rate optimization and sensor hardware initialization. Data sampling to CSV files took around 20 seconds due to the code being impeded by numerical computations. The solution to this was to print every numerical value to a string, as it takes less flash memory to implement and simplifies data parsing. After this practice was implemented, the sampling rate dropped from 20 seconds to a little under 2 seconds. If a faster sampling rate is needed, which is unlikely due to confirmation from the customer that the current sampling rate was adequate, the print function being called to the computer’s serial monitor from the arduino code needs to be taken out of the code. From there, the sampling rate can be controlled with a delay with the max sampling from the sensor being 512 Hz. The current revision of the code, implemented on the Arduino, averages ~2 seconds per sample, which is optimized for this application. In an effort to understand the behavior of the artifact being printed, a Flir Lepton thermal imaging camera was purchased and interfaced with the . This camera module included low level embedded software used to interface with the Raspberry Pi, but did not include any sample software for camera. This lack of sample software increased difficulty regarding implementation and video recording of the thermal image stream. It was also observed during testing that the camera was manufactured to saturate to the hottest section of the scene, resulting in difficulties observing the part when the extruder was also in the image. While thermal history of the artifact being printed would include valuable data points, understanding and controlling the different aspects of the thermal camera proved to be very

Page 7 difficult with a limited knowledge of thermal imaging and the embedded software behind this device. The end state for this phase of the project will include basic Python scripts that will perform time lapse recordings on a given interval. Edge detection implementation using the HD Raspberry Pi camera with OpenCV also manifested its own challenges. The idea behind implementing an edge detection algorithm would allow software to compare the profile of the artifact under test to a profile generated when slicing the STL file in Cura. While it was anticipated that the profile comparison between the sliced STL file and the edge detected artifact would be out of scope for this specific portion of the project, the basic edge detection algorithm was still implemented. The Canny edge detection algorithm defined in the OpenCV library was used to post-process still images obtained from the HD Pi camera. In this stage, challenges included implementing a filter that would remove much of the background noise that was being picked up in the Canny algorithm. A Python script in OpenCV was developed to take a still image and apply the Canny algorithm to it. Preliminary results observed the need for a plan backdrop to reduce noise around the part being printed. Further investigations will need to be executed by an individual with further software development/image processing experience. The RGB LED Matrix was originally tested on an Arduino Uno, the issue of limited dynamic memory. The first version of the program used ~41% of the dynamic memory, which caused the Uno to not send the data to the LED board. This was fixed by moving the array of data to the program memory, and resulted in a dynamic memory usage of approximately 4%. The second challenge was introduced when combining the sensor network and the LED matrix. the 16x16 display was too small to properly display the data, so to make it larger and smoother a 32x32 array was used. This was implemented by averaging between points and displaying these averages in the respective locations and utilizes the entire array.

Mechanical Engineering Challenges Implementing an enclosure on the printer solved a lot of problems but also created some unfamiliar problems. Before the implementation of the enclosure the draft within the room caused a lot of warping and caused bad bed adhesion. Tuning the bed temperature and the extruder temperature certainly helped part quality however variations within the room caused variations in the parts. To eliminate these variations an enclosure was designed and interfaced to the printer. This helped with bed adhesion and warping issues but created a new issue called heat creep. This occurs when the PLA filament melts high up in the extruder. When this occurs, the feed mechanism has to exert more force to push the filament through the nozzle. Eventually this causes the nozzle to jam. This was occurring because the enclosure increased the ambient temperature within the printer so the hot end of the extruders did not cool as much as they had without the enclosure. To solve this issue holes were drilled in the enclosure to allow for some ventilation to lower the ambient temperature and the extruder temperature setting was lowered. Tensile testing and impact testing was done on test specimens however the results were inconclusive due to error. The error on the initial tensile test specimens was 13% at the fracture point. This error was due to the nature of the load cell used to take measurements. There was not any other load cell that could be used for this testing therefore other solutions had to be tested. By printing the tensile specimens without the 20% infill and instead completely solid this brought the fracture point of the specimens within an acceptable range on the load cell. After changing to solid specimens it brought the error at the fracture point down to below 3%. This was deemed acceptable because variation between prints was still outside this error range. The impact testing presented a similar issue because the impact energy was smaller than the error on the tester. This problem was also countered with printing the specimens solid however it still did not yield acceptable results. External testing was deemed unnecessary and impact testing was dropped from the part testing.

Computer Engineering Challenges Printer choice was largely motivated by the fact that the printer had an open-source firmware. This means that the implementation of our printer’s firmware was completely open to modification, allowing the team to access internal values in the printer and possibly modify the printer functionality to better suit customer needs. However, the open-source firmware had very little documentation and in-code

Page 8 annotations to aid in understanding. The implementation itself is very complex, with a total of twenty-five source files, not including various header files and other files required for building. Most of these files large, the main file being over 9000 lines long. This caused the ramp up time for the modified firmware to be extensive. After gaining an understanding on the workings of the firmware and an initial plan on the implementation, pseudo-code started being developed for the general implementation for accessing the internal printer data and writing to the printer’s SD card. Accessing most of the printer data mostly required only slight modifications to the printer system as these methods already were setup to provide access to this data for internal use in the system. Most of these changes were made to make the data into a readable form when outputted to the system SD card. One of the largest issues that presented itself while developing the firmware was the systems in-ability to support an additional SD file for log file writing. Since the system was never written with the idea of using the SD card for more than access specific files off of it, the firmware lacked the ability to perform multiple SD card operations at once. This issue proved to be quite complicated and required a decent amount of brainstorming in order to determine a proper solution. After a few simple solutions were implemented without much success, the idea of expanding the entire SD card system to allow for another SD file module specifically for logging was developed. This presented several design challenges that had to be ironed out as this solution was developed.

Industrial/Systems Challenges Evaluating the quality of a printed part needed to be consistent, simple, comprehensive, and fast, and these qualities made up a large part of the decision to start print evaluation with the 3D Benchy part. As a benchmarking part by design, the Benchy was a single part that would show signs of any common print failure. The Benchy also took significantly less time to print than the other parts in consideration. A two factor, three level experiment, documented as “DOE 1” was designed to evaluate print quality on each of the four quality metrics, based on two variables: bed temperature and extruder temperature. The low, medium and high levels were set at ten degree increments centered on the recommended temperatures provided by BCN3D. After the completion of DOE 1, a follow-up experiment, DOE 2, was conducted to collect more observations to minimize error. DOE 2 dropped three of the nine treatment levels due to consistent failures at the low bed temp level during DOE 1. This experiment resulted in the conclusion that a bed temperature of 70 and extruder temperature of 200 were desired. After the installation of the array sensors, evaluating the printer’s ability to reach and maintain the target bed temperature became the top priority. Using the data from the collected .csv files, a time series plot was created to display several of the bed points over the course of a completed print. This allowed the team to determine that extruder fans created a temperature gradient across the bed from left to right, affecting print quality. Individual control charts were created in Minitab to evaluate the temperature consistency over time, and concluded that the printer was unable to keep bed temperature in statistical control.

Conclusions and Future Work

The implementation of the HD and thermal cameras allowed for insights into the behavior of the printer and satisfied the customer, but timelapse implementation needs to be completed. While major successes included the successful hardware implementation of the cameras and the successful implementation of OpenCV, quantitative thermal data was not able to be recorded from the thermal cameras. While this lack of quantitative data indicates a major failure, the framework is in place for a future team to tackle this issue. If it was possible to repeat the project, it would have been useful to have purchased the cameras earlier and made it a priority to understand how OpenCV works in more detail. This would allow a better understanding of the functions and a quicker implementation. While the modified firmware did accomplish its intended goal within the project, it only managed to accomplish the bare minimum as laid out by our customer requirements. The modified firmware does capture data from the internal sensors and hardware, and also logs this data to the internal SD card for additional process. However, with more time, additional data could be realized from the internal system. Some of this data includes fan speeds, extruder flow rate (software value, not from a sensor), target values, and other more obscure values. Using this additional data, the PID control system present within the printer could be modified for superior closed loop feedback controls within the system. Furthermore, the system could be made to autocorrect errors if the

Page 9 external sensor system is integrated into the firmware, allowing harder to detect issues (like heat creep) to be seen by the system and react accordingly. The data logging software is up to the customer’s specifications, and logs temperature data from the array and bed temperature sensors in a CSV format saved to the SD card. This data was able to be used to generate control charts of the temperature data, indicating where the process is out of control and for what reason. This information will be valuable to the customer, as it can be used to identify special causes of variation which lead to poor quality prints or print failures. There are several options for future work on this project, but the project most in line with the customer’s goals and needs would focus on internal environment control. In order to improve print quality and decrease error rates, the process must be stabilized and remain in statistical control. By implementing a closed loop feedback system, including controlled ventilation and the ability to vary heating during a print, the proper temperatures can be maintained throughout a print, keeping bed adhesion and layer adhesion high while avoiding heat creep related failures. If desired by the customer, and within the capability of the team(s) working on this project, additional parameters such as humidity or material flow rate may be added to the design challenges, taken from the initial engineering requirement list. Other advancements will include improving the camera system by recording quantitative measurements from the cameras, as well as implementing the edge detection program that the team began to develop. This would allow the cameras to serve a purpose in the closed loop feedback system as well as their current qualitative review role. Further exploration into tensile and geometry testing could help to create a method of optimizing tensile strength or geometric accuracy against print time or material cost, and a full project dedicated to print optimization could take place alongside or after the environmental control project.

References [1] Russell, Debra L. F. "NIST Additive Manufacturing Test Artifact." NIST. N.p., 08 Feb. 2017. Web. 09 May 2017.

[2] Burgess, P. (2012, December 11). 32x16 and 32x32 RGB LED Matrix. Retrieved May 11, 2017, from https://learn.adafruit.com/32x16-32x32-rgb-led-matrix/

[3]Rosebrock, Adrian. "Accessing the Raspberry Pi Camera with OpenCV and Python."PyImageSearch. N.p., 14 June 2015. Web. 11 May 2017. http://www.pyimagesearch.com/2015/03/30/accessing-the-raspberry-pi-camera-with-opencv-and-python

[4]M. (n.d.). Marlin 3D Printer Firmware. Retrieved May 11, 2017, from http://marlinfw.org/ ​

[5] Industries, Adafruit. "Adafruit VL53L0X Time of Flight Distance Sensor - ~30 to 1000mm." Adafruit Industries ​ Blog RSS. N.p., n.d. Web. 11 May 2017 https://www.adafruit.com/product/3317 ​

[6] "Adafruit TCA9548A 1-to-8 I2C Multiplexer Breakout." Overview | Adafruit TCA9548A 1-to-8 I2C Multiplexer ​ Breakout | Adafruit Learning System. N.p., n.d. Web. 11 May 2017. https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout/overview

[7] "Thermocouple Amplifier MAX31855 breakout board (MAX6675 upgrade) [v2.0] ID: 269 - $14.95 : Adafruit ​ ​ Industries, Unique & fun DIY electronics and kits." Adafruit Industries, Unique & fun DIY electronics and kits. Web. https://www.adafruit.com/product/269

[8] "Overview | Adafruit DS3231 Precision RTC Breakout | Adafruit Learning System." Adafruit Learning System. Web. https://learn.adafruit.com/adafruit-ds3231-precision-rtc-breakout/overview ​

[9] "SparkFun SD/MMC Card Breakout - BOB-12941 - SparkFun Electronics." SparkFun Electronics. Web. https://www.sparkfun.com/products/12941

[10] "SparkFun Logic Level Converter - Bi-Directional - BOB-12009 - SparkFun Electronics." SparkFun Electronics. Web. https://www.sparkfun.com/products/12009 ​

Page 10

Acknowledgments The team would like to acknowledge Mr. Edward Hanzlik for his guidance through the MSD process, as well as Mr. Nicholas Leathe for his insights into 3D printing and technical assistance throughout the project. We’d also like to thank the Construct at RIT for helping their technical guidance and 3D printing wisdom.