Így érdemes:

Ha teljesen laikus vagy, akkor az első résztől olvasd el a honlapot, mert egymásra vannak építve az oldalak! Jobbra a menü... Magyar az, aki aktívan tesz valamit, bármit, akármit a magyarság megmaradásáért! Mindenki más csak valami más, bármit is állítson magáról..

Rajzgép, CNC, 3D nyomtató, lézergravírozó


3D nyomató barkácsolása:

(FRISSÍTÉS! LINEÁRIS TENGELYNEK TÖKÉLETESNEK LÁTSZIK A BARKÁCSÁRUHÁZAKBAN KAPHATÓ NÉGYZETES (25 MM X 25 MM) ALUMÍNIUM PROFIL. KB. 1000FT MÉTERE, MEREV,  KÖNNYŰ ÉS PONTOS! 

Röviden leírva a projektet:
A cél egy elfogadható minőségű 3D nyomtató készítése kevesebb, mint 20 ezer forintból (először 15-ből akartam), a lehető legprimitívebben felépíteni, elhagyva minden olyan részt, ami elhagyható, valamint a tanulás, és a tapasztalatszerzés.
A gép első változata, később letisztult, egyszerűbb, és nagyszerűbb lett:






Kb. ez a folyamat:
A gépet fizikailag megépítjük, összekötjük az elektronikát, feltöltjük az arduinora a Marlin nevű arduinó kódot, amiben előtte a beállításokat is elvégezzük, letöltjük a Prontface g-kód küldő szoftvert. Beállítjuk, és ellenőrizzük a gépet (motorok mozgása, végálláskapcsolók, asztal szintezés, az extruder betöltése). Letöltjük egy g-kód generáló szeletelő szoftvert, pl. Cura, vagy Slic3r. Letöltünk egy például 3d teszt kocka STL fájlt. Ez még nem g-kód! A g-kód generáló szoftverrel megnyitjuk ezt a fájlt, majd megadjuk a beállításokat, pl. milyen filamentet használunk, milyen hőfokon, stb., majd generálunk egy G-kódot. A Prontface g-kód küldő szoftvert megnyitjuk, szintezzük az asztalt, és beállítjuk a gépet. Megnyitjuk a programban a g-kódot. Az extruder elkezd melegedni, és amikor eléri kívánt hőfokot, ill. annál a egy kicsit magasabbat, akkor elindul a nyomtatás. STL fájlt, vagyis 3d modellt mi is csinálhatunk! Elsőre a tinkercad.com oldalt ajánlom kezdőknek, mert nagyon egyszerű, egy órán belül meg lehet tanulni ezzel a 3d tervezést.

Végső konklúzió!
A kitartásodra is szükséged lesz! Újonnan már majdnem a duplájáért lehet venni elfogadható gépet is, és lehet érdemesebb lesz inkább azt beszerezi, mint saját tervekkel, és építéssel szenvedni! Ezt mérlegeld!

A gépem összetevői:

Nagyon fontos, hogy bármit rendelsz, mentsed el a típusát, sőt, jobban jársz, ha egyből a paramétereit is, mert ezekre az adatokra a beállításokban szükséged lesz! 

Amit tudtam elhagytam! Ami mindenképpen kellett végül a nyomtatómhoz:

-1db arduino mega 2560:
ez ebay-ről megrendelve kb. 1300Ft.

-Ramps 1.4
1150 Ft
https://www.ebay.com/itm/3D-Printer-Controller-for-RAMPS-1-4-REPRAP-MENDEL-PRUSA-for-Arduino/272564813806?epid=537424590&hash=item3f7620ffee:g:bhcAAOSwPCVX4-~P

-A 3D nyomtató fej része:
egybe rendeltem meg az Ebay-ről, mert még ilyet se láttam, nem értettem hozzá.
Ez már össze is volt szerelve, ezért volt jó nekem, kezdőnek...
Lehet, hogy jobb, ha nem ilyen egybe nyomtatófejt veszel, mert a motornak nem kicsi súlya van, ami nem előnyős a "Z" tengelyen, lehet jobb az a design, ahol a motor, és az extruder külön van, így a motort nem kell a "Z" tengelyre tenni, a kettőt pedig egy tefloncső köti össze, de annak a hátrányáról egyenlőre nincs tapasztalatom... Ez kereken 5000Ft volt.
Így volt kiírva:
3D Printer MK8 MK9 Left&Right hand Extruder Hotend+Stepper Motor+Nozzle+Fan
https://www.ebay.com/itm/3D-Printer-MK8-MK9-Left-Right-hand-Extruder-Hotend-Stepper-Motor-Nozzle-Fan-/232555215993
Ennek a beállításai, adatai nálam.
A nozzle 0.4mm
A többi Marlin beállítást lejjebb megtalálod


-3db. Nema 17-es pl.: 17hs3430  motor. Az a fontos, hogy 12 Volt-os legyen.
kb. 3db 6600Ft

-A4988 Motor Driver
5db. 1260Ft
https://www.ebay.com/itm/StepStick-A4988-Motor-Driver-Reprap-Prusa-Mendel-Sanguinololu-RAMPS1-4/202246045173?epid=1131516384&hash=item2f16cdbdf5:g:pCoAAOxyBjBTRQ5O


-Alumínium négyzetes rúd, kb. 1500 Ft métere, nem emlékszem pontosan.

Végállás kapcsolók, én kukáztam, de lehet venni is, 3 db: 700 Ft
https://www.ebay.com/itm/3pcs-Limit-endstop-mechanical-printer-switch-with-cable-for-Reprap-3D-Printer/331639093622?hash=item4d373af976:g:QjsAAOSwgQ9V3sQd

- Menetes szár z tengelyhez kb. 6x50 kb. : 200 Ft
https://www.praktiker.hu/csavar-zar-vasalat/csavar-szeg-kampo/csavar/256274-jkh-menetes-szar-horganyzott-6x50cm

-menetes szár x, y tengelyekhez, 2db 3d nyomtatóhoz, + 4 db. hozzávaló réz csavar:
T8 2 D8 Lead Screw Threaded Rods With Brass Nut For Reprap 3D Printer Z Axis
kb: 3500Ft


Táp (ingyen):
Figyelmeztetés! Ennél a projektnél már nagy teljesítményű elektromos berendezéssel (táp) dolgozunk, ami életveszélyes is lehet! Több helyről nézz utána a dolgoknak, és saját felelősségedre tevékenykedjél. Ha nagyon nem értesz hozzá, akkor kérj valahonnan segítséget, vagy ne csináld!
Mivel a tápban van kondenzátor, ami tárolja a töltést, akkor is van benne áram egy jó ideig, amikor már leválasztottad a hálózatról, így akkor is szenvedhetsz áramütést, ha már kizúztad! Vedd úgy, hogy mindig van benne áram, így (ne) nyúlkálj a dolgokhoz!

Tápnak számítógép tápot használok, ami akár ismerősöktől is ingyen is beszerezhető, és tökéletesen megfelel a célnak. Mindig van valakinek elfekvőben otthon néhány darab, kérdezősködj az ismerőseidnél!

3,3,  5, és 12Voltos kivezetései vannak! Az ilyen tápok így aranyat érnek, és jók 3D nyomtatóhoz is.
Nem kell nagyon meghekkelni, mert nem kell a házát se szétszedni, csak a vezetékeit kell használni óvatosan!
Minden ilyen tápból kijön egy zöld vezeték. Ezen zöld, és az egyik fekete vezeték közé érdemes beforrasztani egy kapcsolót, de az is működik, ha egyszerűen csak összekötöd őket. Amikor csatlakoztatod a tápot a 230 Voltos fali konnektorhoz, akkor még nem csinál semmit, csak ha ezt a kapcsolót bekapcsolod.
https://cdn.instructables.com/F7F/I9FX/H130PCQR/F7FI9FXH130PCQR.LARGE.jpg

Ez a táp annyiban különbözik például a szintén 5V-os telefontöltőtől, hogy  sok-sok Amper, vagyis nagy áramerősség is meg tud rajta indulni. Vagyis bírja a kicsi, néhány ohmos ellenállású motorokat is. Ha teljesen rövidre zárod, akkor jó esetben lekapcsol, és a kapcsoló újra bekapcsolásával lehet újraindítani,de azért ne csináljunk rajta rövid zárat, mert rosszabb esetben ki is gyulladhat. Az enyémre az van ráírva, hogy akár 17A-t is engedélyez némely piros vezetékeken.

A tápból kijövő piros vezetékek a +5V, a sárga a +12V, a fekete pedig a föld. Ezekre van szükségünk.

Ha a feszültséget, és az ampert összeszorozzuk, akkor megkapjuk, hogy az mennyi Wattot, vagyis mennyi teljesítményt képes leadni az eszköz: 5*17=85 Watt, vagyis ennyit képes egyes piros vezeték leadni!
Ez szörnyen sok. A mobil töltője általában csak 0,5A-t engedélyez átfolyni, az 5V*0,5A=2,5W.
2,5Watt még nem vágja agyon az embert, de 85W már simán.
Tehát nem csak azt kell nézni, hogy hány Volt van a vezetékben, hanem azt is, hogy hány Watt tud kijönni belőle. Ugyanakkor nem teljesen így van, mert az emberi bőrnek meg van némi ellenállása, és ha kicsi a feszültség, akkor ez az ellenállása nagyon lekorlátozza a teljesítményt, ami meg tudna indulni. Extrém kicsi feszültségnél 2-3 V alatt nemigen ráz meg a nagy amperszámú áram, ilyet használnak a házi ponthegesztőknél, mert viszonylag nagy a bőr ellenállása (ha éppen nem izzadt, vizes), és nem tud megindulni nagy amper, Az 5V -től 12V-ig még azt mondják, hogy nem életveszélyes, de tekintsük annak, és járjunk el nagyon körültekintően. 
Ráadásul a táp belsejében azért ott dolgozik a 230V is, és a kondenzátorok tárolhatják az energiát még egy ideig a kikapcsolás után is. Egy ilyen nagyfeszültségű kondenzátor viszont már tényleg veszélyes lehet!  Itt egy amper-volt-watt-ohm kalkulátor egyébként:
https://www.rapidtables.com/calc/electric/watt-volt-amp-calculator.html

Szóval amire biztosan figyelni kell, hogy van benne kondenzátor, ami tárolja a töltést. Ki is próbálhatod. Kihúzod a falból, és bekapcsolod, és ha egy LED-et, a vele sorba kapcsolt, legalább 220ohm-os ellenálláson keresztül meghajtasz vele, akkor az  egy rövid ideig világított tovább, amíg a nyitófeszültsége fölötti értéket kapta a tápban lévő kondenzátorból. A lényeg, hogy ha ki van húzva a falból a táp, attól még van benne kakaó egy ideig. így az a biztos, ha mindig úgy gondoljuk, hogy van benne kakaó. Járjunk el mindig így, minimum azért, mert nem értünk hozzá!

A számítógép táp használatáról hirtelenjébe ezeket a linkeket találtam:
videók:
Honlap 
magyar.
(angol):

--------------------------------------------------------------------------

Építés lépései:
Az egyik videó, amiből táplálkoztam:
https://www.youtube.com/watch?v=BTUVGvbJbc8&t=474s
1. Építsd meg fizikailag a gépet!
2. Csatlakoztasd az arduino megát a számítógépedhez!
3. Töltsd le a Marlin fireware szoftvert! 
http://marlinfw.org/meta/download/
4. valahová mentsed le, majd csomagold ki. Keresd meg benne a Marlin.ino fájlt, és arra kattintsál rá. Ekkor az arduino IDE meg fogja nyitni ezt a fájlt. Van egy csomó alfülre. Kattints a configuration.h alfülre! itt be kell állítani, hogy:
-1,75 -ös filamentet használok, én legalábbis. Alapból 3mm -re van állítva.
- be kell állítani a hőmérő típusát!
- motorok lépését, stb.
http://solidutopia.com/marlin-firmware-user-guide-basic/
http://marlinfw.org/docs/configuration/configuration.html

-Állítsd be az arduino IDE-be azt, hogy az arduinód a mega.
-ellenőrizd a kódot, majd mentés, majd feltöltés.

5. Építsd ki az elektronikát!
https://www.youtube.com/watch?v=85nj3WDfUs8
-Rakd össze az arduino megát, és a ramp 1.4-et!
-A jumpereket helyezd el a motor driverek alá hármat-hármat, minden motornál!
-A többi bekötés itt van. Az endstop bekötését viszont ne innen nézd, hanem lejjebb külön ki van fejtve:
https://www.hta3d.com/image/catalog/Impresoras/P3Steel/Esquemas/RAMPS%201.4%20EN-sinsensor-alt.jpg
https://cdn.instructables.com/F6T/EPPH/IAQMCZDI/F6TEPPHIAQMCZDI.LARGE.jpg
-Az extruder ventilátorát közvetlenül a táp egy külön 12Volt-jára kötöttem. A polaritást ki kell tapasztalni.

6 Töltsd le a g-kód küldő programot, és teszteld a motorokat, illetve a gépet. Ha kell módosítsd a Marlint, és töltsd fel újra!
-Prontface szoftvert (g-kód küldő) töltsed le, nyisd meg az exe fájlját (nem kell telepíteni)!
http://www.pronterface.com/
Állítsd be a motorok áramkorlátját, a driverekkel!A motort mozgatod a Prontface-val, és közben a driveren lévő potmétert (állítható ellenállás) csavargatod. Egy bizonyos pozíción túl a motor nem forog, illetve forog. Ehhez a  legközelebb állítsd be, természetesen úgy, hogy még megfelelő erővel forogjon!

7. Töltsél le egy teszt kocka fájlt! 
https://www.thingiverse.com/thing:2562198
Ez csak STL fájl, ebből még egy G-kódot kell csinálni egy szeletelő programmal!

8. Töltsd le egy szeletelő (slicer), g-kód készítő programot!
Én a Cura 15.02.01 (javasolt) programot töltöttem le innen:
https://3dnyomtato.shoppe.hu/pages/letoltesek
http://www.shoppe.hu/3dnyomtato/Software/Cura_15.02.1.exe
Ez elég egyszerűnek tünik, nincs sok beállítás. Az alap beállításokkal gyors, de elég durva minőséget kapunk, de gondolom lehet fordítva is beállítani.

A másik szeletelő szoftver több beállítást igényel, de alapból elég szép darabot nyomtat vele.
http://slic3r.org/
Persze sok más ingyenes is van még, gondolom!

9. Csinálj egy teszt g-kódot, a szeletelővel, a teszt kocka STL fájlból.
Meg kell adni a programban, milyen filamentet használsz, mekkora fúvókád, stb.
Tehát te mindig csak egy STL fájlt töltesz le, és a szeletelővel neked kell belőle g-kódot csinálnod, olyat, amilyen a te gépedhez illik.


10. A Prontface-ban kapcsold be az extrudert, majd amikor felmelegszik, nyomd bele a filamentet.
https://www.youtube.com/watch?v=BFkpCXKrak8
Sajnos az én extruderembe csak úgy lehet belerakni a filamentet, hogy szétszerelem, vagy pedig béna vagyok...
Amikor belenyomom az extruderbe, és megnyomom az oldalán a "gombot", amely szabaddá teszi befelé az utat, nem talál bele a szál a réz fűtőegységbe, hanem mellé megy, ezért kell szétszednem...

11. Szintezd az asztalt!
Később úgy csináltam meg a gépet, hogy alapban vízszintesen van az asztal, nem kell szintezni.

12. A végállás kapcsolókat (min. 3 db.) állítsd be:
Több típus van. mindegyiket másképpen kell bekötni!
Ilyet használtam, de más típusokat is lehet:
https://www.ebay.com/itm/3pcs-Limit-endstop-mechanical-printer-switch-with-cable-for-Reprap-3D-Printer/331639093622?hash=item4d373af976:g:QjsAAOSwgQ9V3sQd
Nem írták sehol, de én biztos ami biztos, egy-egy 4,7Kohm-os ellenállást sorba kötöttem velük. Be kell állítani a megfelelő dolgokat a Marlinban hozzá.
https://www.youtube.com/watch?v=r_nURQsNnwU
Amit én használtam, annak két vezetéke van. A polaritás nem számít, és a két vezetéket a negatív, és az S tűkre kell kötni:
http://www.b2networks.co/wp-content/uploads/2018/02/v2-0-ramps-wiring-for-snappy-and-ramps-diagram-1024x786.png
A végálláskapcsolóknak a következő a szerepük:
A gép be tudja magát állítani egy alaphelyzetbe, ezt angolul háznak (home) hívják. Mind a három irányban van egy alaphelyzet, tehát mindhárom tengelynek van egy home-ja. A g küldő szoftverben lehet próbálgatni a mozgatást ide-oda, és a tengelyt a home-ba küldeni. A gépnek legalább három végálláskapcsolóra van szüksége, amik úgy működnek, hogy nekimegy pl. az asztal, ezzel megnyomja a kapcsolót, amire az asztal megáll, és ezt a pontot veszi onnantól háznak (home). Lehet akár a tengely másik végletébe is tenni végálláskapcsolókat, de ezeket el lehet hagyni. Ha nem akarunk nagyobbat nyomtatni, mint amekkorát a gépünk tud, akkor elvileg nincs rá szükségünk. Azonban biztonsági okokból beépítetlenünk a max. útvonalra, ha mégis valami balul sülne el, de ez nem kötelező felszerelés, csak extra. A minimum útvonalra azonban mindhárom tengelyre kell tennünk.
Az asztal fölött a "Z" tengely minimális távolsága, a ház, vagyis az extruder, és az asztal közötti távolságot is a "Z" tengely végálláskapcsolóval állítottam be. Ezt úgy csináltam, hogy a végálláskapcsolót egy kicsi fadarabra ragasztottam, aminek az egyik felét csavarral rögzítem az géphez. A csavar lazításával a végálláskapcsolót lehet emelni, süllyeszteni, beállítva azt a távolságot, hogy amikor a  "Z" tengely megnyomja, ideális távolságban legyen az extruder az asztaltól. Állítólag 0,2 - 0,25 mm körül, de nézz utána... Ott hézagmérőt, vagy egy jó vastagságú papírlappal ellenőrizheted a távolságot.


13. Csinálj egy próbanyomtatást! 

Az építés során ezek a hibák merültek fel:
A hibák mind abból adódtak, hogy saját "tervezésű" gépet csináltam, ami több funkciós, és a lehető legprimitívebb alkatrészekből akartam megcsinálni.

A nulladik hibám, hogy végálláskapcsolók nélkül akartam megcsinálni, de úgy tűnik, ha jól értelmeztem, hogy a Marlin (arduino kódja) legújabb változata nem működik nélkülük, és kell minimum 3db. Szerencsére találtam az elektronikai hulladékok között ilyeneket...

Ezután leginkább a "Z" tengellyel voltak problémáim. Az első gondom az volt, hogy egy motorral gondoltam megoldani, így rövid méretben nem sikerült megcsinálni a "Z" tengelyét úgy, hogy ne szoruljon, vagy ne lötyögjön, mert egy motorral középről kell mozgatni a tengelyt.  Végül fából csak sikerült megcsinálni, és olyan hosszúra csináltam, amilyen hosszú faanyagot találtam hozzá, de így se lett hosszabb a mozgástartomány 14cm-nél. A "Z" tengely építésével szívtam a legtöbbet, vagy 8-szor módosítottam rajta, mire jó lett. Úgy tűnik, hogy a "z" tengely fizikai kialakítása a legnagyobb kihívás a 3D nyomtatóknál, de nálam mindenképpen.
Akár még fém alkalmazása nélkül is meg lehet csinálni a gépet, ha nagy méretben csináljuk, akkor még falécekből is elég pontos lesz. Persze akkor egy szekrénnyel több lesz a lakásban...

A második hiba az volt, hogy az X és Y motorok mozgását damillal próbáltam megoldani. A damil jól működött a lassú mozgású, és kis gyorsulású rajzgépnél, de a 3D nyomtató gyors rángatásánál meg-meg csúszott. Ki kellett cserélnem bordás szíjra. Utána az x, és y tengely tökéletes lett.

A harmadik hiba megint a "Z" tengelynél jelentkezett. Sokkal alacsonyabbat nyomtatott a gép, mint ami méret meg volt adva. Az egyik face fórumon is segítséget kaptam, és közben nekem is feltűnt, hogy a "z" motor nem mozog minden rétegnél ugyanakkorát. Adtam a motornak több áramot, és lassítottam a gyorsulását, hogy ne olyan írtelen mozogjon.

Most itt tartok. Már majdnem jó, valószínű, hogy tovább kell lassítanom, és egy kicsi ellensúlyt kell alkalmaznom, illetve jobban meg kell olajozni a menetes szárat, hogy könnyebben mozogjon. Most itt tartok, éppen csinálom. Eddig úgy tűnik, meglepően jó minőségben fog nyomtatni.

A tapadás először gondot jelentett, de néha az üvegre spriccelt hajlaknál meg az ellenkezője a baj, hogy alig akar lejönni.

Az asztal szintezése is kihívás lehet,. Hulladékok között találtam egy kicsi kamera állvány részét, amivel meg lehetett oldani az asztal állíthatóságát.
A második verzióban úgy csináltam meg, hogy nem kell már szintezni, mert mindig szintben van.

Hogyan lehet a 3D nyomtatódra, vagy lézeredre LCD kijelzőt tenni, és a kábelkapcsolat helyett 
SD kártyát használni? 

Az SD krtya azért is jobb, mert így a gép nemcsak független a számítógéptől, hanem amikor az elalszik, vagy egyéb zavar keletkezik, nem fagy be a nyomtatás.

-Vettem egy LCD kijelzőt:
12864 LCD Display 3D Printer Controller +Adapter For RAMPS 1.4 Reprap Mendel
kb. 2300 Ft-ért az ebay-ről.

Úgy írom le a folyamatot, hogy már működik a 3d nyomtatód, csak most bővíted az LCD-vel, és így függetleníted a számítógépedtől.


Tehát először is, le kell töltened az u8glib könyvtárat, és berakni.illetve telepíteni úgy ahogy van, zip tömörítve az arduió szoftver könyvtárába:
https://bintray.com/olikraus/u8glib/Arduino
info:
Az arduino szoftverrel megnyitod a marli.ino file-t, és a configuration.h fülön törlöd ebből a kódból a megjegyzés jelet:
// #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
hogy csak ez maradjon:
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
https://botland.com.pl/en/reprap-boards/2658-smart-controller-reprap-3d-ramps-14-lcd-12864.html?search_query=12864+LCD&results=1
A z tengely ndstop-ját át kell írni inverzbe, hogy ne legyen baj, amikor home küldöd, és érzékelje azt, hogy a nemlétező z home-be van. Tehát ezt a sort írd át:
"#define Z_MIN_ENDSTOP_INVERTING false
true-ra, ha eddig false volt...
Összekötöd a ramps 1.4-et az LCD-vel!
A Marlinban alapba le van tiltva az SD támogatás, így engedélyezni kell, azaz ezt törölni kell // ez előtt:
#define SDSUPPORT
Ennyi!

Marlin (config.h) beállításaim:
 #define MOTHERBOARD BOARD_RAMPS_14_EFB
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
#define TEMP_SENSOR_0 1
#define HEATER_0_MAXTEMP 230
#define PREVENT_COLD_EXTRUSION
#define EXTRUDE_MINTEMP 170
#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 200
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
#define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
//#define ENDSTOP_NOISE_FILTER
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 400, 400, 3200, 95, }
#define DEFAULT_MAX_FEEDRATE          { 20, 20, 5, 25 }
#define DEFAULT_MAX_ACCELERATION      { 200, 200, 100, 10000 }#define DEFAULT_MAX_ACCELERATION      { 200, 200, 100, 10000 }
#define DEFAULT_ACCELERATION          200    // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION  3000    // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION   200    // X, Y, Z acceleration for travel (non printing) moves
#define DEFAULT_XJERK                 8.0
#define DEFAULT_YJERK                 8.0
#define DEFAULT_ZJERK                  0.3
#define DEFAULT_EJERK                  5.0
#define X_BED_SIZE 140
#define Y_BED_SIZE 130
#define Z_MAX_POS 100
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define SDSUPPORT
--------------------------------------------------------------

