Filament review: PlastInk Rubber

05 Jan

Filament review: PlastInk Rubber

This flexible plastic filament from the Italian company PlastInk has been on my desk for a while and it's quite interesting! It's flexible, has massive friction and behaves like Nylon in many ways.

They actually don't call it plastic, but rather rubber. I wouldn't say it behaves like Rubber in any way, but it has some properties that make the comparison valid. The plastic prints with a nice shine and I've not experienced any dimensional deviations (2.85mm).

How Flexible is it?

The Flex is nowhere near as flexible as NinjaFlex. NinjaFlex will typically go back to it's original shape, but while this plastic stretches, it will loose it's shape if pulled really hard. It can stretch to 2-3 times it's own length before breaking, but actually breaking it is really difficult as it's super strong! It is so strong it's hard to cut the 3mm thread with just scissors and in this regard, it is quite comparable to Nylon. It's actually so solid that proper pliers are required!

It bends nicely, so it's not rigid like PLA & ABS, but is also extremely solid. I'd say it behaves something in between PETG and Ninjaflex, but more towards the PETG side. It's very different than PETG though. It has such an extreme friction that you have to spool it so it feeds nicely into the printer. If you don't, the plastic will get stuck in all possible parts of the printer. It simply must be on a spool as it doesn't slide - even on a hard surface. This frictional property is quite unique and makes it a good choice for printing grips and tool handles. This is also how it compares the most to rubber.

How does it print?

When spooled, this filament is very print-friendly. It can be almost as strong as Nylon, but it's more flexible. It can go fairly low in temp and does not warp very much. It is however rather hard to make large prints stick on glass with glue, so you'll have to use the heated bed & print with a brim so that the heat sucks it down.

I've printed this rim with several plastics. It's a good test-object as it has both solid and flexible parts. In PETG it's hard. In Nylon it can flex a bit but is quite hard. In Ninjaflex it is uselessly soft. With Plastink - it's something in between the NinjaFlex and Nylon. Thicker parts are stiff, but thinner parts are rather flexible. I still think Nylon is right for the rim's, but I like how the Plastink plastic feels! Very little stringing overall. It's also interesting to note that this filament does not require you to print slowly like NinjaFlex does. Despite it's frictional properties, it's stiff enough to print with bowden systems as long as the tube is Teflon / PTFE.

Surface finishing

One important thing I found out is that you can actually torch this plastic with a burner to get a smoother surface. You'll need to be careful doing this as it's very easy to apply the flame for too long, but if done carefully you can get some quite smooth results. Applying acetone to it seems to do very little. I put a sample in a small bottle of acetone, and there's no sign of it dissolving in any way. I can't seem to find a datasheet for the material, but it would have been really interesting to see what this is based on given it's resistance to acetone.

Skatefins printed with Plastink's white Rubber - seemed like a great idea for solidity, but the frictional properties really work against it being suitable.

Versions available

I initially got a couple small samples from the vendor, but found it so interesting that I wanted to test some more. I found an extra roll in the webshop and picked it up with some other original Arduino gear I needed.

The filament from Plastink comes in just 7 basic colors (Black, Blue, Red, Green, White, Yellow & Clear), but the exact same colors exist for Flex, PLA & ABS. This is very interesting when thinking about multi-material objects as you can make parts that look like a solid, single colored part, but has elements that can flex. I especially find the Crystal (transparent) rubber fascinating even though I have not tried it yet.

I was also sent samples of the PLA & ABS. I only tested the PLA and it behaved nicely, just like other high quality PLA I have. They've also just launched a series of metallic colored PLA that looks interesting. Despite a loack of information regarding the origins of the plastic, I just got an email that suggested that the plastic is produced by - a manufacturer of guitar strings. That could explain the nylon-like properties & strength.

BAMM settings for Plastink Rubber

The BAM Makeblock printer has a BulldogXL extruder with a Hexagon nozzle. I use the following settings with this material:

  • Temperature: 220C
  • Speed: 50-70mm/sec (can certainly go faster)
  • Retraction: 2.5mm @ 20mm/sec
  • Extruder tension: screws 2mm out
  • Heated bed: 50C
  • Fan: full


Filament review: ColorFabb PLA-PHA variables

23 Dec

Filament review: ColorFabb PLA-PHA variables

This is the filament I have the most experience with, on both good and bad. I purchased my first rolls 1.5 years ago. I had worked really hard for a long time and thought that I would reward myself with some prime quality filament so I stocked up on 10 rolls of all the colors I wanted!

Up until buying from ColorFabb, I had only used filament from high quality vendors like Faberdashery, Diamond Age and Ultimachine. Given all the positive comments I'd seen from others I expected the same (or maybe even better?) from this Dutch vendor. I was wrong. Months of clogged extruders ensued.

The cost of troubleshooting

I purchased spare parts for several hundred Euros from Ultimaker, just so I could exclude that as being the problem. I practically rebuilt the entire extrusion system without being able to solve the clogs. I even went as far to buy a proper Fluke HWAC multimeter so that I could measure temperatures properly. I also incorrectly blamed Ultimaker & Cura for some of the issues hmmm

Tons of tests...

I eventually came down to the conclusion that the clogs came from inconsistent diameters (sometimes above 3mm, far from 2.85mm) and very varying quality of the plastic. For most plugs I'd find some black thing at the nozzle tip while cleaning it out. I should point out that cleaning out an ultimaker isn't very simple as you'll often have to disassemble half the print head. Not a fun task to do several times a day, especially since I also printed 800+ meters of Faberdashery plastic on the same printer without a single filament error...

Replacement rolls

I wrote several polite emails with the support crew at ColorFabb and I have to say their support is really stellar. Nothing to complain about there. They told me that both the formulation & diameter had been off on several of the early rolls, and offered to replace all my rolls with new filament at no cost. That's pretty good service?

