3DLP Host v2.0 Coming Soon!
I know it's been quite a while since I've updated the site, but it's finally time for me to share some amazing news: I've been working for over seven months on 3DLP Host v2.0, and I'm finally in the home stretch! Check out a preview screenshot below:

I've really put an insane amount of effort into making this version of 3DLP Host into a rock-solid, feature-jammed piece of software that will be able to grow and evolve alongside the 3D printing community as new technologies are developed and existing ones are pushed to the edge. The number of new features is too great to list out right now, but v2.0's release will correlate with a complete update and full software documentation. I'm extremely excited to be pushing down the home stretch and I hope to be able to begin releasing Alpha test versions to my supporters very soon to begin gathering feedback in preparation for a worldwide release. In the meantime, happy printing!
-Chris
FireHero 3

FireHero 3 is finally here! Originally built for a music festival, FireHero 3 was designed from the ground up to focus on putting on an incredible live show. Read on to see more pictures and details of the system!
3DLP Host: Now in 3D!
Well, it's been a while - I haven't updated the 3DLP Host Software since I came out with the first Alpha version back in May. This past weekend I started working on a complete revamp of the software - and when I say revamp, I mean that by the time I'm done, nearly every line will be replaced with better, more robust code. Planned features for the next release of the software include: 3D STL importer/viewer, 3D realtime slicer, re-written Arduino firmware, a new, cleaner GUI, slice previewing, and a manual printer control dialog. I'm also working on an efficient automatic support generation algorithm that I plan on implementing in later releases.
Here's a preview of the new 3D interface:

Here I've imported an STL model into the 3D viewer, oriented it in 3D space, and sliced the model at a Z height of 0.5. The red lines indicate the contours of the layer created by the intersections of the model and the defined slicing plane.

Here I've loaded an extremely complex (very high poly count) STL model of a human skull complete with all the internal passages and cavities.

Here I'm slicing the skull with a plane in the Z axis - red indicates the intersection of the solid bodies and the slicing plane in 3D space.
Testing new flame effects
Today I made a quick testing rig for the new type of plasma-ignition flame effect I'm developing for FireHero 3. This test rig is lightweight and can be set up in a matter of seconds, and will allow me to test different electrodes, spacing, nozzles, and pressures until I get things exactly right. Once I've nailed down a solid platform on this rig, it's a simple matter to expand to the 12 effects of FireHero 3. Read on to see some pictures of the rig!
Adventures in Control Theory: Pt. 1
Lately I've been expanding my knowledge in control theory in preparation for a complex automated process control system that I'm designing. This is the first installation in a series of articles detailing my "Adventures in Control Theory" as I progress through different types of control systems and take them from theory to practical use. Of course, I'm uploading all of this in the hopes that it will be useful to somebody else trying to learn how to use these theories properly.
Mathematically, the control function for an ideal PID control can be written as shown below:

The above equation describes a PID control loop in the continuous-time domain. In order to translate the above equation into code, we'll need to create a form in the discrete-time domain, like below:

I've implemented this discrete equation into a Python class, as seen below:
import time
class PID:
def __init__(self):
self.Kp = 0
self.Kd = 0
self.Ki = 0
self.initialize()
def SetKp(self, Kp):
self.Kp = Kp
def SetKi(self, Ki):
self.Ki = Ki
def SetKd(self, Kd):
self.Kd = Kd
def SetPrevErr(self, preverr):
self.prev_err = preverr
def initialize(self):
self.currtm = time.time()
self.prevtm = self.currtm
self.prev_err = 0
self.Cp = 0
self.Ci = 0
self.Cd = 0
def GenOut(self, error):
""" Performs a PID computation and returns a control value based on the
elapased time (dt) and the error signal from a summing junction. """
self.currtm = time.time() #get t
dt = self.currtm - self.prevtm #get delta t
de = error - self.prev_err #get delta error
self.Cp = self.Kp * error #proportional term
self.Ci += error * dt #integral term
self.Cd = 0
if dt > 0: #no div by zero
self.Cd = de/dt #derivative term
self.prevtm = self.currtm #save t for next pass
self.prev_err = error #save t-1 error
return self.Cp + (self.Ki * self.Ci) + (self.Kd * self.Cd)
Read on to see how I create a simulation using Python to demonstrate the effects of the three tuning constants on the control response of the algorithm!
Fall 2012 update
I haven't updated this site in around four months, so I figured it was about time to write about the latest things going on in my life. I largely took the summer off from any real progress on projects due to personal reasons, but I'm happy to report that I'm back into the full swing of things like never before!
FireHero Guitar MIDI interface:
One of my largest goals with the FireHero system is to be able to interface it to live instruments. In theory, it's relatively straightforward. But in reality, acquiring an accurate data stream that represents the guitarist's playing and processing it to provide visually pleasing results is quite a challenge. I'm happy to announce that after a couple months of pulling my hair out during late-night coding/guitar-playing sessions, the guitar interface has reached a point where I'm sufficiently pleased with the results for me to call it an "Alpha" version.

