Posts Tagged ‘osfa’

Four Plans and a Ziggurat

June 28th, 2010

After we figured out how to greatly simplify our 3d models, Sara and I turned out attention to creating different levels of elevation. As a concept this is pretty simple; we used different brightnesses in areas of our 2d picture to tell Blender which shapes we wanted to be the highest, second highest, etcetera., all based on assigning thresholds of pixel value to different “z axis” numbers, which in Blender would become the elevation of the sprinkles.

Thrilled with our success for all of half a day or so, we quickly came to the realization that because we were using sprinkles (which are square), even with a wide range of elevation options, making a smooth hemisphere with the Cupcake would be almost impossible. It’d be like trying to create a pyramid or a dome and getting a ziggurat instead.

Ziggurat!

So we began brainstorming ideas for creating half a sphere over the surface of our model in Blender, using only the Python scripts. This was problematic to say the least because a) most of Blender’s power comes from the manipulatable interface of the model itself, as well as the hotkeys. Both of which are useless when scripting; and b) There is no “create half sphere” handy hotkey period, even if we could use them. In a fit of creative delusion, frustrated hair-pulling and occasional trips to the local icecream shop, we came up with four ideas. (The last one worked, in case you were panicking on our behalf.)

Idea 1 went something like this: “If we create a whole sphere (Blender lets us do this pretty easily) and chop it in half, we’ll have half a sphere!”   Not only did we fail to find a reasonable way of removing half a sphere’s vertices, but we also realized that we’d have to fill in the bottom of what would essentially be an overturned bowl shape. That idea was crossed out. I’m sure it’s possible to do, but our fate lay along a different path etcetera etcetera.

Idea 2: “There’s this cool modifier called ‘Subsurf’! It makes things all rounded!” I’m not quite sure why this one was a flop. I think it had something to do with my tendency to form vague ideas around nifty buttons in art programs.

Idea 3: “We could create branching arcs above the x-y plane, and just fill in the shell with vertices.” See “Idea 2”.

Idea 4 (The One That Worked): “Wait! Boolean expressions! Yes!”

The gist of what we ended up doing is that we realized boolean operations on different objects are pretty simple to script. Boolean options in Blender work just as they do in logic. “And”, “or”, and “not”. We used the Difference boolean operation on a cube and a whole sphere, after positioning them so that they overlap about halfway. What this did was create a sort of ghost mesh of a half-sphere, by telling Blender “remove all of object A that intersects with object B”. (“Difference” is the only Boolean operation in Blender where it matters what order you specify the two objects). So we ended up with a hemisphere (like we wanted), because the rest of that sphere shape overlapped with the dummy cube- which we deleted afterwards.

Some domes

Now that we could create rounded surfaces wherever we wanted; the next step was to let the user specify where they wanted them, using a GUI.

Printing Bug

March 5th, 2010

Prior to our successful (and very exciting) print the other night, we ran into a curious problem during print attempts. Namely, during the actual printing all the stages would suddenly stop but the Plastruder would continue emitting plastic. Here is an example of a failed attempt:

We even tried loading the model onto an SD card and building from the card. The same problem occurred. The interesting thing about this is that the print would stop in a random location each time. Finally, after digging around some forums for awhile, I found a post by someone suggesting a specific combination of versions for the software and firmware to use. With a lack of anything else to try, we decided to give it a shot. This involved downgrading the current versions of the software and firmware we were using. We then, with anticipation, attempted another print and, seemingly like magic, it worked!

Here is the list of software/firmware versions that we were using when our print was successful:

ReplicatorG 009
Skeinforge 005
Motherboard firmware 1.4
Extruder firmware 1.6

Heater Barrel Assembly (aka The Kapton Tape Experience)

January 26th, 2010

The next part of building the printer was putting together the heater barrel part of the Plastruder. The first step was to solder together the nichrome wire and the wire that will eventually connect the nichrome to the extruder controller. When we send electricity through the nichrome it will heat up, then heat up the heater barrel which it will be wrapped around and then heating the plastic that will run through the barrel. We also needed to older together the thermistor to the thermistor wires.

Next, we needed to wrap the nichrome wire around the threaded heater barrel, which is between the nozzle and the thermal barrier. We then attached the thermistor from the nozzle down the heater barrel. This step was all done with the help of our trusty friend Kapton tape. To insulate the heater barrel, we wrapped it with ceramic tape and then added a few more layers of Kapton tape, mostly to hold it all in place, but also because we just love it so much.

The next step was to add on the retainer washer. However, this involved unscrewing the barrier from the heater barrel. Somewhere in the process of unscrewing and rescrewing the barrier from the barrel, the nozzle came loose. This meant that we needed to unwrap all of our lovely Kapton tape, reset the nozzle and do it again. It slowed up progress for us and we recommend putting the retainer washer on in the beginning to avoid the possibility of having to redo it all.

Despite the little bump, we finished our heater barrel assembly. Here are some final pictures:

Heater Barrel Front

Heater Barrel Side

X, Y, and Z: Putting it all together

January 18th, 2010

Once all the stages were assembled, it was time to put them all together.

To install the X/Y stage, we first had to attach the X-stage belt to the pulley and stepper motor, and make sure that it was at a good tension. Once that was done, the rods needed to be threaded through the side of the printer body, then through the bottom of the X-stage, and finally stopping on the other side of the body. Then, finally all the stages were together and we had a fun time playing with the stepper drivers to move each stage and see how all three of them would work together.

Here are some pictures with them all together:

AllTogether

AllTogether2

AllTogether3

Building the Printer Frame…

December 21st, 2009