Problem was - when I got the rolls, some of them were better but by no means all. Argh... I've paid almost 450 EUR for those rolls, I have to make them work! After a lot of testing & rebuilds of extrusion system on my Ultimaker, I came to the conclusion that the only way I could print with them was going far above the recommended 210C. Even then it would clog now and then if I tried to go too fast. Others at my hackerspace had similar experiences, but a friend using 1.75mm Colorfabb filament never has issues? My Ultimaker Original is equipped with a 100% original extrusion system and the only speciality is the added dual extruder & heated bed. None of these should have any effect on the printing.

New printer, new problems

I solved most my ColorFabb problems by printing really hot and cooling the Ultimaker hotend down with an extra fan as I printed. If I tried to go anywhere near their official recommendation, the printer would clog right away. This worked so well that when I built my new printer, I was completely flabbergasted when I got similar problems here. The new printer had an E3D hotend that I had heard tons of positive feedback on. As soon as I added ColorFabb's PLA/PHA, the printer choked unless I printed at 20-30C above the recommendation.

After a month of trying to solve the problem without using extra heat, I gave up. I then realised that my roll of Ultra Marine Blue didn't have a consistent color? The color varied quite a bit along the roll. I contacted ColorFabb and yet again they replaced the roll. Excellent service, and this time half the roll have printed nicely. Strange?

Tangles! I never had that with any other vendor of plastic on spools hmmm

The PLA / PHA combo has major differences from other vendors. One is the addition of PHA, another bioplastic. It is apparently this that gives this PLA it's shine and makes it less brittle than other PLA. I'm by no means an expert on bioplastics, but there is something that makes this PLA/PHA mix more prone to stick to the inside walls of the extruder. Most often, you'll pull this buildup out with the filament after a blockage, but some will remain and must be removed with the "Atomic pull" method.

I've learned that most industry players use PLA from NatureWorks. ColorFabb buys their PLA from FKuR Kunststoff in Germany. I dunno what to say other than that it has some other (and less desirable) properties than the NatureWorks PLA. ColorFabb did however tell me that they only use NatureWorks PLA in their transparent PLA filaments and sure enough - it performs a lot better.

Colorfabb's response

ColorFabb says that the printer settings may vary (even among the same model) and that their recommendations can't work for everyone. I must say that I find frustrating to hear that from a vendor when all my 3 printers (PrintbotJr, Ultimaker Original, BAMM) as well as friends printers need to go to the same high temperatures to extrude it well. What makes this even more frustrating is that companies like MadeSolid publish guidelines for lots of printers and these worked for me right away?

I am now printing successfully with PETG from MadeSolid, PLA from Faberdashery, some really old ABS from Makerbot (back when they made 3mm filament), ABS from Protoparadigm, Proto-pasta's carbon fibre infused PLA, 2 year old PLA from Diamond Age, NinjaFlex, PLA/ABS/flexible rubber from PlastInk, PLA from Ultimaker and even Taulman 618/645 Nylon. Not a single blockage with any of these, but as soon as I insert the PLA/PHA mix from Colorfabb, my extruder will clog up. How fast this happens will vary, but I can't trust it for longer prints.

I just had to throw away two entire rolls of white PLA/PHA since the quality was so inconsistent that the layer height varied so much it was clearly visible (see below). Printing the same object with the same settings using Silver colored Ultimaker PLA gives me excellent looking results:

They're so different that you'd think it was printed on two different printers? This really is a shame as my two black rolls of PLA/PHA (made the same month!) will produce great looking results, even at fairly low temperatures???

I have completely given up on ColorFabb and it's a shame as they make so many cool things such as WoodFill, CopperFill & BronceFill. I just can't afford to spend more time on it as I've easily spent more than 100 hours cleaning out nozzles, solving clogs and failed prints. That's bad for business and not what I'd call "production quality". It's simply too inconsistent. I have a "trick" of working with it that "sort of" works and that's doing 5-6 atomic pull's with Taulman 645 Nylon before anything more than tiny prints. I'm also printing at speeds far higher than I like (due to the mass of the 30x30cm heated bed). This causes bandings in the prints, but then at least I can use the filament rather than just throw it away. It'll still get me plenty of jammed nozzles though.

Since MadeSolid now sells 15 different colors, so I'll get my PETG from them instead. As for PLA - rumours say that Faberdashery will soon begin shipping their 28 different plastics on spools. I guess I might buy my xmas filament from them instead.

BAMM settings for ColorFabb PLA/PHA

The BAM Makeblock printer has a BulldogXL extruder with a Hexagon nozzle. I use the following settings with PLA/PHA from ColorFabb:

  • Temperature: 220-240C
  • Speed: 70mm/sec (faster = less jams / clogs)
  • Retraction: 1.5mm @ 20mm/sec (less retraction = less deposits)
  • Extruder tension: screws 0.0mm out (solid pressure)
  • Heated bed: 50C
  • Fan: full (to compensate for excessive temp required to prevent plugs)


Teaching with robots

20 Oct

Teaching with robots

The last two years I've done a course in at Westerdals Oslo School of Art, Communication and Technology (formerly NITH). The school offers Bachelor & Master studies in informatics and I've been brought in as a teacher on the topic of Embedded Systems. The course (200 hrs total) is a volunteer topic for third year students that covers all the basic use of Microcontrollers as well as some Embedded Linux.

It's been a great experience and I get to play santa - giving students a customised version of this kit. 4Tronix have been very helpful in making me a super Arduino-kit that covers the entire curriculum at a price that the school can live with. The only part of the curriculum that isn't covered by this kit is robotics and motor control. This year I think I've found a near perfect solution that I though I'd share with other educators.

First year - cheap robot kits

The first year I did the typical thing - I looked up various robot kits and grabbed what I thought would be a decent kit. The problem with this approach was that I didn't know what kits were good and not. Price was also an issue. The budget ($150/student) only allowed me to get 4 kits. With 28 students, that wouldn't work too well so I sat down and designed the NITH Penbot. This little Open Source robot uses cheap stepper motors to navigate & a servo to lift a pen. That way you have a robot that can be printed in 40 minutes (body + 2 wheels) and the students could build them with the components they already had in their kits.