I use a Roland GK-3 hexaphonic pickup, which is mounted to the guitar with double-sided tape and connected to a GI-20 pitch-to-MIDI converter. The MIDI output of the GI-20 is fed into custom Python software which analyzes the data stream and ultimately sends the output over Ethernet protocol to the FireHero-side computers, which output the patterns specified by the software. The Python host software is made up of a series of algorithms designed to perform intelligent chord-detection, as well as detect single notes and place them appropriately. The software memorizes all the chord progressions of a particular song as the guitarist plays in order to ensure consistent output for each chord. I hope to be filming a demo of this system, which is intended for live performances, very soon - stay tuned!
FireHero 3:
Over the past three weeks I've performed a $5,000 revamp of FireHero to the latest version - FireHero 3! The upgrades includes a completely-revamped fuel system capable of delivering almost 10 times the propane output of the previous versions, a high-voltage plasma ignition system, a custom-designed control system complete with an operator's panel, status displays, custom data exchange protocols, and solid-state switching of the solenoid valves. Also new in this version is the increase of the normal five effects to six (to accommodate the guitar interface) and the addition of four 40-foot flame effects to the frame. I'm also working on developing two 120-foot flame cannons. Stay tuned for an upcoming article dedicated to FireHero 3.

Plastic extrusion:
I've been very involved in creating a desktop plastic extrusion machine since the end of May. Here's a photo of an early (failed) prototype:
I was originally inspired by the Desktop Factory Competition, and at this point my design has evolved enough that I'm in the process of developing a company around the concept. The machines will be completely Open Source once released, and are designed with the goal of being as affordable as possible to allow all sorts of individuals, schools, and other organizations the ability to save huge amounts of money on plastic costs for FDM (Fused Deposition Modeling) prototyping. There are several open-source extrusion machines being developed right now, but my design takes a different approach and borrows techniques from the 80-year-old plastics extrusion industry to provide a higher-quality product at a greater speed. Here's a screenshot of an early rendering:

WVO collection:
I'm also planning on re-building my blast furnace and re-starting my work in metalcasting soon, so I've started collecting WVO. After gathering several hundred pounds of oil, I realized that I needed a more efficient way of storing it. I found an old 100# propane tank lying in the woods by my house, so I turned it into an oil storage tank. I welded fittings onto the tank, so now I can cart it around to dispense of oil wherever I need it!
The second test print
Alright, I'm finally getting the time to document all of this. I've completely rebuilt and revamped my printer with a new tilt axis, and I was ready to give it another go - read on to see what happened.
Playing around with the Kinect and Processing

