Plugin functionality

plugin logic

Since the plugin is finished, we will explain how it works. The plugin processes the cura generated g-code. The first thing it does, is read the line. If the line includes “LAYER”, a line containing “=====” is written, after which the layer line is written.

If the line contains a “X”, the value of x and e is read and stored in variables. If the x is lower than 0 or higher than 200, the bed moves 150mm, else the value of the bed position is reduced from the value of x, and the line with the new x value is written.

The sequence of moving the bed consists of first retracting the filament, switching to the second extruder (which controlls the external x-axis), moving 150mm while moving the internal x-axis to the other direction, switching back to the first extruder, and undoing the retraction. In order to reduce the amount of errors, the extruded values are zero’ed before retracting and moving, and restored at the end of the sequence (by using the earlier read value of e).

the limitation of this is that it is only possible to move to the left or right one step. If the x-coordinate increases more than 150 (because the model contains a long straight line), the generated code will not be correct.

Required steps to print

Since the project is almost over, and the ultimaker xxl is finished and (almost) fully functional, we will explain the steps required to print with this modified Ultimaker.

The first thing to do is to load the file you want to print into cura. This file does not have to be modified or split in any way, this will be done by the plugin. The only requirements the model has to be printable is that it can’t contain straight lines longer than 150 mm (however, slightly curved lines are no problem) and that the model can’t have large overhangs.

After importing the model in cura (increase printbed size if it doesn’t fit), the part can be rotated, scaled and moved. The part has to start at the left side of the printable area to reduce the required print time and reduce the risk of errors during printing.

The next step is to enable the required plugin in the plugin menu (and, if it isn’t available, to place the plugin in the plugin folder). The plugin converts the cura generated g-code to code that is able to controll both the internal and external x-axes. Make sure the plugin is displayed on the lower side of the menu.

After enabling the plugin, the g-code can be generated by clicking the save toolpath or toolpath to sd button on the top side of the screen. If you want to check that the plugin functioned correctly, it is possible to open the generated g-code in a text editor and look for lines filled with “========”. If these lines are present, the plugin functioned correctly.

The final step is to manually move the ultimaker to the left-most position on the external axis. This due to the lack of end stop for the external x-axis. After this is done, the file can be selected and the printing begins.Untitled-2

Printing a model in parts

As explained in other posts the printing time of a single layer with this modified Ultimaker wasn’t quite the fastest. The motor on the external X-axis wasn’t able to move as fast as we would like so we started thinking in terms of making the printing more efficient and making the most out a position the printer would be in.

When observing the printing process we had noted the printer would make a lot of unnecessary movements from left to right and back, before going up a layer. We figured we could save time if we found a way to tell the printer first to print everything in range on the left side and once that was done, move over to the middle or right side depending on the width of the model to print.
Because of our limited time before the Science Fair and not having found the perfect general printing settings yet, a part of the team kept working on the actual setup, while others started testing these ideas on a standalone Ultimaker Original.
Luckily the implementation didn’t require a lot of coding or new plugins to be written. It turned out that by changing the machine settings in Cura from 1 to 2 extruders a g-code was written that made an Ultimaker Original printer with 1 extruder print models in certain parts. An other requirement though was that the model had been split into different parts which had to be made into stl’s and separately imported into Cura. By doing this it allowed Cura to understand how the partition was made and what to print first before moving to an other part.
After some tests this seemed successful as you can see in this video:
First the printer is printing parts on the left side, before moving on to the right side, back left etc.
Because you’re making a print consisting of multiple parts we were afraid this might increase the weakness of the print, especially around the welt where 2 parts met. Therefor we also tried splitting the objects not with a straight line but with other curves, from serrated shapes to waves:
2014-10-23 12.42.51 2014-10-23 15.56.31
This proved to increase the strength of the objected when we tried to break it with force.
During further tests we ran into a problem when trying to print only the outline of an object. When switching to the other part, the printer often picked the opposite side which meant it had to stop printing, move and start printing again at a different Y coordinate. This resulted often in a mess of inaccurate ends/starts of lines.
2014-10-23 13.59.12
A solution to this seemed to either give the object an (low percentage) infill, or thicker wall or find better positioning for the cuts of different parts.
2014-10-24 11.05.41 2014-10-24 11.33.20
Finally we started running tests with models split into 3 parts and Cura set to 3 extruders.
While a lot of the previous found knowledge was applicable, we ran into new problem that hadn’t come up yet with only 2 parts.
3 parts meant different orders of printing those parts were possible and soon enough it showed our printer wasn’t clever enough to pick the most efficient order of printing.
screenshot.309 2014-10-24 11.57.48
For some reason it would always start with the middle X, move to the L, then all the way to the left X before going back to the middle etc.
So far we haven’t found a way yet to make it start on a certain side and then moving back in reverse order once it had finished a complete layer; left>middle>right (up a layer) right>middle>left (up a layer) etc.

