elsa in mac

tevo tarantula - 업그레이드 - Servo 모터를 이용한 자동 Nozzle Cleaner 본문

3D 프린터/tevo tarantula

tevo tarantula - 업그레이드 - Servo 모터를 이용한 자동 Nozzle Cleaner

elsa in mac 2017. 10. 19. 23:22


오늘은 노즐 크리너에 대한 업그레이드 파트에 대한 것 입니다. 

지난번에 4족 보행 로봇 만든다고, Aliexpress에서 MS90S 서보 모터를 10개 구매 했는데, 8개를 쓰고 2개가 남아 있었지요.. 책상을 정리하다가 문득 눈에 들어온 서보 모터를 보고는 생각만 하고 있었던 노즐 크리너를 만들기로 했습니다. 

일반적으로 프린트를 하려고 hotend를 예열하면, 노즐 안에 남아 있던 잔존 필라멘트가 녹으면서 중력에 의해 자연스럽게 흘러 나오게 됩니다. ozzling 이라고들 하죠..

프린트가 본격적으로 시작되기 전에 이 흘러나온 필라멘트를 제거해야 하는데, 가열된 노즐이 뜨겁기 때문에 맨 손으로 때는 것은 좀 힘들어서 보통은 핀셋이나 니퍼 같은 것을 이용해서 빼 냅니다. 

경험 상 보다 간단하고 가장 깔끔하게 때어내는 방법은 면봉을 이용하는 것인데요... 아주 깔끔하게 닦아 낼 수 있지만, 프린트 되기 직전까지 쉼 없이 계속 조금씩 흘러 나오기 때문에 여간 신경이 쓰이는 것이 아닙니다. 

이번에 만든 노즐 크리너는 Auto Leveling을 끝 마치고, 프린트 되기 직전에 노즐에 묻어 있는 필라멘트를 자동으로 닦아낼 수 있도록 만드는 것 입니다. 

자 그럼 볼까요 ?

우선 먼저, 아래 보시는 사진 속 서보 모터가 RC 등에서 주로 사용되는 MG90S로 물론, 중국산 짝퉁 입니다. 정품은 꽤 비싸죠.. ^^

무게는 대략 13g, 동작 전압은 4.8 ~ 6.0V 이고, 구동 속도는 대략 100 ms에 60도 정도를 회전할 수 있습니다. MG90S 모터는 180도까지 회전 시킬 수 있는데요..

서보 모터는 선이 3가닥 입니다. 거의 표준인데요.. 노란색이 PWM 선이고, 가운데 빨간선이 전원(5V), 브라운 색이 GND(그라운드) 선 입니다. 

제가 가지고 있는 MKS 1.4 Gen 보드는 총 4개의 Servo 모터를 연결할 수 있도록 되어 있는데, 아래에 Red Box로 표시된 부분이 서보 모터를 연결하는 부분 입니다. 

3개의 핀이 수직으로 배열되어 있는데요. 윗쪽으로 노란색이 꽃히면 됩니다. 

연결은 이렇게 간단하게 할 수 있구요.. 다음은 제어를 해야 하는데.. 일단 Marlin 펌웨어에 Servo를 사용하기 위해 수정을 해 주어야 합니다. 

위의 코드는 marlin 1.1.x의 Configuration.h 파일의 내용 입니다. 위의 코드 부분이 Servo 모터와 관련된 부분으로 1652번째 라인에 보면, #defin NUM_SERVOS 3 이라고 되어 있는 부분이 주석처리(//)가 되어 있습니다. Servo를 사용할 것이므로, 앞에 주석(//)을 제거하여 활성화 시켜 줍니다. 

이미 BLTouch를 사용하고 계신 분들이라면 이 부분이 활성화 되어 있을 것입니다.  BLTouch도 내부에 아주 작은 Servo 모터가 들어 있기 때문이죠.. BLTouch를 사용하면서, NUM_SERVOS를 1로 변경했었다면, 이제 이 값을 2로 바꿔야 합니다. Nozzle Cleaner용 Servo를 하나 더 사용해야 하기 때문이죠...

다음은 1657번째 라안에 #define SERVO_DELAY {300} 이라고 되어 있는 부분을 수정해야 합니다. 

BLTouch를 사용하지 않고, 처음 Servo를 적용한 다면, 300이라는 값 자체를 수정하면 되고, BLTouch를 사용하고 있다면.. 300 값을 변경하는 것이 아니라 값을 하나 더 정의해 줘야 합니다. 아래와 같이 말이죠..

#define SERVO_DELAY { 300, 500 }

즉, 앞에 300은 BLTouch용 SERVO DELAY 정보 이고, 뒤에 500은 두번째 Servo인 Nozzle Cleaner용 SERVO DELAY 정보가 되는 셈 입니다. 

