duminică, 9 iunie 2013

miniCNC

 Unul dintre cele mai interesante site-uri pentru mine, rãmîne   www.instructables.com; De aici, m-am inspirat şi am construit un “miniCNC” cu cheltuieli şi eforturi minime.
 Am reuşit sa înţeleg funcţionarea şi sã  experimentez programarea simplistã a unei maşini cu comandã numericã.
 Adevãrul este cã  am plecat de la modelul  “Pocket-laser-engraver  “ - adicã un CNC pentru gravat cu diodã laser  ( vezi  http://www.instructables.com/id/Pocket-laser-engraver/?ALLSTEPS ) 
 Nu o sã mai descriu construcţia, doarece este suficient prezentatã în site-ul menţionat  mai sus.O sã menţionez numai problemele care au apãrut !



Deoarece nu am reuşit sã procur o diodã laser cu care sã pot grava, am adãugat un al 3-lea motor pas cu pas (de la o unitate de discheta  veche) pentru deplasare pe axa Z şi un suport pentru un pix cu gel, ca sã pot face încercãri ( pânã când  voi putea achiziţiona dioda laser)! 
 1.  Pentru partea mecanicã am mai utilizat douã unitãti  CD-ROM vechi. Au trebuit desfãcute,  modificate şi amplasate pe o planşetã. Suportii şi piesele de complectare le-am fãcut din placã PVC cu grosime de 2 - 2,5 mm  lipite cu “picãtura “.
Cea mai dificilã problemã, a fost sã aliniez subansamblele pe cele 3 axe aşa încât sã fie asiguratã concurenţa axelor într-un punct şi perpendicularitatea celor 3 plane.   Pentru partea de comandã numericã , am utilizat board-ul ArduinoUno şi 3 drivere EasyStepper pentru  motoarele pas cu pas;
 De  aici au apãrut şi problemele! Pentru motoarele pas cu pas PL15S-020 am gãsit pe net o fisã tehnicã la eMinebea.com (http://www.kmmotor21.co.kr/pl15s_020.htm).
2 .De reţinut cã tensiunea de lucru maximã la aceste motoare este de 5v, iar rezistenţa este de 10ohmi  pe fazã.  Easy Driver  este construit sa meargã de la 6 la 12 V  şi dacã nu tineţi seama de acest lucru , apar neplãceri. Mie nu mi-a funcţionat sub 7v. Am fost nevoit sã adaptez radiatoare la circuitul integrat de la Easy Driver pentru cã altfel se încãlzeşte excesiv 3.Tot la Easy Driver, existã probleme din fabricaţie. Tensiunea de ieşire pentru CoilA şi , CoilB se regleazã din potenţiometru (vezi figura). Atenţie :  marcajele min şi max de pe cablaj sunt inversate : adicã min este max şi invers! Trebuie pus voltmetrul si efectuat reglajul cu grijã. Am gãsit specificaţia asta pe un forum, şi este realã !

In rest , ar fi Ok! Se pot programa micropaşi – în loc de 20 de paşi pe rotatie disponibil la steppere  se pot opţine 8x20 = 160 micropaşi pe rotaţie.
 Orice conectare /modificare sau “manevrã de montare” la Easy Driver”   trebuie facutã fãrã ca sã fie conectatã tensiunea!
Trebuie consultatã obligatoriu fişa tehnicã de date!
Se poate gãsi bibliografie  la Easy Driver  aici:  
   http://www.robofun.ro/mecanice/driver


Au urmat etapele pentru soft :
  4.Instalarea interpretorului de comenzi Grbl pe ArduinoUno.
Am fãcut download de la https://github.com/Protoneer/GRBL-Arduino-Library/archive/master.zip , şi am obţinut librãria necesarã  ; dupã dezarhivare, în fişerul README.md am citit instrucţiunile de instalare: 
- se creeazã un director   C:\\ arduino-1.0.3\libraries\GRBL unde se copie sursa dezarhivatã
- se deschide Arduino-1.0.3;
- se deschide din  meniu File ->Examples->GRBL şi trebuie sã regãsiţi douã exemple: ArduinoUno si ArduinoDuemilanove ;
-am deschis exemplul ArduinoUno;
-am fãcut upload la fişierul ArduinoUno , dar nu mi-a mers din prima încercare !
-am tastat în meniu Sketch->ImportLibrary-> GRBL şi am reuşit sã compilez şi sã încarc programul pe board-ul ArduinoUno!
  5.Setarea Grbl ( a interpretorului Grbl)
Setarera se face cu board-ul ArduinoUno cuplat la calculator şi  IDE-ul Arduino deschis.   
- dacã acum deschizi SerialMonitor (dupã upload) va  apare expresia :    Grbl 0.8c [ ‘$’ for help]
care confirmã cã interpretorul este funcţional !
Cu comanda '$'+ enter din monitorul serial, se deschide meniul pentru setarea interpretorului
Grbl.

 Explicatii amanuntite pe :  http://dank.bengler.no/-/page/show/5474_configuringgrbl?ref=checkpoint
Ce am setat: 
- am "descoperit" cã stepperul  pe axa ox are 20pasi pe rotatie si deplasare mm/1rotatie ax , 
corectie  necesarã: (20x8):3=53.33 micropaşi/1mm  
- stepperul pe oy  are 20paşi/rotaţien si deplasare 4,5 mm/1rotatie ax, corectia este de    (20x8):4,5 =35.55micropasi/1mm
la fel, am calculat si corectia pe axa oz;
Am modificat in programul din ArduinoISP succesiv in monitorul serial  : $0=53.333 şi enter; apoi  $1=35.55;
Dupã incercri,  am erori la deplasare la cifra 3 dupa virgula (0.003 mm) !
  6.Instalarea interfeţei pe calculator
Am utilizat softul :     UniversalGcodeSender-all32  versiunea 1.0.5 conceput in Java, pentru Windows;     (download free:  https://github.com/grbl/Universal-G-Code-Sender )

Dupã lansarea în execuţie, cu miniCNC-ul conectat, se selecteazã portul serial (la mine COM3), click pe Open, şi comenzile devin active .  


  7.Probe, cu comenzi din taste 
Din meniul dreapta sus se poate selecta modul de lucru:
- FileMode pentru incãrcarea unui program de lucru dintr-un fisier.nc
- Command Mode    pentru comenzi in codG din linia de comansdã
-  dacã se bifeazã casuţa EnableArrowKeyMovement, din MachineJogink se pot face comenzi de deplasare din butoane, dupã ce setãm marimea deplasãrii la un click din StepSize;
Am lucrat  cu ultima variantã  , ca sã verific cã miniCNC-ul meu este funcţional si setat corect: 
 De aici , am fãcut  încercãri ;
 Verific miscarea pe fiecare axã:
-introduc de la consolã în linia de comanda  
G00 X10 Y10 Z5
  apoi şi enter:  merge  
- introduc de la consolã în linia de comanda o valoare pentu  z ( am masurat cu linearul 10 mm intre pix şi hîrte) -ca sã lase urma pe hârtie cu pixul şi sã trasez  o linie pe axa x , de 10 mm 
      G90 X10 Y0 Z10
   apoi enter merge
Diferenţa între G90 si G91:
Cu G00 la comenzi succesive, se executã  deplasarea în coordonate absolute maşinã ( se deplaseazã la fiecare punct nou  dupã valorile faţã de origine) : 
      G90 X10 Y10 Z0 duce în punctul 10; 10; 0 – coordonate absolute ;
      G90 X5 Y5 Z0 – ne trimite in 5,5,0
Cu G91, se deplaseaza în coordonate relative (se deplaseazã la un punct nou raportat la coordonatele punctului anterior):
      Cu G91 X10 Y10 Z2  ajungem în A(10;10;2) 
Urmat de
      Cu G91 X5 Z5 Z-2    cu care ajungem in B(15; 15; -0)
      Cu G91 X12 Y12 Z3   ajungem in C( 27; 27; 3)
Ca sã revin la zero maşina (în origine ) tastez
      G90 X0 Y0 Z0
Vreau sã trasez o linie şi introduc succesiv comenzile :
      G91 X5 Y5 Z106       din punctul (5, 5 ,6)   Z6 am coborit pixul la hirtie
      G91 X10 Y10 Z0     in punctul X15; Y15; Z0

      G91 X0 Y0 Z-6      si ridicam pixul

8.Programarea  în G-code şi probe. 
 Programare CNC
Am pus pe blog şio douã progrãmele mici , care pot fi copiate ( se şterg toate comentariile şi se lasã numai liniile de cod);

Este necesar un editor de cod  G. Eu am folosit CNC Syntax Editor 3.1.0.1119  free trial de la   http://www.cnc-syntax-editor.com/ ; 
Fişierele scrise le-am salvat cu extensia .nc
Acum , vreau sa desenez un dreptunghi  din comenzi interfata:
Drepunghi
G00 (pozitionare in sistemul de coordonate curent– nu-i miscare de lucru !!)
G90 (miscare in coordonate absolute )
G21 (seteaza unitati de masura in mm)
G0 X8.9115 Y27.1111 Z10 (pozitionarte rapida virf in  punctul X;Y;Z)
M03
G1  F40.000000
G1  X31.2531 Y27.1111
G1  X31.2531 Y9.7901
G1  X8.9115 Y9.7901
G1  X8.9115 Y27.1111
M05
G0 X0.000 Y0.000 Z-2  (pozitioneaza virful in 0,0,-2) ca sa nu mai lase urma 
M05
      M02 
Program cerc

G90                       comanda pozitionare in sist curent; cod modal
G21                       distante in mm
G0 X33.0688 Y19.7089 Z10.00            deplasare rapida in punctul specifcat      
M03
G1F50.000000
G02 X29.1558 Y10.262 I-13.3599 J-0.  interpolare circulara
G02 X19.7089 Y6.349 I-9.4469 J9.4469
G02 X10.262 Y10.262 I0. J13.3599
G02 X6.349 Y19.7089 I9.4469 J9.4469
G02 X10.262 Y29.1558 I13.3599 J-0.
G02 X19.7089 Y33.0688 I9.4469 J-9.4469
G02 X29.1558 Y29.1558 I-0. J-13.3599
G02 X33.0688 Y19.7089 I-9.4469 J-9.4469
G1  X33.0688 Y19.7089  Z-2.00
M05

G0 X0.000 Y0.000 Z0.00
M05
      M02
In final, o observaţie :
- lucrez cu ArduinoUno ca simplu începãtor, de anul trecut şi merge!
- am fost curios sã vãd ce înseamnã sã construieşti un sistem cu comandã  numericã, ce probleme sunt.
- pînã la urmã am reuşit sã gãsesc varianta cea mai ieftinã şi uşoarã de abordat pentru mine;
- chiar dacã “mecanismele” sânt refolosite şi cu uzuri, şi-au îndeplinit scopul, adicã  sã  înţeleg “ce,cum, şi care e drumul de parcurs ” – sau într-un limbaj mai elevat: cercetare bibliograficã, muncã multã, încercãri, experimentare ;              
    Acum, chiar cã ar merge şi o investiţie serioasã, într-o maşinã care sã execute prelucrãri !