Construction and movements in week 4

After four weeks the project has come to an end and we can say that we have achieved most of our goals.

The printer is working correctly, precisely and better than we had expected. The maximum size that we can print with our particular installation is approximately 1000*800*200 mm. With some simple adjustments to the frame, we would be able to print up to 2000 mm high.

How the mechanics  look now compared to two weeks ago:

We have changed the place of steppermotor which moves the Ultimaker along the bigger X-axis. This way we are now able to print on the total Y-axis of the Ultimaker

IMAG0586 IMG_7006 IMG_6989

An other thing we have changed is the printbed. In the first three weeks we weren’t able to adjust the height of the bed as it was resting on three beams. We didn’t need a real precise flat bed, as we didn’t werent able to come close to the point that the print was effected by the bed. The printer itself was the biggest problem, for failed print. As the printer became more precise we needed find an adjustable (very) flat bed. We used a 12 mm triplex. We drilled 6 holes in the wood and used screws and bolts to adjust it. We would have prefered to use thick plexiglas which is very expensive.



And as we told in an earlier post we also changed the way the Ultimaker was attached to the horizontal tail. We replaced the earlier used wooden plate for a steel plate. The reason for this was that the holes in which the rails were fixed, got bigger. And because of this the printer fall off the rail a couple of times. The resulting product can be seen in the picture beneath.

IMG_6988 IMG_7014 IMG_6986 IMG_6835_Kopie


This were the major adjustments in the construction of the installation. For the rest there were some little tweaks here and there.







Adjusting the printer

As the mechanical parts were installed and working, it was time to calibrate the printer to print smooth and accurate objects. As we encountered problems with the additional X-axis we decided to start working with only one x-axis. We replaced the inner X-axis with the outer axis.

This brought different problems to light. The normal acceleration of the printer head was to high for the external x-axis. The stepper motor kept slipping and moved further than it should. With every move the x-axis made, the difference with the layer beneath  became bigger.
It also didn’t help the fact that the belt on which the stepper motor moves, wasn’t tense enough.

We also had a problem with the amount of steps the stepper motor on the bigger x-axis made compared to the y-axis stepper motor inside the Ultimaker. When we noticed this problem while printing, we tried to print a square to confirm our observation. And our observation were confirmed when the Ultimaker made a rectangle instead of a square. To solve this problem we adjusted some numbers in the firmware of the printer.



Here you see a test print. You see two rectangles with overlap, because of a shift that happend.

A third problem  we encountered was that the internal x-axis kept moving a little when the printer shifted from left to right and back again. Because there was no electric single to the stepper motor, there was no ‘brake’ on this axis.

We didn’t continue with the idea of working with only one x-axis, even with the fact it was very promising. As it is eventually the plan to make multiple printers work together two axes per printer are effective.

So we continued with the original plan: getting the printer to print while using two x-axes.









Week 3

