Showing posts with label Research. Show all posts
Showing posts with label Research. Show all posts

Sunday, 31 August 2014

Slicing software printed support review - evaluating Slic3r, Cura and Meshmixer

Support material options for single extruder printers have come on significantly recently and I have run a series of test prints to evaluate three contenders:

Meshmixer, by Autodesk - adding support structures to meshes is a small subset of the processing it can do on stl files. (version 2.5)

Cura, by Ultimaker. A capable slicing program with super fast path generation. (version 14.07)

Slic3r, by Alessandro Ranellucci and others. The go-to slicing software for much of the reprap community with a great amount of configurability. (version 1.2.0 experimental)

This is not intended to be a tutorial on how to use these three programs as excellent tutorials already exist, I will simply expose the settings and processes I used for support generation.

I chose two models as test pieces: low poly Fennec Fox, uploaded to thingiverse by Physics_Dude. I scaled this model to 120% for the tests.


Printed as one piece it requires significant support to print properly.

Also the bonsai planter by createdbygordon



Which has some tricky internal overhangs when sliced without infill to make a pot.

Support generation

Meshmixer

The meshmixer support generation is semi automatic - it is automatically generated but I found it needed a bit of tweaking to fully support this model.

After importing the model into meshmixer, go to analyse, overhangs and select Ultimaker2 (Dizingof's settings) as the start point, then "Generate Support":

Meshmixer support automatic generation
The support is generated over all the area highlighted in red, you can modify how thick you want the columns and the interface points. I have gone for 2mm columns with 0.8mm interface points (where the support narrow just before touching the model).


Meshmixer support - starting from the fox's foot rather than the build surface.

One of the more annoying "features" is the autogeneration choosing to start a support pillar from a surface of the model (as shown in the picture above) rather than from the build surface.



Meshmixer support - long fragile support columns
Another issue I found were quite long support pillars that were too fragile to consistently support themselves. This is where you can add additional support pillars to shore them up as shown below.


Meshmixer support - adding additional support pillars
Clicking on the point you want the support to be on either the model or an existing support will drop a pillar down to the build surface (or you can click and drag for finer control). I found this was required for the taller support columns.


Meshmixer support automatic generation - made solid
Finally you click "convert to solid before exporting the model as an .stl. this can then be sliced without support with Slic3r or Cura as you like.

On the bonsai planter the issue of generating support that builds on the object rather than the build plate is even more pronounced:




Also it was difficult to manually add support columns that go down to the build plate - they insisted on snapping to the object instead. An issue with all the slicers: when using the solid object there is obviously no way to generate support inside for overhangs.


Slic3r

Slic3r's support generation settings I used are:


Slic3r support settings
The pillars pattern is relatively new and should provide a good compromise between strength of support and use of material. I did not see a noticeable difference in the support generated with "support bridges " checked or unchecked - probably because the foxes body and the overhangs on the bonsai planter have a slope to them.

The fox support looks like this in gcode visualisation:

Slic3r Support gcode - visualised in pronterface
The pillars are interconnected with lines - seemingly at random.

Cura

The basic setting allow you to select support that is only touching the build plate, this is a good feature as its often provides enough support and prevents the top of lower parts of the model getting messed up:



In expert settings you can tweak the support which allows you to put space between the support and the sides of the object - another good option to reduce the occasions that the support messes up parts of the print that do not need support.



Cura has built in gcode visualisation:





With the line option you get far less retracts than the other software a Dizingof mentions:



Although I have not had a print jam due to retractions using any of the support options.

Printed examples

All these examples were printed on the Mini Kossel printer, in generic ABS at 0.2mm layer height.

Meshmixer


The support printed well (however the autogenerated support struts definitely needed the manually added additional bracing)


Meshmixer support of Fennec Fox


Meshmixer support in detail
The picture in detail shows the support columns narrowing to a nominal 0.8mm at the top.

I did not try the bonsai planter print with meshmaker support.


Slic3r


This support turned out to be much more intrusive on the model than meshmixer or cura



Slic3r support of Fennec Fox

Slic3r support in detail
The support itself consisted of columns with wispy bits between them - maybe there is no retraction with the support? Also note how the support is partially encasing the front legs.


With the bonsai planter the support generated by both Slic3r and Cura was only external to the object - even though the object was printed with no infill and thus might require 
support internally. This is rather an unusual case though so I am not surprised it was not generated. this issue is evident on the roots where they are bridging over the top as shown below:


Bonsai planter with no infill showing the perimeters failing to bridge properly
I tried to reduce this issue by using 6 perimeters which improved some areas but was not enough.

Cura

Cura's support is laid down thicker by default than Slicer but it nicely avoids the vertical parts of the object it is next to



Cura support of Fennec Fox


Cura support in detail - notice the support warping
Due to the long straight lines and printing in ABS the support warped quite a lot as shown in the photo, however it did not affect the print in any noticeable way.


Cura had the same issue with the internal unsupported areas of the bonsai planter that Slic3r did - in addition it showed quite a bit of stringing internally, I wonder if it does not retract for internal, no perimeter crossing, moves. While in general this is probably fine if there is no infill the inside should be treated in the same manner as the outside so this is an area for improvement.


Bonsai planter - internal stringing

Support removal

In all cases I removed the support by hand, assisted by a pair of small side cutters for finishing off. I spent no more than 5 minutes on each fox model so more support could be removed by further work, ie by filing/sanding.

Meshmixer

The meshmixer support was the easiest to remove from the fox model. Having only 0.8mm contact points as dots along with the lever arm of the printed pillar ment they broke off very close to the model but not always exactly at the interface - sometimes a couple of 0.8mm layers were left on the model



Meshmixer support removed

As can be seen the remaining support marks are quite obvious, however the support did a good job of ensuring the supported layers printed well.

Slic3r

The Slic3r support was variably easy to remove - the tail and head support came away in one piece with no effort, leaving an extremely clean finish:



Slic3r support removed - fox head very clean

Slic3r support removed - fox tail similarly clean
The fox body was a different story - here the support was tangled up with the top of the legs and it was difficult to remove the last few layers. 


Slic3r support removed - fox body with support remaining

Slic3r support removed - fox leg with support marks
As there was no gap between the support and the front legs there were support marks along the sides of the legs.

With the bonsai planter the support came away relatively easily - with similar issues where it unnecessarily touched the model walls. The supported surface in this case though was not that well supported and looked rough.

Slic3r support removed - bonsai planter with support marks

Cura

The cura support was almost as easy to remove as meshmixer, leaving noticeable lines that none the less looked better than the meshmixer spots.



Cura support removed - minor marks remaining

Cura support removed - lines visible on the tail
Cura proved to be the most consistent across the whole model and the support only touched the model where it was required.

For the Bonsai planter the support was similarly easy to remove and left minimal marks overall. It did a better job than Slic3r in supporting the model however it left one area unsupported that arguably should have been. This lead to the perimeters curling up and the white filament being discolored by the nozzle.

Cura support removed - discolouration due to unsupported area curling up


Summary

Meshmixer

This support was the most efficient in material use however it required the most manual tweaking to print properly. In addition the marks it left once removed were more noticeable than Cura and (sometimes) Slic3r. While the settings could probably be further modified to improve the performance this support type appears the most limited for future improvements.

Sic3r

The support's performance was variable - by far the best in some situations (fox's head and tale) however the worst to remove with the most obvious marks in other areas of the same model. This may be down to my chosen settings and with some more tweaking I may get better results. The most obvious general flaw is that it does not leave a big enough gap between the support and the unsupported areas of the model (like the foxes legs or the lower roots of the planter)

