3D TISKANJE Z INDUSTRIJSKIM ROBOTOM ABB IRB 1200

Velikost: px
Začni prikazovanje s strani:

Download "3D TISKANJE Z INDUSTRIJSKIM ROBOTOM ABB IRB 1200"

Transkripcija

1 UNIVERZA V MARIBORU FAKULTETA ZA STROJNIŠTVO FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Matej BOROVEC 3D TISKANJE Z INDUSTRIJSKIM ROBOTOM ABB IRB 1200 visokošolskega študijskega programa 1. stopnje Mehatronika Maribor, september 2018

2 3D TISKANJE Z INDUSTRIJSKIM ROBOTOM ABB IRB 1200 Študent: Študijski program: Matej Borovec visokošolski strokovni študijski program 1. stopnje Mehatronika Mentor FS: Mentor FERI: Somentor: izr. prof. dr. Karl Gotlih, univ. dipl. inž. str. izr. prof. dr. Aleš Hace, univ. dipl. inž. el. Timi Karner, mag. inž. meh. Maribor, september 2018

3 II

4 I Z J A V A Podpisani Matej Borovec izjavljam, da: je diplomsko delo rezultat lastnega raziskovalnega dela, predloženo delo v celoti ali v delih ni bilo predloženo za pridobitev kakršne koli izobrazbe po študijskem programu druge fakultete ali univerze, so rezultati korektno navedeni, nisem kršil avtorskih pravic in intelektualne lastnine drugih, soglašam z javno dostopnostjo diplomskega dela v Knjižnici tehniških fakultet ter Digitalni knjižnici Univerze v Mariboru, v skladu z Izjavo o istovetnosti tiskane in elektronske verzije zaključnega dela. Maribor, Podpis: III

5 Zahvala Rad bi se zahvalil Fakulteti za strojništvo, ki mi je omogočila potreben material za opravljanje diplomske naloge ter somentorju Timiju Karnerju, ki mi je s svojim izkušnjami in predlogi pomagal pri izvedbi diplomske naloge. Hkrati gre zahvala tudi prof. dr. Alešu Hacetu in prof. dr. Karlu Gotlihu. IV

6 3D TISKANJE Z INDUSTRIJSKIM ROBOTOM ABB IRB 1200 Ključne besede: 3D tiskalnik, industrijski robot, Arduino, RS232, G-koda, Solidworks, RobotStudio, FDM UDK: : (043.2) POVZETEK 3D tiskanje je tehnologija izdelave fizičnih izdelkov s pomočjo FDM (fused deposition modeling) tehnologije. Objekt, ki ga lahko narišemo na računalniku, lahko izdelamo na določenem stroju. Obstajajo že konvecionalne izvedbe 3D tiskalnika, ampak njihova najslabša lastnost je delovno območje. Z uporabo industrijskih robotov, ki imajo ponovljivost 0,02 mm, se delovno območje zelo poveča, na ta način pa nismo več omejeni pri izbiri velikosti izdelka in izbiri materiala zaradi možnosti montaže večjih šob za tiskanje. Princip delovanja je dokaj enostaven, šoba se segreje na tališče plastike, nato koračni motor potiska plastiko skozi šobo, potem se robot premika po določenim koordinatami, na ta način pa se plastika postopoma hladi in izdelek gradi. V

7 3D PRINTING WITH INDUSTRIAL ROBOT ABB IRB 1200 Key words: 3D printer, Arduino, RS232, G-code, Solidworks, RobotStudio, FDM UDK: : (043.2) ABSTRACT 3D printing is technology for making physical objetcs using FDM (fused deposition modeling) technology. Object which we draw on a PC can easily be printed with 3D print on specific machines. There are already available variations of 3D printers on the market, but one of their greatest weaknesses is working area. With the use of industrial robots with pose accuracy of 0.02 mm we can make working area a lot larger, that way we eliminate the problem with too big models and types of material which we want to print, due possibility to put larger noozle on the top of the robot. Working principle is quite simple, noozle is heated up to plastic's melting point, then stepper motor squeezes plastic fillament through the noozle, and then noozle is moving so that it leaves hardened plastic behind making a 3D model. VI

8 KAZALO VSEBINE 1 UVOD Področje diplomskega dela Opredelitev diplomskega dela PREGLED TRENUTNEGA STANJA PODOBNIH IZVEDB PRINTERJOV IN PRINCIP DELOVANJA Tehnologije tiskanja Princip 3D tiskanja NAČRTOVANJE VEZJA IN PROGRAMIRANJE Podroben opis problema Načrtovanje vezja PROGRAMIRANJE Splošno Krmiljenje koračnega motorja TESTIRANJE KRMILNIKA KONSTRUKCIJA OHIŠJA ZA ELEKTRONIKO ORODJE Ohišje za elektroniko MONTAŽA Elektronika v ohišju Montaža na robotsko roko PROCES PRIPRAVE 3D TISKA CAD model Program Slicer Pretvorba g-kode v RAPID PPROCES TISKANJA Nameščanje koordinatnega sustava Prvi tisk Drugi tisk SKLEP VIRI PRILOGE VII

