Archive | September, 2012

Heated Build Platform (Take 3)

23 Sep

Heated Build Platform (Take 3)

Some months ago I added a Heated Build Surface / Platform to my Ultimaker and after getting the power supply right it's been a great addition to a already good printer. I can now switch between ABS and PLA print materials without any problems but overall the setup has felt a little "flimsy". I didn't know what to do with it until recently.

A couple weeks ago, I organized (what I think is) Norways first 3D Printer meetup and it was great fun to see all the different printers present. Mendel, Prusa, Huxley, Makerbot TOM, MB Cupcacke, a huge BFB Touch as well as two Ultimakers was on display and about 38 ppl came to watch. The initial idea was to just meet up with a few ppl from reprap.no, but given the general interest and this being set up through Bitraf/Meetup a lot more ppl came to see.

Looking at the printers and talking to others I started thinking about swapping out the glass surface for an aluminium surface. My architect friend Jim commented "why do you use glass? It basically resists heat?" and then William (that also has an Ultimaker) said that he had access to cutting aluminium at his school... A week later he had it ready. This weekend I set it up and I can totally reccomend using Alu over glass as a surface!

My new aluminium surface heats up faster and distributes heat much more evenly. Wheras glass would shatter from thermal stress if it was bigger than the (20 x 20 cm) MK1 PCP heater, the aluminium surface distributes the heat MUCH more evenly. This allows me to use the full 21 x 21 cm of the Ultimaker - a very nice bonus.

Below are a few images of the new setup and how I did it. Click any image to zoom.

The 22 x 22 cm aluminium plate is 5 mm thick. I first taped the MK1 PCB on top, marked the holes and then drilled the four 3mm holes. I also counterbored with 5.5 mm so that the top of the screws would be flush with the surface.

I use four 16 x 3mm screws and a nut to hold the PCB tightly against the aluminium sheet. I then stick these four screws into matching holes in the plywood surface that I use to adjust the height/levelling.

Here you can see the screws that I use for the levelling. They go through the "stock" Delrin pieces, but I've swapped the direction so I adjust them from below. this makes it much easier to tweak on the fly once the print has started. After applying a fresh coat of kapton to the bed, I printed the hollow pyramid that use for calibration and it turned out great. The price for such a sheet of 5mm aluminium is also not very scary. I'm paying something like $35 for mine, excuding the cutting. In other words - I now have both retraction and the build surface pretty much under control and a V2 nozzle is on it's way too.

Below is a picture of my extruder-drive designed by Bertho  It's a really great mod that does wonders for retraction, but I still have some issues with filament grinding and I need to solve this 100%. I this I'll look into some Wades extruder-feeders next to see if that can help the ever annoying problem of material grinding...

Warming up to browser apps

11 Sep

Warming up to browser apps

I recenty did a really fun game for my friends at Last Friday in Stavanger. The game itself was a typical fly-in-space-and-shoot-asteroids-type of game. A simple, but easy to understand concept. However - what was special was how you controlled the game and the size of the screen!

The display was projected on a 8x12 meters screen located right in the middle of the Stavanger town square. People walking by could just pick up their smartphone, open a URL and then play the game. I did the code for client, server and game/display while Last Friday delivered the graphics, the physical installation and helped out on bits and pieces.

This is the solution that we came up with:

  • JS/HTML5 game controller that works on any smartphone / pad / desktop
  • Node.js on the server with socket.io as the transport
  • AIR app for the game and display

Node.js kept a queue of clients waiting to play the game. This was sent back to the clients so they could see what position they had in the queue. The info was also sent to the huge game display that showed the game-queue in between games along with instructions on how to join. Once it was your turn, your phone displayed a "Get ready"-message and the game controls faded in so you could play.

Sounds simple? It wasn't all smooth sailing and here's some lessons learned along the way.

The original idea

