본문 바로가기

▶3D 프린팅/삼디강좌

[김성민의 삼디 Life] G-code 기초 2 - 일시정지 > 필라교체 > 이어서시작

[김성민의 삼디 Life - 일시정지를 최적화하자]


3D 프린터로 어떤 것을 출력한다는 것은 종이위에 문서 몇장을 출력하는 것과는 다른 여러 변수가 생긴다. 

종이는 한장 출력하는데 시간이 1초도 걸리지 않지만

3D 프린터를 이용한 출력은 출력물의 크기와 출력방식에 따라서

적게는 10여분 많게는 하루나 이틀정도 걸리는 것도 있다. 


문제는 종이 출력과는 다르게 그 긴 출력시간동안 별의별 일이 다 발생할 수 있다는 점이다. 

층간소음때문에 밤에는 멈춰야 하는 경우가 발생할지도 모르고

자리를 비우고 없을 때 벌어질 지 모르는 불상사를 만들지 않기 위해 지켜보고 있어야 하는 상황

넉넉할 줄 알았던 필라멘트가 다 소모되가는 모습을 보면서 어쩌면 좋지 하며 당황스러운 순간..


이럴 때 일시정지 기능이 있다면 참 좋을 것이다. 


처음 A8 을 구입하고 나서 기본 장착된 펌웨어에는 Pause 기능이 들어 있었다. 그런데, AM8 이라는 메탈프레임으로 교체할 때 설치한 Y 축 체인과의 간섭 때문인지 일시정지와 동시에 베드가 앞쪽 어딘가에 걸려서 위치를 잃어버리는 일이 벌어졌다. 필라멘트를 교체하고 다시 시작을 했더니 소위 탈조라고 하는 전혀 엉뚱한 곳에 그림을 그리고 있는게 아닌가.  플러그를 뽑게 만들었던 그 문제의 작품이 아래 사진이다.



그 뒤로 pause 기능은 사용하지 않다가 Marlin 이라는 펌웨어로 업그레이드를 하고 나서 이것저것을 해보던 중 Pause 기능을 이용해봐야겠다는 마음이 들었다. 


실제로 marlin 이나 skynet3d 로 펌웨어를 바꾸는 사람은 오토레벨링 기능을 쓰거나 디스플레이를 2004가 아닌 12864 LCD 로 교체하는 사람이 많이 한다. 그러나 나는 왠지 바꾸면 더 좋지 않을까 싶어서 했는데 지금 생각해보면 A8 기본 펌웨어도 꽤 쓸만하다는 생각이 든다. 

오히려 marlin은 뭔가 최적화가 안되어 있는듯해 보였고, configuration.h 의 존재를 알고 나서 뭔가 조금씩 만지다가 더 이상하게 되기도 했으니 꼭 바꾸는게 좋은건 아닌것 같다. 


하지만, 이런 시행착오를 통해서 marlin 내에 있는 설정값들의 의미를 알게 되었으니 아주 무의미한일은 아니었던 것 같다. 


Marlin 에도  pause 기능이 있는 것으로 안다.

그러나 나는 현재 호스트 프로그램중 하나인 Octoprint 를 이용해서 출력을 하기 때문인지 출력을 걸어놓고 메뉴에 들어가봐도 

pause 나 혹은 stop 버튼이 활성화가 안된다. 

아마도 SD 카드를 이용해서 프린터의 보드를 제어해 출력할 때에만 활성화가 되는 것 같다. 


우연히 Octoprint 의 설정화면을 보다가 G-code scripts 라는 다음과 같은 내용을 보게되었다. 



이미 octoprint 에는 pause 와 cancel 기능이 있지만

이것을 눌렀을 때 그냥 그자리에서 멈춰버리는 문제가 있었다. 

그런데 알고보니 이곳에다 적당한 G-code 값을 설정해놓으면

내가 원하는 위치로 노즐을 가져다 놓을 수 있고

그리고 나서는 다시 resume 을 눌러서 출력을 재개시키는게 가능할 것이라는 생각에 이르렀다. 

바로 이전 포스팅에서 공유했던 Gcode 의 기본적인 문법을 이용해서 말이다. 