9 KAZALO SLIK Slika 2.1: Primer tiskanja gline z industrijskim robotom... 2 Slika 2.2: Primer SLA tiskalnika... 3 Slika 2.3: Tiskanje s SLS tehnologijo... 3 Slika 2.4: Filament... 4 Slika 2.5: MK8 extrude... 4 Slika 3.1: Shema spajanja NTC upora na Arduino... 5 Slika 3.2: Shema spajanja motorja na gonilniku... 6 Slika 3.3: Shema vezja... 6 Slika 3.4: Pripravljeno vezje... 7 Slika 3.5: Shema RS232 kabla... 7 Slika 3.6: Shema TTL-RS Slika 3.7: Ploščica za TTL-RS Slika 3.8: Arduino Mega... 9 Slika 4.1: Testiranje temperaturnega regulatorja Slika 4.2: Shema krmila za dvojni H mostič Slika 4.3: Princip delovanja koračnega motorja Slika 4.4: A4988 gonilnik Slika 4.5: Določanje razmerja dolžine filamenta in koraka Slika 5.1: Testiranje komunikacije in logičnega delovanja Slika 5.2: Testiranje komunikacije z Arduinom Slika 6.1: 3D model držala za orodje Slika 6.2: Natisnjeno držalo orodja Slika 6.3: Nameščeno orodje Slika 6.4: 3D model ohišja za elektroniko Slika 6.5: Natisnjeno ohišje za elektroniko Slika 6.6: Končna obdelava 3D tiska Slika 6.7: Sestavljeno ohišje za elektroniko Slika 7.1: Razporeditev elementov v ohišju Slika 7.2: Komponente, nameščene na robotu Slika 8.1: CAD model Slika 8.2: Model, pripravljen za tiskanje Slika 8.3: Uvoz G-kode Slika 8.4: Pretvarjanje G-kode v RAPID Slika 8.5: Izvoz iz programa Slika 8.6: Prikaz izvoženih datotek Slika 8.7: Spremenjene datoteke Slika 8.8: Main modul Slika 8.9: Primer G-kode iz programa Slicer Slika 8.10: RAPID koda, ustvarjena iz G-kode Slika 8.11: Spremenjeni ukazi da se lahko pošiljajo podatki Slika 8.12: Simulacija RAPID programa Slika 9.1: Kreiranje koordinatnega sistema Workobject Slika 9.2: Nastavljanje koordiant in orientacije koordinatnega sistema Workobject VIII

10 Slika 9.3: Umerjanje koordinatnega sistema Slika 9.4: Prvi dve plasti tiska Slika 9.5: Tretja plast Slika 9.6: Izpolnitev izdelka Slika 9.7: Stranski pogled na tisk Slika 9.8: Prvi tisk Slika 9.9: Začetek tiskanja z novi parametri Slika 9.10: Kakovost površine tiska Slika 9.11: Končni izdelek IX

11 UPORABLJENE KRATICE FDM fused filament fabrication TTL transistor to transistor logic RPM revolutions per minute PLA Poly Lactic Acid ABS Acrylonitrile butadiene styrene CAD computer aided design DLP digital light procesing SLA stereolithography SLS selective laser sintering SLM selective laser melting FFF fused filament fabrication X

12 1 UVOD 1.1 Področje diplomskega dela 3D tiskalniki obstajajo že skoraj 40 let. Pri načinu in kompleksnosti izdelave izdelkov so doprinesli ogromno, ker omogočajo izdelavo kakršne koli geometrije. Procesi obdelave in materiali za 3D tiskalnike so toliko napredovali, da skoraj ni razlike med ulitkom in natisnjenim izdelkom. S pomočjo tiskalnika se lahko izdela bolj optimizirana oblika, istočasno pa se prihrani material. Komplekse oblike se lahko dosežejo, ker tiskalnik deluje na način, da dodaja material plast po plast. Obstaja veliko tehnologij 3D tiskanja. Proces tiskanja pa izberemo glede na željene mehanske lastnosti izdelka, natančnost tiska, površinsko obdelavo in tudi ceno tiska. Danes se že lahko tiska steklo, polimeri, les, različne kovine (titan, jeklo, aluminij itd.). Uporaba tiskalnikov je danes razširjena povsod, od programa za prosti čas pa vse do vesoljskega programa, ker omogča izdelavo lahkih in močnih izdelkov. Veliko se uporabljajo tudi na področju medicine za tiskanje protez, kar je bilo pred 3D tehnologijo tiska zelo težko izvedljivo. 1.2 Opredelitev diplomskega dela Ker se zelo pogosto potrebujejo večji tiski pri razvoju nekaterih prototipov, je pomanjkljivost komercialno dobavljivh tiskalnikov ta, da nimajo velikega delovnega področja. Po navadi so omejeni na velikost okoli 200 x 200 x 200 mm. Ko imamo majhno delovno območje, imamo težave z rezanjem izdelka na primerne velikosti, težava je tudi po tiskanju, ker se deli morajo nazaj zlepiti v celotni izdelek. To lahko zelo vpliva na natančnost izdelave in na mehanske lastnosti. Hoteli smo narediti tiskalnik, ki lahko izdeluje izdelke večjih dimenzij, saj bi se na ta način znebili težav, ki nastanejo pri lepljenju. Kot rešitev za problem smo uporabili industrijski robot ABB IRB Omenjeni robot ima ponovljivost na 0,02 mm, kar je dovolj natančno za tiskanje [14]. Če bi uporabili robotsko roko kot 3D tiskalnik in če bi tudi vrh robota uporabili za držanje orodja za tiskanje, bi teoretično lahko tiskali 360 okoli robota na razdalji 0,9 m in na višini okoli enega metra. S tem bi pridobil dosti večje delovno področje tiska. Tehnologija tiska bi bila na principu dodajanja raztopljenje PLA plastike (filamenta) na delovno podlago (mizo). Cilj naloge je bil natisniti večji izdelek s pomočjo industrijskega robota z zadovoljivo natančnostjo in kvaliteto v hitrejšem času kot dobavljivi komercialni tiskalniki. 1

