본문 바로가기

Robot/Reference

[연재] 3D 프린터란? - 오픈 소스 기반의 3D 프린터

 허접한 실력과 안목으로 이런 연재를 시작하겠다는 것을 생각했다는 것 자체가 2014년 올해 최대 실수이지 않을까 합니다.ㅠㅠ. 뭐 아무튼 이전에 3D 프린터의 탄생과 일반적으로 데스탑형 프린터, 개인용 프린터, 저가형 프린터 등등의 여하튼 한 100만원에서 300만원대 가격을 형성하고 있는 3D 프린터들의 큰 두 줄기인 FFF 방식과 SLA 방식에 대해 이야기를 했습니다. 이 두 방식은 어떻게 재료를 적층하는가에 대한 기준일 뿐입니다. 여기서 다시 기구적인 형태로 또 분류를 하기는 하는데 그건 크게 다룰 생각이 없습니다. 왜냐면 제가 잘 모르거든요^^. 아무튼~~ 지난번 연재에서 FFF 방식의 3D 프린터에 요구되는 기술 혹은 기능이라고 정리를 했었습니다.

FFF 방식의 3D 프린터에 요구되는 기술 혹은 기능

  1. 당연히 (모터의 구동부등의 회로부분을 포함한) 3D 프린터 기구부
  2. 이미 확보 혹은 제작된 3D 모델링에서 G-Code를 생성하는 G-Code Generator
  3. 생성된 G-Code를 읽어서 X-Y-Z을 담당하는 각 모터에게 적당한 지령을 내리는 해석기 -- 통상 이부분은 3D 프린터에 포함된 회로의 Firmware가 담당함.
  4. (1번에 포함시켜 퉁칠 수 있지만 정말 중요하므로) 재료를 녹일 노즐부분 히터와 재료를 베드에 잘 안착시키기 위한 베드부분 히터, 그리고 온도센서
  5. (3번에 포함시켜 퉁칠 수 있지만 역시 정말 중요하므로) 노즐부분 히터와 베드부분 히터에서 온도를 피드백 받아 해당 온도를 유지하는 제어기

 위의 내용인데요. SLA방식도 비슷하게 정리했구요. 이번에는 이 둘 중 FFF 방식에 대해 좀 더 자세히 이야기를 해보겠습니다. SLA도 비슷합니다만, FFF가 현재로서는 가장 저렴하면서 많이 알려져 있기 때문이지요^^. 이번 연재에서는 위의 요구되는 기술들을 어떻게 해결할 수 있을까를 다룹니다. 방대한 이야기입니다. 기계설계와 제작, 모터 구동 회로 및 파워 회로 등의 회로 설계와 플라스틱 재료에 대한 이해를 바탕으로 한 제어기의 설계 기술 및 펌웨어 개발, 3D 모델링 된 도면 화일의 분석 및 재가공 등의 소프트웨어 개발 기술까지 어마어마한 내용의 기술 개발이 선행되어야 합니다. 이걸 그냥 맨땅에 헤딩하면 일류 엔지니어를 각 분야별로 포진시켜도 1~2년안에 힘들 수 있습니다. 그러나 대부분 인터넷을 확인하면 한 2명? 쯤의 엔지니어로 3D 프린터에 대한 창업이 가능합니다. 어떻게??? 바로 오픈소스를 기반으로 한 프로젝트의 결과물들이 있기 때문입니다. 그래서 이번에는 3D 프린터를 한 번 만들어 볼까 합니다. 응?? 진짜?? 그럴리가 있나요...^^. 가상으로 말이죠. 오픈소스 진영의 여러 결과들을 가지고 한 번 계획을 수립해 볼까합니다. 이렇게 해서 얼마나 3D 프린터에서 오픈 소스의 역할이 큰지도 알 수 있으며, 또한 그렇게 공개된 자료를 사용하지만 그래도 어려운 점들이 있다는 것을 또 알 수도 있지 않을까 하구요. 일단, 먼저 기구부의 구성회로부의 구성을 먼저 할겁니다. 그리고, 구성된 회로부에서 펌웨어를 구성하구요. 그다음 PC측에서 3D 모델을 핸들링할 소프트웨어를 구성해 보겠습니다. 그렇게하면 위의 필요한 기술들을 모두 해결할 수 있습니다. 일단 위에서 이야기한 1번은 기구부와 회로부 설명에서 다루고, 3번, 4번, 5번은 펌웨어를 설명하는 곳에서 다루겠습니다. 그리고 2번은 PC측 소프트웨어를 다루는 곳에서 또한 다루도록 하겠습니다. 단 이번 글에서는 스탭모터는 뭘 쓰는게 좋은건지 등등의 이야기를 하는 것이 아니라는 것을 알아주세요^^.