그럼 SERVO_DELAY 값이 의미는 무엇일까 ?...

만약 Servo 모터를 0도 에서 90도 회전 시키고, 그 다음 step에서 다시 180도까지 회전 시킨 다음, 마지막으로 다시 0도로 되돌아오게 제어를 하고 싶다고 가정하면, 3번의 명령을 내려야 하겠죠.. "1. 90도 위치로 회전", "2. 180도 위치로 회전", "3. 0도로 복귀" SERVO DELAY를 500으로 설정하게 되면, 3번의 명령이 각각 500ms, 즉 0.5초 마다 수행됨을 의미합니다.  즉, SERVO DELAY란 "다음 SERVO 명령을 실행하기 까지 대기하는 시간" 인 셈입니다. 

0도에서 10도만 회전하는 것과 0도에서 100도를 회전하는 것은 100도를 회전하는 것이 더 오랜 시간이 걸리게 됩니다. 즉, SERVO 모터를 제어할때 가장 긴 시간이 걸릴 동작을 기준으로 이 값을 설정해 줘야 하는 것입니다. 

일던 저는 400으로 설정을 했습니다. (물론, 노가다 성 Try & Error)를 거쳐 찾아낸 값이죠... ^^

자 이것으로 Servo 모터를 사용하기 위한 marlin 설정은 일단 끝 입니다. 간단하죠 ?

그럼 실제 servo 명령은 어떻게 제어하는가 ? 바로 G-Code를 이용 합니다. 

Marlin의 경우에는 M280 명령어로 서보 모터를 제어할 수 있는데,, 형식은 M280 P1 S90 과같은 식으로 명령을 내리게 됩니다.  M280 (서보 제어), P(서보 번호), S(회전 각) 의 의미가 됩니다. 

따라서, M280 P1 S90은 1번 Servo를 90도 "위치로..." 회전 시켜라 라는 의미가 됩니다. 서버 번호는 0번 부터 시작된다는 점을 주의 해야 합니다. 즉, BLTouch를 사용하는 사용자라면, P1으로 구동을 시켜야 하며, BLTouch를 사용하지 않고 있고, 첫번째 포트에 Servo 모터를 연결했다면  P0로 명령을 내려야 합니다. ^^

USB로 보드와 연결하고 터미널에서 M280 P1 S90등과 같이 명령을 내리면 Servo 모터가 해당 각도 만큼 회전을 하는 것을 금방 확인할 수 있습니다. 

이제 Servo 동작까지 확인 했으면, 이제 Cleaner를 제작할 차례 입니다. 아이디어를 생각하고, CAD 작읍을 해서 간단하게 아래와 같이 디자인 했습니다. 

Tevo Tarantula의 왼쪽 Z축 기둥인 2020 Profile의 하단 부분에 MG90S servo를 거치 하기 위한 간단한 브라켓과 Nozzle Cleaner를 위한 팔(Arm) 입니다. 

실제 장착한 모습은 아래와 같습니다.  지난 번에 뽑아 놨었던 초 미니 Viking을 장식으로 달아 주었습니다. ㅋㅋㅋ MG90S와 크리너 암은 간단히 3M 양면 테입을 이용하여 Servo 날개에 부착하고 서보 기어에 꽂아 주면 간단히 설치가 완료 됩니다. 

물론, 암의 길이도 실측을 통해 적당한 길이와 두께를 잡은 것이구요.. Cleaner 선정에 좀 고심을 했는데.. 크리너 암이 노즐을 앞 뒤로 스치고 지나가면서 노즐에 있는 필라멘트를 소위 "훔쳐내는" 방식이라 필라멘트가 잘 붙는 소재를 사용해야 합니다. 또한 크리너 끝이 딱딱하면 노즐에 물리적인 충격을 주게 되므로 유연한 소재여야 겠지요...

고민하다가, 위의 사진처럼 Bed 안착용 테잎을 두 겹을 붙이고, 곁에 캡톤 테이프를 발라 주었습니다.  캡톤 테이프 또한 베드 안착제로 사용될 만큼 필라멘트와 친하죠 ^^

아래는 크리너 동작의 단계를 정리한 것입니다. 

1. Auto Home
2. Auto Leveling (BLTouch)
3. 노즐을 청소 위치로 이동
4. 서보 모터 가동 - 150도 위치로 회전 - 노즐 닦기 1
5. 서보 모터 가동 - 50도 위치로 회전 - 노즐 닦기 2
6. 4 ~5 과정을 3번 반복
7. 서보 모터 가동 - 0도로 복귀 (STOW)
8. 노즐을 Bed의 0.5mm까지 하강 시킴
9. 프린트 시작.