The first step in building our printer frame was to decide whether or not we wanted to paint, stain, or keep our printer as is. After some indecision and a trip to Home Depot, we decided to paint our printer blue. Professor Jadud allowed us the use of his basement to spray paint the wooden parts of the frame and the X, Y, and Z stages. (He even threw in an ice cream!)

After the paint had dried we began piecing together the frame of our printer. The first step was to screw the brackets onto the middle piece:
Middle

The next step was to bolt on the bottom and all the sides. The top needed to be left off in order to install the Z-stage later. Here is what the frame looks like all together:

frame1

And again:

frame2

Circuit Boards

November 20th, 2009

During the past couple of weeks, Sara and I have been working on learning Blender and building our Cupcake 3D printer, pretty much simultaneously.  Recently we pulled together some of the chips that attach to our motherboard on the Cupcake, including an exciting field trip to find a vice in the Art department, and a thorough overturn of our box-o-parts to root out missing motherboard parts.  Which we didn’t find!  It was exciting.  The good news is that they’re tiny little bits that Professor Jadud probably has, so that isn’t really anything more than a hiccup.

We worked on the motherboard (or, more precisely, itemized the parts we were missing), the extruder control boards (three of them), and their corresponding stepper motors.  We also popped in the parts on the six opto endstops; they’re tiny little boards that still need to be soldered.

As far as Blender goes, we’ve essentially split the learning of it up into two approaches:  Sara’s tackling input scripting in Python and I’m working on going through all the settings and buttons and views and layers and lightings and angles and… well, you get the point.  Together we should be able to beat Blender into the dust.  Figuratively.  With.. you know, code.

Anyway, here are some pictures!  Complete with “Hippy Ribbon”, which is the endearing name in the Makerbot Cupcake’s tutorial for the rainbow wires.  The pictures are of an Extruder control, the Motherboard, and one of the Opto Endstops, respectively.

Extruder control

Motherboard (so far)
Optop Endstop

Working with Blender

November 2nd, 2009

Stephanie and I have started looking at the 3D imaging program Blender. It’s a very large and complex program and we’re still trying to figure out just how to navigate around it.

However, much progress has been made, especially with becoming familiar with the idea of scripting. The tutorial in the Blender 3D: Noob to Pro wikibook (http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro), was a good starting point in learning 1) how to navigate around Blender’s Python API, such as its built-in text editor; 2) the fundamentals of how scripting works and some basic Blender Python commands. This involved using the NMesh Module, which allows one to create a NMesh object and then add vertices and faces to the object.

Creating the NMesh object:

obj = NMesh.GetRaw()

Creating a vertex and adding it to the the NMesh object’s vert list:

v0 = NMesh.Vert(0.0, 0.0, 0.0)

obj.verts.append(v0)

Creating a face, give it some vertices, then add it to the NMesh object’s faces list:

f0 = NMesh.Face()

f0.v.append(obj.verts[3])

f0.v.append(obj.verts[4])

f0.v.append(obj.verts[2])

obj.faces.append(f0)

In this way I was able to create multiple faces, which utilized many vertices, and eventually create a 3D pyramid:

A pyramid created from a Blender Python script

A pyramid created from a Blender Python script

Next, I tried a little more complex figure and created a box sitting on a 2D plane (I like to call it a building):

A more complex 3D object

A more complex 3D object

In the near future, I would like to play around with the other available modules of the Blender Python API (http://www.blender.org/documentation/249PythonDoc/), especially the Mesh Module, which I would like to compare to NMesh and see which one, if either, would be better suited to work with over the course of this project. Also, I would like to look into more efficient object creation techniques, via for loops and such.

Our First Week

September 28th, 2009

(A Retrospective)

Diving right in!  We’ve decided to start off this project by learning Python- specifically, the manipulation of pictures.  Sara and I are using Mark Guzdial and Barbara Ericson’s “Introduction to Computing and Programming in Python, A Multimedia Approach”, and after skimming the first few chapters and reading up on the three-part makeup of pixels, we tried a few problems of our own, with questionably professional test images.

“clearRed” was easy enough to understand- I’m loving how simple for-loops are in Python compared to Java or C; we basically pick an index to represent each pixel of the function’s input picture, and then cycle through each pixel and modify the numeric value of- in this case- the “red” component.

So, this is Zon, our source image and the result after we applied “clearRed”.  It’s really the sun, but it took us about ten minutes to figure out that “zon”, which was the file’s name, is not German, but in fact Dutch.  I know, right?  You learn something new every day.

zons

Zon and Apocolypse Zon

After getting used to single for-loops and manipulating (or removing) colors, we tried Posterization, which lumps values together based on their luminance, “flattening” a picture (like a poster!)

Next we moved on to nested for-loops and multiple input images, which lets us get into more interesting effects like blurring (averaging the luminance values of surrounding pixels) and line-detection, which looks at the absolute value of the luminance of surrounding pixels.

Basically, a whole lot of fun in which we messed with a picture of a monkey.

monkies

George, Posterized George, and Blurry/Line-erific George

Intro!

September 23rd, 2009

Hi!

I’m Stephanie- I’ll probably be the one posting bizarre little drawings and diagrams of things we come across, like “Jython the Python”.  I’m another Junior at Allegheny, studying art and computer science.

This is our blog for explorations with the Cupcake, a 3d printer that we’ll be designing applications and a language for, in the hopes of furthering technology that’ll be useful to blind students.

(Hurray!)

The First Post

September 21st, 2009

Yea! First post time.

I’m a junior at Allegheny College and a Computer Science major. I am excited to be in this project where I not only get to learn a new programming language and play around with the emerging technology of 3D printing(and create some awesome 3D figures!), but I also get the chance to help out blind students.