Ha a kijelződön a kép szétesik, akkor így kell megjavítani:
Hogyan csinálhatsz a 3D nyomtatódból rajzgépet!

Hogyan csinál a 3D nyomtatódból rajzgépet, amivel pl. a pólódra is rajzolhatsz textilfilccel!

0. Az Inkscape programmal lehet olyan g kódokat előállítani, amit a 3d nyomtató elfogad.

Ha rajzolni szeretnél akkor az Inkscape telepítése után egy bővítményt kell hozzá letölteni.


Töltsd le innen a legfrissebbet ebből az Inkscape bővítményt a rajzoláshoz (vagy pengével vágáshoz).:

https://github.com/arpruss/gcodeplot/releases

Csomagold ki, és ted belle a C: \ Program Files \ Inkscape \ share \ extensions mappába ( a 8 file, meg kettő mappát)! Amikor azt kérdezte, hogy már van ilyen felül-e másolom, azt jelöltem be, hogy igen, minden fájlt.

(van olyan Inkscape bővítmény is, ami a lézergravírozáshoz kell, de erről majd később. A rajzgéppel nagyon puha anyagot nagyon lelassítva szerintem mikró cnc-ézhetsz is, de talán van külön cnc bővítmény is. Alapba a 3D nyomtató nem bírja az erőhatásokat a cnc-hez, ezért csak puhát  és lassan lehet vele csinálni szerintem.)


