Archive for the 'Technology' Category

3D Printing: Oh, The Tuning We Shall Do.

Sunday, March 25th, 2012

After a while with the Ultimaker, a series of notes on the various things one can do to tune the 3D printing experience.

Some of this is specific to the Ultimaker, but most of it is not. Much of this is personal preference and, frankly, there is probably some stuff in here that is wildly sub-optimal. But, hey, it has worked for me and it worked better than it did when I started.

I.e. feedback and corrections are quite welcome!

First, a note on consumables. I have stuck with PLA (polylactic acid) exclusively. It is a plant derived material that requires a lower temperature and is quite thoroughly non-toxic (there are lots of articles about fume-venting ABS… not so with PLA). As well, when I screw up — which is often — the resulting garbage is biodegradable (however, I’m donating my “pile of PLA” to someone who needs input into a PLA scrap-to-usable-filament project).

PLA also doesn’t require — though it can benefit from — a heated print bed. ABS, the other common material, seemingly really does (though one can live without).

Thus, these tips are optimized to PLA.

These tips are also somewhat ordered in the steps that they should be done to maximize benefit. In some cases, that is because the earlier steps have a bigger ROI than later ones. In others, it is simply that the later steps really require the earlier steps first. Read the rest of this entry »

Teensy Based IR Blaster

Saturday, March 17th, 2012

Evolution of a Design

photo

When I started this, as can be seen in the image at left, the case was two parts that fit together in a semi-complex manner (Actually, the very first version just had a little plastic square that covered the AVR, but nothing else). It was hard to print with any quality and, frankly, the front looked awful. So I simplified it such that the IR LED could stick out a small hole, as seen in the middle. But then it dawned on my that the translucent plastics might just be transparent enough to IR that no hole was needed at all.

And sure enough, it just worked!

Thus, the design is now even simpler (assuming you have translucent filament).



photo

Both professionally and as a couch surfer, I’ve found myself interacting with a great deal of devices that can be controlled via infrared remotes. Often, remotes lost in the depths of a couch or misplaced in the fridge (it happens). Clearly, I needed an IR blaster that could be controlled from a computer to both eliminate the “losing the remote” problem and to integrate control of multiple devices into a single UI. Conveniently, Arduino micro-controllers with integrated USB ports are commonly available and quite cheap. Adding an IR LED to an Arduino is trivial, as the ever popular TV-B-Gone project demonstrates.

Thus, the Teensy IR Blaster was born. I started with the Teensy v2.0 AVR-based micro controller that includes USB support. It unofficially supports Arduino using the Teensyduino extension. To this, I added Ken Shirriff’s IRremote library modified fro the Teensyduino environment and Read the rest of this entry »

3D Printing: Upgrading Firmware & Printer Driver (For Ultimaker & More)

Sunday, February 12th, 2012

Out of the box, the Ultimaker shipped with a stable, but relatively ancient, version of the firmware. This, combined with the stable, but relatively ancient, version of ReplicatorG available from the Ultimaker site was sure to produce useful prints with a relatively minimal of fuss, but nothing that remotely approaches either the blazing speed or amazing quality possible from this printer.

To achieve that requires some significant upgrades to the software stack. And, in some cases, it requires outright replacing some of the pieces entirely.

While this writeup is specific to the Ultimaker, there is a lot of general knowledge in here, and the various bits of software are largely universal to a number of printers. When my Printrbot shows up, I’ll write a revised version specific to that printer while generalizing this a bit.

Note that this is all moving very quickly. When I first wrote this, it required about 3x more steps and was considerably more fragile. It is improving rapidly! However, there is still a long way to go before any of this is easy.

Note: At the time of writing, you need to perform both of these upgrades simultaneously. ReplicatorG really does’ want to talk to the new firmware (of course, by the time I write this, it’ll likely be fixed). Read the rest of this entry »

Ultimaker Printing an Octopus Really Fast.

Saturday, February 11th, 2012

This is a short video of the printing of an Octopus I’ve been using as a test model. The Ultimaker is printing at 250% of normal speed. I started at 100% for the first layers until a solid base was created and then cranked the speed to 250%. It could go faster, I think.

At that speed, the quality of the print suffers a bit. I believe, is mostly due to slop in my belts. I need to print some belt tensioners which will take up the slack nicely.

The print quality is both better than the out of the box experience and tons faster.