The original idea was to use a local socket server and a native game controller-application that people would have to install. I wanted a challenge and thought this was a good project for testing the maturity of mobile browsers and node.js/socket.io that I had heard so much hype about. Last Friday liked the idea and I started making a "proof of concept" browser-app. This turned out to work really well and Last Friday could sit in Stavanger and play the game running on a display and server in Oslo without serious lag. Not shabby? I hacked together the concept in just one day, including learning node.js... Maybe the hype around node.js could have some substance?

As the game progressed we realized that there was no need for making a custom app and there was also no need to set up a special access point for the players. They simply connected through their 3G connection and that provided sufficient speed. Users with iPhone's got the best experience since they can use WebSockets. For Android the default Webkit browser can't do websockets, so socket.io (the transport used with Node.js) falls back to using HTTP-calls. We initially thought that this would prove to be a problem, but it worked rather well.

The solutions

I initially spent 2 days on the server, 2 days on the game/display and initially just 2 days on the mobile client. This is before some minor game tweaks and starting the dreadful job of fixing browser bugs and incompatibilities. That part took another 3 days and then some. Here's some lessons learned:

  • When making a game-controller, it's important that you can hold the button to repeat the action. The problem with this is that if you tap and hold an image in a mobile browser, the Save-as dialogue will appear. This prevents controller input and crashes spaceships... Mobile Safari has a super-neat css property called "-webkit-touch-callout: none !important". Adding this line in your CSS prevents the dialogue from showing, but - oh joy - this is a proprietary CSS tag so it only works on iOS devices.

    For Android, you'll have to hijack all possible events (ontouchstart, ontouchmove, ontouchend, ontouchcancel) for the image and then kill any default responses to this (preventDefault, stopPropagation, cancelBubble, returnValue AND return false).
     
  • Another problem with mobile clients and game-controller input is that if you drag your finger on an image, the browser thinks you're dragging it. As before - mobile Safari has a proprietary CSS-tag for this as well: -webkit-user-drag: none;
    Mobile browsers will also try to highlight selected objects. This can be also be turned off using webkit magic: -webkit-tap-highlight-color: rgba(0,0,0,0);
     
  • Using jQuery Mobile accelerated development overall, but it also caused some extra debugging when it "killed" the first fix for the above problem. I'm guessing jQuery Mobile comes with its own set of hacks and that we did something that cancelled something that our app need? Not sure how it resolved, but Edvard at Last Friday got it working again.
     
  • Calling "window.scrollTo(0, 1)" is the clue to remove the address bar in mobile apps. Works well, but not fault free.
     
  • Mobile clients don't really tell that they've closed a connection. To solve this we implemented a polling from the server that cleaned out clients that didn't reply within a reasonable time - indicating that the browser was wither closed or fully disconnected.

The game was made only for the annual ONS conference so unfortunately you can no longer play it. While having a short lifespan, the project was a great learning experience. I have to say that overall, I'm not impressed by the current state of mobile browsers. However - node.js really is a beautiful piece of Open Source software!

Node.js

Working with Node has more or less changed my mind about making apps based on Javascript. A library that allow you to learn, implement and run a custom server in just hours is nothing less than stunning. If you're a Flash developer reluctant to move into Javascript - I urge you to go check out node.js and work through this tutorial. It's fun to play with, you can easily use it with your Flash / AIR projects and you'll probably learn something new about Javascript along the way grin

Oh - did I mention the coolest part? As you can see from the screenshot above - the client was IRIS & NASA. I've actually made a space game for NASA! How cool is that?

The game in all it's 100m2 glory in Stavanger

Rock in the road

10 Sep

Ages ago since I posted some animation. I totally loved this one! The punchline is indeed very true.

Rock in the Road from SVAD Animation on Vimeo.

In other news - Arduino Companion now has passed 40.000 downloads across iOS and Android.

 

3D printing with Color!

08 Sep

3D printing with Color!

After having a 3D printer for some months I've realized that it's so much cooler to use plastic with the "right" color, rather than just printing in black and white. If you are printing with ABS plastic, the selection is somewhat limited and your best choice is shopping Makerbot (27 colors) or Diamond Age (22 colors). However - if you're printing with PLA plastic - you're in luck! There's a massive selection of great suppliers and you can also have translucent colors with varying finish. I've gone totally overboard in buying different PLA filament samples. At the moment, I have no less than 47 different colors!