문제는 3번 단계 즉, 노즐을 청소 위치로 이동시키는 것인데, 이를 위해서는 사전에 청소 위치를 찾아야 합니다. 이를 간단히 하기 위해서 Marlin에 User Custom Menu를 몇 개 만들었는데요... 아래와 같습니다. 

우선, 사용자 정의 메뉴를 사용하기 위해서는 Marlin 최신 버전이 있어야 하구요.. Configulation_adv.h 에서 해당 메뉴를 만들어 주어야 합니다. 

위의 코드는 노즐 크리너를 위한 사용자 정의 메뉴를 위한 것으로 Configuration_adv.h의 내용 일부를 발취한 것입니다. 

먼저, #define CUSTOM_USER_MENUS를 주석해제하여 활성화 시켜 주어야 하구요, 위와 같이 5개의 메뉴 중 일부를 수정해야 합니다. 

USER_DESC_x 부분은 LCD화면에 표시될 메뉴의 제목 부분으로 위의 코드를 보시면, 각각 Cleaner Stow, Cleaner Deploy, Clear Nozzle 이렇게 3 부분을 수정한 것을 알 수 있습니다. 

각 메뉴에 대한 G-Code 명령을 USER_GCODE_x 부분에 정의를 해 주면 됩니다. Cleaner Stow는 0도로 복귀하는 명령인 M280 P1 S0를 정의해 주었고, Cleaner Deploy에는 서보 모터를 120도 위치로 회전시키는 M280 P1 S120을 정의했습니다. 마지막 Nozzle Cleaner 부분은 보시는 바와 같이 120 위치로 회전 50도 위치로 회전을 명령을 3번 하도록 했고, 맨 마지막에 0도로 복귀하도록 정의를 했는데요.. 각 명령 간에는 \n (new line) 문자를 넣어 주어야 합니다. 

위의 코드로 컴파일 하고, 업로드를 하고 나면, 아래와 같이 LCD 화면에 Custom Commands 항목이 나타나며, 내부로 들어가면, 보시는 바와 같이 작성한 명령제목들이 순서대로 나타나는 것을 확인할 수 있습니다. 이 3개의 명령을 이용하여 노즐의 위치를 적당히 조정하면서 노즐 청소 팔(Arm)이 노즐을 적당히 걸치고 지나가는 그 위치를 찾으면 됩니다. 


자 이제.. 노즐 청소 위치까지 찾았다면, 이를 모두 종합적으로 모아모아 Slicer의 Start Script에 넣어 주기만 하면 됩니다. 저의 겅우에는 Simplify3D를 사용하므로, S3D를 기준으로 설명을 하겠습니다. 

위의 스샷은 S3D의 script정의 부분으로 보시는 바와 같이 Starting Scipt 부분을 수정해 주면 됩니다.  내용은 아래와 같습니다.  각 명령의 설명은 주석부분을 참고 하시면 됩니다. 

G21 ; metric values

M82 ; set extruder to absolute mode

M107 ; Layer 펜 중지

G28 X0 Y0 ; X, Y Home 위치로 이동

G28 Z0 ; Z Home 위치로 이동

G29 ; BLTouch 오토 레벨링


G0 X4.7 Y100 Z16.8 F7000 ; X= 4.7, Y=100, Z=16.8 인 노즐 청소 위치로 이동 , 속도는 7000

G4 S2 ; 2초간 대기 (실제 이동하는데 시간이 소요 되므로.. 완전히 노즐 위치로 이동이 끝날 때 까지 대기한다)

M280 P1 S150 ; 서보모터 150도 위치로 회전

M280 P1 S50 ; 서보모터 50도 위치로 회전

M280 P1 S150 ; 서보모터 150도 위치로 회전

M280 P1 S50 ; 서보모터 50도 위치로 회전

M280 P1 S150 ; 서보모터 150도 위치로 회전

M280 P1 S0 ; 서보모터 0도 위치로 복귀


G92 E0 ; Extruder Length 0로 초기화

G1 X10 Y100 Z0.3 E0 F800 ; 노즐을 X=10, Y=100, Z= 0.3 위치로 이동, 속도는 800

M117 Printing...   ; 프린트 시작


자.. 아래의 동영상은 오토레벨링 끝나는 시점 부터 출력까지로 실제 크리닝 하는 과정을 담은 것 입니다. 

30분 만에 후다닥 만들어 본거라... 일단은 제대로 동작하는 것을 확인했으니, 나중에 깔끔하게 다시 이쁘게 제작해서 달아 줘야 겠네요... ^^

공유하기 링크
Comments