This is the result of a combination of upgrades:

  • Upgraded the Ultimaker’s firmware to the latest beta version. It has all kinds of features that enable both higher quality and higher speed prints.
  • Upgraded to using Pronterface to send the G-Code to the printer. It allows for communication at 250kbaud and doesn’t periodically pause like Replicator-G does if you forget and leave the temperature monitor panel open.
  • Moved to using SkeinForge-48 as the slicer.

All three of these tasks were a downright pain to do. All three have been written up in another post.

For now, enjoy some 3D printer music….


3D Printing: Ultimaker Build Notes

Friday, February 3rd, 2012
Photo

Some build notes from my Ultimaker build experience…..

Overall, it took me roughly 4 days to build the Ultimaker. The first two days were a couple of long stretches and the last two were much shorter. Tuning the device to yield usable prints has taken a bit more time, too, and I still have a long ways to go.

At left is a print made using the default firmware with relatively default settings in ReplicatorG. Stringy as heck, but otherwise quite good! Software and hardware tuning are reserved for another article.

This is some random build notes from the build and roughly correspond in order to the assembly instructions themselves.

By and large, assembly was relatively straightforward. The only real disaster I had was with the cooling fan used on the extruder. When I tried to mount it, it shattered — literally disintegrated into dozens of pieces — in my hand.

The Ultimaker arrives in a surprisingly small, heavy, box. No surprise; wood is heavy and the Ultimaker is largely a wooden box with some very crafty electronics built into it. Frankly, the laser-cut wood based construction is, in and of itself, a bit of a hobbyist kit revolution. Wood is cheap and very strong, yielding kits that can be quite precise, extremely durable, and still remain accessibly affordable.

Random notes below the fold…

Read the rest of this entry »

3D Printing: The Software Stack (… is kinda broken …)

Tuesday, January 31st, 2012

Throughout the anticipation of the delivery of the Ultimaker (4 to 6 weeks — as are pretty much all 3D printers these days!) and the week of assembly (another post), I spent a bunch of time researching software and otherwise attempting to grok the toolchain without a tool to apply the chain to.

In short, 3D printing requires a slew of tools and the tools are… ugh… unrefined, if not downright user abusive. Not that this comes as a surprise. Affordable 3D printing is a very new market and it’ll take a few years for the science to be nailed down enough that an easy UI can be wrapped around it.

And it is moving rapidly. Thus, if you are reading this anywhere after about 3 to 6 months from now, it is likely that the landscape has changed.

As well, this is a decidedly Mac OS X centric / Ultimaker centric view of the world. I’ll likely update again in a month or so after I’ve set up the Printrbot.

To drive a 3D printer, there are quite a few stages of software that are employed. In the maker world, there are generally multiple answers to any given stage in the overall chain. If you are working with a commercial printer, it is likely that the stages closest to the printer — the driver, assuredly, maybe more — are fixed. Read the rest of this entry »

3D Printer #2: Printrbot

Saturday, January 14th, 2012

While I’m looking to the Ultimaker (see my previous post for thoughts on the Ultimaker) (now received– time to start assembly!) as my primary go-to, general purpose, home manufacturing device, I was both interested in a second printer as a platform for experimentation and as a secondary printer for when I need to turn out a bunch of stuff.

Because I wasn’t going to be afraid to modify it, I wanted something pretty cheap. The RepRap platform seems pretty interesting, but it also seems semi-fragile (and feedback on various sites indicates that it is harder to keep aligned than others, though I don’t know how true that really is).

Along came the Printrbot Kickstarter project. I ended up funding that at the $424 level. I’ll use the Ultimaker to print all the plastic parts. The Printrbot is really pretty extraordinary. It is an elegantly simple design, has decent precision and, through its simplicity, is extremely customizable.

Also, the Printrbot story and the whole Kickstarter concept is pretty cool and this seemed like a perfect opportunity to jump in and fund something.

retainCount is useless.

Sunday, December 18th, 2011

The retainCount method just isn’t very useful as has been indicated in the answers to about a zillion StackOverflow questions.

The documentation has this to say:

Important: This method is typically of no value in debugging memory management issues. Because any number of framework objects may have retained an object in order to hold references to it, while at the same time autorelease pools may be holding any number of deferred releases on an object, it is very unlikely that you can get useful information from this method.

Makes it pretty clear that you shouldn’t be calling retainCount, but it really doesn’t illuminate exactly how useless the method is outside of a very narrow context.