It didn't go bad at all, but a lot of time was spent on the assembly. The focus of the course is software for hardware, not soldering/gluing/crafting. Due to the time needed to put the kits together, we didn't do much robot driving the first lesson (4 hours each) and had to postpone it to the week after. This in turn caused other problems as the students needed their Arduino's so as soon as the robot driving was finished, they had to dismantle the whole thing to be able to do other exercises. We also realised that while popsicle sticks are a cheap building material, they're not very solid at all. In other words - my solution worked but was not ideal. I knew I had to find a better solution for next year.

Maker Faire Oslo

While teaching at NITH, I was helping my kids building robots at home based on the kits from MakeBlock. My son got a Robot Starter Kit first, but when my daughter saw how much fun her brother had - she wanted one as well. Perfect! Here I'm getting my daughter to jump head first into STE(A)M education! My son did all of his robot alone (apart from the remote), but I had to help my daughter quite a bit. The building itself went quickly, but her project required custom hardware & software so she couldn't do it all by herself. They had their own stand at MakerFaire and it was a big experience for them both!

Having seen the quality of the Makeblock kits, I instantly bought some kits for myself. Over this last year I've built several robots and even a 3D printer based on this system, so it was obvious to think about using the same robot kit with the students.

Second year - Makeblock

For my second year, I now have 34 students! More students = more kits. I was able to convince the headmaster that since the Makeblock kits could be reused across more years, we should spend the extra money. I split the students into 8 teams & we got started. The teams were split into two - one half focusing on building, the other on software & picking up batteries (not included).

A nice thing about the kits is that they come with instructions for two different robots that each have their merit - a tracked vehicle or a wheel driven robot.

The students could of course have improvised and built other robots if they had more time, but these two are a good starting point. I had deviced a challenge in the form of a labyrinth that the robots had to navigate. A tracked vehicle will usually slip if you drive too fast, so driving slowly is key with this bot. The wheeled robot is easier to contol precisely, but no team selected that design initially. The "tank-design" is just much cooler looking I guess?

I'm very happy with choosing Makeblock over typical Arduino-style kits with plexi and tiny screws. The first team had their robot kit up and running in only an hour! There were practically no questions about how to build the bots and since the robot kits have their own Arduino with builtin motor drivers, there was no need to disassemble the robots in between classes. The only issue we had were a beam that was too short and an Arduino board that didn't work 100%. This was no problem since we had a spare kit, so we used parts from that.

Here's a short video from both the building and the competition (with some cheesy music from the Youtube video editor):

Summing up

As opposed to the previous year, the students quickly understood the difficulty of programming autonomous robots. This caused them to come up with various mechanisms using code to better detect the surroundings. Many tactics were tried and we all had great fun looking at the results. If this was a robotics course, we'd have much more time to dwelve into some proper problem solving. With the 4-5 hours we have available, it's only a small introduction to a much larger topic. The students loved it though and some now even blame me for having given them a new hobby.

I achieved my main goal of getting more time dedicated to coding the robots, rather than building them. Nothing was destroyed and it's now all nicely packaged for next years students to use the kits.


Filament review: NinjaFlex rocks!

06 Oct

Filament review: NinjaFlex rocks!

I've been meaning to test the flexible NinjaFlex materials, but having an Ultimaker made that impossible. Flexible filaments and bowden tubes don't play well as the friction of the plastic makes it curl and stop. With the new BAM printer, I have a direct extruder mounted just above the hotend. This is the ideal setup for flexible filaments and with the newly fitted Bulldog XL extruder it's a snap to change materials.

It's incredibly strong!

I can't quite get over how solid objects printed with NinjaFlex are. They're soft in that they can be curled together, but will regain their shape easily. If you print a single wall of NinjaFlex (0.4mm thick) it will take a lot of force to tear it apart. My first print was exactly that - a single wall stretchlet.

My first reaction was how soft it felt? Then I tried to tear it apart and I failed? I gave it to my teenager son, but he also couldn't tear it apart. I then put my foot on it and pulled with full force by two hands... It expanded to 5-8 times the original length and then snapped just like a rubber band. Only when it snapped (main image) could you see any sign of layer separation. Amazing stuff!

Uses for flexible materials

The elasticity offers some very desirable properties. For instance, a 2-perimeter bracelet can also be used as a hair band in a crisis. It is perfect for making noise dampening rubber feet for your Makeblock printer, BMX grips, phone bumpers and RC tyres. Fenner Drives that makes the NinjaFlex filament, recently came out with more colors including silver & gold! I'm really looking forward to play more with this filament. I picked mine up from E3D along with other parts, but you can find it many places.

BAM printer settings

The BAM Makeblock printer has a BulldogXL extruder with a Hexagon nozzle. I use the following settings with Ninjaflex:

  • Temperature: 220C
  • Speed: <= 30mm/sec
  • Retraction: 2.5mm @ 20mm/sec
  • Extruder tension: screws 2mm out (almost none as friction is extremely high)
  • Heated bed: 40C
  • Fan: none

If you go faster than 30mm/sec, the plastic will curl up inside the BulldogXL extruder.

Filament Review: PET+ from MadeSolid

28 Sep

Filament Review: PET+ from MadeSolid

Some time ago I posted some tests done with Colorfabb's XT plastic. I'm guessing that the people from MadeSolid read that and wanted me to test their PET+ filament? I love testing new plastics so of course I said yes to getting some samples!

Just like Colorfabb XT, the PET+ material from MadeSolid is made from PET plastic so I expected the two to be kind of similar. PET is the plastic used in drinking bottles and food containers, so just from that you know it's solid. It's much more solid than PLA as it's not brittle at all. It's stronger than ABS and extrudes at temperatures somewhere between PLA & ABS.

More colors

I had actually looked at the MadeSolid materials just the week before as they could offer both transparent, translucent and opaque PET+ filament with a decent range of colors as well. Just last week, Colorfabb also introduced some opaque colors, but at the same time they upped the required temperature from 220-240C to 240-260C making them harder to use for many.