Az inkscape-t tudod magyarítani a youtube-on rá tudsz keresni hogyan, ha nem lenne magyar.


Ezután rajzolj egy egyszerű, pl. egy szabálytalan négyzetet az Inkscape-vel. Erről azt kell tudni, hogy vektort is tudsz rajzolni, vagyis a vonalakat tudod nagyítani a nélkül, hogy pixelesedne, mert útvonalként rajzolod, nem pikszelként. Ezt jelenti a vektor grafika.

Megnyitod az Inkscape programot, majd a fájl, dokumentum beállításoknál megadod a lap méretét milliméterben. Azt a méretet add meg, amennyi az asztalod munkamérete!A rajzlapod nullapontja, ahonnan a toll indul a bal alsó sarok lesz.Ha a gépeden ez fordítva van, akkor fejjel lefelé fog rajzolni a gép ahhoz képest, ahogy a monitoron látod, de ez nem probléma.

Ezután a baloldali rajzmenüben van egy olyan, hogy bézier-görbék.
Ezzel tulajdonképpen útvonalterveket rajzolsz. Leszúrod, majd viszed a kurzort egy másik helyre, majd leszúrod, majd egy másik helyre, és a két pont közé rajzol egy egyenest. Kettő kattintással elengeded, és ott fejezed be a vonalat. Balra fölülről lefele az első ikon, az útvonal szerkesztése a csomópontok által. A húzott vonalat ezzel tudod görbíteni. Ha több vonalat csinálsz, akkor a baloldali ikonmenüben a legfelső kurzorral kijelölöd az egész területet, majd a fenti útvonal menüben összevonod őket. Ekkor egy rajz lesz. Utána ugyanebben az útvonal menüben, az objektum átalakítása útvonallá, és kész az útvonal. Majd mentés másképpen, és válaszd ki a 3-axis gcode plotter formátumot, és ok. Ekkor még feldob egy csomó beállítási lehetőséget. Állítsd be!
work z = az a magasság, ahol rajzol.pl: 3mm

lift z = az a magasság, ahol rajz közben két vonal húzása közben felemeli pl.:5mm

parking z = az a magasság, ahová ahová az elején és a végén beállítja magát.pl. 7mm

Ezek a z home-hoz vannak viszonyítva.

Max. ugyanazt a méretet add meg a munkaméretnek, mint amit a rajlapnak állítottál be, vagyis az asztalod munkaméretét, vagy kisebbet. Itt állíthatod be azt is, hogy milyen gyorsan rajzoljon, és mekkorát mozogjon a Z tengely.

Ezután ezt a kódot már rajzolásra tudja használni a  3D nyomtató.
Simán betöltöd mintha 3d g kód lenne, de csak rajzolni fog. Legalábbis, ha az extruder helyére, vagy valahová oda, teszel egy tollat!Először megkeresi a nullpontot a végkapcsolók által, majd lerajzolja a kódot. Az extrudert nem kapcsolja be.

Persze egy fénykép, vagy svg alapú rajzot is lerajzoltathatsz...
Az SVG-t úgy kell, hogy kijelölöd, és útvonallá alakítod a rajzot, majd ekkor már elmentheted a 3-axis gcode plotter formátumban.


Fényképnél a rajzot ráteszed a lapra, majd a bézier-görbe használatával áthúzod a vonalait. Ha készen vagy, akkor a rajzot félrehúzod, és kitörlöd, és ottmarad az útvonaltervezet. Átalakítod útvonallá, és elmented 3-axis gcode plotter kódba. Ha szöveget akarsz berakni, de olyat, amit egy vonallal rajzol, akkor az új Inkscape-ba elméletileg már integrálva van (kiterjesztések menü-megjelenítés-Hershey text), vagy bővítményt kell hozzáadni.

Forrás:
https://www.instructables.com/id/Use-3D-Printer-As-a-Plottercutter/

Hogyan tudsz a nyomtatódra lézert szerelni, és azt gravírozóként működtetni?

Az itt leírtakért kifejezetten nem vállalok felelősséget! Nem ajánlom, hogy lézergravírozót használj, mert nagyon veszélyes. Itt azt írom le, hogy én mit csináltam, de nem javaslom, hogy utánozz! A lézer nagyon veszélyes. ha csak egy pillanatra is éri a szemedet vakságot okoz, ha pedig védelem nélkül nélkül a lézergravírozást, már az is károsíthatja a szemedet!
A legnagyobb gond  vele azonban a füst, amely igen káros a szervezetedre! Ezzel számolj, mert tényleg nagy probléma!