So, let us count the ways:

  1. The absolute retain count of an object may change at any time once an object has been passed through any system API.
  2. Any subclass of any system provided class counts as “through system API”; the retain count may be impacted by implementation details.
  3. The retain count never reflects whether an object is autoreleased.
  4. Autorelease is a per-thread concept whereas retain counts are global; race condition derived hilarity can easily ensue.
  5. The retainCount method can never return 0.
  6. Some classes are implemented as singletons some of the time.
  7. Some classes may internally manipulate their retain count directly (I.e. no swizzle for you!).
  8. While retain/release are effectively thread safe, there is always a race between calling retainCount and having the actual retain count change in some other execution context.

Bottom line: the only time the absolute retainCount can be conclusively used for analytic purposes is if you have the backtrace of every retain and release that contributed to the current retain count’s value (there is another use case, documented at the end). If you have that, then you don’t need the retain count and, fortunately, Instruments is already generally quite adept at producing a per-object inventory of retains and releases for you (see Analyzing Data with the Allocations Instrument“.

In general, you should consider the retain count as a delta. Your code causes the retain count to increase and decrease. You don’t +alloc an object with a retain count of 1. Instead, you +alloc an object with a retain count of +1. If you want that object to go away, you need to do something — release, always and eventually — that causes the retain count to be decremented by 1.

It really is that simple.

Almost.

Concurrency — whether through threading or GCD — throws a bit of a wrench in the works (as it always does). Namely, the retain count should really be considered as a per concurrency context delta. If thread or queue A wants to do something with object X, it should hold a +1 retainCount on X for the duration of said operation. One subtle detail that will bear repeating later; an autorelease‘d object does not contribute to thread safety. That is, if thread or queue A wants to pass X to thread or queue B, there must be an explicit retain in A that is balanced by a release (or synchronization event back to A) in B.

Now, some of the enumerated claims may either seem specious at best or, certainly, not obvious as to exactly how it undermines the validity of the retain count. Read the rest of this entry »

Aerogarden Success!

Saturday, December 17th, 2011
Aero

This is our AeroGarden after a couple of months of growth. It is currently growing savory, mint, basil, thyme, parsley, amaranth, and oregano. The Aero works really really well. Within the water reservoir (the big black thing under the plants), it has a pump that pumps water with nutrients over the roots of the little growing pods that stick through the holes in the deck around the plants. Surprisingly, the thing makes virtually no noise.

Once every week to 14 days (not sure how often), it reminds you to add nutrients and it has a water-low indicator. While the seed kits from Aero include nutrients, I’ve been using the worm tea from my son’s worm farm.

Quite nice to have a nearly non-stop supply of fresh herbs next to the kitchen!

I would never have otherwise bought such a device, but we ran across one at a garage sale for $5. Quite a hefty discount off of the $150 new price. It did need some new lights.

I picked up one of the Aero branded seed packets so I could go through one grow cycle by the book, as it were.

$150 seems a bit steep and seed kits are another $20, typically. However, if you truly will use all the herbs, then I would think the thing would pay for itself long before it wears out. Annoyingly, the light sockets are of an esoteric standard and ordering new lamps from Aero is ridiculously pricy. Razor meet blades, assuredly. However, it isn’t hard to rewire it for standard CFL grow lamps (you want CFL to avoid burning the plants at such close proximity).


Read the rest of this entry »

Eichler Ornament

Saturday, December 17th, 2011
Ornament On Tree
In Action

Every year, our neighborhood has an annual ornament exchange.

This year, we hosted the party at our house.

For our ornament, I picked up a bunch of matte finished shatterproof (i.e. plastic) ornaments from Amazon.com and shoved ‘em in EMSL’s Egg-Bot.

For the artwork, I found an elevation illustration of the front of a typical Eichler and used Inkscape to trace a relatively minimal line drawing of the elevation (attached below).

Worked great! The person that received their ornament loved it and, of course, then everyone else wanted one, too. No problem! I printed ‘em up in whatever color combinations folks wanted.

When loaded in Inkscape, the lettering and wreath on the door are in a different layer than the house line art. The Egg-Bot Inkscape driver makes it easy to print a layer at a time and, because the stepper motors stay powered unless you explicitly turn them off, you can easily swap pens after a layer is printed without knocking things out of alignment.

If you have an Egg-Bot, those particular ornaments + Sharpie ultra-fine markers are pretty much an optimal combination. You don’t even need to take the little hanger top off when printing. As can be seen in the photo on the left, the ornament part fits well into the cup of the egg holder and the plastic eye is held quite firmly by the spring loaded part of the Egg-Bot’s egg holder.

Eichler SVG