Wednesday, 27 August 2014

F3D, a prototype 3d printer for food

Back in February I was contacted by Hillel Baderman, one of a group of 4 talented undergraduates from Imperial College London. They were developing a novel 3d printer capable of printing, as well as cooking, food pastes.

CAD render of the 3d food printer design - all images from

At the time several solutions existed for printing with different pastes, the most well known in the the RepRap world was RichRap's Paste extruder, and there was a great writeup of Unfold Fab's work with clays in issue 3 of the RepRap magazine. For this project they wanted to go a couple of steps further, with 3 paste extruders and have the printer cook the extruded food. 

Additionally, they wanted the printer to be made largely from open source material in spirit of the RepRap community. The Duet+Duex4 combo provided an ideal solution for their food-printing/cooking project, as it allows printing with up to five different extruders. They edited the RepRap firmware to suit a paste extrusion system and added a relay to control the Halogen oven.

Here is a video of it printing "F", "3", "D" letter cookies:

Cooking is achieved using a 1400W halogen oven which allows for fast heat up and a simple control mechanism.

The crowning glory of the prototype system is the ability to print a pizza; dough, tomato puree and soft cheese!

The three stages to printing and cooking the pizza.

Their prototype proved to be very successful – their final version printer could print the pizza in just 20 minutes and it certainly looks more appetizing than some of my student creations ever did.

They published the full project work online at A great achievement in a short time and I really hope they can continue to work on this and take it further!

Friday, 22 August 2014

Arduino based IDC cable tester

We use IDC terminated ribbon cables for the PanelOne LCD controller that we use in our Mini Kossel 3D Printer kits. Its a slow process to test these cables by confirming that the LCD, SD card, encoder etc all work so I looked for an IDC ribbon cable tester. I found a few online but they ran to ridiculous prices (~£250+) so decided to make one using an Arduino Mega and some strip board:

As can be seen there has been no time wasted on making it look pretty, in fact it is probably the ugliest circuit I have made, ever, however it works and tests cables!

Stripboard IDC cable tester circuit - hot glue used to protect questionable soldering

The circuit schematic includes the connections for a PanelOne as I had a prototype board that was no longer being used, however any 20x4 LCD screen and push switch would work.

It uses the internal pullup resistors on the arduino pins so no external components are required other than the connecting wires and headers.

I wrote a simple Arduino sketch to check the cable and display the results. It finds open and crossed wires:

Arduino Circuit Tester - Start Screen

Arduino Circuit Tester - Open Circuit

Arduino Circuit Tester - Crossed wires (plug on backwards)

Arduino Circuit Tester - Good cable
The next step will be to make a circuit tester for the 50 way Duet-Duex4 expansion header cables however that would require 100 pins which is more than is available on the Mega.... I2C port expanders here we come! Also I think a PCB will be required as 100 wires on stripboard would take far too long.

As usual its all open hardware and software - available on the Think3dPrint3d Github.

I hope someone finds this useful and I would be interested to see if anyone else tries this!

Monday, 18 August 2014

PanelOne LCD screen for 3.3V and 5V electronics

Following on from this post on using the PanelOne LCD screen with the Duet at 3.3V, this post shows the modified design for the PanelOne that uses a 3.3V LCD.

While I managed to get a specific LCD work with both 3.3V and 5V, it was an edge case. It was not transferable to other LCD manufacturer's displays and it may have shortened the display's life. To that end I changed the specifications to use a 3.3V LCD. This display is actually a 5V display with a voltage inverter and divider on board that provides -2V to VO.

PanelOne circuit board view from the back with 3.3V LCD

Close up of the -2V circuit on LCD

This -2V means that with 3.3V supplied, the voltage drop is 5V which the display driver chip needs to run the LCD pixels.

For reference here is the Schematic again, now on version 2.1, with the -2V on board annotated:

So the contrast pot on the PanelOne circuit board is acting as a variable resistor setting VO between 0 and -2V, and hence the contrast between "off" and "on" pixels on the LCD.

For a purely 3.3V use there would be no requirement for the 5V-3.3V LDO and the 4050 level shifter for the SD card. However, I want to be able to use this on both 3.3V and 5V logic with minimal changes. For the display to work with 5V we have two options. The first is to use a 5V display rather than 3.3V, thus requiring only 1 PanelOne circuit board design. Alternatively we could use the same 3.3V display and disable the -2V on VO. The simplest way to do this is to remove the resistor R6:

Close up of the -2V circuit disable with R6 removed

I have left it soldered on at one end so it's easy to switch back and forth. Obviously a switch would be even better (cue email to LCD manufacturer to consider updating their design).

