본문 바로가기

▶3D 프린팅/삼디강좌

[김성민의 삼디 Life] 원격으로 3D 프린트 하기 (옥토프린터)

[김성민의 삼디 Life - 원격 3D 프린트를 위한 Octoprint]


3D 프린트에 입문하여 좌충우돌 왕초보 생활을 하고 있던 중에 

원격으로 프린터를 제어할 수 있게 해준다고 하는 옥토프린터(Octoprint) 라는 존재를 알게 되었다. 


매번 SD 카드에 gcode를 옮겨담기 위해 보드에서 빼었다가 다시 넣었다가 하는 귀찮음을 없어준다고 한다 .

그리고 인터넷이 되는 어느 곳에서나 집안에 있는 프린터를 가동시킬 수 있다고 한다. 

게다가 카메라를 설치하면 프린트가 제대로 되고 있는지도 감시할 수 있다고 하니 도전해보지 않을 이유가 없었다. 





예전 같으면 컴퓨터공학과나 전자공학 혹은 정보통신을 전공했어야만 가능할 일을 오픈소스라는 신비스러운 정보공유 시스템 덕분에 이제 마음만 먹으면 누구나 할 수 있는 시대가 되었다. 

나 역시 이 분야에 대한 지식이 전무함에도 불구하고 어렴풋하게나마 쉽게할 수 있지 않을까 하는 기대를 가지고 덤벼들었다. 

물론 설치과정중에 안되는 부분이 있어서 헤매어 하루 전체를 낭비하기도 했지만 그 과정에서 새로운 네트워크에 대한 개념을 정리 할 수 있는 기회가 되기도 하였다. 그리고 결국 설치를 완료해서 편하게 프린팅 생활을 즐기고 있다.

혹시 나와 같이 필요에 의해 옥토프린터를 설치하고자 하는 사람들은 용기를 가지길 바란다. 



1) 옥토프린터 설치 장점

 - SD 카드를 넣었다 뺏다 할 필요 없다.

 - 원격으로 프린터를 제어할 수 있다. (노즐위치 / 온도 / 모터 / 팬)

 - Repetier host 와 같이 Gcode 명령 / EEPROM 업데이트 가능하다.

 - 카메라 설치시 원격으로 출력되고 있는 상태를 모니터할 수 있다

 - 출력 완료 후 타임랩스 영상을 얻을 수 있다

 - (추가설치) 프린터 전원 on/off , 조명 컨트롤 가능하다



2) 옥토프린터 준비물

 - 라즈베리파이 or 오렌지파이


 - 라즈베리파이 카메라 (파이캠) or USB 타입 카메라


 - 시간 : 1hr + α ( 네트워크 관련 지식 유무에 따라 알파가 하루 이상이 소요될 수도 있음)



3) 옥토프린터 셋팅 3단계

 1단계 : 라즈베리파이에 Octopi or Octoprint 설치

 2단계 : 네트워크 도메인 등록 (외부에서 접속을 위해)

 3단계 : 카메라 설치 (원격모니터링과 타입랩스 영상을 위해)



4) 옥토프린터가 무엇인가? 


자세한 내용은 아래 두 사이트를 방문하면 보다 잘 나와 있다. 


https://octoprint.org

https://github.com/foosel/OctoPrint/


여기서 간단히 나의 주관적 경험으로 설명을 해보자면 다음 그림과 같다. 



기존에 프린트를 하기 위해서는 반드시 나는 집에 있을 때에 가능했다. 

잠시 octoprint 설치하기 이전의 나의 프린팅 과정을 설명해보겠다. 

1.STL 파일을 gcode 로 변환하고 나서는 먼저 프린트의 보드로 부터 micro sd 카드를 빼어낸다. 

2. 이 sd 카드를 usb 젠더에 끼우고 컴퓨터 USB 포트로 연결한 후에 아까전 변환한 Gcode 를 micro sd 카드로 복사 옮겨넣는다. 

3. gcode가 복사된 micro sd 카드를 프린터로 가져와 보드에 장착하고 프린터의 다이얼 혹은 버튼을 눌러서 옮겨담아온 gcode 파일을 선택해 프린트 시작을 하게 된다. 

이 얼마나 번거로운 과정인가. 