Cura

While some of the support left marks, overall it was the easiest to generate support which performed consistently well. Once again though slight tweaks could improve this further for specific models. 

Overall Cura wins my "no time to tweak - got to make it work now" award.

Last word

Over the last few years the support generation in Slic3r and Cura has improved a huge amount (no idea bout Meshmixer as I only just started using it). All three of these programs are under constant development and frequently get improved so this blog post is definitely not the last word! I would welcome other people's experience with the support functions and tweaks to make them work better in specific situations. I have also left out at least one commonly used (but not free/OSS) program in KISSlicer - one to evaluate in the future.

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 www.f3dprinter.com

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 http://www.f3dprinter.com/. 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!


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).

Calibration


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
PLA
650
Ninjaflex
700
Lawoo3d
650
T-glase
660
Nylon 618
660

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:

SD.begin(77);

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.clear();
    lcd.print("initialization");
    lcd.setCursor(0,1);
    lcd.print("failed!");
    return;
  }
   lcd.clear();
   lcd.print("initialization done");
   delay(2000); //delay or else the message will not be displayed
   lcd.clear();
   lcd.print("listing 4 files");
   delay(2000); //delay or else the message will not be displayed
   root = SD.open("/");
   lcd.clear();
   printDirectory(root, 0);
}

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

}

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

Next...

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).