13 2 PREGLED TRENUTNEGA STANJA PODOBNIH IZVEDB TISKALNIKOV IN PRINCIP DELOVANJA 2.1 Tehnologije tiskanja Obstajajo tri najbolj pomembne tehnike tiskanja [16]: dodajalna tehnologija (FFF in FDM): plastika se raztopi, izdelek nastaja tako, da se raztopljena plastika nalaga plast po plast, tekočina (DLP in SLA): fotoobčutljiva tekočina se nahaja v posodi, pod posodo pa imamo projektor, ki projicira plasti na posodo, kar pripomore pri strjevanju tekočine pri izdelavi modela, prah (SLM, DMLS, SLS itd.): tiskalnik uporablja proces sintranja ali taljenja prahu z močnim laserjem, ki lahko natančno tali prah na določenih mestih. Slika 2.1: Primer tiskanja gline z industrijskim robotom 2

14 Slika 2.2: Primer SLA tiskalnika Slika 2.3: Tiskanje s SLS tehnologijo 2.2 Princip 3D tiskanja Metoda tiskanja, katero smo uporabljali, je zasnovana na FDM (fused deposition modeling) tehnologiji [1]. Princip je enostaven, filament premera 1,75 mm prihaja v extruder preko koračnega motorja in se preko njega natančno iztiska v vročo šobo. Za extruder smo uporabili model MK8 [5]. Ta model bo predstavljen v nadaljevanju. Tiskanje z FDM tehnologijo je zasnovano na taljenju plastike. Najprej potrebujemo filamet, ki je pravzaprav plastika, katero bomo topili. Izbrali smo PLA (polylactide) plastiko, ker je najbolj primerna za tiskanje, prav tako pa se ne izloča toliko strupenih plinov pri tiskanju, tako kot pri 3

15 drugih materialih. Filament premera 1,75 mm smo s pomočjo koračnega motorja potiskali v segreto šobo premera 0,5 mm. Iz šobe potem teče plastika, ki se nanaša na delovno podlago v več plasti. Za krmilje temperature šobe, delovne podlage (grelna miza) in korčnega motorja potrebujemo mikrokrmilnik. Tiska se na način, da računalnik pošilja podatke o koordinatih šobe, hitrosti tiskanja, dolžini filamenta, potrebnega za izdajanje med dvema koordinatama. Ko tiskalnik konča z enim ukazom, daje povratno informacijo, da se program lahko nadaljuje. Slika 2.4: Filament Slika 2.5: MK8 extrude 4

16 3 NAČRTOVANJE VEZJA IN PROGRAMIRANJE 3.1 Podroben opis problema 3D tiskanje zahteva dokaj natančno regulacijo temperature šobe, temperaturo mize in natančno podajanje plastike v vročo šobo. Če je šoba prevroča, se plastika zažge in kemijsko spremeni, kar ni zaželeno. Če je šoba preveč hladna, plastika ni dovolj tekoča, kar pomeni, da je adhezija z drugimi plasti zelo slaba. Zato je bilo potrebno izdelati ustrezno vezje, da lahko vse komponente povežemo in ustrezno krmilimo. 3.2 Načrtovanje vezja Preden smo začeli z delom, smo morali določiti ustrezne komponente in jih potem zvezati. Potrebne komponente: Arduino Mega je krmilnik, A4988 je gonilnik za koračni motor, dva potenciometra za nastavljanje temperature mize in šobe, konektorji, ki so izvodi s PCB za povezavo z žičkami, jumper žičke za lažjo povezavo med tiskanino in krmilnikom, dva 100 kω upora, torej delilca napetosti za NTC upor napajalni vir za 5 V in 12 V za napajanje elektronike in grelcev, MK8 extruder vsebuje koračni motor, grelec in potrebni mehanizem za izdajanje filamenta, MAX232 za pretvorbo iz TTL na RS232 in obratno, pet 1uF kondenzatorjev, ki so potrebni elementi za pravilno delovanje MAX232 čipa. Slika 3.1: Shema spajanja NTC upora na Arduino 5

17 Slika 3.2: Shema spajanja motorja na gonilniku Povezava zgornjih dveh osnovnih shem prikazuje naslednje vezje. Slika 3.3: Shema vezja 6

18 Slika 3.4: Pripravljeno vezje Zgoraj prikazano vezje smo potem zalotali na testno ploščico in jo uporabili kot modul (Slika 3.4), katero smo povezali na Arduino. Ta ploščica nam zagotavlja lažje spajanje grelcev, senzorjev in koračnega motorja na krmilnik in napajalni vir. Za vhode in izhode na ploščico smo zalotali konektorje, da se lahko povežejo z jumper žičkami. Komunikacija med robotom in Arduinom je bila preko RS232 na frekvenci 9600 bps, kar je bilo več kot dovolj za našo uporabo. Slika 3.5: Shema RS232 kabla Da bi lahko komunicirali z robotom, smo potrebovali še en modul, ki bo prevajal s TTL signala v RS232 signal in obratno. 7

19 Slika 3.6: Shema TTL-RS232 Slika 3.7: Ploščica za TTL-RS232 Kot rešitev smo uporabili MAX232 čip in pet kondenzatorjev, kar je delovalo odlično in dovolj hitro za našo uporabo [19]. 8

20 Slika 3.8: Arduino Mega Na sliki (Slika 3.8) je prikazana krmilniška platforma, na katero smo priklopili vse komponente. Logika delovanja je bila takšna, da je krmilnik sprejemal podatke preko serijskega kanala, prebral koliko filamenta mora iztisniti in poslal informacijo na gonilnik za koračni motor, ki ustreza temu podatku. 9