Afgelopen donderdag is Dolf weer langs om te kijken hoe het ging. Een heldere planning maken blijft erg lastig met dit project. Vanwege het expirimentele karakter is het moeilijk inschatten hoeveel tijd iets in beslag gaat nemen en waar je tegenaan zult lopen. Om de komende anderhalve week nog zo veel mogelijk vooruitgang te boeken hebben we een blokkenschema gemaakt om een overzicht te krijgen wat wanneer af moet en waar we nog speling hebben om eventueel op sommige punten nog verder uit te breiden.

Het is voor ons nu om een overweging te maken of ons focussen op één printer die goed werkt langs twee assen, of op het eventueel toevoegen van een tweede printer met een kans dat dit nog niet helemaal werkt.

Verder hebben we ook opnieuw geprobeerd met woodfill te printen. Het was tenslotte één keer eerder goed gegaan. Dit was echter op een print die al deels uit een ander materiaal bestond en met een erg lage materiaal hoogte. Als we direct op het printbed printen, hecht de woodfill niet goed en trekt het krom bij het afkoelen.

IMG_6797 2014-10-17 10.22.47

Een redelijke oplossing hiervoor is dubbelzijdig tape. Hier zijn we achter gekomen door trial and error. Het is nog steeds geen ideale oplossing, omdat de tape zelfs te goed aan de print plakt dat het erg moeilijk van het printbed loskomt en daarna opnieuw getaped moet worden. We hebben echter geen verwarmd printbed, dus er is momenteel geen andere mogelijkheid.

Vervolgens hebben we proefprinten gemaakt van het kunstwerk van de Rietveld Academie student met wie we contact hebben over het printen van zijn werk. De aangeleverde bestanden voldeden echter niet aan de eisen om goed geprint te kunnen worden met een Ultimaker. Het zat vol gaten, dus we hebben dit bewerkt zodat het aantal gaten gereduceerd is en het hopelijk nog voldoet aan de eisen van project vanuit de Rietveld Academie. Ook dit gaf nog geen ideaal resultaat, maar komt al dichter in de buurt van het beoogde resultaat.

2014-10-20 11.01.50 2014-10-20 11.02.05

Verder zijn we bezig geweest met het maken van een staalplaat voor de ophanging van de achterkant van de Ultimaker aan de de X-assen, want hout bleek niet sterk genoeg en er ontstond te veel speling. Ook is de motor voor de X-assen die onder de Ultimaker hing, met een staalplaatje en een geprint klemmetje naar de zijkant verplaatst. Deze motor kwam namelijk tegen het printbed en de constructie aan.


Toen de hele opstelling weer in elkaar gezet was en het testen voortgezet kon worden bleek dat er problemen waren met de beweging in de X richting. Bij het wisselen van extruder vergat de printer namelijk welke hoeveelheid hij eerder al opzij was bewogen en verplaatste zich dus te ver. Gelukkig kon dit door Tim in de firmware van de Ultimaker worden aangepast en verholpen worden. Ook bleek er onnauwkeurigheid te onstaan doordat de rubberen tandriem voor de verplaatsing langs de X-as niet geheel strak gespannen was omdat de motor tijdens het printen van een laag van beweegrichting veranderd en de motor dan eerst heel even bezig was deze strak te trekken alvorens zich te verplaatsen.




Wat nog te verbeteren

2014-10-14 09.44.26Gistermiddag waren alle aanpassingen in de constructie doorgevoerd zodat we konden gaan testen. We hebben dus kunnen testen met de ‘dubbele’ x-as. Hierbij ging nog een aantal dingen fout.

Ten eerste was de plaat die we als printbed gebruikte niet vastgemaakt aan de constructie, waardoor deze een beetje krom lag. Daardoor was de afstand tussen de printkop en -bed niet overal evengroot, wat ervoor zorgde dat de print de ene keer niet hechtte en de printkop de andere keer in de houtplaat duwde. Untitled-2