Először is hozz meg olyan többszintű biztonsági intézkedéseket állítottam fel.
0. Mindig egyen rajtad megfelelő, a lézer hullámhosszához való védőszemüveg! Ezt nem tudod megspórolni, tapasztalat, legyen eszed!
1. Csak akkor használom a lézert, ha egyedül vagyok a lakásban, szobában.
2. A nyomtató, és a lézer rögzítésének a stabilitása nagyon fontos, hogy ne tudjon szétesni, illetve leesni a lézerfej működés közben.
3. A lézer és a fejem között mindig van egy paraván, + a védőszemüveg.
4. A védőszemüveg mindig van rajtam a szobámban, sokszor még a másikba is, ahová be tudna világítani, ha a lézer nincs fizikailag leválasztva. Előfordult szerelés közben bekapcsolt, amikor nem kellett volna!
5. A lézer tápellátását egy hosszabbítóval ellátott gombon keresztül egy mozdulattal bármikor meg tudom szakítani.
6. Ha nem használom a lézert, akkor fizikailag leválasztom a gépről, és a szemüveget csak ekkor veszem le!Mindig csak közvetlenül  a gravírozás során csatlakoztatom védő-szemüvegben a lézert, majd utána rögtön le is csatolom!
7. A biztonsági intézkedéseket, kinyomtatóm, a gép mellé kirakom, bővítem, és mindig betartom.

Vettem egy 1000mW-attos lézert az Ebay-n!
5V tápot igényel!
A tervek szerint a ramps 1.4-es kilences kivezetésével fogom vezérelni, de arról opto elemmel el lesz választva.

Vektoros lézer rajz kód előállítása:
Az inkscape-ba le kell tölteni ezt a kiterjesztést, és a "c" meghajtó-programok-inkskape-share-extensions mappába belemásolni a tartalmát!
Ezután csinálni kell egy rajzot, útvonallá alakítani, majd a kiterjesztésekben a generate laser code- j tech fonotics laser generator-ra kattinva kijön egy ablak, ahol a beállításokat megtehetjük:
https://jtechphotonics.com/?page_id=1980
A ramps 1.4-hez az M106 (be) és M107 (ki) parancsokat kell használnunk, és a 9-es (layer fan) kivezetésen keresztül fogjuk vezérelni a lézerünket.
https://jtechphotonics.com/?page_id=1503

A layer fan (9) kivezetésére kötöttem egy optocsatolót és egy 1kohm-os ellenállást.
A lézert külön tápról fogom meghajtani az optocsatolón keresztül. Az áramkörhöz bontható egy kapcsolóval, amelynek hosszú a vezetéke, így a géptől messzebb is ki tudom baj esetén kapcsolni.

Kiderült a lézer rossz. Fénylik, de nem éget. Valószínű, hogy a fókuszt lehet állítani, bár nehezen lehet megállapítani, hogy mekkora, mert egy fénygömb veszi körül. Amúgy kamerán keresztül figyelem (főleg hogy ez az ultrakék nem is biztos hogy látható szemmel, tehát még veszélyesebb), de azt hiszem nem ezzel van a baj, hanem egyszerűen kicsi a teljesítménye. Köze nincs az 1000mW-hoz. A benne lévő dirveren van egy kicsi smd potméter, azzal lehet állítani az áramerősséget, mint a motoroknál. Ennek azonban nincsenek végpontja, csak forog körbe-körbe. Kimértem a legkisebb és a legnagyobb beállítás, és kipróbáltam ezeken. A legkisebben nem világít a lézer, az elméletileg legnagyobban, ha tényleg ez az, még mindig nem éget.

Három módszer van amivel lehet vezérelni, mindhármat kipróbáltam. Az egyik az optocsatoló, amit már említettem, a másik a relé, a harmadik a LM317T feszültségszabályozó használata.
Ez utóbbi azért jó, mert ezzel a lézer ereje 255 részre osztva szabályozhatóvá válik, azaz fényképet is gravírozhatunk, nem csak vonalakat. Pl. az M106 S127 paranccsal már csak 50%-nyi energiát kap a lézer.  Ezzel le lehet venni a teljesítményt annyira, hogy teljesen elhalványítva a lézert meg lehessen vizsgálni persze itt is szigorúan (!) védő-szemüvegen vagy kamerán keresztül (valószínűleg ez az ultraibolya szabad szemmel nem is látható, vagy nem látható jól) a fókuszt, bár így se tudok beállítani olyat, hogy égessen is.
Megpróbálom ezzel egy kicsit nagyobb feszültséget ráküldeni, sok ötletem már nincs. Amúgy se tapasztalni egy kis melegedést se, szerintem nem gáz, ha kipróbálom. Fránya lézer, jól kifogtam ezt is...
Segítség az LM317 használatához:
Egyszerűen csak a ramps 1.4 9-es lábát rákötjük, és a 12 voltjából csinálunk nagyjából 5 Voltot, és ezt kötjük a lézerhez, illetve a driveréhez. Az egyszerűbb, gyengébb lézerekben a házukba van beépítve a driver. 2W-tól, illetve a fölött külön áramkör.
Figyelj oda, hogy melyik melyik láb!
http://lokspace.eu/wp-content/uploads/2017/02/anet-a8-laser-engraver-mod-schematic.png
Az. hogy mekkora feszültséget állítasz elő, a két ellenállás értékének a meghatározásától függ!
http://www.reuk.co.uk/wordpress/electric-circuit/lm317-voltage-calculator/

Hát csinálhatok bármit ezzel a lézerrel, ez nem lesz jó. Némileg emeltem a feszültséget, de nem segített. Ugyanilyet már nem merek venni, a jobb lézerek 2W-tól kezdődnek, de sokkal drágábbak. Minimum 12-14 ezer.

Na, végül csak vettem egy 2.5W-os lézert. Elég brutál...
A drivere nem működött a feszültségosztó áramkörrel, mert azzal a lézer folyamatosan be volt kapcsolva. A lézer diveréből 4 vezeték jön ki. Egy lézer ventilátorhoz megy, egy a lézerdiódához, van egy tápvezetéke, amire 12 Voltot adok, és van egy TTL(és analóg egyben) vezetéke ami vezérlése, ami max. 5Voltot kaphat. A lézer, illetve a driver állítható TTL vezérléssel, ami a saját nyelvezetemmel digitális vezérlést jelent, vagyis ki-be kapcsolgatást, illetve ilyen módon ha gyorsan van megvalósítva, akkor az erejét (fényerőt) is állíthatjuk bizonyos mértékig, illetve analóg vezérlés is lehetséges, és akkor a 0 és 5V közötti feszültség a lézer 0 és 100% közötti százalékot adja. A driveren van egy kapcsoló, amivel át lehet kapcsolni a TTL és az analóg vezérlés között. A lézert a driverével egy optocsatolóval csatlakoztattam a 3d nyomtatóhoz, a ramp 1.4-es 9.-es lábáról van így vezérelve, így fizikailag elválasztottam a lézer 5V-os vezérlő, és a 12V-os tápáramkört, mert mint ahogy írtam, ha feszültségosztót használtam, akkor a 12V-os áramkör valahogy mintha áttalált volna az 5 Voltosra, és folyamatosan működött a lézer, nem volt vezérelhető.
A rajz csak magamnak! Ha hibásan kötöd be, akkor egy pillanat alatt elfüstölhet...
Vigyázat! Ha a lézer driver kapcsolója TTL állásban van, akkor folyamatosan működik a lézer, akkor is, ha a vezérlő áramköre nincs is kiépítve. Tehát ekkor, ha van táp a lézer diverén, a lézer már működik, és nem lehet sehogy szabályozni! 
Amúgy is, ha van táp, úgy számoljál, hogy a lézer bármikor bekapcsolhat, akkor is, ha nem gondolnád, mert nincs vezérelve! 

A lézer vezérlő áramköre, csak 5V-os, miközben a ramps 9-es pontjáról 12 volt jön, és a tápja is 12 V!

A raszteres képet elég sokáig kellett próbálgatnom, és állítgatnom, hogy jó legyen, de most már remekül működik!
https://youtu.be/UitXdPKy5vw

Mindig használsz védő-szemüveget (én eleve most olyan lézert vettem, amihez adtak), és az se árt, ha egy "falat" tartasz közétek, és csak egy kamerán (pl. mobil) keresztül figyeld!
--------------------------------------------------------------
Tapasztalatok:
A füstöt kivezetem egy csővel benne a ventivel, így már ez is meg van oldva :), bár majd egy füsttisztítót is akarok építeni! 
Fatípusok:
Eddig rétegelt nyírt próbáltam, ami vagy nagyon-nagyon jó volt, vagy egyáltalán nem volt jó. Talán a jó az éger lehetett? Nem tudom... A bükkre biztosan jól fog, de az meg nem annyira fehér. 
 A Photophiltre-vel csinálok képet, és az imagetogcode programot használom (ebből kettő van, én az egyszerűbbet használom). 
-------------------------------------------------------------

Fontosabb egyéb infók:
http://www.3d-ink.hu/hu/3354-gyik.html


A felhasznált weboldalak:
felhasznált videók:
https://www.youtube.com/watch?v=3gwWVFtdg-4


GRBL lézergravírozó építése!

Első körben megcsinálom a gravírozó fizikai felépítését, majd utána építem ki az elektronikát.
Ehhez a Keyestudio CNC GRBL V0.9 Board for CNC/Laser engraving alaplapját használom, amelybe az arduinó tulajdonképpen már integrálva van.
https://www.keyestudio.com/-p0351.html
és Nema 17 30 ohm-os motorokat fogok használni. Először is, ezeken a motorokon ellenőrizzük, hogy melyek a tekercspárok, mert nem feltétlenül sorba vannak a motor kivezetésénél, viszont sorba kell bekötni a motor driverekbe, tehát ott a tekercspárok vezetékei egymás mellett vannak, míg a motor kivezetésénél nem biztos! Ha rosszul kötjük be a motort, akkor csak zúg, de nem fog működni!

Ezután töltsük fel az alaplapra a 0.9 grbl szoftver arduino kódot!

Telepítsük a számítógépünkre a GRBL Controller 3.61-es g-kód küldő szoftvert!

És valami nem jó! Furcsán készíti a kódot, és furcsán rajzol!

A GRBL nem jött be, továbbra is Marlint használok. Nagyjából napi 20 percem van magamra, az is inkább éjszaka, és csöndben kell lennem, így nincs lehetőségem most sokat játszani vele...




Régi, elavult tartalom:

Igazából szerintem már nem éri meg saját gépeket építeni, mert ha beleszámítjuk a munkánk értékét, akkor olcsóbban be lehet szerezni a ebay-ről...

Fentről lefelé haladva az időben, a tartalom:
-rajzgép 1
-második  rajzgépem
-mini cnc
-3D nyomtatóim
-lézergravírozó
(Tehát a lap alján található a friss tartalom, a teteje már elavult)