3D 프린터 기구부

네 맞습니다. 뭐든 기구부가 필요하죠^^. 그런데 저는 학생때부터 가장 힘들어 했던 것이 이 기계적인 기구부였습니다. 일단 제 전공도 아니고, 딱 나한테 맞는걸 찾을 수도 없고, 그렇다고 만들자니 도면도 하나 그릴줄 모르고, A4지에 개발새발 그려서 의뢰하자니 비용이 엄청나고..ㅠㅠ. 이렇게 기구부는 참 힘들었던 기억이 있습니다. 회사생활을 하는 지금은 그럼 편해졌는가? 뭐 그렇진 않습니다.ㅠㅠ.

RepRap 홈페이지에 공개된 모델들

 위 그림은 3D 프린터 오픈 소스 진영의 RepRap 프로젝트에 공개된 모델들의 일부[바로가기]입니다. 각 모델들 옆에 보면 라이센스 규정이 있습니다. GPL이 많이 보이는데요. 자유롭게 배포되고 또 사용될 수 있는 권리를 보호하기 위한 규정이죠. GPL^^. 그래서 다들 따라 만들고 또 개조도 할 수 있고 심지어 팔 수도 있는 겁니다. 그 중 하나만 따라가보죠. 위 모델들 중에서 Prusa Mendel이라는 모형이 있습니다. RepRap 프로젝트 내에서의 위키 페이지[바로가기]에 소개되어 있는 내용들을 살펴 보겠습니다.

2011년에 발표된 Prusa Mendel. 출처 : RepRap 프로젝트 Prusa Mendel 페이지

 위 그림이 Prusa Mendel의 사진입니다. 응? Stratasys까지는 아니더라도 요즘 나오는 이쁜 디자인의 제품들과 무쟈게 차이가 난다구요? 당연합니다. RepRap은 무료배포(저걸 무료배포하는게 아니라 방법과 내용을^^)되는 아이니까요.^^. 또 가급적 3D 프린팅된 부품들을 사용하는 것으로 되어 있기 때문입니다. 아무튼 이 친구들의 위키페이지로 가서 보면 쉽게 얻을 수 있습니다.

Prusa Mendel에서 공개한 각 부속의 STL 리스트

Prusa Mendel에서 공개한 각 부속 리스트 중 일부

 바로 위 그림처럼 자신들 위키페이지에 부품 리스트가 다 올라가 있습니다. 또한 STL 화일의 형태로 제공되는 것은 3D 프린터로 인쇄하면 됩니다. 이런 화일들의 소소는 gihub에서 공개[바로가기]되고 있습니다. 이렇게 되면 아시다시피 기구부의 구성은 끝납니다. 스텝모터는 뭘 사용했으며, 재료를 녹이고 뽑아내는 Extruder 부분은 어떻게 구성했는지도 나타납니다. 

Adrian의 Extruder

 항상 Prusa Mendel과 같은 방식으로 공개되는 것은 아니지만, GPL 규정에 따라 다들 자신의 도면 혹은 상용품을 사용했다면 그 리스트를 모두 공개하고 있습니다. 결국 이런 문서를 보면서 나와 가장 잘 맞는 것을 구성하는데 큰 어려움이 없습니다. 심지어 기계 설계에 대해 지식이 있다면 다시 수정하고 또 배포할 수 있습니다. 물론~ GPL 규정에 따라 바뀐 부분을 명시하고 전체적으로 다시 공개만 하면 됩니다. 아까도 말씀드렸지만 GPL 규정은 사용과 복제와 배포할 수 있는 권리를 보장해 주는 규정이니까요^^. RepRap에서 크게 다루지는 않지만 흔히들 델타봇이라고 부르는 병렬기구와 같은 형태도 있습니다. 뭐 걔네들도 역시 마찬가지입니다.^^.

3D 프린터의 회로부