http://bookledge.tistory.com/870



일단 머리속으로 다음과 같이 구상하였다.


Pause 를 누르면

 - 지정한 위치로 간다.


Resume 을 누르면 

 - 프린팅 하던 곳으로 가서 출력을 진행한다.


근데 문제가 있었다. 

Pause 를 하고 나서 움직인다음 다시 Resume 으로 멈췄던 지점으로 갈려면 어디서 멈췄는지를 알아야만 한다. 

그런데 그 위치를 어떻게 안단 말인가?


고민 끝에 '상대좌표'를 이용하면 되겠다 생각이 들었다.

그러니깐 (0,0) 으로 간 다음에 (?,?) 으로 가서 출력을 시작하는 것이 아니라,

무조건 (+10, +10) 으로 간다음에 (-10, -10) 으로 하면 다시 원래자리로 가 있게 되겠다 생각했는데 그럴듯 해 보였다. 


그리고, 바로 빼면 출력물에 걸리거나 거미줄이 딸려 올 수 있으므로

Z 축으로 살짝 노즐을 올린 다음에 리트랙션까지 하면 금상첨화겠다.

당연히 Resume 을 하고 나서는 리트랙션 한만큼 압출을 하고 시작하게끔 하면 된다. 


이걸 정리하고 G-code 로 만들면 다음과 같이 되겠다. 


<Pause>

좌표계를 상대좌표로 바꾼다.   G91

노즐을 위로 살짝 올리고, 리트랙션을 해준다.  G1 Z+0.5 E-2 F9000

노즐을 왼쪽과 뒤로 2cm 를 이동시킨다. G1 X-20 Y20 F1800


; 만약 장시간 자리를 비우게 되는 경우는 온도를 끄는 'M104 S0'

'M140 S0' 를 추가시킬 수도 있지만, 나는 노즐을 교체하는 등의 아주 짧은 멈춤을 가정하고 만들어보았다.  이게 성공했다면 다시 출력 시작인 Resume 은 pause 의 역순으로 하면 될 것 같았다. 


<Resume> 

아까전에 이동한 값의 반대만큼의 값으로 이동한다. G1 X20 Y-20 F1800

노즐을 출력물 위치로 내리고 리트랙션했던 만큼 압출을 해준다. G1 Z-0.5 E2 F2400

; 노즐을 뺄때는 아주 빠르게 빼주었지만 다시 시작할 때에는 조금 천천히 속도를 주었다. 

마지막으로 중요한게 하나 있는데, 상대좌표계로 바꾼 것을 다시 절대좌표계로 해줘야 한다. 그렇게 안했다가는 벨트 드드륵 갈리고 난리도 아닐것 같다는 상상이 되었다.  G90



그렇게 설정하고 나서 결과이다. 




Pause / Resume 을 성공적으로 셋팅이 되고 나니 조금밖에 남지 않은 필라멘트를 다 소모해보고 싶었다.  그래서 A8 살 때 번들로 들어 있었던 아주 조금 남은 필라멘트를 이용해서 딸을 위한 키티열쇠고리를 이렇게 만들어보았다. 



두개의 필라멘트 사이에 이어지는 부분도 아주 감쪽 같아 만족스러웠다.



글을 쓰는 시점에서 생각해보니 

Resume 을 하고 나서 2mm 압출을 진행한 것은 없애도 될 것 같다. 

왜냐하면, 필라멘트를 교체하고 나서는 손으로 일단은 주욱 밀어주기 때문에 이값을 pause 시의 retraction 위치에 정확히 오게 할 수는 없다는 생각이 들어서이다. 

그리고 잠시라도 멈춤을 했다가 다시 시작하려고 하면 

온도에 의해 필라가 노즐을 타고 흘러내리기 때문에 필라교체를 하지 않는다고 하더라도 필라를 임의로 압출을 시키고 나서 resume 을 하는게 좋을 것이라는 판단이 들었다.


이제는 필라멘트가 간당간당 할 때에도 겁내지 않고 출력을 걸 수가 있게 되었다. 물론 출력물이 투톤이 되겠지만 말이다. 




김성민의 북리지 - 함께 성장하는 책 리더십 지혜