SD 카드에 gcode 를 옮겨담는 과정을 거치지 않으려면 한가지 대안이 있다. 그것은 컴퓨터와 프린터를 직접 연결해서 프린팅 하면 된다. 대부분의 슬라이서 프로그램이 이 기능을 지원해주고 있기 때문에 방법은 어렵지 않다. 다만 프린팅이 되고 있는 중에는 컴퓨터를 끌 수도 선을 뺄 수도 없다는 사실이다. 가정용 데스크탑의 경우에는 프린트만 하기 위해 전원을 켜놓고 있어야 하고, 노트북의 경우는 이동의 제약을 얻게 된다. 프린팅 타임이 짧게는 20~30분도 있겠지만 조금 큰 출력물의 경우에는 서너시간이 넘어갈 때 컴퓨터와 프린터를 계속 묶어 두고 있는 것이 그리 바람직해보이지는 않는다. 


이때 나오는 개념이 데스크탑이나 노트북을 대신해서 프린터와 연결해 놓는 컴퓨터와 그리고 프린팅을 시킬 프로그램의 등장이다. 

컴퓨터는 저전력으로 돌아가는 라즈베리파이가 담당하고

프로그램은 octoprint 라고 하는 호스트 프로그램이 가능하게 해준다.



이제 이렇게 연결된 라즈베리파이 안에 gcode 를 넣어 프린트만 시키면 되는데, 이 모든 것이 무선 연결로 가능하다. 한번 일을 시켜놓으면 라즈베리파이가 직접 프린터로 선이 연결되어 출력 일을 하고 있으니 노트북과 라즈베리파이의 네트워크가 끊어지더라도 출력이 멈춰질일은 없다. 


또한 이렇게 해놓으면서 원격으로 라즈베리파이에 명령만 할 수 있는 것이 아니라 라즈베리파이에서 올라오는 데이타를 원격으로 받아 볼 수 도 있게 되었다. 

대표적으로는 프린팅 되고 있는 모습같은 것이 그것이다. 



그리고, 라즈베리파이가 하나의 작은 컴퓨터이고 GPIO 라고 하는 신호를 컨트롤 할 수 있는 입출력장치가 있기 때문에 이걸 이용해서 원격으로 장비 전원을 끈다거나 led lamp 의 불을 키거나 하는 일이 가능하게 된다. 



5) 1단계 : Octoprint 설치


라즈베리파이에 Octoprint를 설치하는 방법은 크게 2가지가 있다. 

하나는 sd 카드에 Octopi 를 설치하는 것이다. 

Octopi 는 Octoprint 와 Rasbian 이라고 하는 운영체제를 합해놓은 것이다. 

수십가지 골치아픈 설치를 고민할필요 없이 SD 카드에다가 Octopi 만 booting 디스크로 만들고 wifi 비번 정도만 입력해놓으면 곧바로 octoprint 를 사용할 수가 있다. 

방법은 다음 링크를 참고하길 바란다. 


https://octoprint.org/download/


두번째로는 이미 가지고 있는 Raspberry pi 가 있을 경우 이 운영체제에 octoprint 만 설치하는 방법이다.  이 경우에는 octopi 때처럼 간단히 끝나는 것은 아니지만, 나와 있는 순서에 따라 따라하다보면 설치가 어렵지 않게 될 것이다.  만약 가격이 저렴하면서도 성능이 꽤 괜찮다고 알려진 오렌지파이를 사용한다고 하더라도 동일한 과정을 거치면 된다. 


다음은 이를 아주 잘 정리해놓은 글이 있어 링크로 설명을 갈음하고자 한다. 


저렴한 Orange Pi에 Octoprint 설치하기 : 

http://cafe.naver.com/makerfac/43657


사용하던 라즈베리파이에 Octoprint 설치하기 : 

https://github.com/foosel/OctoPrint/wiki/Setup-on-a-Raspberry-Pi-running-Raspbian 



나의 경우에는 집에 가지고 있던 라즈베리파이가 있어 두번째 방법으로 했다가 라즈베리파이3 로 옥토프린터 서버를 옮기는 과정에서 첫번째 방법인 Octopi 를 설치해보게 되었다. 

만약 리눅스 운영체계와 네트워크 설정등에 대한 지식을 좀 가지고 있는 사람이라면 Octopi 가 아닌 기존 Rasbian 위에 Octoprint 설치하는 자유도 높은 방식이 더 낫지 않을까 싶다. 왜냐하면 Octopi 는  Octoprint 를 사용하기 위해 최적화되어 있다 보니 내부적으로 어떻게 연결이 될지 신경쓸 필요 없이 되어진다. 신경쓸 필요 없이 된다는 말은 신경을 써서 뭔가 바꿔보려고 하는 사람에게는 무척 성가신일이 된다는 것이다. 이게 내부적으로 어떻게 네트워크 설정이 되어 있는지 파일을 하나씩 다 뒤져가면서 확인해봐야 하는 상황이 올 수 있다.  

