Als je ervoor kiest om zelf een 3D-printer te ontwerpen, dan ligt het voor de hand om daarvoor 3D-software te gebruiken. Het open source programma Blender leent zich hier goed voor. Dit programma heeft een vrij steile leercurve vanwege het grote aantal toets commando’s. Als je eenvoudiger wilt starten, dan kun je aan de slag gaan met Google SketchUp, waarbij je enkele extensions nodig zult hebben voor volledige functionaliteit.

 De eerste printer

Voor het bouwen van een printer kun je inspiratie opdoen via de website van de RepRap community (reprap.org). Denk ten eerste aan de mechanica, want de constructie moet solide zijn. Als je ontwerp af is, begint het inkopen van onderdelen. Bij de bouwmarkt kun je aluminium profielen kopen. Wij deden dit ook en maakten de profielen met behulp van een haakse slijper op maat, waarna ze met de hand werden bijgevijld en afgebraamd. De kokerprofielen verbind je met hoekstukken, die je met boutjes vastzet. Voor grotere precisie kun je de profielen vanzelfsprekend ook op maat bestellen.

 Een strakke machine met een solide grondvlak en een opgaand portaal werd in ruwbouw opgebouwd. Als je frame klaar is, dan wordt het tijd om naar de aandrijving te kijken. Je hebt de keuze tussen een tandriem- of as-aandrijving. Wij kozen voor een aandrijving met trapeziumassen in x-, y- en z-richting. Dit vanwege een hogere positienauwkeurigheid.

 Verder heb je stappenmotoren en elektronica nodig om de printkop te kunnen verplaatsen. Voor onze eerste printer gingen wij met een RAMPS 1.4 en Arduino Mega 2560 aan de slag. De RAMPS is een driverbordje dat op de Arduino wordt geprikt, waarop motoren, heaters, thermistors en endstops worden aangesloten. De heaters dienen ervoor om de printkop te verhitten en via thermistors (temperatuurafhankelijke weerstanden) wordt de temperatuur van de kop gemeten. Endstops zijn veelal magnetisch bekrachtigde schakelaars waarmee de eindpositie van de printkop in x-, y- en z-richting wordt vastgelegd. Je bevestigt de elektronica via afstandshouders aan de grondplaat.

 Onze eerste print was een blauwe piramide met een hoogte van 20 mm. Bij wat grotere printsnelheden merkten we reactiekrachten op bij het frame bij het starten en stoppen van het portaal. Daarbij kwam er een gierend geluid van de stappenmotoren, die op een vrij hoog toerental draaiden. De positie van lagers en assen bleek hierbij kritisch, dus smering met siliconenolie om de zaak soepel te laten lopen was nodig. Om de motoren te sparen en voorzichtig uit te proberen, lag de printsnelheid bij het eerste prototype portaalprinter met trapeziumasaandrijving niet boven 20 mm per seconde. Inmiddels is bekend dat de maximaal bruikbare rotatiesnelheid van de motoren ongeveer 1.000 omwentelingen per minuut bedraagt.

 Wie de jeugd heeft…

De crew van ICExtreme wilde de eerste printer natuurlijk graag ergens demonstreren. Dan komt het goed uit dat medewerker/programmeur Dennis sinds 2009 als vrijwilliger werkt bij basisschool De Vlindertuin in Alkmaar en het idee ontstond al snel om de 3D-printer daar te laten zien. Het leek ons leuk om de jeugd enthousiast te maken voor deze techniek. Dennis en Werner gaven les over 3D-ontwerpen, waarbij de kinderen huisjes ontwierpen met behulp van het programma SketchUp. Daarvan werden er enkele geprint. Een leerling vond het ontwerp van een gevleugeld hart op internet; een uitdaging om dit in 3D te printen. Verder werd voor alle kinderen een sleutelhanger met hun eigen naam geprint.

 De tweede printer

