Ohjaus

Tutkiessani muiden tekemiä lankasahoja havaitsin yhden ja saman ongelman toistuvan sahasta toiseen: sopiva ohjelmisto sahan ohjaamiseen uupui. Sen sijaan että olisi ohjaus joka ymmärtäisi tarkkailla kipinävälin jännitettä ja liikuttaa konetta aina kun tarvitsee, oli käytössä jyrsimille tarkoitetut ohjelmistot kuten Mach3 tai LinuxCNC. Utahin yliopisto rakensi oman sahan ja sille ohjauksen, mutta yliopistoille tuttuun tapaan tietoa ei ole vapaasti saatavilla, eikä tässä tapauksessa edes maksusta.

Sahoja ajettiin riittävän hitaalla jatkuvalla syötönopeudella, jotta lanka ei menisi oikosulkuun. Tämä aiheuttaa parikin ongelmaa, joista suurin on hidas työn eteneminen, koska työ ei etene prosessin ehdoilla ja että työstöarvot kaikille eri materiaaleille ja materiaalivahvuuksille täytyy kokeilla yrityksen ja erehdyksen kautta sekä taulukoida talteen. Ja mikäli muutat koneesta jotakin, ei nämä taulukot enää pidä paikkaansa.

Toinen merkittävä ongelma on peruutuksen puute. Eli jos (tai kun) lanka menee oikosulkuun, nuo jyrsinohjelmat eivät osaa peruuttaa samaa reittiä takaisin mistä tultiinkin kunnes oikosulku häviäisi ja sitten voisi jatkaa leikkuuta normaalisti. Sinälään ihan loogista, jyrsimellä kun ei tarvitse paljoa peruutella.

Pitkään mietin itsekin, miten noista jommasta kummasta jyrsinsoftasta saisi tehtyä ohjauksen sahaani ns. puukottamalla sisään- ja ulostuloja, mutta mikään ratkaisu ei ollut oikein hyvä. Siispä Google esiin ja tonkimaan netin syövereitä, josko löytyisi jotain mitä voisi käyttää. Eipä aikaakaan, kun löysin RepRap projektin yhteydestä avointa lähdekoodia olevan G-koodia ymmärtävän tulkin.

RepRapin 3D-tulostimen koodi oli tarkoitettu Arduinon mikrokontrollerikortille ladattavaksi, joten seuraavat päivät menikin tutkiskellessa koodia ja sen toimintaa sekä sitä mikä ihme on Arduino. Siinä ohessa löytyi myös toinen G-koodia ymmärtävä ohjelmisto Arduinolle nimeltään grbl. Huomattavasti edistyneempi, joskin suunniteltu jyrsimille.

Lueskellessani Arduinosta tulin päivä päivältä varmemmaksi siitä, että ratkaisu on löytynyt ohjausongelmaani. Arduino (sekä kortit että kehitysympäristö) on avointa lähdekoodia, äärimmäisen helppo käyttää (yhdellä napilla koodin lataus kortille) ja koodi on minullekin tutun C/C++ kaltaista. Ja kaikki kommunikointi on yksinkertaisesti USB:n yli, vain piuha kiinni ja menoksi.Katsomalla Youtuben hakua sanalle ‘arduino’ kertoo aikalailla mihin kaikkeen se kykenee.

Yksinkertaista käyttöä helpottaa vapaata lähdekoodia olevat koodikirjastotkin, jotka mahdollistavat monien lisälaitteiden käytön ilman sen kummempaa syvällistä perehtymistä tiedonsiirtoprotokolliin ja bittien nurinkurisuuteen. Esimerkiksi LCD näytön ohjaukseen tarvitsee huikeat pari lausetta, yksi jolla kerrotaan mihin pinneihin näyttö on kytketty, toinen jolla kerrotaan näytön rivi- ja sarakemäärä ja lopuksi tulostuskäsky, jolla saa halutun tekstin näytölle.

Ja debuggausta varten on helppo käskeä Serial.begin(9600) ja halutuissa kohdin ohjelmaa käskee Serial.println(muuttuja), jolla Arduino pukkaa muuttujan arvon tai tekstit USB:n yli tietokoneelle, josta niitä voi tarkkailla kehitysympäristön oman serial monitorin kautta. Ja jälleen ei tarvitse tietää sarjaporttiliikenteen sielunelämästä hölkäsenpöläystä saati nähdä bitin bitin bittiä jotta homma toimii.

Pitkään pohdiskelin että mitä kaikkea laitetta ja härpäkettä minun tarvitsee kytkeä tuohon Arduinoon, jotta siitä syntyisi ns. täysverinen lankasahan ohjain. Ainakin kasa potikoita, LCD näyttö, muistikorttikin olisi kiva, näppäimistö, ledejä, releitä, mikrokytkimiä, ja ties mitä muuta josta ei vielä osaa uneksia.