그래서 초보자들이 아무런 배경지식 없이 따라하는 방법으로는 Octopi 설치가 더 좋을 것 같다. 


이렇게 Octopi 혹은 Octoprint 를 설치하고 나면 같은 wifi 네트워크상에 있는 다른 컴퓨터에서 인터넷 주소창에 다음 주소를 입력하면 나의 프린터가 연결된 라즈베리파이가 나타난다. 


Octopi 설치 :  http://octopi.local

Octoprint 설치 : http://127.0.0.1 or http://127.0.0.1:5000



이제 접속된 octoprint 에 계정등록 등 간단한 초기설정만 하게 되면 위와 같은 화면을 확인할 수 있게 된다. 

옥토프린트가 설치된 라즈베리파이와 프린트를 USB 로 연결을 시킨 후 왼쪽 connect 를 누르면 이제 sd 카드를 옮겨 빼고 하는 일 없이 간단히 3d 프린터 출력이 가능해 진다. 


이것이 Octoprint 를 설치하고 나서 나의 프린팅 방법이다.


gcode 를 끌어다가 위 사진에 나와 있는 창위로 떨어뜨려놓는다. (그러면, 파일 업로드 완료)

업로드한 gcode 를 선택하고 print 버튼을 클릭 / 끝


집에 raspberry pi 가 있는 분이라면 1시간 남짓한 시간에 아주 편리한 출력 환경을 셋팅할 수 있기때문에 한번 해보도록 추천한다.


여기까지만 하더라도 괜찮지만 욕심이 좀 날 것이다. 이것을 집안에서만 원격으로 할게 아니라 밖에 나가서도 프린터를 진행시켜보고 싶은 마음 말이다. 그런 분들은 2단계로 넘어간다. 



6) 2단계 : 네트워크 도메인 등록 (외부에서 접속을 위해)


주소창에 Octopi.local 을 입력하여 출력을 진행시킬 수 있는 것은 어디까지나 동일한 wifi 가 연결된 환경내에서이다. 만약 외부로 나가서 혹은 다른 wifi 네트워크 상에 있는 컴퓨터 혹은 모바일로 Octopi.local 이라고 입력한다면 알 수 없는 사이트라고 뜰 것이다. 어떻게 외부에서도 octoprint 에 접속해서 출력을 컨트롤 할 수 있을까? 


방법은 다음 순서를 따른다.


1. Octoprint 라즈베리파이에 고정 IP를 설정한다.

2. 내 라우터에 DNS 도메인을 얻는다. 


여기서 한가지 아까 빼먹은 이야기 하나를 추가하자면 라즈베리파이3에는 wifi 모듈이 탑재가 되어 있다. 그래서 별도의 wifi 동글이 필요하지 않았는데 만약 wifi 모듈이 없는 라즈베리파이 2 이하를 사용한다면 동글 하나 장만해서 연결해주면 된다. 알리익스프레스에서 $2 이하로 구매할 수 있으니 참고바란다.

그런데, 오렌지파이나 라즈베리파이3 의 내장 wifi 가 안되는 경우가 있다. 이것 때문에 아주 오랜시간 삽질을 했던 기억이 있는데, 이유는 라우터가 내장 wifi 모듈과 궁합이 안맞기 때문이다. kt 홈허브 라우터로 백날 안되다가 iptime 으로 연결을 하니 곧바로 된 경험이 있기에 참고하길 바란다. 


고정 IP 를 설정하는 방법은 간단하다. 

라즈베리파이를 모니터와 키보드 연결후 나온 화면에서 내부 네트워크 설정파일 하나를 수정해주면 된다.  

이때 리눅스 명령어를 조금 알면 좋지만 혹시 모른다고 하더라도 다른 사람이 해 놓은 것을 따라하면 어렵지 않게 할 수 있다. 

"라즈베리파이 무선랜 고정 ip" 라고 검색을 하면 수도없이 많은 정보를 얻을 수 있다.  그중 하나를 여기에 링크로 남겨놓으니 참고하기 바란다. 


라즈베리파이 무선랜 고정ip