De eerste printer werd gebouwd om kunststof onderdelen voor de tweede printer te printen, naar het idee van de machine, die zichzelf reproduceert. De twee engineers Werner en Wolfgang ontwierpen een portaalconstructie en een printer met beweegbaar bed, waarbij na pittige discussie werd gekozen voor een boxed model met portaal. Het printen van de zelfontworpen onderdelen nam vele dagen in beslag. Voor het vervaardigen van een hoekstuk was al gauw 8 uur printtijd nodig. Het nabewerken was handwerk met vijl en dremel. Er waren ook enige aanloopproblemen, zoals de maatvoering van het ontwerp dat moest worden aangepast aan de te verwachten krimp en de afwijking bij het printen.

 Bij de tweede printer werd de spoed van de trapeziumassen voor de x- en y-aandrijving verhoogd van 3 mm naar 8 mm om het toerental van de stappenmotoren te verlagen, waarbij de haalbare printsnelheid toeneemt. Printer 2 (voorzien van een solide geschoorde boxconstructie) werd succesvol getest met een printsnelheid tot 60 mm per seconde. Het frame bleek stijf genoeg om de reactiekrachten ten gevolge van het versnellen en afremmen van het xz-portaal met een gewicht (incl. printhead/extruder) van circa 10 kilo aan te kunnen.

 De elektronica van onze tweede printer met 3D-geprinte onderdelen bestaat uit een Arduino Due, Ramps-FD en Smart Display Controller. Het model is uitgerust met een heatbed van 46×46 cm bij een vermogen van 480 Watt. Een zwaar uitgevoerde voeding is hierbij nodig. De keuze viel hierbij op een model van 24 Volt en 800 Watt. Om de Raspberry Pi, Due en Ramps te voeden zijn DC-DC-step-down-converters (voltageregelaars) gebruikt van 12 Volt (fans), 9 Volt (Due) en 5 Volt (Pi). De Ramps-FD, die de motoren aanstuurt, wordt gevoed met 24 Volt. Er is een extra fan gebruikt om de DRV-8825 stappenmotordrivers te koelen. Dit bleek nodig, omdat de drivers zonder geforceerde luchtkoeling tijdens bedrijf van de printer te heet worden, waarbij de thermische beveiliging de motor uitschakelt.

 Stappenmotoren

Een stappenmotor heeft veelal een nauwkeurigheid van 200 stappen per omwenteling, waarbij via de elektronica (DRV8825-driver) nog 16 (of meer) tussenliggende posities geschakeld kunnen worden (microstepping) door het voltage tussen de spoelen te reguleren. Deze optie kan via dipswitches op het RAMPS-bordje worden ingesteld. Uiteindelijk kan de printer met een nauwkeurigheid van 3.200 stappen per omwenteling aangestuurd worden. Onze trapeziumassen hebben een spoed van 8 mm per omwenteling. Dit geeft een nauwkeurigheid van 3200/8 = 400 stappen per mm, ofwel 0,0025mm per stap.

 In de praktijk blijkt meer dan 16 keer microstepping niet mogelijk, omdat de stuurfrequentie van de stappenmotoren dan te hoog is. De motoren blokkeren als de stuurfrequentie na het starten hoger wordt dan de zogenaamde pull-in-frequentie. Voor meer informatie over stappenmotoren zie deze link.

 De Arduino programmeren

Je wilt code schrijven voor de Arduino microcontroller, een dialect van de programmeertaal C. Om dit te kunnen doen, ga je naar de website van Arduino en download en installeer je de programmeeromgeving Sketch. Als je gebruik maakt van een mainstream Linux-distro, zoals Debian of Ubuntu, dan haal je het pakket Arduino op met de package manager. Je kunt Sketch natuurlijk ook op je Raspberry Pi installeren. Je sluit de Arduino via een USB-kabel aan op je Raspberry Pi en kiest binnen Sketch de overeenkomstige seriële poort. Je schrijft vervolgens de stuurcode, die je daarna compileert en flasht, naar de chip op de Arduino.

 Stappenmotormuziek