eBaysta tilasin aiheeseen sopivan matriisinäppäimistön ja miltei kaikki loput osat (Arduino, potikat, liittimiä, piuhoja, näyttö jne.) tilasin Yhdysvalloista Adafruitilta. Toista sataa euroa sinne meni, varsinkin kun ostin aidon Arduinon kortin enkä halpakopiota, sillä halusin tukea Arduinon kehitystyötä ja ideologiaa.

A brand new Arduino Mega2560 R3 development platform photo Arduino_Mega2560_R3_zpsaa58e6a7.jpgKorttivalinnaksi päätyi Arduino Mega2560 R3, jossa on 256 kt ohjelmamuisti, 8 kt RAM, 16 ADC liitäntää, 54 digitaaliliitäntää, kasa sarjaportteja, 16 MHz kello ja kaikki tämä noin kämmenen kokoisella levyllä. Tilatessa en ollut täysin varma paljonko ohjelmani tulee viemään tilaa tai kuinka paljon tarvitsen liitäntöjä kortilta ulkomaailmaan, joten valitsin tämän kyseisen kortin Arduinon suurimpana.

Koska Arduino on tarkoitettu kehitysalustaksi, sen kaikki liitännät on tuotu kortin reunoille naaraspiikkirimaliittimiin. Näihin voi kytkeä suoraan jäykän johdon tai vaihtoehtoisesti kytkeä ‘shieldin’, eli erillisen piirilevyn, joka liittyy Arduinon omiin liittimeen piikkirimoilla ja tarjoaa tarvittavat lisätoiminnot, kuten vaikkapa Ethernet palvelimen, langattoman yhteyden, muistikortin, moottoriohjaimen tai miltei mitä tahansa.

Prototyping shield for Arduino Mega2560 from iTeadStudio photo wire_EDM_protoyping_board_for_Arduino_Mega2560_iTeadStudio_zpsa5ce8344.jpgKoska miltei kaikki liitettävät osat tarvitsevat käyttöjännitteen ja maan, eikä Arduinon kortilla ole näitä kuin muutama, päätin että suunnittelen ns. koekytkentälevyn jolla saan kaikki liitännät mukavasti käyttöön, luotua jokaisen liitännän viereen käyttöjännite- ja maaliitännät, ryhmiteltyä mikroprosessorin portit erilleen ja tilaa jäi vielä pienelle verolevyn tapaiselle kytkentäosiolle. Teetätin levyn (tai siis minimin 10 kpl) iTeadStudiolla lähettämällä levykuvat Gerbereinä sähköpostilla ja maksamalla PayPalin kautta levyt sekä rahdin. 27 euroa köyhempänä ja paria viikkoa myöhemmin hypistelin kasaa hienoja piirilevyjä karvaisissa kourissani. Laatu oli niin hyvä, että tilaan tuolta jatkossakin levyni.

Piirilevykuvan suunnittelin KiCad nimisellä piirilevysuunnitteluun tarkoitetulla ohjelmistolla, joka on ilmainen, avoimen lähdekoodin ohjelmisto. Huomattavasti helpompi käyttää kuin kilpailijansa Eagle, eikä siinä ole Eaglen tapaisia kokorajoituksia. Kuparikerroksia voi olla 2-16 kappaletta, joten mikä tahansa pitäisi onnistua. KiCadin kaikki (tulostus)tiedostot ovat selkokielisiä ASCII tiedostoja verrattuna Eaglen binäärimössöön ja siksi KiCadiin onkin olemassa netti pullollaan automaatisia komponentin luontityökaluja, jotka helpottavat elämää.

Tunnin juotostöiden jälkeen oli käsissäni omatekoinen ‘shield’, johon olin juottanut piikkirimat pohjaan Arduinoon liittämistä varten ja päällipuolelle liitäntöjä varten muutamat rimanpätkät myös. Lisäksi kahteen porttiin kytkin kasan ledejä etuvastuksineen, jotta näen että ne toimivat halutulla tavalla.

Wire EDM Arduino controller at startup showing main menu and machine position. photo wire_EDM_Arduino_controller_start_zps562feb4b.jpgKaiken tuon osien saapumisen odottelun ohella naputtelin selkä köyryssä koodia kahvikupin jos toisenkin kera ja suunnittelin ohjauksen ominaisuuksia ja käyttöliittymää. Kun kaikki osat saapui ja sain tuon koekytkentälevyni rakenneltua, sain kytkettyä osat toisiinsa ja testattua yksittäisten toimintojen oikeellisuuden ja lopuksi kokonaisuutta.