Rajzgép
, azaz  pen plotter készítése 1:
Magyarul rajzgép. Ami jó benne, hogy ez a masina kiindulási alapja a CNC-nek vagy esetleg egy pirogravírozónak (a lézer túl veszélyes szerintem), sőt, a 3D nyomtatónak is.

Cél:
A cél az volt, hogy a legkevesebb pénzből, és kevesebb munkával, először egy deszkamodell készítése, és tapasztalatgyűjtés.

Első lépés:
Eldönteni milyen típust szeretnél. A neten, illetve a youtube-on több különböző típust fel lehet lelni. Vannak a mini típusok, amelyeknek a többsége régi CD, DVD meghajtókból van kialakítva. Első körben én is ilyet gondoltam, de végük arra jutottam, hogy mivel a jövőben lehetségesnek tartom, hogy építek egy 3D nyomtatót is, vagy/és egy használható pirográf is tetszene, így ez annak a kiindulópontja is lehetne, így viszont kicsinek ítéltem meg az elérhető 40x40 mm-es munkafelületet. Míg először egy olyan verzió volt a fejemben, ahol a papírra rátéve a gépet mozgó asztalt el lehet hagyni, a nagyobb, legalább 100x100 mm-es munkafelületű méret, és a távolabbi célokhoz való közelítés miatt végül elsőnek mégis egy mozgatható asztalos deszkamodell valósult meg.
Motornak a készletekben található  28byj-48 unipoláris léptetőből kettő és a 9g SG90 szervomotor került felhasználásra. A lépétetőhöz a hozzá való ULN2003 meghajtó modul került, mert ez amúgy is része az arduino kezdő készleteknek, és mert ezt használva a H-híd, és a bipoláris mód helyett, biztonságosabb áramkört jelent számomra, miután azzal korábban már elfüstöltem egy Nano-t, mert véletlenül egy lyukkal arrébb téve rövidre zártam, így talán másoknak is az lehet. Mindehhez ebben  a videóban találtam segítséget:
https://www.youtube.com/watch?v=1Q4IPGp6-k0


Második lépés:
A mechanika megépítése:
Néhány típus:
https://www.youtube.com/watch?v=Ezx90yZ1guk
https://www.youtube.com/watch?v=opZ9RgmOIpc
https://www.youtube.com/watch?v=R2CdNX6b-So
https://www.youtube.com/watch?v=OeswYL_EhH0
https://www.youtube.com/watch?v=eZZCd-b2o4c
https://www.youtube.com/watch?v=szXNpI4GydA

különleges dolgok:
vertikális:
https://www.youtube.com/watch?v=tsrsJ6WiIXY
https://www.youtube.com/watch?v=Vi_DtbRVFh0
https://www.youtube.com/watch?v=MVHfoNOy69I
https://www.youtube.com/watch?v=AlBPFC41FsM
https://www.youtube.com/watch?v=OuCiHp43q20
Itt egy igazi mestermű:
https://www.youtube.com/watch?v=xnZI0ovzb4c

Deszkamodellek:
Unipoláris módban:
A deszkamodell jelentőségével sokan nincsenek tisztába. Amikor el akarsz készíteni egy gépet, akkor két út van előtted. Vagy egy pontos tervrajz alapján lemásolod valakinek a már működő modelljét, és azt tényleg szigorúan pontosan másolod, tehát semmin nem változtatsz, ugyanúgy csinálsz mindent, pontosan ugyanazokból az alkatrészekből, anyagokból, vagy deszkamodellt csinálsz, majd ha úgy döntesz, akkor azt fejleszted fel végleges verzióra. Az emberek zöme azonban tapasztalatlan az alkotás terén, és vagy elkezd másolni valamit, de nem pontosan, és éppen ezért az nem, vagy nem fog jól működni, amiért aztán nem magát, hanem a tervezőt hibáztatja, vagy saját gépet tervez, de rögtön a végleges verzióra törekszik, megveszi a drága alkatrészeket, és elkezdi a precízen, és törhetetlenül összeépíteni, majd a harmadánál, felénél rájön, hogy nem úgy a legjobb, vagy úgy egyáltalán nem jó, módosít, újra megveszi az új koncepcióhoz megfelelő drága alkatrészeket, megint szilárdra építi, majd  megint rájön, hogy nem úgy a legjobb, vagy úgy egyáltalán nem jó, és lefutva ezt a kört még párszor, majd teljesen kiégve, egy csomó pénzt kidobva az ablakon, elpazarolva az életéből több hetet, rosszabb esetben hónapot végleg feladja. A deszkamodell építésekkor ezzel szemben arra törekszünk, hogy leginkább hulladékokból építsünk, a lehető legolcsóbban, mindent csak annyira rögzítünk, ragasztunk, hogy könnyen szét lehessen szedni, tudva azt, hogy a végeredményig jó néhányszor módosítani fogunk. Közben rájövünk a buktatókra, és érteni fogunk az adott dologhoz. Amikor elkészülünk vele, és nem csak a tanulás volt a cél, vagy rájövünk kell ez nekünk használati célra is, akkor véglegesítjük, ami állhat a szilárdabbra ragasztástól a minőségi részekből való újra megépítésig.

A deszkamodell tapasztalatai:
Kísérlet: Tegyél le egy A4-es papírlapot az asztalra. A mutatóujjaddal told meg az egyik sarkánál előrefelé! Ha hosszában áll a lap, és úgy tolod a sarkánál, akkor a papír előre mordul, és lassan kifordul, de alapvetően előre mozdul. Ha keresztben áll  a lap, és úgy tolod meg a sarkánál, akkor csak kifordul, és nem akar nagyon előre menni. Ha ez egy tálca, és egy lineáris tengelyen mozog, akkor ugyanezt akarja csinálni. Ha a tálca szélesebb, mint amilyen hosszú a mozgási irányában, akkor ki akar fordulni, akadozni fog, és megfeszülni, ha a széléről éri súrlódási ellenállás, vagy onnan van mozgatva. Ha a tálca hosszú a mozgatási irányban, akkor viszont szépen siklik. Legalábbis ezt figyeltem meg...Ha pedig egy pénzérmét is ráhelyezel a papírlapra, akkor a súlypontokat és a mozgatási pontokat is tudod modellezni.
A megvezetés, azaz a sín. Én motor küllőket használtam. A vastagabb küllő, minimum 3 mm a jó, mert az már nem görbe. A valóságban 3.1mm vastag, így a CD, DVD meghajtóban található siklócsapágy nem jó hozzá, mert az pontosan 3.0 mm. Így siklócsapágyat magam, drótból készítettem, hozzá Egyszerűen csak rátekertem, mintha szoros menetű rugó lenne. Valószínűleg rézvezeték lenne ideálisabb, kb. 10 mm hosszan a küllőre tekerve. A siklócsapágyak távolságát az adja meg, hogy mekkora rajzfelületet szeretnénk. Ha 10 X 10 cm-est, akkor legalább ilyen távolra kell tennünk a siklócsapágyakat egymástól, mert ha közelebb van, akkor nem siklani akar, hanem kitörni, azaz megakad a sikló szerelvény. A szerelvény ugyanis nem jó, ha szélesebb, mint amilyen hosszú.
Elég a párhuzamos megvezető rúd egyik tagjára rátenni a vezetékspirálból készített siklócsapágyakat, a másik rúdon már nem kell zárt siklócsapágy, hogy ne kelljen tökéletesen párhuzamosra állítani a másikkal, mert ott csak egy nyitott "siklócsapágyat" kell alkalmazni, ami csak a rúdtól való eltávolodást gátolja, de nem igányli, hogy a két rúd tökéletesen párhuzamosan legyen. Tehát úgy érdemes a sikló szerkezet csapágyrendszerét megcsinálni, ahogy a CD,DVD meghajtókban is van kialakítva. A rudakat olyan anyaggal kell ragasztani, ami nem köt meg azonnal, és van idő állítgatni őket. A 28byj-48 motor nagyon erős addig, míg pl. a 4,5 V -ot adó telepünk nem kezd lemerülni. Onnantól már könnyebben hibázik, mert hirtelen legyengül. Telep helyett érdemesebb persze adaptert használni tápnak. Sajnos a tengelyén az adott fogaskerék körtávolságán van benne egy negyed mm kotyogás. A mozgatást is fogaskerék szerkezettel csináltam meg, egy-egy  CD tálca fogaslécét fűrészeltem ki, és ezeknél is lehet akár újabb negyed milliméter kotyogás, azaz egy tengelyen a kotyogás így elérheti akár a fél millimétert is, ami sokkal több, mint amit egyébként a motor egy lépésnél produkál. A motor kotyogása is a benne lévő fogaskerék rendszerből adódhat. A jobb motorokat eleve úgy építik, hogy sok alapban több lépésre képes, amit még szoftveresen meg lehet sokszorozni, 1/4-1/16 lépést is lehet produkálni, így nem kell bele olyan sok, és nagy áttétel. Ezek azonban drágák, és nagyobb elektromos energiát is használnak, nekem itt nincs ennyire szükség. A sok áttételes, sokkal olcsóbb, még kikapcsolt állapotban se tudjuk a tengelyénél elforgatni, és egy ilyen kicsi motor is erős lehet, de persze cserébe a sebességük alacsonyabb.
És van még egy rossz hírem. Ha már megcsinálod tökéletesre, majd véglegesre a gépedet, akkor is fél év múlva rájössz, hogy máshogy kéne...


A 28byj-48 motor kotyogásának a megszüntetése:
Elsőre azt gondoltam ki, hogy ellensúllyal a kotyogást az egyik oldalon tartva megszüntethető, de
 itt egy másik elképzelésem is, a kotyogás megszüntetésére. Szerintem lehet olyan helyzet, amikor ez jó megoldás lehet:
https://www.youtube.com/watch?v=qNONlWLi14k
Ha a 28byj-48 motort bipolárisan használjuk, akkor elméletileg háromszor erősebb lesz, mivel dupla tekercset használ egyszerre. Ilyenkor kb. 7 Volt tápfeszültséget igényel. Így már tényleg használható ellensúllyal, a kotyogás megszüntetésére, a ceruza, filctoll, vagy a 3D ellenállása (azt gondolom most) nem is igényelne olyan nagy tömeget se...