Een speelse manier om kennis te maken met het programmeren van de Arduino is het maken van muziek met stappenmotoren. Globaal gesproken werkt het programma om de stappenmotoren muziek te laten maken als volgt: de toonhoogte ofwel frequentie maak je met het aantal stappen per tijdseenheid, dit is vastgelegd in een array. De I/O-functie gaat via digitalWrite, waarbij de step input van de driver afwisselend hoog en laag wordt gemaakt. Op het Ramps-driverboard is er voor elke stappenmotor een opsteekprintje met DRV8825-driver. Dit is een schakeling met 4 MOSFET’s, waarmee de twee motorspoelen worden geschakeld. De broncode van het stappenmotormuziekprogramma kan worden gedownload op onze site. De code werkt op een Arduino Mega 2560 en Ramps 1.4, waarop je vier losse stappenmotoren aansluit. Je tweakt de code gemakkelijk voor een ander opprikbordje door de pinnummers te veranderen. De juiste pin-out vind je op internet.

 De Ramps 1.4 voed je met 12 Volt. Hiervoor kun je een ATX-computervoeding gebruiken. Let er wel op dat de voeding is vrijgegeven door het verbinden van de vrijgavepen met de GND-aansluiting. Als je deze verbinding niet maakt, dan start de voeding niet op. Na het flashen spelen de vier stappenmotoren meerstemmig de melodie ‘Dual of fates’ uit Star Wars. Bekijk hiervoor onze YouTube-video 

 Marlin open source 3D-printer firmware

Om de printer te besturen, heb je software nodig. Je kunt kiezen uit de pakketten Repetier of Marlin, waarbij het open source pakket Marlin voor de hand ligt. Repetier gebruikt het .NET-framework van Microsoft, dus als je een enthousiaste Linux-gebruiker bent, dan kies je daar zeker niet voor. Marlin zet de CNC-g-code om in stuurpulsen voor de stappenmotoren. G-codes zijn stuurcodes, die de coördinaten van de printkop vastleggen. Computergestuurde productiemachines, zoals draai- en freesbanken, maken ook gebruik van soortgelijke codes. CNC betekent “Computer Numerical Control”. De technologie bestaat al sinds de jaren ‘80. Bijvoorbeeld: ‘G1 X50 Y100 F800’ betekent: verplaats de printkop over 50 mm langs de x-as en over 100 mm langs de y-as met een snelheid van 800/60 ~ 13 mm/s. Marlin kun je downloaden. Bij gebruik met een zelfontworpen 3D-printer moet je configuration.h en configuration_adv.h aanpassen. Bijvoorbeeld steps_per_unit van de x-, y-, z-as en extruder en de motor, die de printdraad doorvoert. De parameter ‘steps_per_unit’ duidt op het aantal (micro)stappen van de motoren per millimeter. Dit is afhankelijk van je aandrijfsysteem.

 Compilen van Slic3r

Je hebt nu een 3D-printer met een softwaresysteem. Marlin kan echter niet werken met een 3D-modelbestand, dus je hebt speciale software nodig om de vectoren van het model om te zetten in g-codes. Slic3r is een mooi open source pakket hiervoor. Je kunt Slic3r downloaden. Als je Debian gebruikt, dan zie je dat Slic3r niet voorkomt in de package manager. Je zult de broncode dus zelf moeten compileren. Installeer hiervoor via de package manager de pakketten uit Listing 1 en voer daarna in de Slic3r-directory de volgende commando’s uit: perl ./Build.pl , hierna perl ./Build.pl –gui om Slic3r te kunnen gebruiken met een grafische schil.

 Handmatig

De bediening van de printer gaat via de Full Graphics Smart Display Controller, die met een display connectorprintje op de Aux-aansluitpennen van het Ramps-FD driverboard is aangesloten. Via een rotatieschakelaar met klikmogelijkheid navigeer je door de menu’s van Marlin heen. In het menu Control kun je de temperatuur van de printkop (nozzle) en het bed instellen. Voor ABS- en PETG-filament is deze temperatuur 230 tot 240 graden Celsius.

 Heatbed en warping