이제 기구부에 이어서 회로부를 이야기해 보겠습니다. 사실 당연하다고 생각하고 패스한 건데요. 노즐을 하나사용하는 경우 X, Y, Z축 움직임을 감당할 모터와 익스트루더에서 작동할 모터가 하나 필요합니다. 상황에 따라 Z축의 경우는 기구설계적인 이유로 두 개의 스탭모터를 사용하는 경우도 있지만 개별적으로 따로 쓰는 것이 아니기 때문에 두 개를 쓴다는 것 뿐, 자유도가 증가한건 아닙니다. 아무튼... 역시나 RepRap의 페이지에서 전자회로부분에 대한 설명[바로가기]을 보면 또한 쉽게 알 수 있습니다.

 위 그림은 RepRap에서 가지고온 3D 프린터 회로중 하나입니다. 이름은 RepRap Arduino MEGA Pololu Shield라고 하며 줄여서 RAMPS 보드라고 합니다. X, Y 축을 담당하는 스탭모터에 Z축은 스탭모터를 두 개를 쓰고 있습니다. 이는 다시 말하지만 기구적인 이유로 두 개를 병렬로 사용했을 뿐입니다. 위 회로에서 하나의 모터 포트에 물려있을 뿐입니다. 그리고 또 Extruder에 사용되 스탭모터까지 모터는 저게 전부입니다. 스탭모터를 사용했으니 당연히 스탭모터 드라이버도 사용해야죠. RepRap은 이런 스탭모터 드라이버를 [바로가기]에서 정리해 두고 있습니다. 사실 스탭모터 드라이버는 뭘 쓰든 용량만 맞고 구현만 맞으면 상관없습니다.^^. 그 다음이 익스투르더에 히터와 온도 센서 그리고 베드에 히터와 온도센서를 메인보드에 연결하도록 되어 있습니다. 응? 메인보드? 그렇죠 메인보드가 필요하죠^^. 그러나 이 메인보드는 저도 몇번 소개한 적이 있는 아두이노[바로가기] 중에서 MEGA 보드를 사용하고 있습니다. 제가 아두이노에 관심을 가지던 이유도 3D 프린터 때문이죠. ^^ 여담인데 제가 프로세싱(Processing)언어[바로가기]에 관심을 가지게 된 것도 아두이노 IDE 프로그램이 프로세싱으로 만들어 졌다는 것을 알고 나서 부터 랍니다. 또 상구이노(Sanguino) 처럼 다양한 보드들이 있습니다. 이 회로도 역시 모두 공개되어 있습니다. 더 많은 보드와 관련 자료를 얻고 싶다면 [바로가기]를 한 번 둘러 보시길 바랍니다.^^

출처 : RepRap의 RAMPS1.4 회로도

 RAMPS 페이지에서 Schematic을 얻을 수 있습니다.[바로가기] 그리고 라이브러리는 제 블로그에서 한 번 소개한 적이 있는 이글캐드[바로가기] 사용할 수 있도록 되어 있습니다. 뭐 아두이노 보드도 마찬가지 이지만요. 이렇게 되면 이제 기구부 회로부 모두 구성되었네요. ㅎㅎ. 딱딱한 놈들(Hardware)은 다 했습니다.^^

3D 프린터 보드의 Firmware

 자~ 이제 RepRap 혹은 그 영향을 받은 단체나 사람들 덕분에 기구부를 구성했거나 혹은 구성하는데 도움을 받았고, 또 회로적인 부분도 제가 예를 들어서 RAMPS를 소개했지만 또 비슷한 많은 사람들 덕분에 구현이 끝났습니다. 3D 프린터만 놓고 보면 남은건 바로 회로에 들어갈 Firmware지요.

 이 펌웨어에는 어떤 역할이 요구되는 걸까요?^^. 먼저

  1. G-Code를 해석 해서
  2. X, Y, Z축을 담당하는 모터와 필라멘트같은 재료를 사출할 익스트루더 모터를 운용시켜야 합니다.
  3. 또한 익스트루더의 히터와 온도센서를 이용해서 재료를 녹일 적절한 온도를 유지(통상 PID 제어)시킬 수 있어야하며, 재료나 사용자의 취향에 따라
  4. 베드의 히터와 온도센서를 이용해서 베드의 온도를 유지 (통상 PID 제어)해야 합니다. 그 뿐인가요. 위의 회로도를 확인하셨다면 알겠지만 재료의 빠른 안착과 수축률등을 위한
  5. 쿨러의 가동도 조절해야 하며, 심지어 사용자에게 현재 상황도 알려야하고 지령도 받아야 하므로
  6. PC와 통신이 되든지 혹은
  7. SD 카드 같은 것에서 데이터도 읽어야 하고
  8. 그 상황을 LCD 같은데서 뿌려도 주면 좋을 겁니다.