As opposed to Colorfabb, the MadeSolid guys offer extensive printer profiles for their filaments It is quite interesting to see as this highlights how differently the various printers are tuned. A Leapfrog printer should be set to 225C, but a Makerbot should be at all the way up to 255C!


I really like how the final prints look. They come out glossy and the material is very easy to work with. There is a tiny amount of warp, but a brim is sufficient to hold things down on the build surface.

T-Rex at 0.2mm & UltimakerRobot at 0.005mm. One can clearly see that I need to tune the printer a bit more as I have some "wobbly" somewhere, but the prints look really good despite that.

I received about 5 meters of the clear & 10 meters of the white PET+. With this I printed quite a few tests, but I ran out of sample plastic before I got the settings properly dialled in for my printer. That is - I thought that I had it right, but when exposed to pressure it turned out the layers had not bonded fully?

I did some bonding tests and it seems that on my current Hexagon hotend, I need to go to 235-245C to get proper layer adhesion. Oh well...

The transparent PET+ actually seems a little easier to work with than the XT as I'm not getting these tiny blobs along walls that I do with XT. All the walls of the Raaco resistor-box came out looking perfect and the final print is so solid that I need pliers to damage it. When reflecting a light-source it also appears to be more shiny/reflective than the XT, though the transmissive properties are very similar.

Bridging & supports

Bridging was interesting. I had a model that has a decent bridge. It's 29mm so I didn't expect that to work, but initially it looked to be going well. Then the plastic started smearing onto the nozzle and things became really ugly. I set the print to pause, cleaned it up and kept running at a higher speed. That turned out to be a bummer. After a lot of cleaning, I realised that going slower was the best. Next time I'll use Slic3r instead of Cura so I can tweak the speed for bridges.

The print came out fine in the end and I was really impressed by how easy it was to remove the supports? That was of course related to the poor layer adhesion that I discovered later, but after testing some more it seems to be just as easy to remove PET-based support as it is to remove ABS.

I am really liking this plastic, so I just purchased some rolls with the translucent colors (red + blue) as well as opaque white. I wish that MadeSolid had more colors available (like translucent & opaque yellow, orange, purple & more), but I guess that'll come with time.

Next up for this weekend is testing flexible filaments. I have two rolls of NinjaFlex as well as "transparent rubber" from the Italian company PlastInk. Should be fun!

BAM printer settings

The BAM Makeblock printer has a BulldogXL extruder with a Hexagon nozzle. I use the following settings with PET+:

  • Temperature: 225-235C
  • Speed: 50mm/sec
  • Retraction: 2.5mm @ 20mm/sec
  • Extruder tension: screws 0.5mm out (quite solid pressure)
  • Heated bed: 40C
  • Fan: none

Just days after I sent my order, MadeSolid published a lot of new colors. Now they have 15 different colors to choose from. Pretty good!

Making a custom 3D printer controller

20 Aug

Making a custom 3D printer controller

While working on my new printer, I realised how ugly most reprap controllers are. All those I've seen use large SD cards & bulky oldskool LCD's with really poor contrast and viewing angles. Why not use Micro SD & an OLED screen?

You can actually build your own custom controller using any combination of screen, SD reader and encoder, but I couldn't find a good description of how to do it, so here it is. Setting it up with the Marlin firmware can however be a daunting task, so this article aims to document how I went about doing it.

I should start by saying that this is not "the right way" to do it, but I'm describing two of the many possible ways to do it. This description is for Marlin. If you are using Repetier on your printer, you may pick up some advice but the specifics will be different.

Picking the parts

My biggest annoyance with the typical LCD's used in these controllers is that if you're not standing directly in front of it, you can't really read the display. OLED displays use less energy than traditional LCD displays. They're easily viewed from any angle and have a fantastic contrast. I settled on one from that has the required 20 (wide) x 4 (height) character displays. These are less than 4mm (1/64 inch) thick and has good mounting holes. Cost $34.

The SD card reader was something I had picked up from DX a long time ago A straight SD reader based on SPI. I got the encoder from Adafruit and I found a standard buzzer that was fairly small in a drawer. Pretty much any screen, SD reader, encoder and buzzer can be used.

Putting it together

Next is the fun part of figuring out how your controller should look! Grab your components and try to lay them out as smart as possible. Next you'll need a way to connect them together. A standard perfboard cut to 125 x 35 mm (48 x 13 holes) is what I needed. Your needs will probably be different, but using perfboard makes it easier to lay things out and solder it once you know how you want stuff.

Another alternative is to design your own professional PCB using software like Fritzing. It would be a good first project, but it takes time to get the PCB produced. You can also add indicator LED's and other custom components if you want to, but these will require you to add more custom code.

Finding your way around Marlin

I have a somewhat varied programming background, but C++ isn't exactly my native tongue. That's also my reason for doing projects like this - to learn more. I find the Marlin codebase a bit confusing. The root file is Marlin_main.cpp. The Arduino IDE will make a copy with .ino extension of this file when you start up the Arduino IDE.

At the top of this file is a load of #include statements. These are mostly files full of #define statements that are replaced by the compiler every time you hit "compile", but they also contain methods that will reside in a "global/root" namespace. Take the fairly central file "stepper.h". This is the header file for "stepper.cpp" that controls how the printer moves. None of the methods here belong to a class. They're just "there".

Coming from an object oriented programming background, I didn't expect this. I guess there's things/limitations such as dependency on interrupts that can force certain ways of doing things?

As far as I know, the first control panel for Marlin was added by fellow Ultimaker owner Bernhard Kubicek (thanks Bernhard!). After this, many others have hacked in support for their own panels. Over time, the codebase, and especially the config files, have become a little messy so it can be kind of hard to navigate.

Implementing your own screen