21 4 PROGRAMIRANJE 4.1 Splošno Postopek pisanja programa je potekal tako, da smo najprej pripravili regulacijo temperature za grelno mizo in šobo. Oba elementa sta imela 100 kω NTC upora za meritev temperature. Za preračun temperature z upora smo uporabili končne enačbe od proizvajalca [17]. T = temperatura v kelvinih R = upor pri temperaturi T A, B, C = Steinhart-Hart koeficienti Da bi lahko določili Steinhart-Hart koeficiente, potrebujemo podatek o uporu vsaj treh različnih temperatur [17]. Potem lahko s pomočjo naslednjih formul določimo koeficiente. Dva potenciometra sta spojena na analogne vhode saj služita nastavljanju temperature grelne mize in šobe. Regulacija temperatre je preprosta preko»if«pogoja, kar pomeni, da če je temperatura večja kot nastavljena, se stikalo izklopi, če pa je tempratura manjša kot nastavljena, se stikalo vklopi. 10

22 Slika 4.1: Testiranje temperaturnega regulatorja Na začetku smo za stikala za grelce uporabljali navadne releje, potem pa smo ugotovili, da je obraba prevelika in se vse skupaj preveč greje, zato smo releje zamenjali s tranzistorji MOSFET [7]. Potem je sledilo krmiljenje koračnega motorja. Kot napajalni vir smo uporabili 400 W napajalnik iz računalnika, uporabili smo 12 V izhode kot napajalni vir za grelno mizo in šobo, 5 V pa smo uporabili za napajanje preostale elektronike. Ko smo ugotovili, da vse deluje pravilno, smo začeli z nastavljanjem koračnega motorja. 11

23 4.2 Krmiljenje koračnega motorja Uporabili smo bipolarni koračni motor NEMA17, kar pomeni, da vsebuje samo dva navitja, ki sta krmiljena tako, kot prikazujeta sliki v nadaljevanju (Slika 4.2 in Slika 4.3) [6]. Slika 4.2: Shema krmila za dvojni H mostič Slika 4.3: Princip delovanja koračnega motorja Krmiljenje motorja za izdajanje plastike v šobo nam je zagotavljal A4988 gonilnik za koračni motor. Za Arduino že obstaja napisana knjižnica, ki vsebuje izpeljane ukaze za obračanje motorja. Koračni motor se lahko krmili na polne korake, polkorake in mikrokorake. Poln korak motorja je normalen korak motorja, ko ni nobene tokovne regulacije. Motor se lahko premakne za pol koraka, če spustimo tok čez dve tuljavi istočasno se rotor zaustavi med obema navitjama. Mikrokorak se doseže z natančno regulacijo toka čez posamezno navitje. 12

24 Vse zgoraj navedene lastnosti koračnega motorja nam zelo preprosto omogoči gonilink za koračni motor, na primer A4988 [18]. Slika 4.4: A4988 gonilnik Za krmiljenje motorja je bilo potrebno na gonilnik spojiti 12 V na pin»vmot«, STEP in DIR pin pa na Arduino pine 2 in 3. Za vsaki impulz na STEP pinu se motor premakne za en korak. Logično stanje na DIR pinu nam določi smer vrtenja motorja. Za našo uporabo smo potrebovali čim večjo natačnost premika rotorja. To smo naredili tako, da smo na pine M1, M2, in M3 spojili logično enko (5 V). Na ta način smo dobili možnost krmilja na 1/16 koraka, kar pomeni, da je en obrat imel korakov (shemo prikazuje Slika 3.2). V naslednem koraku smo morali določiti, koliko korakov motorja je potrebno, da se iztisne 1 mm filamenta. Slika 4.5: Določanje razmerja dolžine filamenta in koraka Postopek je potekal tako, da smo motor zavrteli za korakov, izmeril iztisnjeno dolžino filamenta, nato pa smo korake delili z milimetri. Rezultat je konstanta , to številko smo pomnožili z željenimi milimetri in tako smo dobili izstiskanje filamenta za željeno dolžino. Preko komunikacijskega kanala RS232 smo pošiljali vrednost E (dolžina extrudanja) iz robotskega krmilnika na Arduino Mega krmilnik, na primer E1.0, kar pomeni, da se mora iztiskati 1 mm filamenta. Na Arduino krmilniku je bilo potrebno ločiti črko»e«in številke, potem številko pomnožiti in zapisati v funkcijo rotacije motorja. 13

25 5 TESTIRANJE KRMILNIKA Slika 5.1: Testiranje komunikacije in logičnega delovanja Komponente smo povezali na krmilnik robota ABB in prenosnik. Iz robota smo prvo pošiljali podatke preko RS232 na prenosnik, da smo lahko ugotovili, ali nam sintaksa programa pravilno deluje. Program, ki smo uporabljali za nadziranje serijskega porta, se imenuje Serial Port Monitor. Z ukazom»write channel«smo pošiljali podatke iz robota na Arduino. Ko smo ugotovili, da komunikacija s prenosnikom deluje pravilno, smo preizkusili, kako deluje s krmilnikom Arduino. Slika 5.2: Testiranje komunikacije z Arduinom Ko smo robotski krmilnik povezali s krmilnikom Arduino, smo komunikacijo lahko še zmeraj nadzorovali preko prenosnika. Na isti način smo še enkrat preizkusili, ali vse pravilno deluje. Ko smo ugotovili, da komunikacija in regulacija temperature delujeta pravilno, smo morali natisniti ohišje za elektroniko. 14