I've found it really hard to find the right color for my projects. Many of these colors have fancy sounding names that make it harder. Another thing is that some suppliers take filament pictures in a dark room with a crappy camera, while others use high quality cameras and experiment with the lighting to bring out the colors. What I've really wanted is a single picture showing colors from multiple vendors in different lighting settings so that I can see how much reflection there is in Bling Bling Gold and how translucent the Amber Red really is. To help others wondering about the same, I figured that I'll make a simple guide by sorting the colors that I have and photographing them all in the same lighting conditions.

Below you can find pictures of all my filament samples photographed outdoors in sunlight. You can then compare that with the list below that shows the name of the colors and their supplier. As you can see from the list, my favorite suppliers are Faberdashery (offering 35 colors) and Diamond Age (offering 23 colors). Faberdashery is the shop that I would recommend to beginners as they ship by the meter! The minimum order is 5 meters, but being able to order by the meter makes me prefer from Faberdashery over Diamond Age. I can't really order a roll of 100 meters just to test a color to see if it works for a project, so it would be great if all PLA vendors realized this and offered "Sample Pack's" with 5-10 meters of each color that they stock (hint, hint...) If they did, I would probably buy more from them.

Click any of the images to go to Flickr for the high-resolution version (5000 pixels+). 

Note how the translucent colors change from white to the darker background

Notice how the translucency does not show really well here?

List of colors (use the number on the white base as reference):

  1. Robot Silver(Faberdashery)
  2. Silver (Ultimaker)
  3. Earl Grey (Faberdashery)
  4. Crystal Clear (Faberdashery)
  5. Translucent Natural (Filamentprint)
  6. Glowbug Yellow (Faberdashery)
  7. Glow-in-the-dark (Diamond Age Solutions)
  8. Flexible White (Ultimaker)
  9. White (Ultimaker)
  10. Pearly White (Faberdashery)
  11. Cherry Blossom Pink (Faberdashery)
  12. Punk Star Pink (Faberdashery)
  13. Solid Purple (Filamentprint)
  14. Princely Purple (Faberdashery)
  15. Lilac Pearl (Diamond Age Solutions)
  16. Lapis Blue (Faberdashery)
  17. Blue Translucent (Ultimaker)
  18. Sapphire (Diamond Age Solutions)
  19. Galaxy Blue (Faberdashery)
  20. Translucent Blue (Filamentprint)
  21. Electric Blue (Faberdashery)
  22. Solid Blue (Filamentprint) *
  23. Glacial Blue (Faberdashery)
  24. Blue Translucent (Ultimachine)
  25. Translucent Green (Filamentprint)
  26. Jade Green (Faberdashery)
  27. Emerald (Diamond Age Solutions)
  28. Greenery Green (Faberdashery)
  29. Village Green (Faberdashery)
  30. Green (Ultimaker) ***
  31. Cyber Yellow (Faberdashery)
  32. Mellow Yellow (Faberdashery)
  33. Yellow (Ultimaker)
  34. Solid Yellow (Filamentprint)
  35. Translucent Yellow (Filamentprint)
  36. Buttercream (Faberdashery)
  37. Orange (Ultimachine)
  38. Squeezed Orange (Faberdashery)
  39. Amber (Diamond Age Solutions)
  40. Transclucent Red (Filamentprint)
  41. Fire Truck Red (Faberdashery)
  42. Red (Ultimaker)
  43. Ruby (Diamond Age Solutions)
  44. Woodland Brown (Faberdashery)
  45. Solid Black (Filamentprint)
  46. Bronze / Gold (Ultimaker)
  47. Bling Bling Gold (Faberdashery)

* = is indeed translucent and not solid?

If you have any idea on how to make this more useful to others (or other feedback), plese leave a message below. If you're a PLA vendor that want to send me some samples to include in a future follow-up post, email me at jenschr [at) gmail <dot> com. And yeah - next time I'll use a raft when printing the holders wink