이 모든 것은 다 펌웨어단에서 처리해 줘야하는 기능들이네요. 이 8가지 기능(실제로는 더 자잘한 기능이 많습니다. 더블 혹은 그 이상의 노즐에 대응하는 것들과 오토 레벨링을 위해 준비된 기능과 델타형 로봇을 위한 각종 준비된 설정등등 너무 많습니다.ㅠㅠ)이 모두 들어있는 아이들이 있습니다.^^. 그 중에서 Marlin이라고 하는 아이가 있습니다. [바로가기] 이 아이를 설치하면 됩니다^^. 위의 저 많은 기능들을 다 어떻게 구현하느냐...는 그냥 Marlin한테 맡겨놓으면 되는거죠.. ㅎ. Marlin은 Github[바로가기]에서 다운로드 가능합니다.

출처 : github의 marlin 페이지

 아까 만들어진 혹은 구해놓은 RAMPS보드(혹은 그 비슷한 뭐든)에 아두이노 소프트웨어가 없다면 그냥 아두이노 홈페이지에서 설치하면 됩니다. 설치법은 [바로가기]에서 나와 있으니 아두이노가 깔리면, 그 다음은 아두이노 IDE 프로그램에서 Marlin.ino를 불러오면 됩니다. 거기서 다운로드를 하면 되죠. 원체 주석처리가 잘 되어 있기 때문에 변경하고 싶은 곳은 쉽게 찾을 수 있답니다.^^.

Marlin을 아두이노 IDE에서 실행한 모습

 아무튼 이 Marlin 소스코드도 당연히 공개되어 있으니 각 종 firmware 그것도 세계적으로 사용되는 아이의 소스코드를 한 번 보고 싶은신 분들은 재미있을 겁니다. 뭐 전 그냥 흠 여기가 나한테 필요한 설정이었군 뭐 이딴 생각 뿐이었지만요. 어차피 GPL 라이센스를 따라가기 때문에 똑같이 GPL을 지킨다면 수정후 재배포에 문제는 없습니다. 단, 마를린을 사용했음에도 자신들의 펌웨어를 공개하지 않는 경우(이 경우는 어차피 GPL 라이센스 위반입니다.)와 마를린으로 특허를 꾸미는 행위를 특별히 금지하고 있습니다.  사실 이 금지는 GPL 라이센스도 마찬가지 인데요. GPL 라이센스를 따르는 것을 가져다 수정후 또다른 제품을 만들었다면 그 결과물은 자동적으로 GPL 라이센스를 따르도록 되어 있는 것이 GPL입니다. 그런데 국내(혹은 인터넷으로 확인되는 중국쪽 제품도) 정말 많은 제품들이 Marlin을 쓰고 있거나 기본적으로 Marlin을 사용해서 수정한 것으로 분명 의심되는데도 자신들이 Marlin(꼭 Marlin이 아니라 GPL에 속한 어떤 결과물이든)을 안 쓴것처럼 포장하는 것은 참... 슬픈 일입니다. 이제 이렇게 해서 기구부(나사하나까지 공개된)와 전자 회로부분과 또한 그 안에 탑재될 펌웨어까지 어디서 구하는지 확인이 다 되었습니다. 그럼 뭐가 남았죠?

3D 모델과 G-Code Generator

 남은건 사실 PC쪽 소프트웨어가 남아 있습니다. 화일로 구성된 위에서 이야기한 3D 프린터 보드의 펌웨어가 이해할 수 있도록 3D 모델을 G-Code로 변환하고, 또 펌웨어와 통신을 통해 3D 프린터의 상태를 체크하거나 운용할 수 있어야 합니다. 또한 3D 프린터가 사용하는 사람들 마다 다를테니 3D 모델을 나한테 맞도록 최소한의 조작 - 회전, 리사이징, 오브젝트의 분리나 결합, 복제 등은 가능하면 좋을 겁니다. 또한 나중에 빠른 프린팅을 위해 펌웨어 단으로 전송될 G-Code를 화일로 저장해서 관리할 수 있다면 더 좋을 겁니다. 이런 기능들이 또한 모두 들어 있어야 합니다. 일단 직교좌표계의 형태에서는 Ultimaker의 CURA가 가장 사용 빈도가 높은 듯 합니다.