26 6 KONSTRUKCIJA OHIŠJA ZA ELEKTRONIKO 6.1 ORODJE Orodje vsebuje koračni motor, mehanizem za izdajanje filamenta v šobo in grelec. Da bi sploh kar koli začeli delati, je bilo potrebno orodje pritrditi na robotsko roko. Slika 6.1: 3D model držala za orodje V nadaljevanju je na sliki (Slika 6.1) prikazan 3D model držala za orodje, ki se nato izvozi kot.stl format, da se lahko natisne [8]. Slika 6.2: Natisnjeno držalo orodja 15

27 Slika 6.3: Nameščeno orodje Kot material za tiskanje smo uporabili ABS plastiko, ker ima najboljše mehanske lastnosti in je temperaturno obstojna [9]. 6.2 Ohišje za elektroniko Ideja je bila, da se elektronika montira na robotsko roko in da se potem s kabli poveže napajanje in orodje. Ohišje bi tudi uporabili kot nosilec za filament. S temi parametri smo prišli do naslednje oblike. 16

28 Slika 6.4: 3D model ohišja za elektroniko Slika 6.5: Natisnjeno ohišje za elektroniko 17

29 Slika 6.6: Končna obdelava 3D tiska Slika 6.7: Sestavljeno ohišje za elektroniko Natisnjene izdelke je bilo potrebno premazati z raztopino ABS-a in acetona, da smo jim zagotovili boljše mehanske lastnosti, ker se površina izdelka po plasteh zlepi in bolj zgladi. 18

30 7 MONTAŽA 7.1 Elektronika v ohišju Prej kot lahko montiramo ohišje na robotsko roko, moramo elektroniko namestiti na njej namenjeno mesto. Spodaj na sliki (Slika 7.1) lahko vidimo razporeditev elementov. Slika 7.1: Razporeditev elementov v ohišju 7.2 Montaža na robotsko roko Slika 7.2: Komponente, nameščene na robotu Na zgornji sliki (Slika 7.2) je prikazan način, kako smo namestili elektroniko na robota pri testiranju. Ker je bila zadeva v razvoju, nismo zapirali ohišja, ker je bilo včasih potrebno kaj popraviti na strojni opremi (odklopiti kakšno žico ali kar koli drugo). Po tem, ko smo komponente dobro pritrdili, je bilo potrebno povezati napajalni vir z ostalimi komponentami. 19

31 8 PROCES PRIPRAVE 3D TISKA 8.1 CAD model Da bi lahko natisnili nek izdelek, je bilo najprej potrebno zgraditi 3D model. Tukaj smo uporabljali CAD softver SolidWorks [10]. Spodaj na sliki (Slika 8.1) je prikazan testni model za tisk, kvader v velikosti 100 x 30 x 10. Slika 8.1: CAD model Ko imamo CAD model, je potrebno izvoziti.stl format. Ta format vsebuje informacije o površini modela, kar je potrebno za nadaljevanje. 20

32 8.2 Program Slicer Za tiskanje smo uporabljali program Slicer, ki se imenuje Simplify3D [13]. Slicer nam omogoča, da se lahko nastavijo vsi možni parametri tiskanja, kar veliko pripomore pri nestandardnih primerih. Slika 8.2: Model, pripravljen za tiskanje Slicer je program, ki nam omogoča ustvarjanje G-kode iz.stl datoteke. Deluje pa na način, da razreže 3D model na več plasti določene debline, potem ustvarja gibe znotraj teh plasti, sproti generira podatke, kako se naj obnašata temperatura in hitrost ter podaja filament glede na koordinato, na katero prihaja orodje. Ko se parametri ustrezno nastavijo, se v programu klikne gumb, da se pripravi koda za tiskanje, potem se izvozi v.gcode format, ki se lahko odpre tudi kot.txt datoteka. 8.3 Pretvorba G-kode v RAPID Program za krmiljenje ABB robotov se imenuje RAPID [11]. Virtualno okolje, v katerem se programira robot, se imenuje RobotStudio. Ko programiramo ABB robota, se vsaka točka, vsaki podprogram ali kakršna koli akcija zapisuje v RAPID in se nato lahko preuredi po želji, če je potrebno. Da bi naš tiskalnik lahko prebral G-kodo, smo jo morali pretvoriti v programu RAPID. Pri tem nam je pomagal»add-in«v virtualnem okolju RobotStudio»Machining Power Pack«. Ta»addin«je v osnovi narejen za CNC obdelavo z ABB roboti tako, da brez težav pretvori G-kodo v linearne gibe za robota. Postopek pretvorbe G-kode v RAPID kodo je naslednji. 21

33 Slika 8.3: Uvoz G-kode Slika 8.4: Pretvarjanje G-kode v RAPID Ko namestimo Machining Power Pack, odpremo RobotStudio in klinemo na CAM converter zavihek, zberemo Import CNC code. Potem izberemo naš program, ki ga je ustvaril program Slicer. Ko ga imamo izbranega, preverimo, ali je orientacija orodja pravilno usmerjenja in tudi, če je RobotStudio pravilno ustvaril»path«oz. željeno trajektorijo. 22