Je kunt met verschillende soorten kunststofdraad (filament) printen. Ieder materiaal heeft zijn eigen kenmerken. Ga je met Acrylonitril-butadieen-styreen(ABS) aan de slag, dan heb je een heatbed nodig. Om onze eerste printer echt uit te testen, gingen we naar de ‘The Party 2015’ lanparty in Eindhoven. Hier werden gamelogo’s geprint, onder andere voor Double-Dutch Dragons. Hierbij werd op hardboard geprint zonder heatbed, waarbij de hechting op het bed goed was. Wij raden je echter aan om het niet zo te doen. ABS gaat vervormen als je zonder heatbed print, in verband met krimp bij afkoeling. De onderdelen van model 2 zijn met een heatbed van 30×30 cm geprint (12 V – 25 A). Met een hittedraad werd de weerstand vergroot, omdat het vermogen van het bed te groot bleek voor de computervoeding.

 Er zijn voor het realiseren van een heatbed verwarmingselementen te koop, die je als een sticker bevestigt onder de glasplaat, waarop je print. De temperatuur van het heatbed bij ABS-prints bedraagt ongeveer 80 graden Celsius. Het heatbed beïnvloedt het afkoelingsproces van de geprinte lagen en zorgt ervoor dat er geen warping (kromtrekken) optreedt. Dit verschijnsel treedt op als de bovenste laag van je print nog warm is, terwijl de laag eronder al flink is afgekoeld. Om de hechting van het model op de glasplaat te bevorderen, gebruik je sterke haarlak. Vaak wordt aangeraden om kaptontape hiervoor te gebruiken, maar bij het wegsteken van het model beschadigt de tape vrij gemakkelijk en moet deze worden vervangen. En dat is kostbaar.

 Raspberry Pi 2, model B

Als je in C programmeert, is het mogelijk om de bediening van de printer makkelijk te maken door een eigen webserver te schrijven. De Raspberry Pi 2, model B leent zich hier goed voor. Je gebruikt de GPIO-headerpinnen op de Pi voor de I/O-communicatie met de Arduino microcontroller, waarbij de WiringPi-library het programmeren vergemakkelijkt. Je vindt deze op www.wiringpi.com. De code, die je gebruikt, lijkt op het Arduino-C-dialect.

 De Raspberry Pi is een Single Board Computer waarop je natuurlijk ook 3D-ontwerpsoftware voor het maken van je model kunt draaien. Het open source pakket Blender heeft OpenGL-ondersteuning nodig. Die is helaas niet voor alle Linux distro’s beschikbaar; onder Raspbian werkt het bijvoorbeeld niet. Als je Blender toch wilt kunnen gebruiken, dan heb je de keuze tussen Debian en Ubuntu ARM. Verwacht geen snelle prestaties op je Raspberry Pi, want Blender gebruikt software rendering, zodat de GPU niet wordt gebruikt.

 De webserver levert een webpagina voor de printerbediening. Modelfiles in .obj- of .stl-formaat worden geüpload en doorgestuurd naar de slicersoftware, die er lagen van maakt. Het g-codebestand wordt met WiringPi-code via de GPIO-pinnen van de Pi doorgestuurd naar de Arduino. Hierna schrijft een aangepaste versie van Marlin het bestand naar SD-kaart weg. Als je model via het webformulier is geüpload, kies je daarbij een Slicer-ini-profiel uit een dropdownlist. De ini-file bevat laagdikte, vullingspercentage, temperatuur, nozzlediameter, printsnelheid bij overbruggingen, korte afstanden, omtrekken etc. Deze gegevens heeft Slic3r nodig om de g-code te berekenen.

 Online het printproces volgen

Via ons zelfontwikkelde communicatieprotocol wordt er ook informatie van de printer teruggestuurd naar de server op de Raspberry Pi, die het via jQuery en AJAX-requests naar de browser van de client stuurt. Dit betreft de temperatuur van nozzle en bed en de x-, y- en z-positie van de printkop. Uiteraard wil je het printproces natuurlijk thuis volgen via je webcam. Daarvoor gebruik je mjpeg-streamer in combinatie met een Pi-cam of USB-webcam. Je moet het programma dan nog wel even zelf compilen. Je wilt de printer ook volgen als je op een PC buiten het lokale netwerk werkt. We raden dan het gebruik van een OpenVPN-tunnelverbinding via internet aan.

Tot slot

Dit makersproject is ontstaan vanuit een vriendengroep onder de vlag van ICExtreme, 3D-printing en computertechnologie. Werner en Wolfgang houden zich bezig met het modelontwerp, inkoop en mechanische engineering. Dennis en Werner werken gezamenlijk aan de software, de webserver, het communicatieprotocol en de webGUI voor de printerbesturing. Felix verzorgt de technische documentatie. We gaan door met het ontwikkelen van 3D-printers en we delen onze kennis graag. Als je meer informatie over de hierboven genoemde onderwerpen wilt, mail ons dan op info@icextreme.eu.