Het volgende probleem was dat de afstand om de externe x-as te bewegen niet goed in de code stond. Deze afstand moet bepaald worden door ‘trial and error’, doordat de overbrenging tussen de motor en de as niet bekend is. De hierdoor ontstane afwijking is te zien in de tweede foto.

Het laatste probleem was dat er in de tandriem van de externe x-as een beetje speling zit doordat deze riem niet strak gespannen is. Dit zorgt ervoor dat de printer als hij opzij moet bewegen, niet dezelfde hoeveelheid heen en terug beweegt.


De constructie en aandrijving

De installatie bestaat uit de volgende onderdelen:

  • Het frame
  • de verticale rails
  • de horizontale geleiders
  • een bevestigingsplaatje voor de Ultimaker
  • de Ultimaker
  • het printbed
  • contragewicht

Het frame is gemaakt van een bepaald alumiumprofielen systeem. De verschillende balken worden op dezelfde manier aan elkaar vastgemaakt. Het is 120 cm breed en 290 cm hoog.


Op het frame zijn de verticale rails bevestigd. Deze zijn ons door Joris ter beschikking gesteld.

Vervolgens zijn op de vericale rails, de twee horizontale rails bevestigd.


Om de printer over de horizontale rails te laten lopen hebben we een plankje met 8 v-wieltjes er aan vastgemaakt.

IMG_6836_kopie     IMG_6837_Kopie     IMG_6838_kopie

Verder hebben we nog het printbed en een katrol met een contragewicht.

IMAG0583 IMAG0584

Bij de benodigde bewegingen maken we gebruik van stappenmotors. Voor de verticale beweging hebben we een stappenmotor aan een stalen plaatje bevestigd en vervolgens aan de horizontale rails vastgemaakt. Deze motor wordt geholpen door een een contragewicht van ongeveer 15 kg.

IMAG0588   IMAG0591

De stappenmotor die de beweging over de vergrote x-as regelt, is onder de Ultimaker bevestigd.


Gebruikte software en gemaakte plugins

Het doel is om de g-code voor de Ultimaker xxl volledig te kunnen maken met behulp van Cura. Om dit te kunnen doen, hebben we een plugin voor Cura gemaakt. Deze plugin zet de door cura gemaakte g-code om in een code waarbij er een tweede x-as is toegevoegd. Hieronder zullen we uitleggen hoe deze plugin werkt:

Het eerste wat gedaan wordt is dat de door Cura gemaakte g-code wordt ingelezen. Vervolgens wordt er in iedere regel gekeken wat in die regel staat. Op het moment dat er een x-waarde in de regel staat, wordt deze waarde uitgelezen en vergeleken met een vooraf ingesteld maximum. Op het moment dat dit maximum overschreden wordt, dan worden er enkele regels code toegevoegd om de interne x-as terug te zetten, en de externe x-as verder op te schuiven.flowchart

Dit opschuiven van de externe x-as wordt gedaan door te wisselen naar de tweede extruder (welke vervangen is door de motor voor de externe x-as). Nadat gewisseld is, wordt deze tweede extruder aangestuurd om op te schuiven. Uiteindelijk wordt teruggewisseld naar de eerste extruder om het printen door te kunnen zetten.

Verder hebben we enkele kleine dingen voor de leesbaarheid van de g-code toegevoegd, zoals lijnen om duidelijk aan te geven waar het einde van ieder laag is.

Week 2 – Ontwikkelingen vs. tegenslagen

De tweede week liep een aantal dingen wat minder voorspoedig dat in de eerste week. Deze week stond het op de planning om het frame helemaal af te maken en de eerst print te maken met de uitgebreide x-as. We zijn dus vooral bezig geweest met het bevestigen van de Ultimaker op het frame. Het is ontzettend lastig om dit helemaal goed uit te lijnen. Hier zijn we dus maandag en dinsdag mee bezig geweest.

Dolf Veenvliet vervangt Joris van die er de komende twee weken niet is en aangezien Dolf in Den Haag woont is het voor hem gemakkelijk om langs te komen.