34 Slika 8.5: Izvoz iz programa Slika 8.6: Prikaz izvoženih datotek Machining Power Pack nam G-kodo shrani kot več podprogramov z vrsticami, če je več vrstic, potem program javlja napake pri branju. Pomemben del kode je številka zraven»e«v G-kodi,»add-inE«prebere kot toolchange in tako jo zapiše v konvertirano datoteko. Številka, ki pride po»toolchange«ukazu v konvertirani kodi, nam pove, za kolko se naj izstisne filament. To številko je bilo potrebno preko RS232 pošiljati na Arduino. Prvo smo naredili Phyton skripto, da nam zamenja celotno vrstico, kjer se nahaja ukaz»toolchange«, z ukazi za pošiljanje številke. To skripto damo v mapo, kjer se nahajajo generirane datoteke, potem skripta preveri vsako datoteko v mapi in jo ustrezno spremeni. Kot rezultat se dobijo nove datoteke s predznakom»novi«. Pomembno je, da se datoteke nahajajo 23

35 v istem direktoriju, kot se nahaja direktorij virtualne celice v RobotStudio. V nasprotnem primeru program ne bo zmožen nalagati podprograme. Slika 8.7: Spremenjene datoteke Stare datoteke pobrišemo, v Main modulu pa samo spremenimo ime datotek, ki jih program išče, in dodamo ukaze za odpiranje in zapiranje komunikacijskega kanala, tako kot vidimo v nadaljevanju. Slika 8.8: Main modul Ko sprožimo Main modul, se program začne izvajati. Slika v nadaljevanju (Slika 8.9) nam prikazuje primer prvotne G-kode iz programa Slicer in kaj vse se spremeni do končne oblike kode, ki jo lahko uporabimo. 24

36 Slika 8.9: Primer G-kode iz programa Slicer Slika 8.10: RAPID koda, ustvarjena iz G-kode Slika 8.11: Spremenjeni ukazi da se lahko pošiljajo podatki. Ukaz»write channel«se uporablja za pošiljanje string spremenljivk. ClearIOBuff je za čiščenje serijskega kanala po poslanem podatku. Ukaz»Open ''com1:"channel\write«se mora dodati v Main program, služi pa za odpiranje komunikacijskega kanala. Ukaz»close channel«pa se doda na koncu Main programa, da se zapre komunikacijski kanal. 25

37 »WaitTime«je ukaz za zakasnitev pri nadaljevanju programa, v našem primeru je namenjen za varnost pri pošiljanju podatkov, da se prepreči overflow podatkov na Arduinu. Težava je bila v tem, da se od točke A do točke B mora izstisniti ves filament, ki je bil namenjen za to relacijo, drugače se zgodi, da se preveč podatkov nabere na komunikacijskem kanalu. Ker Arduino ne zmore več brati podatkov, je posledica tega, da se motor začne obračati neenakomerno, ker ne sledi ukazom. Na ta način smo pustili koračnemu motorju dovolj časa, da se motor premakne za določeno število korakov. Že iz priloženih programov lahko vidimo način delovanja našega 3D tiskalnika, robot se giblje od točke do točke, med njimi pa iztiska filament za dolžino, ki je izračunana s programom Slicer. Slika 8.12: Simulacija RAPID programa Ko smo dobili željeno obliko RAPID programa, je pametno preveriti, ali smo pravilno nastavili in obrnili koordinatne sistema orodja in delovne podlage. Po tem, ko smo nastavili parametre tako, kot morajo biti, smo lahko poslali program na robota in začeli s tiskanjem. 26

38 9 PROCES TISKANJA 9.1 Nameščanje koordinatnega sistema Preden se prične s tiskanjem, je potrebno natančno nastaviti pozicijo koordinatnega sistema za delovno podlago. Z metodo preizkušanja smo izvedeli, da mora biti razdalja med šobo in delovno podlago 0,2 mm ali debelina enega papirja. Na ta način zagotavljamo ustrezno adhezijo plastike na delovno podlago. Workobject je koordinatni sistem, ki nam določa izhodiščno točko robota, obdelovanca ali kakršnega koli predmeta, ki ga uporabljamo kot referenčno točko za koordinate robota. Workobject je lahko fiksno povezan z bazo robota, orodjem ali kakršnim koli objektom v okolju. V našem primeru je bil Workobject povezan z delovno podlago (mizo) in se je nahajal na enemu kotu, na ta način smo zagotovili, da se vse naslednje točke nahajajo tam, kjer si to želimo. s Slika 9.1: Kreiranje koordinatnega sistema Workobject 27

39 Slika 9.2: Nastavljanje koordiant in orientacije koordinatnega sistema Workobject Pričeli smo tako, da smo zelo počasi premikali robota proti delovni podlagi, istočasno pa smo premikali papir, ki se je nahajal med šobo in podlago. Ko se je začel čutiti upor premikanja papirja, smo vedeli, da smo prišli na željeno razdaljo. Slika 9.3: Umerjanje koordinatnega sistema 28

40 9.2 Prvi tisk Preden smo začeli tiskati prvo plast, je bilo potrebno nastaviti ustrezne parametre na koračnem motorju in določiti, s koliko RPM se motor naj vrti. Potem se ta podatek vpiše v program in se lahko začne tiskati. Izračunali smo, da potrebujemo 5,2 RPM na motorju, v programu smo definirali 6 RPM za vsak slučaj, da se ne zgodi overflow komunikacijskega kanala. Tiskali smo s PLA plastiko, ker je najlažja za tiskati [12]. Ne potrebuje grelne mize za dobro adhezijo, temperaturni koeficient raztezanja je zelo majhen, kar je zelo pomembno, ko se tiskajo večji izdelki, ker drugače se vse skupaj zvije, model pa se odlepi od podlage. PLA material se tiska na 205 C segrete šobe, kar smo izvedli od proizvajalca [12]. Tiska se lahko na borosilikatno steklo, ki ima tudi zelo majhen raztezek pri temperaturni spremembi. Naslednja možnost je, da se podlaga premaže z UHU lepilom v tubi, po tem, ko se lepilo posuši, lahko začnemo tiskati. Za prvi test smo z alkoholom očistili steklo in na njega tiskali. 29