This design is now proven on both 5V (RAMPS) and 3.3V (Duet etc) electronics:

PanelOne 2.1 with RAMPS

PanelOne 2.1 with Duet

The connection to the Duet is still made with single pin connectors and the RepRap Firmware does not yet support an LCD screen although the community (and me!) are working on it.

As always our designs are open hardware (CERN OHL 1.2) - the latest KiCAD files are available on our Github. In addition the updated case is also shared in STL and OpenSCAD on github.

We will be using the PanelOne v 2.1 circuit board in our Kossel Mini kits once our current stocks of 5V-only PanelOne boards are used up. In addition we have listed variations on the webstore, where you can choose the 5V only version or the 3.3V version (which you can adapt to 5V using the resistor de-soldering method outlined above).

Tuesday, 5 August 2014

Kossel Mini - Heated Bed

We are finally ready to release the Heated bed kits for the Kossel Mini. It has taken a bit of time to confirm our preferred design and source the components in bulk. We have been running two test printers for almost two months now with this solution and will be writing to those who have already bought a kit shortly to offer them the upgrade first (as promised!).

Heated Bed

After investigating a number of options (PCB, Silicone heater, kapton heater on borosilicate glass, kapton heater on aluminium plate) we went for a Kapton heater on an aluminium plate.

The heater is rated at 10 A, giving an output of 120W at 12V, and supplied complete with a MF58104F3950 thermistor taped to the centre of the aluminium plate (thermistor table  on chirpy's blog.  Wires are prepared for fitting to RAMPS. We have run these heaters continuously at 125ÂșC for 24 hours on our Kossel prototypes without any problems, and find that they heat up significantly faster than standard PCB heatbeds because of the higher power density (6kW/m2 vs 3kW/m2)

The aluminium plate acts as an excellent heat spreader for the Kapton heater and is easier to mount than borosilicate glass as it can be drilled and countersunk.

This is mounted in a "sandwich" with an aluminium-foil-tape covered cardboard insulator below (thanks to nophead for this design of heat insulator from the mendel 90).

This allows for various print surfaces to be clipped onto the aluminium plate, e.g; mirror glass with glue stick for PLA, Tufnol for nylon 618 or mirror glass with ABS juice or kapton for ABS. Best of all you can use multiple mirror plates plates to quickly swap on a new one while the other one cools.

In order to keep the electronics cool we have added a fan under the heated bed, complete with splitter cable:

And redesigned the bed mounts and z-probe retractor:

In order to power the bed we decided to add a second, 10A, laptop power supply:

And a matching second socket to the USB/Power plug plate. Because some customers have decided to use an ATX or similar power supply to power the printer and the heated bed, the second 10A power supply will be an optional extra in the kits.

The Mini Kossel Documentation has been updated to describe how to fit the heatbed either during initial build or as an upgrade. It's straight forward (mostly described by the pictures above).


The T3P3 github has a slightly updated version of Marlin that we distributed with the kits so far, to include a thermistor table for the heated bed thermistor (number 11)

There are a few of things to consider when calibrating; the bed is now higher by ~10mm, and different bed (and nozzle) temperatures will lead to slightly different  Z = 0 positions due to thermal expansion. For example with a cold bed and cold hotend the Z-height was ~0.2mm lower that with a 80C bed and 225C nozzle.

The easiest way to handle this is to carry out the calibration steps (as described in my previous blog post) with the bed and hotend cold. Once the bed is level and there is no doming then you can measure the difference between Z = 0 on a cold bed and with the bed and nozzle at the centre print temperature for various materials. I measured my test printer with the heatbed between 60C and 110C and the hotend between 185C and 240C and there was <0.1mm of difference in Z height: all were ~0.2mm above the cold bed height.

I used the standard method of a piece of paper as a feeler gauge under the nozzle, stepping down by 0.1mm in Pronterface until I could feel the nozzle dragging. Be careful not to burn yourself on the hot bed! Once you have confirmed the difference (probably 0.2mm) then edit configuration.h :

#define MANUAL_Z_HOME_POS = 238.4 //cold = 238.6

and re-upload Marlin.

Z-probe retractor

The Z probe retract position will have slightly changed in X and Y and gone up in Z due to the new Z-Probe retractor

The documentation describes how to modify the Z-probe retract position in Marlin to compensate.

Extruder steps for different materials

Another thing to consider is that when using different materials, the extruder hobbed insert will bite into the filament more or less, changing the exact extruder steps per mm. With our standard mini extruder we use ~650 steps/mm for PLA. I found the following for different materials on a test printer:

ABS 660
Nylon 618

The easiest way to handle these changes is to use:

M92 E650

in your start g-code and have different start g-codes for different materials in Slic3r.

Getting one!

We will be contacting those who have already bought a Mini Kossel kit from us first and offering a discounted upgrade kit, once these orders have shipped the upgrade will be available for general purchase.

All kits sold from now will have the option of a heated bed.

Saturday, 19 July 2014

Duet, 20x4 LCD screen and SD card.

Although the Duet communicates over Wifi and I can connect to it with a web browser on my phone, I still get many requests for a LCD based controller. I agree that being able to use a simple controller for quick, common functions is a good idea, things like homing the printer, preheating, starting a print etc. Think3dPrint3d have been providing controllers for older electronics that do this since we started, first with the Panelolu then with the Panelolu2 so it's time to port this to the Duet.

I decided to keep it simple to start with, so rather than get the Panelolu2 working, which would require I2C and headaches with 3.3V and 5V logic, I started with the PanelOne, a very basic LCD, Encoder, SD card combination which we are using on our Kossel Mini Kits.

Using a 5V LCD with 3.3V Microprocessor

This was the first hurdle to overcome. The HD44780 standard that these character LCD displays work on states 2.7 to 5V should work fine for the logic signals, however the LCD screens incorporating these chips are a lot more restrictive: 4.8-5.2V for the logic signals. Given the conflicting information I decided to modify a PanelOne prototype board by hand and give it a go. The key is to keep the logic signals separate from the backlight voltages. The schematic is below:

The major change is the addition of the "VCC" power into pin 2 of the LCD from pin 8 of header P1. Previously this was a straight 5V, now this should be able to be either 5V or 3.3V depending on the logic of the Microprocessor we are interfacing with. I connected this up and edited the "Hello World" sketch within Arduino 1.5.7 (1.5.6 r2 works as well) to use the following pin definitions:
                            Arduino pin number  Duet Pin Name  Expansion header pin
 * LCD RS pin to digital pin D67                 PB16          (32)
 * LCD Enable pin to digital D23                 PA14          (10)
 * LCD D4 pin to digital pin D19                 PA10 RXD0     (14)
 * LCD D5 pin to digital pin D18                 PA11 TXD0     (13)
 * LCD D6 pin to digital pin D17                 PA12 RXD1     (12)
 * LCD D7 pin to digital pin D16                 PA13 TXD1     (11)
LiquidCrystal lcd(67, 23, 19, 18, 17, 16);

Happily this worked!

I tested this with two other LCDs (old generic ones off eBay) and it worked with them as well. However as it's outside the guidelines of the LCD manufacturer's datasheets there is no guarantee that all types of HD44780 character LCDS will work in the same way.

Reading an SD card over SPI

The Duet's build in SD card supports SD2.0 and uses a 4 bit HSMCI interface. However it is often convenient to use an SD card reader mounted next to the screen, so I want to support SD over SPI which is how older 3D printer electronics and hardware interface with SD cards. The Arduino environment has a simple SPI SD library that worked straight away. The only customisation required is to make sure SD.Begin() uses the correct CS pin:


For this example I used the SPI0_NPCS0 pin which is arduino digital pin 77. I combined the listfiles example sketch with the LCD display to list the first 4 files on a SD card:

The code (an adaptation of the listfiles example sketch):

#include <SPI.h>
#include <SD.h>
#include <LiquidCrystal.h>

File root;
// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(67, 23, 19, 18, 17, 16); //RS,E,D4,D5,D6,D7

void setup()
  lcd.begin(20, 4);
  lcd.print("Reading Files...");
  delay(2000); //delay or else the message will not be displayed

  if (!SD.begin(77)) {
   lcd.print("initialization done");
   delay(2000); //delay or else the message will not be displayed
   lcd.print("listing 4 files");
   delay(2000); //delay or else the message will not be displayed
   root ="/");
   printDirectory(root, 0);

void printDirectory(File dir, int numTabs) {
  int row=0;
   while(true) {
     if(row>3) return;
     File entry =  dir.openNextFile();
     if (! entry) {// no more files
     for (uint8_t i=0; i<numTabs; i++) {
       lcd.print(' ');
     if (entry.isDirectory()) {
       printDirectory(entry, numTabs+1);
     } else {
       // files have sizes, directories do not
       lcd.print("  ");
       lcd.print(entry.size(), DEC);


This sketch, and the adapted Kicad schematic are all on the Think3dPrint3d github.


I will test more LCD screens and hopefully will be able to get the next batch of PanelOnes compatible with both 3.3V and 5V.

The big job will be to port and adapt the Marlin menu system to RepRap Firmware. If anyone wants to assist with this project then drop me a line and I may be able to help with some hardware (duet board + LCD screen).

Thursday, 26 June 2014

Kossel Mini - feedback and tweaks

After a manic month or so shipping Kossel Mini Kits we have been getting loads of feedback from those building the printer. A lot of the feedback was around the documentation which we have continued to adapt and develop, trying to ensure that if we get asked a question a couple of times we answer it in the documentation. Please keep this feedback coming - we really appreciate it!

Endstop trigger point adjustment

After re-reading minow's very helpful blog on in depth calibration we decided to make a minor change to the endstop trigger function. Previously the endstops triggered on the top of the X,Y and Z carriages:

These have been replaced with slimmer endstop mounts and a modified Delrin V-roller carriage adapter with M2.5 socket cap screw:

This means the endstop trigger point can be finely adjusted in order to level the bed very accurately.

The Delrin V-roller carriage adapter is modified from Haydn Huntley's design, while the slim line endstops are from Johann's original design. The modified files are available on our Github.

The changes can be retrofitted to existing Kossel Minis by simply drilling a hole for the M2.5 to self tap into and printing the thinner endstop mounts. It is fiddly to drill the holes in situ, even using a hand drill, so one Delrin V-roller can be removed to allow the carriage to be removed for easier access. We will shortly publish a new chapter of our Mini Kossel build manual showing this process in detail.

Endstop Trigger point calibration procedure

This process will be incorporated in the manual as soon as we are confident we have explored any downsides to this approach.
The endstops on the X Y and Z pillars should all trigger at the same distance from the bed. This procedure will show how to set these.

Start by using a ruler or measuring tape to set them approximately (within 1mm) at the same distance up the pillars.

Next fine tune each endstop trigger point in turn. This is an iterative process as each adjustment alters the others slightly. First adjust the Z height in the Marlin firmware to a few mm more than it needs to be and upload the firmware:

#define MANUAL_Z_HOME_POS 255

Then work through steps 1-5 below. Note you should do this with the extruder (and heated bed if you have one fitted) at the printing temperature.

  1. Find the X axis endstop trigger point
    1. Home the printer (G28)
    2. Move the extruder to just in front of the X pillar (G1 X-76 Y-43 Z10 F7000). The tip should be approximately 5mm above the bed.
    3. Lower the extruder using Pronterface until a piece of standard 80 gsm printer paper just drags on the nozzle.
    4. Make a note of the Z height using M114:



  1. Adjust the Y axis endstop trigger point
    1. Home the printer (G28)
    2. Move the extruder to just in front of the Y pillar (G1 X76 Y-43 Z10 F7000). The tip should be approximately 5mm above the bed.
    3. Lower the extruder using Pronterface until a piece of standard 80 gsm printer paper just drags on the nozzle.
    4. Check the Z height using M114; the aim to get this to the same value as that recorded for the X axis.
    5. Adjust the M2.5 screw on top of the Y carriage to raise or lower the trigger point (a 360 degree rotation of the M2.5 screw will give a 0.45mm change in trigger point)
    6. Repeat steps a. to e. until the Z height checked in step d. is the same as that recorded for the X axis
  2. Adjust the Z axis trigger point
    1. Follow the same process as step 2, using (G1 X0 Y85 Z4 F7000) to place the extruder in front of the Z pillar
  3. Work around steps 1-3 again because if large changes were required they will noticeably influence the set points of the other axes. Once they are within 0.1mm of each other, move to the next step
  4. Finally we can set the correct “0” point for the centre of the bed.
    1. Home the printer (G28)
    2. Move the extruder to just above the center of the bed (G1 X0 Y0 Z10 F7000)
    3. Lower the extruder using Pronterface until a piece of standard 80 gsm printer paper just drags on the nozzle.
    4. Note the Z height using M114



  1. Subtract  this Z value from the one set for the manual Z home position at the beginning, change this in the Marlin firmware and re-upload the firmware. In this example it was 255-5.2 = 249.8

#define MANUAL_Z_HOME_POS 249.8
The endstop trigger points are now all within 0.1mm of each other and Z “0” is within 0.1mm of the top of the bed.

The next step is to calibrate the delta radius - Minow's blog outlines the process very well (see step 3).

New Extruder Mount

One of our customers, elmuchacho on thingiverse, has shared a number of designs as upgrades for the Mini Kossel. This is his extruder mount (his picture, then Think3dPrint3d's picture)

This extruder mount holds the extruder more firmly to the frame than the original Think3dprint3d zip tie version. It uses a nut threaded onto the PTFE tube rather than the pushfit connector (top picture).The new mount is shared by elmuchacho on thingiverse and tinkercad. He has also shared a version that uses the pushfit connector supplied with our kits.

To complement this I have reverted part of the extruder block to use the mounting screws and taken the opportunity to make a few other minor tweaks to improve printability - it's also available on the Think3dprint3d github.

Vibration damping

I have noticed a slight chatter in the Traxxas linkages. This is a common issue and the jury is still out on if it noticeably affects the print quality. That said, reducing this definitely makes the printer quieter. One solution is to use rubber bands:


These clips were also designed by elmuchacho:

Dust is also using a similar idea on his Mini Kossel build (He is not building one of our kits but a similar printer).


We have confirmed the design for the heatbed (Kapton heater on Alu plate with insulation underneath). We are now just waiting for parts to arrive in bulk before we go ahead and offer them for sale. They will be offered at a discount to existing Mini Kossel customers and as an upgrade/stand-alone item as well. The details will follow in a separate blog post.

Sunday, 1 June 2014

Kossel Mini and More

Our Mini Kossel is a version of the excellent Kossel delta robot printer from Johann Rocholl, the designer of the original Rostock delta. It's very quick and easy to put together and relatively economical to source parts for. We have designed some additional parts and incorporated a number of variations from around the community. The changes we have made are described below and all the additional source files are available on Github (look in the T3P3 additions directory)

The Mini Kossel can be bought as a kit or assembled from  There are 5 colours in stock or we will print you a set in any custom colour we can source and print. All our parts are printed in ABS on our Mendel90 Lasercut production printers which continue to churn out excellent-quality parts every day after almost a year in service.

Linear Rails v Rollers

The initial Kossel design used linear rails

Picture (c)
These are great but add significantly to the cost. Using rollers on the aluminium extrusions themselves has been suggested in a number of places:

and this comparison here:

These convinced us to try the roller based option. As we are using Mitsumi aluminium extrusions we got Delrin rollers precision machined:

After many hundred of hours printing the bearings and extrusions are not showing visible wear. The only lubrication we have used is a spray of light oil containing PTFE (for example GT85). It is very simple to tighten the adjusting capscrew to adjust the pre-load and take up any slack if they do wear.

Johann is looking into using recirculating Delrin balls directly on the extrusion as well - well worth following up as and when time permits. Delrin balls are quite pricey, though, but it would be awesome if Airsoft BB pellets turned out to work well. The best carriage for these turned out to be Haydn Huntley's.

RepRapPro mini extruder

This extruder has been proven over many thousands of hours, both on RepRapPro's Mendel and Huxley printers and on our Mendel90 Lasercut multi extruder machine.

We modified this slightly to use easily obtainable pushfit bowden fittings and made a our own version of the quick and simple zip tie mount to fit to the extrusion:

Power and electronics mountings

To keep the kit as simple and user friendly as possible we designed a USB and power plug plate:

That provides a neat interface with the RAMPS in the base of the printer. The non-heated bed version uses a single 5 amp laptop style power supply. We are investigating options for the heated bed version but one being considered is an extension of this plate with another plug for a heated bed power supply. The RAMPS is mounted on another simple plate:

The picture also shows some simple tabs to keep a round glass mirror plate fixed securely using M3 penny washers.

Filament management

A reel holder and filament guide complete the kit:

Build Manual

We have written a comprehensive Kossel Mini Assembly Manual for the kit which we hope will become a useful resource for all. We would really welcome feedback on the manual and suggestions for additional information to add. 


One of the Mini Kossel beta testers did these prints of the EggO egg "thrones" by mageli which are awesome. 

PanelOne LCD

Following on from the case design tutorial in SCAD here is more information of the PanelOne, a simple LCD controller for RAMPS. It is optimised for those who want to rout/etch a single sided PCB with only through-hole components. It also uses widely-available 10-way IDC ribbon cables.

The more fiddly elements of the SD card socket and logic level converter are left to an optional, and generally available, daughter board such as this one from adafruit:

image from
or this one:
image from

The circuit board itself is designed in KiCAD as a single sided board, and was originally designed for Sumpod who commissioned us to design a board that could be routed on a PCB mill and fitted the dimensions of their printer enclosure.

In keeping with the simplicity of the design there is no adaptor board required at the RAMPS end as the pinouts are arranged to match with the AUX2 and AUX3 headers.

The complete KiCad files for the PanelOne are available on github.

Coming Soon

Watch this space... we are working on adding a heated bed and an interesting twist on multiple extruders!