Former PS:1 president Derek Bever and I were joking in the PS:1 IRC chat room awhile back about using the Shopbot as a tool for uses it was not designed for, and turning it into a plotter seemed especially ridiculous. Since I’d wanted to learn how to use the Clausing lathe, it dawned on me that this ridiculous idea could, in fact, become a terrifying reality. So thanks to Anna Yu who taught me how to use the lathe, I made a bit with an 11mm bore to fit into the 1/2″ collet on the Shoptbot:
Having spent the time to make the part, it seemed silly to stop there, so I realized I’d have to make a post-processor for VCarve and Aspire (Fusion 360 coming soon!). I already had experience with Shopbot’s post-processors, creating a “Always turn spindle off” version of Ryan’s “Always turn spindle on” post processor as well as the XYZ Zero Finder program that works with the XYZ plate made on the Bridgeport. So hunkering down on the computer in the CNC Lounge (where Aspire is installed), I made a “Sharpie Bit” post processor that 1. always turns the spindle off, and 2. always sets Z to 0, regardless of what is done in Aspire or VCarve. This also means you have to explicitly set Z’s 0 position without use of the Z plate as there’s nothing to tell the machine when the ‘bit’ is at the right spot.
The first attempt was made using some cardboard I found in the garbage. This test did not go well because I had set Z to 0 in one corner of the cardboard, but because the cardboard was folded over, it was more puffy in the middle, which means that the Shopbot happily plunged the sharpie into the cardboard. Oops. Try #2 used a piece of acrylic that was laying around and I assumed was garbage, so I used that and the second attempt went much better. Inspired, I grabbed some acrylic from my shelf and made the version below.
I’m going to clean up the code a little (like removing a bunch of debugging stuff, unnecessary pauses, etc.,) and then will run it by Matt (CNC area host) and if he’s cool with it, the bit will go in the drawer and the post processor available to anyone using VCarve and Aspire.
I first noticed PS:1 because of the sign on the door – the, “Yes we have a Tardis” message. I was intrigued enough to cross the street, look up and see, yep, there’s a Tardis up there. A freaking Tardis!
‘Clearly, this is the place for me,’ I thought.
Fast forward several years. PS:1 has changed and grown, getting bigger and better, but sadly, the Tardis, has not weathered (pun intended) the years well. I have been on the roof several times over the years. Each time I stopped to take a look at the Tardis, noting that maybe with some TLC, it could be restored to its former glory as a beacon for folks who wanted to find a place to be whimsical, playful, and creative.
Over the past year particularly, it became extremely obvious that it was suffering real damage, and if there was going to be any chance of saving it, the time had come to try. At best, I figured we could disassemble and rebuild it, and even possibly use it to hide the new dust collector. Upon investigation, we determined that the wood was rotted through, and that it was a real hazard to everyone and everything on Elston Ave. below. A bad storm would likely have ripped off large chunks, sending them flying straight into a law suit.
So Ken, Andy, and I, with assistance from Kyle who happened to have a pickup truck with an empty bed, the disassembly and lowered the pieces to the street below. Most were lowered by some rope Andy just happened to have; some pieces we simply chucked overboard (always timed so nobody was anywhere near PS:1). Given how heavy some of the parts were, I’m quite impressed with the folks who got it up there in the first place!
After the large pieces came down, Kyle sent up some garbage bags and we cleaned up the rest, leaving little to indicate that anything had ever been up there. Mike Skilton was on hand to help unload Kyle’s truck and cut the chunks down to dumpster size. As I write this, a fair number of the pieces are sitting on a pallet on the loading dock, waiting for the dumpster to be emptied so they can be thrown away.
This makes me sad.
The Tardis has been around since very early days. It can be seen on PS:1’s Flickr pool going back to the original space. The Tardis is an emblem of the spirit of the space, and demonstrates what can be done by a group of individuals with a common purpose: to make something awesome that makes others happy. Personally, I think of PS:1 not as a collection of tools and equipment, but of interesting people who want to make and do interesting things – and who can and do come together from time to time to make PS:1 itself better. PS:1 is the place it is because of people helping each other. To anyone who has installed something, volunteered for a committee, fixed equipment, or shared an idea to make the place better for everyone, I say this: you have made PS:1 more than just a random collection of tools. You have made it a community.
I propose that it is time for the community to come together once again to build Tardis 2.0. I whipped up a rough design that would use a steel skeleton clad in weatherproof paneling. In addition to having its windows lit up, it could enclose a weather station and even a webcam.
I believe the PS:1 folks can bring their skills to replace the empty space on the roof with a better, more durable Tardis that will continue to elicit smiles and curiosity from passers-by (I can think of three separate times when people have shown up for the open house because they wanted to know what PS:1 was solely because they saw the Tardis on the roof) and hopefully will see it like I did: as an sign that this small beige building is a great community and space for people to have fun and be creative.
In the last days of Radio Shack, I was in a store on Michigan Avenue when I spotted, buried amongst the disassembled shelving units and discarded phone cases, a small red box that turned out to be an Arduino-based soldering project, the 2770158 LED Cube (https://github.com/RadioShackCorp/2770158-LED-Cube). I bought it for something like $5, took it home, and promptly put it on the shelf as a project I’ll ‘get to’ at some point.
The honest truth is that I was somewhat intimidated by the soldering; it’s a 3x3x3 cube of LEDs that are soldered together and the lights were smaller than i was expecting, and looking at some pics of the final result, I resigned myself to likely screwing it up and at best hoping that I might learn something from what I assumed would be a complete failure. So I somehow justified to myself that, in order to not waste my $5, I shouldn’t actually try to make the thing I spent $5 on.
At some point I hit myself with a clue-by-four and realized the stupidity of my situation; accept the possible loss of the $5 and actually try instead of fretting about what-ifs. So I took the kit to PS:1, sat down in the Electronics area, got out the soldering iron, magnifying glass, and went to work. It took a couple of hours, and I was certain, absolutely positively certain, that, even though it looked right, there was no chance that I had actually gotten the leads all wired together correctly, especially the ones in the middle that were extremely hard to reach with the big tip of the soldering iron. Okay, well, only thing left was to actually plug it into the Arduino Uno I had, load up the sample sketch (available in the RS GitHub repo above), and see what happens.
I fired up the Arduino IDE, loaded the sample sketch, hit upload, and all of a sudden all the lights came on as it started through the canned routines. I was initially skeptical, checking every single light to see which one was never lighting up, and all of a sudden it dawned on me that I had actually done it, all the lights actually lit up as part of the demo routine, and HOLY CRAP I MADE A THING AND IT WORKED!!!!1111
And then in my excitement I dropped it, ripping the USB cord from the Arduino, and landed lights-down on the floor. Well, of course I did. Of course I broke it, right? But as I checked the connections, nothing had come loose, there were no broken connections. I plugged the Arduino back in, and sure enough, it happily came back to life and started going through the routine. Whew!
So I resolved to make this truly my own; running a demo program that I didn’t write was not ‘finishing the job’. I remembered the QBasic ‘Snake’ program that drew a line bouncing around the screen, hitting the edge and then randomly turning and going off into another direction. Ah, but this is a cube, in threeeee deeeeeeee, so the challenge would be that more interesting, especially as I resolved to sit down and actually try to implement it without any help from the Internet; a three-dimensional matrix of lights, translated into C++.
This is where I remembered a line from Top Gun that went something along the lines of “Our pilots had become dependent on missiles” as a reason for loss of dogfighting ability. (And then I got that Everly Brothers song stuck in my head). Well, writing C++ for years, I had become dependent on the containers provided by the Standard Template Library (map, vector, etc.). While the Arduino is programmed using C++, it’s really a pretty small subset of C++ (which sort-of-kinda-not-really makes sense) and the STL is not available; go ahead and #include <map> all you like, all the compiler’s gonna do is complain. So I knew I’d have to regain some amount of dogfighting capability and do all the array/matrix stuff in pure C. So I decided the best way to keep myself honest and regain some of the skills I think I used to have, I created a C file in Vim (using Emacs always made me angry, straight-up I hate this, whatever this is), wrote the program, saved, compiled and ran straight from the terminal prompt. Again and again and again.
One of the biggest problems was forcing myself to get past the ‘sheesh, this woulda been easy to use <insert some STL thing> here’ and just focus on getting the values in the right cells of the matrix. It took a few hours to get the algorithm right, but pretty soon I had it spitting out numbers that seemed right, but how was I gonna know that it was right?
This is where I decided to make a quick diversion and build a virtual version of the matrix in OpenSCAD:
Using this model, I could walk through the output of the program and verify that the snake was truly moving correctly around the matrix. I rotated the model around, checking that the numbers were right and HOLY CRAP I MADE ANOTHER THING THAT WORKED!
The last thing to do was to actually get the program to work with the LEDs. This is where the spartan documentation of the original Radio Shack code became a problem; the sketch did a passable job of explaining how the lights were addressed, but the examples were all arrays of pre-baked values without having to do anything dynamic, and my program was all dynamic. I studied how the demo program worked, started fiddling with the values, and discovered how to set the bits in the right way to turn on individual lights, on specific levels. From there I modified my C program and added some code to translate my positioning, which turned out to be the mirror opposite of the way the lights are addressed; I solved the problem by physically turning the Arduino around so I was looking at the other side. Problem solved!)
I uploaded my sketch to the Arduino and it suddenly the lights were lighting up in what appeared to be a snake moving around the matrix. HOLY CRAP I GOT IT TO WORK!!!!!!11111
This is a long post for what amounts to a small light toy, but whilst I was feeling rather verbose (a consequence of sitting and waiting for an unrelated program to finish), I can’t emphasize how foolish I feel for not starting all this earlier; fear of failure is a very, very powerful emotion and if there’s a TL;DR in here somewhere, it’s that it is always better to try and fail than to never try at all, which is something PS:1 has done a very good job of teaching me.
The PS:One ShopBot is a great CNC machine that has the benefit, among other things, of being huge, allowing for a lot of cuts on large pieces of material. One of the difficulties working with the machine, however, is getting the bit at exactly 0,0,0 in the X, Y, and Z axis so that if you need something cut at exactly six inches from the edge of the material, it will be exactly six inches. There is already a built-in method for setting the Z axis, using a metal plate and clip and running a specific program on the ShopBot, but there is no such program for setting the X and Y, requiring the user to manually position the bit. This can lead to inaccuracies and wasted work.
To help everyone with accurate setting of the the X, Y, and Z axis, I made a thing:
This is an aluminum plate that is milled to be as precise as I could make it (read: probably a lot of room for improvement) where it sits on the lower left hand corner of the piece to be cut, with the corner of the work sitting directly in the middle of the circle.
With the piece placed on the work, the cable is plugged into the back (I had originally drilled two holes on the front left and bottom of the plate, forgetting that is where the bit has to touch so as to not push the plate off the work, so I drilled a new hold on the back and wrote “Do not use this hole” on the other two) and attached via the alligator clips (ToDo: make a better cable) to the Z plate.
The user should position the bit somewhere over the top part of the plate, where doesn’t matter. The user loads xyz-zero-finder.sbp (the code is available at this GitHub repository) into the ShopBot software and runs it. Assuming the bit is somewhere over the top, it will then slowly move the bit down until it touches the top, at which point it will move to the side (visually this appears to be moving towards the front of the machine, but in reality the side of the machine with the power switch is technically the bottom, or X axis). The program will move the bit inside the circle at what it believes is exactly 0,0,0 and, after displaying a message, will move the bit up two inches to allow the user to remove the plate and put it away.
The plate is in the drawer under the ShopBot in the Arduino box (ToDo: Make a real box for the plate). Feel free to use it and report back how it worked for you, so that we can make it better.
I want to thank Dean, Everett and Todd for giving me valuable advice about how to mill the plate on the Bridgeport; it was tricky because both sides of the plate are milled and getting it to sit properly in the vice was very worrying to me. I also want to thank Eric for suggesting the project in the first place.