More or less any screen can be used, but it will require some modifications to the Marlin codebase. The first you'll need is a small library that can print characters to your screen. Most screens will have standard functionality for this, so if you're lucky you won't need to write more than a little wrapper-code. In my case I received a barely functioning code snippet, so I had to do a little more work. You can find a ZIP-file with my Marlin implementation here.

These are the main functions that your screen class will need:

createChar(uint8_t, uint8_t[]); // custom characters such as temp meter
void printChar(char);

The clear() function obviously clears the screen and setCursor tells where the next character is placed on the screen. With these two and a print-command, you'll have all you need. But wait - print() isn't on the list? No, but if you look at my example OLedI2C.h class, almost at the top it says:

class OLedI2C : public Print

This means that the OLedI2C-class inherits all the functions in the print-class (Print.h) and expands on this. Without inheriting these methods, you'd have to write 18 functions to handle printing of all data types (uint8,uint16,char, bool, double and so on). The OLedI2C-class also "overwrites" the write-method. It changes the default behaviour of the Print-class to instead print to the screen we're implementing.

There's also two "special" commands in the list above. One creates custom characters (createChar) and the other prints it (printChar). These allows us the output graphical symbols for folder navigation, temperature, time and more. A standard "Character LCD" will typically have up to 8 slots for creating such symbols. If you're using a "Graphical LCD", you can create all the characters you want as long as you have the memory required. My implementation also has other methods, but you may not need these.

When you have a well working screen-class it's time to make the actual implementation that Marlin will use. You set this up as shown below.

Method 1 - modifying the existing classes

When you're building your own machine, you will need to make modifications to the Marlin firmware. There's two main methods to adding LCD support. The first involves adding it to the existing file "ultralcd_implementation_hitachi_HD44780.h" and use

pins.h - all I did here was to change the SDSS pin for my Megatronics 2.0 hardware (board type 701). Other than that I've kept all the default pins as defined. If you're using Ramps or something else, you'll need to look up what pins to use in the online documentation.

Configuration.h - Here I added a custom section for my screen:

#define OLED_SSD1311 // Oled based on the SSD131x chip series character display
#ifdef OLED_SSD1311
  #define ULTIPANEL
  #define NEWPANEL
  #define SDSUPPORT
  #define LCD_WIDTH 20
  #define LCD_HEIGHT 4
  #define LCD_I2C_ADDRESS 0x3c   // I2C Address of the display

The OLED_SSD1311 define is my main switch. If this is defined, it'll include the things below.

The ULTIPANEL enables encoder support. This is one of the more messier things in the codebase. This also enables other things but it does not cause problems for me. It would however be great if there was a generic define that just enabled just the Encoder and not other things related to SD card, menus & Ultimaker specific features.

NEWPANEL enables lots of LCD-related features, but is also used for Encoder-specific features. SDSUPPORT is really the only include that does exactly as it's name says. Width/height is used for menu scrolling and the I2C address is just there as it's "convenient to have". In my case I could just as well hardcode it in the class as all the screens of this type use the same address.

ultralcd.cpp - This is the main class controlling everything related to the screen and SD card file selection. It has static stub methods that serves as an interface for other implementations. Here I had to add an include-statement for my custom class:

#include "OLedI2C.h"

OLedI2C.h & OLedI2C.cpp - header and implementation of the custom OLED character display. You can also use a non-character display, as long as you provide the same methods mentioned above. Put these files together with your other Marlin files. I created most of this class in a small, separate project since uploading the whole of Marlin takes quite some time. For testing it's better to have a tiny project to test with or you'll be over-caffeinated well before lunch.

ultralcd_implementation_hitachi_HD44780.h - this is where you integrate an instance of your own screen. All that is needed is two edits. The first is to add the instantiation of your screen beneath the section that has the heading "Create LCD class instance and chipset-specific information". I added mine at the end of the if/elif/endif statements:

(other screens)
#elif defined(OLED_SSD1311) // OLED
  #include <OLedI2C.h>
  #define LCD_CLASS OLedI2C
  LCD_CLASS lcd;
  // Standard directly connected LCD implementations

These blocks are compiler arguments, so the whole block will be replaced at compile time and only the parts that are #defined will be included in the compiled code. Next is that you add your init-call to the lcd_implementation_init() method:

(other screens)
#elif defined(OLED_SSD1311)

This is the method I opted for as I generally like the way the typical Marlin LCD works. To go completely custom - read on…

Method 2 - creating your own implementation

What if you don't want the default contents on the display? What if you want to make a super-fancy, full color with lots of bitmaps-screen? Then you'll do the things above, but omit the changes to "ultralcd_implementation_hitachi_HD44780.h". Instead you'll want to replace the default instance of "ultralcd_implementation_hitachi_HD44780.h" and use your own file instead:

ultralcd.cpp - Remove the include at the top and instead add a toggle at the top of this file for the specific screen that included the right class if the OLED_SSD1311 was set:

#if defined(DOGLCD)
    #include "dogm_lcd_implementation.h"
#elif defined(OLED_SSD1311)
    #include "oled_1311.h"
    #include "ultralcd_implementation_hitachi_HD44780.h"

myCustomOled.h - In this file (can have any name) you need to implement your own version of all the methods in ultralcd.cpp. The class holds an instance of the custom screen and handles all the actual hardware.

Be advised that this approach is more time consuming, but you could of course just copy the contents of "ultralcd_implementation_hitachi_HD44780.h" and modify only the things you need.

Things learned

There's always something to learn when doing a new project that you can carry over to coding in general. For instance - when you get the Arduino/C++ error "someClassName does not name a type" this basically means that the compiler can't find the definition of the class "someClassName". If you look closely at the error message it will usually tell you where you need to add an #include statement so that the compiler knows what to do. Probably obvious to seasoned C coders, important info for me grin

By doing this I've now implemented a full library for a custom piece of hardware with only a little to start from. I had to read the datasheet carefully and there were several things I could have added. This is how I hooked it up to my Megatronics 2 board:

End result

Size, readability and looks was my main reason to do this project. I'm quite happy with the results when I'm comparing it to the two most common Reprap Controllers:

Not only is my custom controller smaller - it's also thinner despite using standard components on a perfboard:

Is it worth it? I think so, but it could certainly be a good product just to sell a super-thin controller like this. I only need a single one, so it's not for me , but someone should make a standard reprap controller that looks as good as the Panucatt Viki LCD, but with an OLED grin
Next up: printing a nice enclosure for it!

Useful reading

Here's some links that I found useful when solving this project:

Partial description on how to do this
#define's & pre-processing
Schematics for UltiPanel with rotary encoder

This also gave me a chance to do some extra documentation around the Megatronics 2.0 electronics that I use for the printer.

Why I’ll never use Windows Phone again

04 Aug

Why I’ll never use Windows Phone again

It's been a while since I posted a good rant. Here's one that's been brewing for some time. I refuse to belive that ANY Microsoft employes that ever had an iPhone or Android, actually tried to use Windows Phone for a full year. I have and I can tell you - it's utter bullshit. I don't doubt that a lot of talented people have worked hard to make it happen, but without someone capable of telling what is good and bad, you cannot succeed. The whole OS reeks of a lack of interest and use.

I gave it a full year as I figured they'd get som time to fix the major bugs. Despite three fixes delivered over the air, they have not solved anything that could help me like the platform. They have however added a menu with "Extra settings" that I'll never use.

Here's my 6 biggest annoyances:

The Search Button

This is my single biggest gripe with Windows Phone and the person that made this choice should be fired immediately. He/she has done irreversible damage to the company in insisting on this bug/feature. When I'm pressing the search button - it is ALWAYS in a context! I have ZERO interest in opening Bing (see below) when I'm clicking the search button - EVER! If I'm in Spotify - I want to search Spotify for a song. If I'm in my contacts list - I want to search for my contacts. If I'm in a browser, I want my PREFERRED search engine. This would be so easy to understand if you ever used this phone.