출처 : 위키백과의 Ultimaker's Founder

 흠 이번 연재를 작성하게 된 모델은 사실 저 Ultimaker의 제품들 때문인데요. RepRap을 더 중요하게 생각해서 그걸 많이 다루었네요. 그래도 현재 베드는 Z축만, 익스트루더가 X-Y축을 움직이며 저렇게 사각 박스형태로 만들어진 3D 프린터를 최초로 공급하기 시작한건 2011년의 Ultimaker입니다. 그들이 박스형 3D 프린터의 시초들이죠^^. 위키백과에서 보면[바로가기] Ultimaker는 RepRap 프로젝트의 참가자들이었습니다. 이들은 그러다가 자신들의 결과물을 상업용으로 판매하기 시작한 거죠. 그리고 RepRap의 창립자인 Adrian Bowyer의 자기복제(replicator)의 개념에 동의하지 않았기 때문에 결별한 것으로 일단 알려져 있습니다^^. 뭐 아무튼 이들의 또다른 업적이 있다면 바로 CURA입니다. RepRap이 자기복제의 모토로 3D 프린터를 보급 확산하는 기초를 마련했다면 Ultimaker는 좀 더 좋은 품질을 생산하는 방향으로 확장했고, 그래서 박스형 프린터와 몇 몇 수준 높은 소프트웨어를 보급하기 시작했습니다. 비록 Ultimaker는 사업용 프린터를 판매하고 있지만, 지금 언급할 CURA라는 프로그램은 GPL 규정에 맞춰 공개하고 있습니다.

출처 : Ultimaker 공식 홈페이지

 CURA는 현재 13.12까지 공식 버젼업이 수행되었으며, Ultimaker의 공식 홈페이지에서 다운로드가 가능[바로가기]합니다. 자유 배포 규정을 지키고 있으니 3D 모델을 다루는 CURA의 핵심 엔진도 당연히 소스코드까지 공개되어 있습니다[바로가기] 또한 엔진을 포함한 전체 소스코드도 공개되어 있지요.[바로가기] 사실 이런것까지 공개하는 오픈소스의 마인드는 정말이지 무섭습니다. 저도 회사 생활을 하는 사람으로서 과연 우리는 가능할까 생각하면 소름돋기도 하거든요. 그런데, 간혹 이런 CURA 소스코드를 받아서 자신들의 로그로 바꾸고, 영문으로 되어 있는 것들을 한글로 메뉴만 바꾸는등 겉모습만 좀 바꾼 상태에서 거창하게 자신들이 다 만든듯이 이야기하는 회사를 보면 좀 어이가 없을 때가 있습니다.ㅠㅠ.

 이게 CURA를 실제 실행한 화면입니다. 자신의 프린터에 맞도록 설정을 바꾸고 난 후에 3D 모델(통상 STL화일)을 읽어들여서 작업을 할 수 있습니다.

여기서 어떻게 사출하는지 과정과 예상 시간, 소요되는 재료의 양 등도 나타나며 SD카드에 저장하든지 직접 3D 프린터와 연결(RepRap호환)해서 프린팅을 하든지 할 수 있습니다. 특히 이 소프트웨어에서 또 중요한 부분 중 하나가 서포트인데요. 시작되는 표면에서 위로 갈 수록 커지는 물체가 있다면 사용자의 판단에 따라 서포트가 필요할 수 있습니다. 이는 적층해가는 부분이 무너지지 않아야하기 때문인데요. CURA같은 프로그램들은 그런경우 서포트를 생성하기 위한 작업도 같이 수행합니다. 이런 것까지 다 포함한 G-Code를 생성하는 것이 CURA같은 PC측 소프트웨어가 수행해야할 작업이 됩니다.

이번 연재를 마치며...

 이번에는 오픈소스 기반의 3D 프린터를 다루어 보았습니다. 사실 이 글의 내용조차 reprap.org에서 쉽게 확인할 수 있는 내용들로 채워져 있을 뿐입니다. 그러나 재료비만 들여서 기구부를 구성할 수 있고, 전기전자는 몰라도 회로부를 구성(아니 구입하면 되니까)해서 펌웨어도 넣고, PC 프로그램도 무료로 구할 수 있으니 쉽게 3D 프린터를 장만 혹은 요즘 유행하는 DIV로 구할 수 있을 겁니다. 그러나 이런 스토리를 알고 있다고 하더라도 그래서 이 스토리대로 진행을 한다고 하더라도 많은 시간과 노력이 필요한건 사실입니다. 모두가 수학의 정석을 봤지만, 우리의 시험 점수가 정석대로 나오는건 아니니까요.^^. 아무튼 그럼에도 불구하고 적어도 이런 길이라도 있다는 것이 또한 기쁘고 고마운 일입니다. 이제 다음에는 실제로 3D 프린터로 뭔가를 하는 것을 보여드릴까 합니다. 그리고 또 그 뭔가를 해보고난 후에 지금 시점에서 제가 느끼는 3D 프린터란 어떤 것인지를 또 한 번 이야기해볼까 합니다. 

반응형