41 Slika 9.4: Prvi dve plasti tiska Slika 9.5: Tretja plast 30

42 Slika 9.6: Izpolnitev izdelka Slika 9.7: Stranski pogled na tisk 31

43 Adhezija prve plasti je bila zadostna, da se lahko nadaljuje s tiskom. Na prvih dveh plasteh smo prilagajali parametre tiskanja, zato se je komaj tretja plast pravilno natisnila. Slika 9.8: Prvi tisk Med tiskanjem se je zgodilo to, da so se koti odlepili od podlage, zato se je celoten tisk upognil, kar je pripeljalo do tega, da smo morali ustaviti proces na pol poti do konca, ker bi drugače šoba odnesla celoten tisk. Natisnjen krog okoli modela se uporablja za čiščenje šobe, preden se začne tisk modela. Najbolj optimalen način tiskanja je ta, da se na prve in zadnje tri plasti nastavi 100 % izpolnitve, stena pa je debeline dva prehoda s šobo. Izpolnitev je odvisna od uporabe izdelka, kar pomeni, da če potrebujemo boljše mehanske lastnosti, damo na več odstotkov izpolnitve, drugače pa na manj, da prihranimo plastiko. 32

44 9.3 Drugi tisk Prvi prvem tisku smo že pridobili izkušnje, kaj moramo spremeniti pri drugem tisku. Včasih se je šoba zamašila, zato smo jo razširili na 1 mm premera, višino ene plasti pa smo dali na 0,8 mm. Na podlago smo dali lepilni trak, ki smo ga premazali z UHU lepilom. Te spremembe so se izkazale za zelo učinkovite, kar pomeni, da smo lahko natisnili večji izdelek z večjo hitrostjo in z manj napak. Namen 3D tiskalnika z industrijskim robotom je, da se lahko tiskajo izdelki večjih dimenzij, za manjše dimenzije se lahko uporabljajo komercialni tiskalniki, ker se pri njih lahko natisnejo bolj jasne podrobnosti. Da bi prezentirali zmogljivost tiskalnika, smo natisnili objekt v višini 250 mm, za katerega je potreboval okoli tri ure tiskanja. Z navadnim tiskalnikom bi ta čas bil vsaj štirikrat daljši. Slika 9.9: Začetek tiskanja z novi parametri Izkazalo se je, da je tehnika z UHU lepilom in lepilnim trakom odlična, saj je bila adhezija tako močna, da smo lepilni trak komaj odstranili iz izdelka, kar je poskrbelo za odlično kvaliteto tiska v nadaljevanju. 33

45 Slika 9.10: Kakovost površine tiska Iz priložene slike (Slika 9.10) se lepo vidi, da je debelina plasti bolj izrazita kot pri prvem tisku. Ker smo tiskali vazo, je kakovost površine zadovoljujoča, ker prispeva k posebnemu estetskemu izgledu. Tiskana je tako, da so spodnje tri plasti 100 % polne, stena se je tiskala tako, da se je Z os konstantno večala. Rečemo lahko, da je stena zgrajena kot spirala, ne vsebuje plasti. Ta način tiskanja je specifičen za vaze ali posode, ki ne vsebujejo luknje ali kakršnih koli gub. Debelina stene se določa s premerom šobe. Končni izdelek se je natisnil presenetljivo dobro, kakovost tiskanja pa se lahko primerja s komercialnimi tiskalniki. 34

46 Slika 9.11: Končni izdelek 35

47 10 SKLEP Glede na rezultate lahko rečemo, da smo dosegeli cilj diplomske naloge. Tiskalnik deluje tako, kot je bilo predvideno. Če pogledamo kakovost drugega tiska, lahko sklenemo, da so industrijski roboti dovolj natančni in precizni, da lahko opravljajo nalogo 3D tiskanja. S pravilnim kalibracijskim parametrom lahko zlahka zagotovimo večjo toleranco natisnjenih izdelkov. Največ težav pri tiskanju smo imeli s serijsko povezavo. Pri tiskanju se je pogosto zgodilo, da je podatek prišel na Arduino brez da bi se motor ustavil. V tem primeru so se podatki v komunikacijskem kanalu nabrali in je to zmotilo motor, ker je program poskusil slediti ukazom iz komunikacijskega kanala. To težavo smo začasno rešili tako, da smo po vsakem ukazu za gibe dodali ukaz za čakanje, da lahko motor konča z ukazom. Na ta način smo natisnili prvi tisk, kjer je razvidno, da rešitev deluje, ampak potrebuje še nadgraditev algoritma. Miza za tiskanje vsebuje možnost gretja, kar je zelo koristno pri tiskanju drugih tipov plastike. PLA ne potrebuje grelne mize, lahko se tiska pri sobni temperaturi. ABS je plastika na bazi nafte in potrebuje mizo, segreto na vsaj 110 C, tega pa zaenkrat nismo tiskali, ker se večji izdelki dosti lažje upognejo, če okolje ni segreto. V prihodnosti načrtujemo, da bomo tiskalnik nadgradili z večjo šobo in večjim premerom filamenta, kar bi prispevalo, da lahko hitreje tiskamo večje izdelke, kjer podrobnosti niso toliko pomembne. Največji premer šobe za plastični filament je 2 mm, za to pa potrebujemo 3 mm filament in močnejši grelec, ki lahko v krajšem času raztopi plastiko in zagotavlja kontinuirani pretok plastike. 36