Donderdag kwam Dolf langs om te kijken hoe het ging en heeft ons verder geholpen. Hij stelde voor om alvast naar het printen zelf te gaan kijken omdat we met een groot object te maken gaan hebben en dat dat een aantal aanpassingen nodig heeft om ervoor te zorgen dat het printproces geen dagen in beslag neemt. Hiervoor hebben we in Blender het TU Delft logo zo gemaakt dat we deze snel konden printen. Het TU Delft logo hebben we met verschillende laagdiktes geprint om te kijken wat de verschillen waren en wanneer de tijdwinst niet meer opwoog tegen de verminderde nauwkeurigheid. Er is heel duidelijk verschil te zien tussen een fijne en een minder fijne laagdikte. Als de laagdikte te grof wordt, plakt de nieuwe laag niet meer op de bestaande laag en gaat een goede verbinding verloren. Dit gebeurt vooral wanneer de dikte van de laag die wordt neergelegd groter is dan de 0,8mm diameter van de spuitkop. Erbij komt dat het platvorm dan te snel zakt en wordt de laag niet meer op de bestaande laag geplakt.

Laagdikte 0.1


Laagdikte 0.6

Ook heeft hij laten zien hoe je de g-code kunt aanpassen zodat je gemakkelijk dingen kunt printen die hol zijn. In de gcode staan de gegevens over de lagen die geprint worden en je kunt bijvoorbeeld de bovenste paar lagen weggooien om een schaaltje te printen. Ook kun je met deze functie spelen zodat een fill alleen op bepaalde stukken wordt meegeprint.

Dolf heeft ons er tevens op gewezen, vast te houden aan de verschillende functies binnen de groep om zo efficiënt mogelijk te kunnen blijven werken, want onze taken waren toch een beetje door elkaar gaan lopen.

Ook kregen we nieuw printmateriaal tot onze beschikking; Pla Woodfill. Dat is een combinatie van plastic en houtvezels en heeft een mooie uitstraling wanneer het geprint is. In principe bleek het hetzelfde als normaal Pla printmateriaal te werken en konden we zelfs een testje maken wat er gebeurd als je tijdens het printen van materiaal wisselt.




Deze prints waren echter met een lage materiaal laagdikte en relatief lage snelheid. Wanneer we deze opschroefte naar waarden waar het met normaal plastic nog goed ging, zagen we al snel dat er een aantal problemen ontstonden met de hechting aan het printplatform en de onderlinge hechting tussen de lagen.

2014-10-10 10.49.43

Donderdag middag en vrijdag zijn we weer verder gegaan met het afmaken en finetunen van de constructie. 

Er is één plaat gemaakt waar de horizontale stellage aan vast zit om deze via een riemband te liften. Zo is er maar één motortje nodig om te stellage te liften in plaats van twee. We merkten echter toen de printer was teruggehangen dat de motor de stellage niet kon houden. Deze zakte naar beneden wanneer deze niet ondersteund werd. Ook leverde de motor niet genoeg kracht om de printer en de de rest van de stellage soepel omhoog te trekken.Daarnaast hielp het niet mee dat het katrol niet op de goede plek was vastgemaakt. Hierdoor slipte het tandriem heel vaak, en maakte de stellage sprongen naar beneden. Ook is de plaat op het punt van het katrol gaan buigen.
We hebben de problemen met het katrol in één keer opgelost. Dit hebben we gedaan door het katrol dichter op de as van het tandwiel te plaatsen en ringen te gebruiken bij het vastmaken op de stalen plaat.


Verder zijn er voor twee microchips, die de z-as aanstuurden, doorgebrand. De eerste keer door overbelasting (door de veiligheidsschroef te draaien) en de tweede keer waarschijnlijk door kortsluiting.
Van één van de verticale rails klemde het wieltje, wat we hebben hersteld. Om evenwicht te behouden en om de horizontale rails recht te laten hangen, zijn er zijwieltjes langs de verticale as geplaatst.