Koodia on kertynyt miltei 2000 riviä, josta tosin suuri osa on kommentteja. Kommentteja siksi, että pysyisin itsekin kärryillä eri toimintojen tarkoituksesta ja käytöstä ja jotta muutkin ymmärtäisi. Koodi on kirjoitettu englanniksi, sillä aion julkaista koodin GNU GPL alaisena ja toivon, että siitä on hyötyä muillekin kuin minulle tai pelkästään suomalaisille. GNU GPL varmistaa sen, että muutkin voivat kehittää ohjelmistoa, muokata sitä omiin tarpeisiinsa soveltuvaksi ja että julkaistaessa muokattu versio on se oltava samalla tapaa lisensoitu, ts. lähdekoodi tulee olla saatavilla. Näin varmistan sen, että projektistani on hyötyä kaikin mahdollisin tavoin.

Väitän, että GNU GPL:n alaisena julkaistuista projekteista on enemmän hyötyä kuin salamyhkäilystä binäärimössöjen ja yritysnimen/yrityssalaisuuksien takana, sillä näin kehitykseen voi osallistua kuka tahansa eikä se ole rajoittunut yhden yrityksen hyvin rajalliseen henkilöstöön. Mielestäni tällainen toiminta edistää asioita paremmin ja nopeammin ja mahdollistaa kehityksen jatkumisen, vaikka alkuperäinen tekijä ei olisikaan asiasta enää kiinnostunut.

Wire EDM Arduino controller, showing manual mode menu. Allows quick manual machining to be done. photo wire_EDM_Arduino_controller_manual_zpsf85a6ada.jpgTällä hetkellä ohjelmisto osaa ohjata askelmoottoreita näppäimistöltä painamalla numeroita, eli liikkua X, Y tai XY suuntiin. Nopeus on säädettävissä potikalla ja LCD näyttö päivittää jatkuvasti koneen sijaintia ja liikenopeutta. Funktionäppäimistä saa kontrolloitua releitä manuaalitilassa, jotka ohjaavat pumppuja ja langan jännitettä. Manuaalityöstössä ohjaus seuraa jatkuvasti kipinävälin jännitettä ja antaa moottoreiden syöttää vain kun jännite on tarpeeksi korkea. Tämä jänniteraja on säädettävissä potikalla. Lisäksi ohjaus automaattisesti seuraa veden sähköjohtavuutta ja tarvittaessa käynnistää hartsipumpun, jolloin veden sähkönjohtavuus saadaan laskemaan säädetylle tasolle.

Lisäksi ohjaus osaa etsiä kappaleen reunan haluttuun suuntaan tai reiän keskiön. G-koodin tulkkikin on valmis ja se osaa lukea G-koodia joko USB:n yli sarjaliikenteenä tai SD-muistikortilta. Erikoisuutena tulkissa on se, että sille kelpaa jyrsimelle postattu koodikin hyvin, sillä tuntemattomat käskyt ja Z-liikkeet jätetään huomioimatta täysin. Riittää, että postaa ohjelman, jossa jyrsimen terä leikkaisi kappaleen profiiliajona yhdellä lastulla ja tämä käy suoraan ohjaimelleni. Kaikki ohjelmat tulee olla valmiiksi sädekompensoituja, sillä ohjain ei ymmärrä sädekompensaatiosta pätkän vertaa asioiden yksinkertaistamiseksi.

G-koodeista on tuettuna G00, G01, G02, G03, G04, G90 ja G91, eli lineaariliikkeet, ympyräinterpolaatio molempiin suuntiin, tauko, absoluuttinen ja inkrementaalinen koordinaatisto. Ympräinterpolaatiossa vain IJ-offset on käytössä. Koneen mittajärjestelmänä on metrit, sillä tuumia ei ole käytössä virallisesti kuin Burmassa (Myanmar), Liberiassa ja Yhdysvalloissa, joten en näe ainuttakaan syytä niiden tuelle nykymaailmassa.

Ohjaus käsittelee kaikkia lukuja ja sijaintiaan kokonaislukuina (long), sillä Arduino ei tue double tarkkuutta. Float tyyppinen muuttuja on epätarkka, sillä se ei kykene esittämään kuin noin 5-6 merkitsevää numeroa. Kokonaisluvuilla tehtävien laskujen epätarkkuus koneen ohjauksessa tuottaa suurimmillaan tuhannesosamillimetrin virheen, joka ei näy eikä tunnu missään.

Tarkoitus olisi vielä lisätä koodiin peruutustoiminto, jolla saha osaa tulla samaa reittiä takaisin mitä se menikin. Toistaiseksi tämä toiminto on vasta suunnitelmissa, sillä haluan ensin testata koodin toimivuuden nykytilassaan sahaan kytkettynä. Teknisesti kyseessä ei ole mikään ihmeempi juttu, muutama muuttuja lisää ja pätkä koodia joka pitää kirjaa siitä missä ollaan oltu.