48 11 VIRI [1] FDM - [2] Arduino - [3] RS [4] TTL - [5] MK8 extruder- [6] NEMA [7] MOSFET - [8].stl - [9] ABS - [10] CAD - [11] RAPID ukazihttps://library.e.abb.com/public/688894b98123f87bc1257cc50044e809/technical%20referenc e%20manual_rapid_3hac _revj_en.pdf [12] PLA - [13] Simplify3D - [14] Tehniške specifikacije robota ABB IRB %20IRB% en.pdf [15] SLS tehnologija tiska - [16] tehnologije tiska - [17] enačba za NTC upor- [18] A4988 datasheet - [19] MAX232 datasheet

49 12 PRILOGE Arduino pogram // // //*******SENSORS******** //heatbed sensor= A0 //extruder sensor= A1 //headbed relay= 6 //extruder relay=7 //potentiometer extruder=a2 //potentiometer heatbed=a3 #include <Arduino.h> #include <movingavg.h> #include "BasicStepperDriver.h" #define MOTOR_STEPS 200 #define RPM 5 // 1=full step, 2=half step etc. #define MICROSTEPS 16 #define DIR 3 #define STEP 2 int stepcount = 0; int var = 0; BasicStepperDriver stepper(motor_steps, DIR, STEP); movingavg extruder(50); double stepcommand; int ThermistorPin = 0; int Vo; float R1 = 10000; float logr2, R2, T, Tc, Tf; float c1 = e-03, c2 = e-04, c3 = e-07; int setbed = A2; int setextruder = A3; int Input; int relay = 6; //relay for heatbed const int numreadings = 50; int readings[numreadings]; 38

50 int readindex = 0; int total = 0; // the index of the current reading // the running total double average = 0; // the average int relaye = 7; //relay for extruder int in = 0; // for incoming serial data char buffer[25]; char ds[8]; double a; double b; //used to store decimal float save = 0; float save1 = 0; float save2 = 0; int koef; float new1 = 0; float old = 0; bool meja = false; void setup() { stepper.begin(rpm, MICROSTEPS); extruder.begin(); pinmode(relay, OUTPUT); //heatbed pinmode(relaye, OUTPUT); //extruder Serial.begin(9600); Serial.flush(); } float temperature(int pin) { Vo = analogread(pin ); R2 = R1 * ( / (float)vo - 1.0); logr2 = log(r2); T = (1.0 / (c1 + c2 * logr2 + c3 * logr2 * logr2 * logr2)); Tc = T ; total = total - readings[readindex]; // read from the sensor: readings[readindex] = Tc; // add the reading to the total: total = total + readings[readindex]; // advance to the next position in the array: 39

51 readindex = readindex + 1; if (readindex >= numreadings) { readindex = 0; } // calculate the average: average = total / numreadings; return average; } void loop() { if (Serial.available() > 0) { // read the incoming byte: byte index = 0; delay(100); // let the buffer fill up byte numchar = Serial.available(); if (numchar > 20) { numchar = 20; } while (numchar--) { buffer[index++] = Serial.read(); } float value = getvalue(buffer); String command = getcommand(buffer); old = new1; new1 = value; save = new1 - old; if (save < -2) { save = 0; } // steps = 260mm koef = save * ; // convert to int to use whole numbers stepper.move(koef); // Serial.println(koef); Serial.println(buffer); //save su milimetri for (byte x = 0; x < 20; x++) { buffer[x] = '\0'; } 40

52 } //********************************HEATBED******************* int avg = temperature(0); setbed = map(analogread(a2), 0, 1023, 0, 130); if (setbed >= avg + 3) { digitalwrite(relay, HIGH); } //if setbed if (setbed < avg - 3) { digitalwrite(relay, LOW); } //***********************EXTRUDER************************ int avg1 = temperature(1); setextruder = map(analogread(a3), 0, 1023, 0, 260); if (avg1 > setextruder) { digitalwrite(relaye, LOW); meja = true; } if ( meja == true) { digitalwrite(relaye,low); } if (avg1 < setextruder-20) { digitalwrite(relaye, HIGH); meja = false; } } float getvalue(char* data) { String inputdata = String(data); return inputdata.substring(1).tofloat(); } String getcommand(char* data) { 41

53 String inputdata = String(data); return inputdata.substring(0, 1); Serial.flush(); } Phyton skripta i=0 import glob popis = glob.glob('./*.mod') for j in range(len(popis)): ulaz=popis[j] # to je npr.\group_001_001_000 - Copy.txt izlaz='novi'+ulaz[2:] #maknem prva dva znaka i dodam novi na pocetak #ime ulazne je:'group_001_001_000.txt' with open ( ulaz, encoding = 'utf8') as dat : #ime izlazne je: 'novi.txt' # izlazna datoteka ne mora obstajati, # ali ako postoji već neka s tim imenom onda bude prebrisana with open(izlaz, 'w')as nova: for line in dat: i=i+1 #preskače prvih 7 redova jer je tam : #toolchange Generated by ABB Machining PowerPac... #pa bi bil bug if( i > 7 ): if 'toolchange' in line: s=line.split(' ') s2=' '+'write channel,"e'+s[3][:-2]+'";\n ClearIOBuff channel;\n WaitTime 0.2;\n' nova.write(s2) else: nova.write(line) else: nova.write(line) 42

54 43

55 44

56 45