Tonight I spent several hours playing around with the Kinect OpenNI library and Processing - and boy oh boy did I work on some cool stuff!! Above is a 3D point cloud of me standing in my room, created from data extrapolated from the Kinect's depth image.
I can't even contain the amount of incredible ideas that are racing through my head on how I can apply this to real-world applications. I feel that I've reached a point in my learning and personal development where the complexity and scope of my projects is going to literally explode. Two months ago, I wouldn't have ever imagined that I'd be working as the lead developer on an open-source 3D DLP printing software project or doing contract pyrotechnics work. Ever since I left school back in January, I've been doing nothing but pursuing my passion, and ever since then things have been falling into place for me and I've gotten to follow it even further (Yes, I believe in the Law of Attraction). I'm willing to bet that a year from now, I'll be working on things that I couldn't even imagine doing now. Check back often, because I have a ton of awesome things in the works!
Converting a lawn mower to run on Hydrogen: Step 1
I'm restarting my past effort to get a single-cylinder engine to run purely on Hydrogen fuel. I'm starting from scratch with an old 6.75HP lawnmower engine (the engine runs beautifully). I'll be building a testing rig around the engine, modifying the engine to run stand-alone (removing the rotational inertia of the mower blades causes the engine to run differently), ripping out the old ignition system and replacing it with a brand-new microprocessor-controlled electronic ignition system, adding fuel injection for the Hydrogen, and ultimately using the engine as a test bed for collecting data and a proof-of-concept for future projects.
Here I've ripped the cover and pull-start off of the engine.
This is the magneto-driven ignition system that is currently on the engine. To adjust the ignition timing, I could try and re-position the pickup coil perfectly in the new position, but that would be way more trouble than it's worth. It's far easier in this case to add an electronic system, which will allow me to adjust the timing on the fly, extrapolate data about the current RPM of the engine, power curves, etc.
Here you can see I removed the engine from the lawnmower. The carburetor will eventually be completely replaced by a gas-metering system to precisely inject Hydrogen gas into the system.
The first major setback on the printer
The pictures in this post were taken back on April 20th, when I was working full-tilt on my 3D DLP printer. I've finally gotten around to uploading them and describing what happened. This was the first real test, and needless to say it didn't work at all! Read on to learn from my mistakes and see what happened!
My life over the past two weeks
Last time anyone heard from me on this site, I was revving up to do my first full print test on my 3D DLP printer. Then I posted some quick videos of FireHero 2, and I was gone. Comments have been left un-answered (up until tonight! :)) and I dropped off the map for a while. Here's all the things that have happened in my life in the past 2 weeks which have kept me from updating this site as frequently as I'd like:
The 3D printer:
The first print was an absolute failure! Actually, there's no such thing as a failure as far as I'm concerned - After several hours of trying I had nothing more than a giant mess of un-cured resin (which everything still REEKS of).. but I knew exactly what went wrong and I knew what I had to do to fix it. Long story short, I realized why almost everyone who builds a DLP-based printer designs some sort of tilt mechanism into their device, so six hours later I had CAD'ed up a new design for the printer with a tilt mechanism and ordered $160 worth of new parts:

As some of you may have been aware, I was intending on entering my DLP build into the Instructables "Make It Real" challenge, which *had* a deadline of April 30th. My failed test was on April 23rd, leaving me just 7 days to get my new parts, rebuild the printer, finish the software, print some parts, perfect it, and then document the entire thing and create an instructable. This was totally possible, except for the fact that I was leaving for St. Louis the next day (more on that below) and I would be gone for five of those 7 days! I built a battery-powered rig so I could work on my laptop on the tour bus, and ended up finishing an Alpha release of the software on the 16 hour bus ride to St. Louis, while achieving a grand total of 40 minutes of sleep over two days! When I got back home, I worked in the garage until 4:30am rebuilding the printer with its new tilt axis and then grabbed a few hours of sleep before embarking on the last full day before the contest deadline. Right before I started work on the 30th, I happened to check Instructables.. and to my relief found out that the contest deadline was moved to June 4th!

I have some pictures from the build, I'll upload them all as soon as I get some more time!
The 2012 FIRST Robotics FRC World Championship:
As I've mentioned previously on this site, I mentor my local high school robotics team, Aperture. This season the team qualified for the World Championships, which meant heading down to the Edward A. Jones dome in St. Louis for four days along with 400 other teams to compete in front of almost 30,000 people!

We ended up at around 26th place in our division, at times being ranked as low as 9th place! If any of the students on Aperture are reading this, I'm extremely proud of you guys! Hearing Dean Kamen speak right before the finals was personally really inspiring for me, as a lot of what he said really resonated within me and my recent efforts of starting my own company. Dean started the same way I am - he spent a semester in school and then dropped out to start his own company, which he sold for $27 million eleven years later.
Winning the Instructables Extreme! Challenge:
A few weeks ago I created an instructable for FireHero, which I entered into the Extreme Challenge, the Arduino challenge, and the Game.Life 2 challenge. It was the first instructable I'd ever written, and honestly I wasn't expecting too much - until I started receiving a barrage of emails from Instructables. First was an email informing me that my instructable was featured as an Editor's choice. Then my instructable was featured on the front of the technology section, and then the front page of Instructables! I was awarded over two years of free Pro membership and traffic on my website spiked.
FireHero went on to take Grand Prize in the Extreme! Challenge, and second in the Game.Life 2 challenge. As of now I'm also a finalist in the Arduino challenge - maybe I should consider writing instructables more often!
Marion Industries' first contract(s)!
I'm extremely excited to announce that I'm doing some pyro work for NYLAHD, a film production company based in New York City. All I can say is that I'm doing some custom work for a music video shoot next week - I'm extremely excited to be working with these guys and I hope to do more work with them in the future!
Testing some new flame effects for the shoot.. stay tuned!