When more than 50% of all apps (including Microsoft's own) needs to implement it's own search button in software AND you have a physical one that does not do anything sensible - it would be obvious to most developers to combine these. In many apps there's actually a menu bar at the bottom of the screen just to show a search button. It must be some incredibly stubborn person inside the company that insists on this. That person cannot be using Windows Phone at all. After using it for a year, I now have a long list of (mostly shitty) applications. To change a setting I have to scroll quite far. Imagine how neat it would have been to search this list of apps instead of going to Bing.


Settings menu is presented as text, but non alphabetical. Why on earth is Flight Mode and (screen) Brightness not on first page, when Theme & Internet Sharing is at the top? How often will anyone Microsoft developers actually change their theme? And how many "average" users will ever use the internet sharing? And why use text rather than icons for a non-alphabetical list? I refuse to believe that a single hour of user testing went into this.

Internet sharing

This feature turns off at it's own will. If I turn it on - I really want it to be on ALL the time UNTIL I turn it off myself. I have no interest in power saving for this feature. I just want it to work an not turn off every time I take a minute to answer an email. It does not work the way it's implemented now. It's simply too annoying to use.

Common volume

There is one common volume setting on the whole phone. This controls both media playback, ringtones, speaker volume and haptic feedback. Turn it off and you'll walk for half a day enjoying silence. Then you'll panic and realize you've lost tons of phone calls, Skype calls, messages and other notifications. Smart smartphones knows that AT LEAST the ringtone must be a separate volume or people will screw up and if this is due to the smart-phone not being smart enough, they'll get a better phone.

Lack of apps

It's ok not to have thousands of apps just when you're launching something. It's ok that not all the major app vendors support you right away. You MUST however do some filtering and make some CORE apps. Not having a youtube app is unforgivable. I know Youtube is a Google property, but that's irrelevant. Without a proper Youtube-app, you only got half a smartphone. It's that important. Allowing more than 30 wrappers around the web version of youtube is not adding value. It is destroying value. If I have to download 10 bad apps just to get one that is good, I'll stop downloading apps. It's that simple. Throw out the shit, retain and promote quality.

It's ok to not make just as good apps as Google, but you need to have the basics working. The Maps-application that come with Windows Phone, fails to locate pretty much anything other than cities. If that's a feature, you should probably name it "City-search", but you should not call it "maps" if it cannot find features on a map. I've viewed maps in the app and stared on the name (written on the map) and despite this, the search feature is unable to find that very location. I dunno why, but there apparently no relation between the map and the search. This makes the app somewhat useless.

If you want to get thousands of QUALITY apps in your store, you need to make sure that the vendors of cross platform authoring systems add your export. Adding Windows Phone export in Adobe AIR could give you millions of new installs. All they'd need to do is to recompile and export. Unity already exports to Windows Phone and I'm sure quite a bit of the current apps come from that. Nobody will learn a new platform/OS unless it's from Apple/Google and you know you have a huge market waiting. If you're entering this market to compete with them, you'll need to make it super-easy to make apps. You cannot force everyone to get a PC and learn Visual Studio.


My WinPhone is a Samsung Ativ S. The specs are pretty neat. It should be lightning fast. When I type a URL in the browser, suggestions will pop up as I type. This is nice, but not when the first suggestion pops up 3 whole seconds after I started typing. As I try to tap any of these suggestions, the list will re-order, so and I'll open some random URL. Come on. This is just looking up and displaying a list. It's a very basic programming task. How can this possibly take three seconds on this hardware and why on earth didn't anybody notice this and fix it after a whole year?

Bonus grudge: Bing as a search engine

I refuse to believe that it isn't possible to make something better than Bing. If I'm at a silent party I will sometimes pull up my phone and have people suggest random things that we should search for using Bing. We'll then laugh together at the results. Yeah - the results are so bad that it's fun. They are for some reason much worse if searching from a phone than from the desktop. If I worked at Microsoft search department I'd be crying.

One example: at Bitraf I hosted a workshop about "Myke kretser" (Soft Circuits written in Norwegian). Just before the event I used Bing to see if they had indexed the page. This was a month after I put it up on The search for "Myke Kretser" returned 1970's NBA player "Mike Kretzer" first and then even more irrelevant results. Come on. Not even one of the two words are alike or has even remotely the same meaning? Google had it right two days after I posted the event on Meetup. Bing now returns the correct phrase, but links to my slides from the workshop (derivate) rather then the Meetup page (source).

Bye, bye

If I spent more time, I could probably come up with more than 30 solid software and usability bugs in Windows Phone. The whole OS is incredibly unpolished. In addition, my Samsung Ativ S phone has been randomly rebooting at least once a day. I originally attributed this to a software bug, but none of the updates from Microsoft/Samsung ever solved it. To be honest, I now doubt it's a hardware bug. Good riddance Windows Phone. It's been an annoying year with you. I won't go back…


Project: Makeblock 3D printer

13 Jul

Project: Makeblock 3D printer

Up until now I've had two 3D printers. My first one was the Ultimaker Original and it now has more than 4000 hours of printing behind it. An incredibly solid machine! The next printer was the Printerbot Jr that my son put together. I haven't seen much of it as he's more or less confiscated it, but it's been a great investment into making him try out some real engineering.

The Ultimaker Original is probably the best Open Source 3D printer available today. Now I've built a third printer from scratch, using the Makeblock aluminium extrusions that I've become quite fond of. You can find the build log here, but why did I want to make a new printer?

Makeblock advantage

When you are making a printer based on Makeblock it is really easy to adjust the design as you go. It's also easy to add new elements when you need it. Not only that. When I at some point retire the printer, I can re-use all the Makeblock parts for something else! Makeblock was started as a Kickstarter and they really listen to their customers.

Less hassle!

The single thing that takes the most time for Ultimaker owners is clearing out blockages. They don't happen if you're careful, but every now and then you'll forget turning off the extruder and the heat'll sneak up the pipe to cause a block. When blocks happen this far up in the extruder, it'll take 10-15 minutes to clean it out. The new all-metal hotend from e3d & extruder design solves this completely and changing filament is done in a snap. Over all, I'm REALLY happy with this!

Polulu DRV8825 FTW!

I'm using original Polulu DRV8825 stepper drivers. This gives me 1/32 stepping that is noticeably more silent than the typical A4988 drivers with 1/16 stepping. These are also more powerful, but in reality I'm not using that advantage. If you have a noisy printer, be sure to check this video for a comparison. They're a direct replacement for 4988's on most Reprap hardware, so odd are they'll make your printer more silent too.

More space

The new printer has a bigger print area (31 x 31 x 34 cm). This was one of the goals of the printer and I'm very happy that I managed to go even a little bigger than anticipated. For comparison - it's 32600 cm2 are more than 4 times the volume of the Ultimaker (7700 cm2). It makes levelling the bed a little harder, but it's totally worth it just to have the ability to print larger objects.

More materials

I've changed the design to a Direct Drive Extruder that takes up less space than the original design. This allows a second extruder to be added at a later time. A Direct Drive Extruder it has one major advantage over Bowden-based systems: it supports virtually all the materials I want to experiment with. Flexible plastics, nylon, wood, clay, bronzefill and more. The current setup allows the extruder to go to 300C. With modifications, I can go all the way up to 400C if I want to.


Using Makeblock makes the entire design flexible, but the compact extruder design itself is also quite flexible. One addition I'm working on is adding Dual extrusion as in this video. It's the best approach to dual extruders I've seen to date, so expect an update when I get this working! The design allows me to easily swap out the print head fairly easily so I can play around with extruding chocolate and other fun materials.

So - all in all I'm very happy with the printer! All issues are now resolved, so the design phase is complete. Only minor tweaks remain & the BOM is now online at For now the page contains links to resources & the bill of materials, but I'll also add build instructions to it later.

But - I've got more plans! My Ultimaker with 4000 hours of printing on it's back will soon move to Bitraf and in November I'll (hopefully) receive my first SLA-printer - the Titan 1!

Project: wifi-enabled RGB LED displays

08 Jul

Project: wifi-enabled RGB LED displays

Every now and then there's a project you can't say no to and this was one of them. is sort of Norway's version of Craigslist, a big online market where you can sell just about anything. As a marketing stunt, they opened a physical store downtown Oslo. I was called in via some friends in the agency that handled the project and they needed lots of things quickly. Since I was fully booked, I couldn't say yes to all the projects suggested so I passed some of them to my friend Thomas Winther who did a great job making an in-store Selfie-app using Unity & LeapMotion.

In the store they needed a way to show information from the website and this was the job I couldn't say no to. Apparently it isn't very easy to get hold of a wifi-enabled LED display that can pull data from the web? Also - most commercially available displays are small, monochrome and use tiny LEDs so they're not that visible when mounted high up on a wall. The agency wanted 5 large displays, perferably with more than one color display. Having recently read about Teensy 3.1 and the OctoWS library I promptly said I'd do it!

The Teensy microcontroller is a great alternative to using Arduino's in installations. It has a really fast ARM processor and lots of RAM, but it is still 99% Arduino compatible. This means that pretty much all Arduino code will run on it, but at blazing speeds. After installing a little extra software, you can use the normal Arduino IDE to program it, so it's really an "Arduino compatible". It's so compatible (and affordable @ $20!) that I feel that this is really the path that the Arduino Team should have taken instead of making bigger and more complex boards. Here's how the Teensy 3.1 looks next to an Arduino Nano. It's soo tiny that the Nano looks big!

For the parts, I could have saved some money by picking it up from different places, but I didn't have much time. I picked up tons of Neopixels & Teensy's from Adafruit since they'd ship the parts so I had them within a week. Buying parts from Adafruit really makes a difference since the whole process is completely trouble free. It's a little more expensive, but worth every dollar.

This is how the test-display looked when running the rainbow sketch:

Lovely, isn't it? You can see the neopixel strips lying in front. I stuck these to the back plate using the same clear silicone that I used to fix the panel to the front. The first test showed that we'd have to compensate a little for every 50cm as the neopixels are put together of 50cm segments and loose a few mm in the overlap between these.

Thanks to Jens Dyvik at Bitraf, making the wooden parts was short. Jens is really good at Rhino and CAM software, so the process from sketch to finished product was really swift. His huge Shopbot CNC'd all the lattices and backplates in one go! Nice to have good tools, right? Two things to note about the CNC'd parts:

  • When using MDF as material, make sure each protuding part has a certain minimum size or they'll break off easily.
  • Research carefully what kinds of silicone that will remain fully transparent over time. Most clear silicones will get a yellowish tone over time. The ones that are made for aquariums appear to be the most suited ones.
  • When exposed to heat for a long time, MDF will want to "bend". Make sure you stick it down properly to avoid too much maintenance.

Soldering and gluing together the displays took quite some time, but it was made a lot easier by Paul Stoffergren releasing these neat adapter boards. I added a 2.4Ghz radio to each of these and tucked it away on the back of each display. Here's a photo showing 1920 pixels running at once. Note that the Mac to the left is on full brightness! The displays are so bright that they're visible in daylight as well.

Each sign requires quite a bit of cable and with the amount of current going through them, this was the first electronics project I've made where I've had to calculate the correct diameter of each cable. A good learning experience!

I could have built a Wifi adapter inside each of the displays and in hindsight, that would have been an easier choice if it wasn't for wifi issues. What I went for instead was a server-client solution where a single box would connect to the internet as well as serve up a webserver that could be used to control all the 5 signs. It has a Teensy 3.1 that holds a custom webserver, uses cable for internet access, has a display that shows status and the IP address of the webserver as well as a nrf24l01 radio (2.4Ghz) that sends data to the signs. This is put together in a nice 3D printed box that is wall mounted.

It's a pretty versatile solution and it works rather well. There's two drawbacks to this solution:

  • The NRF24L01 radio's are dirt cheap, but they have a limited range and are affected by other 2.4Ghz radios (bluetooth, wifi & more)
  • The Ethernet library for Arduino is a synchronous API. When the device fetches data from the internet, it'll freeze a short while until the data is received.

None of those issues are big problems, but they're worth noting if you are building something similar. Initially I planned to use a Raspberry Pi to be the webserver, but it turned out to be really hard to make the NRF24 radios work reliably with GPIO on the Pi. I've since noticed that the NRF24 dislikes fast CPUs, so if you're trying to make this readio work on the Pi, make sure to add a delay to your main loop. The Teensy 3.1 is also too fast for this radio.

The final result is that you can use any device such as your phone to control what is displayed on each of the signs. I've also built some remote admin to it as well. Every time the displays power up they'll await instructions from the server. The server fetches API data such as how many tractors are for sale or what are the latest boats available, and sends this to the displays. It's super flexible and a true IOT solution.

Disregarding some (serious) mounting issues beyond my control, I really loved solving this project and you can check it out if you're in Oslo. 


After making this, my wife said that I should start making and selling these commercially. It's probably a good idea, but I really can't see myself selling LED signage. However - if you have some weird project in the Internet of Things domain - feel free to contact me. I love a good challenge!




07 Jul


I really love those squeezed-in weeks of work in between family holidays. It's a rare time to catch up on thing like blogging, reading & updating a few personal projects. I just finished reading The Martian by Andy Weir that I got recommended from @hpeikemo. It's a really thrilling book that I'm sure we'll see as a hollywood movie soon. The story is kind of a "Robinson Crusoe meets McGyver on Mars". After reading it, I gave it to my son who completed it in just two and a half day. Great summer read!

I finally got around to update my Arduino Companion app. It's ratings have suffered quite a bit since Android 4.4 is now pretty common and it took Adobe a LOT of time to fix the bugs. When the fix finally was available, I was stuck with client work and didn't manage to set aside the two days required to fix it. I can only apologise that it took this long.

It sucks to loose the 4.6+ rating on Android, especially since it's mainly due to ppl like Nicholas Castle that wrote the 1-star review to the right. I don't mind a 1-star review that says that the app does not work (when it does not), but this is kind of harsh from someone that hasn't even seen the app? It's not like he paid anything (it's a free app) or that I have a 100 person customer service department. I make the app on my spare time, I give it away and my email is listed below the app. Oh well. I guess I'll rather thank users such as John, Daniël, Luiz, Thomas, Tim, Bryce, Samantha and many others for nice and polite feedback with reminders to fix the problems. As soon as Apple approves the app, the more than 105.000 iOS users of the app can download the update to version 1.2. The more than 102.000 Android users can get it today. More than 200K happy users… Crazy isn't it? grin

The months since December is sort of a blur as I've done more client work than I usually do. The most fun commercial projects this autumn was building a series of custom wifi-enabled LED signs as well as working with UNO. After summer I'm really looking forward to teaching another half-year of Embedded Systems at NITH here in Oslo. There is something really special about seeing computer science students actually understanding the core operations that enable the computers they use every day. It's all just one's and zero's, but you don't really get it until you have to create the bits yourself by turning power on/off at the right intervals… The students were really happy with the course last year and I have plans to make it even more fun this year!

Since I've worked long days, I haven't had that much time for my hobbies but I've gotten quite far on building a X/Y robot that I have plans to complete before going to the Maker Faire in Trondheim in August. It'll be able to draw, print and probably also do some light CNC'ing when I'm finished.

Just before the summer holidays I managed to squeeze in two weeks to build a brand new 3D printer from scratch using Makeblock! This new printer will have a bigger build envelope, but it will also be able to use flexible plastics, nylon, wood and bronze materials thanks to it's construction. Read more about all the advantages here. With that you would think that this fills my appetite for 3D printers, right? Not quite. I spent my tax return on signing up for the Titan 1 SLA printer as well. It'll give me extremely high resolution models as well as solve my problem of printing parts over night without disturbing the family. That said - the Makeblock-based printer is much more silent than my Ultimaker. Looking forward to November & meeting the Titan!