여기서 ip 는 주소를 의미한다.  주소를 알고 있으면 외국에서 물건을 보내더라도 정확히 우리집으로 택배가 들어오는 것처럼 인터넷 세상에서도 어떤 서버와 사이트를 들어가기 위해서 주소가 있어야 한다. 우리집에 있는 Octoprint 에 접속할 때에도 마찬가지이다. 

근데, 방금전 라즈베리파이 내에 고정ip 를 설정한 것은 집안용이다. 

실제로 설치된 wifi 무선공유기가 집안에서만 쓸 수 있도록 만들어놓은 임시 주소들이지 외부에서는 통용는 주소는 아니라는 말이다. 외부에서 알아먹을 수 있는 주소는 무선공유기(라우터)가 하나 가지고 있다. 통신사에 기가인터넷을 신청하게 되면 그 가정에 하나의 ip 를 지정해주는데 바로 그 ip 가 외부에서 접속되는 ip 이다. 그런데 이 ip 는 숫자로 되어 있어서 외우기도 귀찮을 뿐더러 수시로 바뀔 수도 있다고 한다. 따라서 영어 알파벳으로 되어 있는 URL 주소와 같은 것을 만들어서 이 주소를 ip 와 연결해놓으면 편할 것 같은데, 이때 나오는 개념이 DNS (Domain Name System) 이라는 것이다. 그냥 주소창에 넣을 URL 주소 하나가 필요하다는 것이다. 그 URL 이 통신사에서 받은 ip 와 연결된 주소이면 되는 것이다.  이게 뭔진 모르겠지만 그 주소를 얻는 것을 동적 dns 라는 ddns 라고 dns 앞에 d 하나가 더 붙는다. 아마 숫자로 된 ip 주소가 바뀌어도 바뀐 주소로 자동으로 연결될 수 있도록 해주는 영어주소 가 그것인듯 하다.  뭐 이름이야 어찌되었든 ddns 를 얻는 가장 쉬운 방법은  iptime 공유기를 쓰면 된다. 


이것도 검색창에 'ddns iptime' 이라고 치면 엄청나게 많은 정보가 나오기 때문에 간단히 따라해보길 바란다.  방법은 다 같기 때문에 여기서는 참고용으로 내가 임의로 검색한 내용을 링크로 올려놓는다.


https://www.lifeformula.net/node/1513


만약 iptime 공유기가 없다고 하면 다른 무료 ddns 서비스를 신청하면 된다. 이것도 여러가지가 존재하는데 내가 사용하는 서비스는 no-ip 이다 .

noip.com


가입하고 My account 로 들어가서 host 에 내가 원하는 이름의 도메인을 등록하면 간단히 ddns 를 얻을 수 있다. 물론 무료이다. 

다만 한달에 한번씩 날아오는 갱신메일에 따라 한번씩 갱신해줘야 하지만 무료라는 매력때문에 그정도는 감수할 수 있으리라. 

ddns 를 얻을 때 나의 통신사에서 받은 ip 가 무엇인지도 자동으로 찾아준다. 쉽다는 말이다. 


여기까지 하면 스마트폰에서 wifi 에 끊은채 인터넷 주소창에 등록한 ddns 주소를 입력해서 나오는지 확인해보길 바란다. 대부분의 경우는 octoprint 가 잘 나오는 걸 볼 수 있을 것이다. 그러면 이 단계도 성공이다. 


만약 나오지 않는다면 받은 ddns 주소 뒤에 :5000 을 추가 입력하고 나서 해보길 바라고 만약 그것도 안된다면 내부 네트워크 설정을 여기저기 만져야 하는 상황이 벌어진다.  이런 상황이 발생하면 주변의 네트워크 설정의 전문가들에게 의뢰를 하여 해결하길 바란다. 나의 경우는 인터넷에 이미 정보가 있다는 사실을 확신하고 하나하나 찾아서 해주었지만 아주 많은 시간을 쏟아야 되는 것이라 추천해하진 않는다. 대신에 직접 정보를 찾아 해결하고자 한다면 그동안 알지 못했던 네트워크와 보안에 관련한 다양한 지식을 접할 수 있게 될 것이다. 

이런 과정을 통해 나는 포트포워딩이 무엇인지 DMZ 가 뭐하는 녀석들인지 등을 알게 되었다. 



7) 3단계 : 카메라 설치 (원격모니터링과 타입랩스 영상을 위해)


외부에서도 가능하다는 사실을 알게 되고 나서 밖에 나가서 프린팅을 시도하려고 할 때 덜컥 겁이 나게 된다. 

