Ok, given that I am not quite the Iron Man character, Tony Stark, with my artificially intelligent computers rendering powerful flying prosthetic suits of armor to fight off evil-doers and aliens… I am someone who doesn’t like wasting time. Despite a ridiculous daily commute or waiting the 6 hours for a single 3D print job to be completed, I needed mobility to fight for the control of my calendar.
3 Dimensional printers are a reality in the modern information age. While many companies are just now looking into the practical applications the industry is growing by multiples. The worldwide 3D printing industry is now expected to grow from $3.07B in revenue in 2013 to $12.8B by 2018, and exceed $21B in worldwide revenue by 2020. As the cost goes down and the performance goes up, miniaturization allows individuals to obtain small scale printers for various use-cases.
My personal favorites are Machine Home Gardens and Printed Houses. Amazing jobs by those groups of engineers that express innovation in connecting the intellectual strength of software with the physical delivery obtained via 3D Printing.
Here is my challenge: Given a Flash Forge - 3 Dimensional printer - located in my New York City Office and the limitation of commuting to work over 2 1/2 hours per day, I want to be able to design and render elements of my Mechanical Engineering exploits without wasting time. I wanted to explore how I can automate my office environment starting with my 3D Printer.
Now let’s work the problem, starting from the end of the solution and move backwards. I have a Flash Forge 3D Printer located in my office. It does not have a modem or other equipment used to connect to the internet, just like my refrigerator doesn’t. Print jobs are sent to the printer using an SD card and manually selecting the file from the display panel on the printer. Another printing option is to send the file using an USB cable from the printer connected to my laptop, which runs design software that is connected directly to the printer.
The files from the SD card need to be in s3g format, while the software sends the GCode to render the print object. GCode is the machine instructions that directs the printer to print along the 3 axis of control, while S3G is a compressed version of this GCode. File sizes vary on the complexity of the object(s) rendered in the print job, my samples are ranging from 1MB to 60 MB.
IoT to the rescue… let me add a Raspberry Pi device which costs less than $20.00, that I am now able to connect the printer’s USB cable to the this device instead of using my laptop.
The device comes pre-loaded with “Noobs”, which is an auto installer for using Raspbian, a Linux Distribution for the Device Operating System. It also has wireless capabilities, so I don’t need additional cabling to my printer location. I can remotely access the Raspberry Pi using a Secure Shell (SSH ) from any connection in my Office’s Local Area Network(LAN). I can leave the SD Card in the 3D printer slot so this setup will effectively eliminate the requirement to use my laptop with the printer.
Not everyone is going to be excited about managing 3D Print jobs using a Command Line Interface, or having to connect to another machine via SSH first. Also it makes creating 3D objects more difficult without the ability to visualize the objects that you are creating. Rotating the object around the axis gives you a 360 Degree view during the design phase of your project.
BTW, what about that mobility goal? I want to be able to orchestrate my use of the printer from remote locations.
I mounted a web camera to the outside view panel, aimed it to view of the printer workspace and then connected it to another USB port on the Raspberry Pi. I installed an open-source project known as OctoPrint. This delivers a Graphical User interface(GUI) to manage the serial connection to the printer. Management options of the printer that were previously only accessible through the printer display panel are now accessible to any browser and a pane to view the web camera output in real-time.
This is great for easily managing the printer from the LAN, but I need to access design software and the OctoPrint GUI from outside the office. If your company's office is setup for a Professional Services firm focusing on cloud assessment, optimization and migration you might have an Amazon – AWS Virtual Private Gateway(VPG) integrated into your Corporate Network, and if not it only takes a few minutes to set it up. This will enable you to connect a Virtual Private Cloud(VPC) and extend your LAN to resources on the Amazon Cloud Platform.
Being a good DevOPS-erator, I can script the automated spin up of a large Virtual Machine(VM) and install my design software of choice. This will decrease the time to design because my laptop CPU processing capabilities are limited. After creating my 3D masterpieces, I can upload them using the OctoPrint interface and start rendering immediately. I can also stop my VM and tear down my setup environment when I am not using it to save some money, all of which can be done from any computer that is available to me. Chalk one up for saving time and money, GOAL accomplished.
As an added bonus point, I can use the following Cloud reference architecture to remotely store the GCode instructions in RedShift DB and send it to my printer with any web device.
Now I realize that the scenario where you have access to your corporate network infrastructure and have an AWS VPG deployed might not be realistic for the average reader of this blog. That never stopped you before, so here’s an alternative for the Shadow IT enthusiasts.
In AWS, create an S3 Bucket and download your IAM credentials. You can clone and deploy s3fs-fuse onto the Raspberry Pi, which is a FUSE-based file system backed by Amazon S3. Use s3fs to mount the S3 bucket to the Raspberry Pi by passing your AWS credentials within the command.
Now use the settings in OctoPrint to set the watch folder of your newly mounted folder. This will move your files into the local print folder, adding any file you upload to the S3 bucket into the print queue. You can upload GCode files remotely to the S3 Bucket and it will be rendered and waiting for you and the end of your long morning commutes!