Hoppá! Találtam egy srácot aki szintén így oldotta meg!:
https://www.youtube.com/watch?v=QuzmO5_p4AU&t=2s

Mozgató mechanizmusnak végül a CD-DVD meghajtók tálcájának az oldalán lévő fogasléceket vágtam ki. Kb. 15cm hosszúak, és a a hozzájuk tartozó tárcát ki-be mozgató fogaskerekeket tettem a motorok tengelyére.
Frissítés: Ha tényleg jó gépet akarsz, akkor felejts el ezt a motort, és használj Nema17-est! Sajnos sokkal drágább, de ez van :(!


Táp: 
Tápnak végül elem helyett egy régebbi mobiltöltőt használtam:
5V / 1A-est.

Harmadik lépés:
Az elektronika kiépítése:
(az x tengely a híd, és az y a tálca)


Negyedik lépés:

Szoftverek:
1.Töltsd le erről az oldalról a mappát, vagy a fájlokat egyenként, de egyszerűbb egészbe:
https://www.dropbox.com/sh/n9n4vf6zqslcsgd/AAC6FO5gXUnHi6kOJ82ZvWPUa?dl=0
(download majd direct download)

2. A mappában található arduino kódot (arduino_cnc.ino) tölts fel az arduinodra, és az arduino szoftvert be is zárhatod!
(Ha esetleg kiírja, hogy engedélyezd, hogy a könyvtárba akarja rakni, akkor engedélyezd!)
Itt a kód egyébként:

#include <Servo.h>
#include <Stepper.h>

#define LINE_BUFFER_LENGTH 512

const int penZUp = 40;
const int penZDown = 80;

const int penServoPin = 6;

const int stepsPerRevolution = 60;

Servo penServo;

Stepper myStepperY(stepsPerRevolution, 5,3,4,2);       
Stepper myStepperX(stepsPerRevolution, 11,9,10,8);

struct point {
  float x;
  float y;
  float z;
};

struct point actuatorPos;

float StepInc = 1;
int StepDelay = 0;
int LineDelay = 50;
int penDelay = 50;

float StepsPerMillimeterX = 100.0;
float StepsPerMillimeterY = 100.0;

float Xmin = 0;
float Xmax = 100;
float Ymin = 0;
float Ymax = 100;
float Zmin = 0;
float Zmax = 1;

float Xpos = Xmin;
float Ypos = Ymin;
float Zpos = Zmax;

boolean verbose = false;

void setup() {
  Serial.begin( 9600 );

  penServo.attach(penServoPin);
  penServo.write(penZUp);
  delay(200);

  myStepperX.setSpeed(200);
  myStepperY.setSpeed(200);

  Serial.println("Mini CNC Plotter alive and kicking!");
  Serial.print("X range is from ");
  Serial.print(Xmin);
  Serial.print(" to ");
  Serial.print(Xmax);
  Serial.println(" mm.");
  Serial.print("Y range is from ");
  Serial.print(Ymin);
  Serial.print(" to ");
  Serial.print(Ymax);
  Serial.println(" mm.");
}

void loop()
{
  delay(200);
  char line[ LINE_BUFFER_LENGTH ];
  char c;
  int lineIndex;
  bool lineIsComment, lineSemiColon;

  lineIndex = 0;
  lineSemiColon = false;
  lineIsComment = false;

  while (1) {

    while ( Serial.available()>0 ) {
      c = Serial.read();
      if (( c == '\n') || (c == '\r') ) {         
        if ( lineIndex > 0 ) {                   
          line[ lineIndex ] = '\0';               
          if (verbose) {
            Serial.print( "Received : ");
            Serial.println( line );
          }
          processIncomingLine( line, lineIndex );
          lineIndex = 0;
        }
        else {
     
        }
        lineIsComment = false;
        lineSemiColon = false;
        Serial.println("ok");
      }
      else {
        if ( (lineIsComment) || (lineSemiColon) ) {   // Throw away all comment characters
          if ( c == ')' )  lineIsComment = false;     // End of comment. Resume line.
        }
        else {
          if ( c <= ' ' ) {                           // Throw away whitepace and control characters
          }
          else if ( c == '/' ) {                    // Block delete not supported. Ignore character.
          }
          else if ( c == '(' ) {                    // Enable comments flag and ignore all characters until ')' or EOL.
            lineIsComment = true;
          }
          else if ( c == ';' ) {
            lineSemiColon = true;
          }
          else if ( lineIndex >= LINE_BUFFER_LENGTH-1 ) {
            Serial.println( "ERROR - lineBuffer overflow" );
            lineIsComment = false;
            lineSemiColon = false;
          }
          else if ( c >= 'a' && c <= 'z' ) {        // Upcase lowercase
            line[ lineIndex++ ] = c-'a'+'A';
          }
          else {
            line[ lineIndex++ ] = c;
          }
        }
      }
    }
  }
}

void processIncomingLine( char* line, int charNB ) {
  int currentIndex = 0;
  char buffer[ 64 ];                                 // Hope that 64 is enough for 1 parameter
  struct point newPos;

  newPos.x = 0.0;
  newPos.y = 0.0;

  //  Needs to interpret
  //  G1 for moving
  //  G4 P300 (wait 150ms)
  //  G1 X60 Y30
  //  G1 X30 Y50
  //  M300 S30 (pen down)
  //  M300 S50 (pen up)
  //  Discard anything with a (
  //  Discard any other command!

  while( currentIndex < charNB ) {
    switch ( line[ currentIndex++ ] ) {              // Select command, if any
    case 'U':
      penUp();
      break;
    case 'D':
      penDown();
      break;
    case 'G':
      buffer[0] = line[ currentIndex++ ];          // /!\ Dirty - Only works with 2 digit commands
      //      buffer[1] = line[ currentIndex++ ];
      //      buffer[2] = '\0';
      buffer[1] = '\0';

      switch ( atoi( buffer ) ){                   // Select G command
      case 0:                                   // G00 & G01 - Movement or fast movement. Same here
      case 1:
        // /!\ Dirty - Suppose that X is before Y
        char* indexX = strchr( line+currentIndex, 'X' );  // Get X/Y position in the string (if any)
        char* indexY = strchr( line+currentIndex, 'Y' );
        if ( indexY <= 0 ) {
          newPos.x = atof( indexX + 1);
          newPos.y = actuatorPos.y;
        }
        else if ( indexX <= 0 ) {
          newPos.y = atof( indexY + 1);
          newPos.x = actuatorPos.x;
        }
        else {
          newPos.y = atof( indexY + 1);
          indexY = '\0';
          newPos.x = atof( indexX + 1);
        }
        drawLine(newPos.x, newPos.y );
        //        Serial.println("ok");
        actuatorPos.x = newPos.x;
        actuatorPos.y = newPos.y;
        break;
      }
      break;
    case 'M':
      buffer[0] = line[ currentIndex++ ];        // /!\ Dirty - Only works with 3 digit commands
      buffer[1] = line[ currentIndex++ ];
      buffer[2] = line[ currentIndex++ ];
      buffer[3] = '\0';
      switch ( atoi( buffer ) ){
      case 300:
        {
          char* indexS = strchr( line+currentIndex, 'S' );
          float Spos = atof( indexS + 1);
          //          Serial.println("ok");
          if (Spos == 30) {
            penDown();
          }
          if (Spos == 50) {
            penUp();
          }
          break;
        }
      case 114:                                // M114 - Repport position
        Serial.print( "Absolute position : X = " );
        Serial.print( actuatorPos.x );
        Serial.print( "  -  Y = " );
        Serial.println( actuatorPos.y );
        break;
      default:
        Serial.print( "Command not recognized : M");
        Serial.println( buffer );
      }
    }
  }



}



void drawLine(float x1, float y1) {

  if (verbose)
  {
    Serial.print("fx1, fy1: ");
    Serial.print(x1);
    Serial.print(",");
    Serial.print(y1);
    Serial.println("");
  }


  if (x1 >= Xmax) {
    x1 = Xmax;
  }
  if (x1 <= Xmin) {
    x1 = Xmin;
  }
  if (y1 >= Ymax) {
    y1 = Ymax;
  }
  if (y1 <= Ymin) {
    y1 = Ymin;
  }

  if (verbose)
  {
    Serial.print("Xpos, Ypos: ");
    Serial.print(Xpos);
    Serial.print(",");
    Serial.print(Ypos);
    Serial.println("");
  }

  if (verbose)
  {
    Serial.print("x1, y1: ");
    Serial.print(x1);
    Serial.print(",");
    Serial.print(y1);
    Serial.println("");
  }

  //  Convert coordinates to steps
  x1 = (int)(x1*StepsPerMillimeterX);
  y1 = (int)(y1*StepsPerMillimeterY);
  float x0 = Xpos;
  float y0 = Ypos;

  //  Let's find out the change for the coordinates
  long dx = abs(x1-x0);
  long dy = abs(y1-y0);
  int sx = x0<x1 ? StepInc : -StepInc;
  int sy = y0<y1 ? StepInc : -StepInc;

  long i;
  long over = 0;

  if (dx > dy) {
    for (i=0; i<dx; ++i) {
      myStepperX.step(sx);
      over+=dy;
      if (over>=dx) {
        over-=dx;
        myStepperY.step(sy);
      }
      delay(StepDelay);
    }
  }
  else {
    for (i=0; i<dy; ++i) {
      myStepperY.step(sy);
      over+=dx;
      if (over>=dy) {
        over-=dy;
        myStepperX.step(sx);
      }
      delay(StepDelay);
    }
  }

  if (verbose)
  {
    Serial.print("dx, dy:");
    Serial.print(dx);
    Serial.print(",");
    Serial.print(dy);
    Serial.println("");
  }

  if (verbose)
  {
    Serial.print("Going to (");
    Serial.print(x0);
    Serial.print(",");
    Serial.print(y0);
    Serial.println(")");
  }


  delay(LineDelay);

  Xpos = x1;
  Ypos = y1;
}


void penUp() {
  penServo.write(penZUp);
  delay(LineDelay);
  Zpos=Zmax;
  if (verbose) {
    Serial.println("Pen up!");
  }
}
void penDown() {
  penServo.write(penZDown);
  delay(LineDelay);
  Zpos=Zmin;
  if (verbose) {
    Serial.println("Pen down.");
  }
}


3.Töltsd le a Processing nevű szoftvert:
https://processing.org/download/

4.Csatlakoztasd az arduinodat, ha az arduino kód feltöltése után lekapcsoltad volna!

5. Nyisd meg a Processing programmal a gcode_executer nevű mappában található gcode_executer.pde nevű fájlt.
Amikor feldob egy ablakot, amelyben a kód van, nyomd meg a play gombot. Erre megint feldob egy ablakot, ahol be kell állítani a működési paramétereket. Nyomd meg a p-t a klaviatúrán, és feldob egy új ablakot, ahol beállíthatod azt a soros csatlakozót (portot), amelyre az arduinoval kapcsolódtál. Ezután az 1, vagy a 2, vagy a 3 gombbal beállíthatod a méretet. Elsőre a legkisebbet válaszd szerintem, azaz az egyest.
Majd nyomd meg a g gombot a klaviatúrán. Erre feldob egy ablakot, ahol ki kell választani azt a g-kódot, amit le szeretnél rajzoltatni. A GCODE'S nevő mappából válasz egyet, és nyisd meg. A gép működik, rajzol!

Ebben a videóban minden benne van, ha valami nem tiszta:
https://www.youtube.com/watch?v=1Q4IPGp6-k0&t=87s

Ötödik lépés:
Saját G kód, azaz gcode fájl készítése:
Töltsd le az Inkscape nevű programot. Csinálj vele egy fényképet, rajzot, szöveget, és mentsd el .gcode formátumba. Ez egy CNC parancssort jelent...
Töltsd le az Inkscape legújabb verzióját. A programhoz hozzá kell adni még egy g-kód készítő kiterjesztést. Itt van ebben a videóban, hogyan kell.
Itt van, hogyan kell a g-kód kiterjesztést hozzáadni a szoftverhez:
https://www.youtube.com/watch?v=rIu8_G_ukJY

Saját g-kód készítése:
-Az arduino kódjában ne felejsd el beállítani, hogy hány lépés egy milliméter, és hogy mennyi max millimétert tudjon megtenni az X és Y tengely, mert alapban 100-ra van beállítva!
Aztán megnyitod az Inkscape programot, amit lehet magyarítani is, ha neked nem az, nézz utána!
-Az objektum tulajdonságaiban a méretet mm helyet először cm-ben ad meg a méreteket. Szerintem akkorát adj meg, amekkora a rajzgéped munkaterülete. Fontos, hogy mentés előtt állítsd px-re, vagyis pixelre!
-aztán importálj bele egy pl. jpg rajzot. Erről az oldalról le tudsz tölteni egy csomót, mindenféle témában:
https://www.dragoart.com/tuts/21920/1/1/how-to-draw-an-irish-setter.htm

-Ezután az objektumot, azaz rajzot az útvonal, majd bittérkép vektorizálása menüben mondjuk állítsd be a colort, vagy amelyiket akarod, majd frissítés gomb, és ok gomb. Be is zárhatod az ablakot.

Ez után fogd meg a képet és húzd arrébb. A felső réteg fog arrébb menni, azt fogjuk megtartani az ottmaradó alsó réteget töröld ki. A megmaradt réteget úgy helyezd el a munkaterületen, hogy a kép közepe a keret jobb felső sarkában legyen!

(Ha szöveget csinálsz az Inkscape-ból, akkor azzal ezt nem kell megcsinálni, hanem egyből az -alábbiak:)
-Ezután útvonal , objektum átalakítása útvonallá,
Most az objektum méreteit megint állítsd be, px, azaz pixelre, mert csak úgy fog g-kódit generálni!
 -Majd mentés másképpen, és a gcode kiterjesztést kell fájlnak adni.

Nézzél a youtub-on olyan videót, ahol bemutatják hogy kell Inkscape-vel saját g-kódot csinálni!
-Elsőre ne saját G-kódot próbálj ki, hanem a letöltött mappából egyet!

A deszkagép első működése:
https://drive.google.com/open?id=1A7rFwxveCl4jnyZZTxObh5pCE_LWuCCL

Második rajzgépem:

Rajzgép bipoláris módban:
Először is, a motorjaidat meg kell Hack-elni:
http://www.jangeox.be/2013/10/change-unipolar-28byj-48-to-bipolar.html

http://www.makerblog.at/2015/02/projekt-mini-cnc-plotter-aus-alten-cddvd-laufwerken/
https://www.youtube.com/watch?v=BIDQXjztoTc

Az arduino kódban az unipoláris módhoz képest ezt a rész kell kicserélni, tehát a motorok lábkiosztásának a sorrendjét kell megváltoztatni, egyébként szoftver szempontjából ugyanaz, mint az előző unipoláris motorokkal épített gép:

Stepper myStepperY(stepsPerRevolution, 2,3,4,5);       
Stepper myStepperX(stepsPerRevolution, 8,9,10,11);


 A kapcsolási rajz hasonló, mint a motoroknál a bipoláris kapcsolás (az arduinoról szóló oldalon), csak két motor, és driver van. A motorok lábkiosztása:  11,10,9,8, é a 5,4,3,2, a szervo az arduino 6. kivezetésére van kötve.  A G-kód ugyanúgy kell használni, meg a Processing programot, mint az előző projektben.
Elsőre ne olyan g-kódot használj, amit te csináltál, hanem a netről töltsél le egyet, azzal próbáld ki.
Itt találsz:
https://www.dropbox.com/sh/n9n4vf6zqslcsgd/AAC6FO5gXUnHi6kOJ82ZvWPUa?dl=0
Ha nem rajzol jól, akkor cseréld fel az Y-X tengelyeket vagy az egyik motor forgásirányát fordítsd meg! Bipoláris módban nagyobb feszültség kell a motoroknak, 5V helyett használj 7 Voltot! Állítólag 9 -et is kibír, de annál nagyobbat pár percnél hosszabban biztosan nem!

Egy-egy tengelyen 2 darab sorba kötött 28BYJ-48 as motort használtam. Egymásba fordítva eltüntethető a holtjátékuk is. Sajnos később kilazult, és újra kotyogott. A motorok max. 31 Fok Celsius hőmérsékletre melegedtek, ami meghajtóik 60 fok körül voltak, amik elég jó mutatók szerintem! Ennél a módnál hátrány az, hogy a hackelés után 7V körüli tápfeszültség kell a motoroknak, de ha kettőt sorba kötünk, és 12 Volttal kínáljuk meg, az is jó. Vagy 12V- os 28BYJ-48 motort kell beszerezni az 5V-os helyett, olyan is kapható. Esetleg előtét ellenállást kell használni... Én itt a dupla soros motor módszert alkalmaztam:







                             A tengelyt mozgató mechanizmus egy zsinórral, és egy léccel. 
         

Ami még kellhet:

Egy klassz rajzgép:
http://www.instructables.com/id/4xiDraw/

Centerline készítése (két vonal helyett egy):

Inkscape gravírozó betűkészlet (a 0,91 és az fölötti verziókban már benne van, nem kell telepíteni! 
https://www.evilmadscientist.com/2011/hershey-text-an-inkscape-extension-for-engraving-fonts/
Nem túl jó, de egyszerű, online:
http://online.rapidresizer.com/tracer.php
Ez a progi állítólag nagyon jó hozzá?
http://www.easysign.com/mainwebv1/home.aspx

Jó minőségű g-kód előállítása:
Az Inkscapeba inportáld a képet, majd kézzel rajzold rá a kép fölé az útvonalakat! Ezután töröld a képet, és megmarad a jó minőségű centerline útvonal! SVG fájlként elmentve az F-engrave  programmal tudsz  RGBL (ncn) alapú (lejjebb) plotter- hez g- kódot csinálni.


Pyrográf nyomtató:

Egyenlőre azt próbáltam ki, hogy a toll helyett egy állítható hőmérsékletű forrasztópákát raktam be.
Első tapasztalatom, hogy jól jön, hogy állítható, viszont nagyobb hőmérsékletnél előfordul, hogy visszahűl, majd túl meleg lesz, tehát nem stabil a hőmérséklete.
Sőt, aztán idővel egyre nagyobb lett a hőmérséklet ingadozása.
Kisebb méretűt pákát vettem, de így is elég nagy a tollhoz képest. 

A szoftverek tekintetében a Grbl Controller nem jó, mert szakaszosan rajzol. Amikor megáll egy helyen a páka, akkor ott erősen éget, amikor meg megindul, akkor ott alig hagy nyomot. A Processing nevű program azonban egyenletesen rajzol, azzal érdemes a g-kódot, cnc kódot (cn,gcn) küldeni!

Kapcsolódó lehet:
Szoftverek: 
http://pyroprint.com/cnc-software.html

Spider-4x pyro

http://www.vectric.com/products/cut2d/features.html

Ez nehézkes technológia, inkább a lézergravírozót ajánlom!


Mini CNC és rajzgép shield felhasználásával

A hardver szempontjából csak annyi változást jelent, hogy a "Z" tengelyen lévő servo motor helyett szintén léptetőt fogok használni, és CNC shildet.

F-engrave programmal könnyen tudunk hozzá nc vagy ngc kódokat csinálni fényképekből is!
Ezzel csinálj g-kódot a svg fájlból! 


Összetevők:
1db. CNC Shield V4.0 (Ne a pirost vedd meg, hanem a sárga-feketét!)
és hozzá a 3 db. 4988Driver
1db arduino nano
12 Voltos táp (3A-es elég lesz talán, de később pontosítom)
6db. 28byj-48 léptetőmotor (5 voltosak, de mivel hackelve lesznek, és 12 volttal lesznek meghajtva, ezért 2-2 sorba lesznek kapcsolva.)
vagy 3d nema17: 17HS3430 12V 0.4A 30ohm motort:
https://www.aliexpress.com/item/Free-shipping-1PCS-17HS3430-3D-Printer-Nema17-for-12VDC-2800g-cm-34mm-length-4-Lead-42/32802147221.html?ws_ab_test=searchweb0_0,searchweb201602_4_10152_10151_10065_10068_10344_10342_10343_10340_10341_10696_10084_10083_10618_10304_10307_10302_5711215_10313_10059_10534_100031_10103_10624_10623_10622_10621_10620,searchweb201603_25,ppcSwitch_7&algo_expid=e53e91da-6e89-4e92-8d34-eef63ca3134d-0&algo_pvid=e53e91da-6e89-4e92-8d34-eef63ca3134d&priceBeautifyAB=0

Összeszerelés:

(0.  A Jack dugója center pozitív, vagyis a középső érintkezőnek kell lennie a pozitív fázisnak.)

1. Hack-eld meg a 28byj-48 motorokat:
http://www.electronicsmayhem.com/?p=13
Sőt, lehet dupla hack kell, vagyis kettő ilyen hack-kelt motort kell sorosan összekötni, lásd a második rajzgépemnél felül, mert a 12 Volttól ezek a motorok nagyon melegszenek, vagy esetleg előtét ellenállást kell alkalmazni.

2. Így működik az A4988 driver:
https://howtomechatronics.com/tutorials/arduino/how-to-control-stepper-motor-with-a4988-driver-and-arduino/

3. Szereld, nyomd össze a shieldet, a drivereket, és az arduimot. A kis motorjainkat full step módban használjuk, így mindhárom átvezetést kivesszük a driverek alól. A driverre amikor felragasztod a hűtőbordát, vigyázz ne zárják rövidre lábakat vele.









4.Áramkorlát beállítása:
https://howtomechatronics.com/tutorials/arduino/how-to-control-stepper-motor-with-a4988-driver-and-arduino/
A driveren van egy áramkorlátozó potméter. 

A 12 Volt a dupla hackkel, nem fogja érdemben melegíteni a kis motorjainkat, vagyis, ha kettőt sorba kapcsolunk egy-egy tengelyen, de ha csak egy motort használunk, akkor megsüti... Esetleg használhatunk a tekercsekre sorba kapcsolt előtét ellenállást (47ohm 2-3 Watt, ami csökkenti a feszültséget 7-9V-ra. 

A motorokat amikor próbálgatod a g-kód küldőbe, akkor a driveren a csavart az óramutató járásával ellentétes végpontba tekerd. Elméletileg itt nem működik a motor, vagy alig. Ezután, miközben próbálgatod, tekerd az óramutató járásába a legminimálisabban, és nézd meg a motor erejét. Amikor a motor elég erős, akkor ne tekerjél már rajta. Így lehet beállítani úgy, hogy még elég erős legyen a motor, és ne is süljön meg!

5. Ez a lépés nem kötelező, ezzel csak kipróbálod, hogy működnek-e a motorok. A motorokat függetlenítsd a géptől, csak azt nézzük meg ezzel a kóddal, hogy működnek-e!  Töltsd fel az arduinora az alábbi kódot:
http://wiki.keyestudio.com/index.php/Ks0096_keyestudio_CNC_Kit_/_CNC_Shield_V4.0_%2B_Nano_3.0%2B3pcs_a4988_Driver_/_GRBL_Compatible
#define EN        8       // stepper motor enable, low level effective
#define X_DIR     5       //X axis, stepper motor direction control 
#define Y_DIR     6       //y axis, stepper motor direction control
#define Z_DIR     7       //zaxis, stepper motor direction control
#define X_STP     2       //x axis, stepper motor control
#define Y_STP     3       //y axis, stepper motor control
#define Z_STP     4       //z axis, stepper motor control
/*
// Function: step   -control the direction and number of steps of the stepper motor
// Parameter: dir  -direction control, dirPin corresponds to DIR pin, stepperPin correspomds to 


step pin, steps is the number of steps.
// no return value
*/
void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
  digitalWrite(dirPin, dir);
  delay(50);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(800);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(800);  
  }
}
void setup(){// set the IO pins for the stepper motors as output 
  pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
  pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
  pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
  pinMode(EN, OUTPUT);
  digitalWrite(EN, LOW);
}
void loop(){
  step(false, X_DIR, X_STP, 3200); // x axis motor rotates CCW for 1 circle, as in 200 steps
  step(false, Y_DIR, Y_STP, 3200); // y axis motor rotates CCW for 1 circle, as in 200 steps
  step(false, Z_DIR, Z_STP, 3200); // z axis motor rotates CCW for 1 circle, as in 200 steps
  delay(1000);
  step(true, X_DIR, X_STP, 3200); // X axis motor rotates CW for 1 circle, as in 200 steps
  step(true, Y_DIR, Y_STP, 3200); // y axis motor rotates CW for 1 circle, as in 200 steps
  step(true, Z_DIR, Z_STP, 3200); // z axis motor rotates CW for 1 circle, as in 200 steps
  delay(1000);
}
Hogyha ettől működnek a motorok, akkor jó úton haladsz, ha nem, lehet, hogy úgy mint én is, tervezési hibás Schield-et vettél! A nyákon összekeverték a driverekhez a vezetékeket! A 2-est és az 5-ös, a 3-6, és a 7-4 arduino kivezetéseket felcserélték! Én átvágtam a schild-en a vezetőket, és vezetékekkel megcseréltem. Így már működik. 3 napom ment el vele, az egyik drivert elégé megmunkáltam kicsit, és egy nano is tönkrement közben a kísérletezéseim közben. Szívás! A piros Shildet ne vegyétek, a fekete-sárga jó lehet!
Itt fejtik ki a hibát:
https://www.youtube.com/watch?v=ZX3t-2s3XUo


7. Ha  kipróbáltad a kóddal, és működnek a motorok, akkor most telepíteni kell a GBRL  firmwart.
Innen tölts le ezt a GRBL verziót! 
https://drive.google.com/open?id=1JzJwVoO0xkxWDXvDlgE8X8atBzl2SJdw
Töltsd le a zip file-t, majd a benne lévő GRBLtoArduino nevű mappát másold be az arduino könyvtárába.
-Jobb egérgomb az arduino ikonjára, és a nyisd meg programot tartalmazó mappára kattintasz, majd a libraryba másolod.
- A letöltött firmware-be megkeresed az GRBLtoArduino.ino file-t, majd rákattintasz kettőt. Ekkor betölt az arduino IDE. A benne látható  rövid kódot töltsd fel az arduinora. Persze ez a könyvtárat tölti fel igazából, amit az előbb raktár be az arduino IDE (program) könyvtárába.
Itt van leírva, más rgbl szoftver hibát fog adni, ezt használd:
http://wiki.keyestudio.com/index.php/Ks0096_keyestudio_CNC_Kit_/_CNC_Shield_V4.0_%2B_Nano_3.0%2B3pcs_a4988_Driver_/_GRBL_Compatible


8. Ezután le kell tölteni, és telepíteni kell a GRBL Controller nevű programot:
Innen is megteheted:
http://osoyoo.com/driver/GrblController361Setup.exe
 (A processing programmal is lehet küldeni a kódot, és az nem szakaszosan, hanem egyenletesen rajzol...)


9. Majd indítsad el GRBL Controller , és próbáld ki, és használd örömmel a mini cnc-det! 
-beállítod a portot, a bitrátát most 9600-ra kell állítani...
-open. Ekkor a baloldali ablak betölt, és megnézheted az alapbeállításokat, amiket majd át kell írnod.
-van egy olyan fül, hogy Advanced, azon belül a a GRBL settings-ben tudod átállítani, illetve megtenni a megfelelő beállításokat.
-kézzel állítsd az asztalt, illetve a gépet középre, hogy bármilyen irányban tudjon majd mozdulni!
-a motorokat próbáld ki,
Az axis control fülön állítsd be az 1 (mm) lépést (step size), és mozgasd a motorokat mindenféle irányban. Nézd meg, hogy tényleg 1mm-lépnek.
és itt, ezen  a felületemen keresztül be tudod állítani a motorok lépés/mm és egyéb beállításokat.
https://github.com/gnea/grbl/wiki/Grbl-v1.1-Configuration
-próbáld ki a motorokat, hogy jók -e a beállítások!
Utána az F-Engrave programmal csinálj egy kicsi rajzot, és próbáld ki!

Egyéb:
http://osoyoo.com/2017/04/07/arduino-nano-cnc-shield-v4-0a4988/ 

Egy szintén GRBL plotter leírása magyarul:
http://users.atw.hu/jollyroger/cnc001_minicnc_kezdetek.html

Bővítése hamarosan! 


NEMA17-es motorokról:

Sokkal jobb minőségűbb, mint a 28byj-48  motorok!
Ezzel lehet igazi pontosságot elérni!
Van egy nem túl jó tulajdonsága. A motor úgy működik, mint a hangszóró, és a tengely a tengely forgási irányában rezeg. Ettől, ha a motort oldalra fordítjuk, pl. az asztalon, szörnyen hangos lesz. Ha a motort a fenekére fordítjuk, esetleg egy gumilapot is teszünk alá, akkor halk.
https://www.youtube.com/watch?v=5UJgDtGRXDM
Ennek megfelelően érdemes tervezni...
A szerkezet kevésbé legyen asztal szerű, inkább csak keret legyen, hogy a rezgés minél kevesebb levegőt mozgasson, és minél halkabb legyen.

A motorokat és a megvezetést úgy tervezd meg, hogy minél kisebb mértékben tudjad kézzel mozgatni, hogy minél pontosabb legyen a géped! 

Ezeken a motorokon ellenőrizzük, hogy melyek a tekercspárok, mert nem feltétlenül sorba vannak a motor kivezetésénél, viszont sorba kell bekötni a motor driverekbe, tehát ott a tekercspárok vezetékei egymás mellett vannak, míg a motor kivezetésénél nem biztos! Ha rosszul kötjük be a motort, akkor csak zúg, de nem fog működni!

Bordás szíj helyett damil (3d nyomtatóhoz viszont nem jó)!
Állítólag ezt a módszer a gyári plotterekben is használták régebben! A vékony damil nem volt jó, de a 0,5-ös damilt rátekerve a NEMA 17 tengelyére, nagyon precízen működik. nem tűnik rosszabbnak, mint a bordás szíj!A damil viszont a 3d nyomtatónál nem vált be, mert az sokkal gyorsabban, és rángatózva működik, és úgy tűnik, a damil megcsúszik a tengelyen a hirtelen mozgásokra.

GRBL konfiguráció!
Alapból a pontosság csak 0,1 mm-re van állítva, így ha nem állítasz utána, akkor nem fog pontosan dolgozni! Az is feltétlenül be kell álltani, hogy hány lépés egy milliméter. A beállítást ameg tudod kényelmesen tenni, a GRBL kontroller programon keresztül is, az Advenced fülnél, a GRBL settings ben. 
https://github.com/gnea/grbl/wiki/Grbl-v1.1-Configuration