출력은 걸어두었는데 이 녀석이 혹시 스파게티를 만들고 있는 것은 아닌지, 불이 붙어 이는 것은 아닌지 하는 걱정이다. 

그래서 octoprint 가 기본으로 제공해주고 있는 video streaming 을 사용해보기로 하였다. 


방법은 usb 카메라 혹은 raspberry pi camera 를 옥토프린트가 설치된 라즈베리파이 나 오렌지파이에 연결하고 나서 간단히 몇가지 단계를 추가해서 따라해주면 된다. 이는 앞서 octoprint 설치방법을 다룬 링크에 도 자세히 나와 있기 때문에 생략하기로 하고 여기서는 카메라 하드웨어 설치 관한 경험을 소개하기로 하겠다. 


처음 octoprint 를 설치하고 나서 나의 프린터 모습은 이랬다. 



그냥 프린트 옆에 라즈베리파이를 던져둔 것이다. 이렇게 두면 안될 듯 싶어서 케이스를 입혀줄 생각이 들었다. 

thingiverse 사이트에 들어가서 검색해보면 엄청나게 많은 raspberry pi case 가 나와 있는데.. 그 중에 pi camera 의 리본 케이블이 들어 갈 수 있는 놈으로 고르다보니 내가 찾게 된 것이 이것이었다. 


https://www.thingiverse.com/thing:922740


본격 출력 ......  3번을 망함 (바닥들뜸에 의한 탈조.. 필라멘트 꼬임에 의한 노즐 토출불량 ㅠㅠ)




그리고 카메라 집도 만들어 주었다. 



카메라 장착 방식에는 크게 2가지 방법이 있다. 

프린터 기둥 장착 방식과 베드 장착 방식이다. 

나는 처음 기둥장착 방식으로 했다가 베드 장착 방식으로 바꾸었는데, 그 차이는 다음과 같다.  (참고로, 나는 Prusa 타입의 Anet A8 을 사용하고 있는데 이는 y 축 Bed 가 움직이는 type 이라서 이렇게 구분을 두는 것이다. 다른 타입의 경우는 두가지 구분을 하지 않아도 될 듯 싶다)


기둥 장착 방식 : 

https://www.thingiverse.com/thing:2265949


베드 장착 방식

https://www.thingiverse.com/thing:1867549

https://www.thingiverse.com/thing:2019291



카메라를 어디에 장착하느냐에 따라서 장단점이 있다고 본다. 

먼저 기둥의 z 축에 장착할 경우에는 높은 출력물의 경우 출력하는 방향에 따라 전체를 모두 볼 수 있다는 장점이 있다. 그리고 장착 위치에 따라 프린터 전체의 모습을 모니터링 할 수도 있겠다. 



반면에 움직이는 베드에 설치해주면 출력이 다 되고 timelapse 영상을 만들었을 때 아주 멋진 광경을 목격하게 될 것이다. 



둘 중에 어떤 것을 할 것인가는 개인의 선택이지 싶다. 


그래서 결국에 나는 케이스와 카메라를 아래 사진과 같이 설치를 완료하였다. 



이렇게 octoprint 와 원거리 원격제어 그리고 카메라를 통해서 나는 출력을 걸어놓고도 멀리에서 프린팅이 제대로 되고 있는지를 확인할 수 있게 되었다.  베드에서 떨어져나가 프린터 안에서 종횡무진 국수가닥을 뽑던 녀석을 수차례 원격으로 중지시켰던바다. 


아이폰과 안드로이드 폰의 어플중에 Octoprint 를 API를 이용해서 사용가능케 해주는 app 이 있어 설치해 쓰고 있다.  Appstore 에 검색해보니 여러종류가 있어서 각자 취향에 맞게 선택해 사용하면 되지 않을까 싶다. 




여기까지가 지금 현재 상태이고,

앞으로 추가하고 싶은 것은 옥토프린터를 이용해서 프린터 전원 on/off 와 led 등을 설치해서 조명도 켜고 끄는 것을 원격으로 해보는 것이다. 

이 또한 앞서가신 선배들이 다 해놓은게 있어서 그리 어렵지 않으리라고 본다. 


이상 여기까지이다. 혹시 추가적인 내용이나 질문이 있으면 댓글남겨주시길 바랍니다. 

그리고 나와 같은 필요를 느꼇던 분들에게 도움이 되는 글이었길 바랍니다. 






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