본문 바로가기

Make It Yourself

팬케익 프린터 반죽 압출용 에어펌프 달다 삽질한 일

작년 메이커 페어에 가지고 나갔던 팬케익 프린터의 펌프가 중간에 끊기거나 굵기가 고르게 나오지 않는 문제가 있어서 개선을 해서 올해도 가지고 나가 울궈먹으려고 손을 대면서 이 모든 일이 시작되었다.



핑크색으로 된 것이 페리스탈틱펌프다. 옆에 산처럼 쌓인 고뇌의 팬케익을 보라! 


작년에 쓴 펌프는 페리스탈틱 펌프라는 묘한 이름의 펌프인데, 튜브를 롤러로 눌러 짜주는 방식이다.롤러게 세개 달린 휠에 실리콘 튜브를 감고 바깥에 케이싱을 둘러 롤러가 튜브를 눌러 줄 수 있도록 만들어진 구조인데, 구조상 롤러가 누르고 있던 부분엔 팬케익 반죽이 없기 때문에 펌프가 한 바퀴 돌 때마다 토출되는 반죽이 세 번씩 끊기거나 가늘어진다.


그래서 팬케익 프린터를 처음 만든 사람도 쓴다는 압축공기를 반죽통에 밀어 넣는 방식을 써보기로 했다. 처음엔 에어펌프만 락앤락 물통에 연결하고 바닥에 1mm직경의 구멍을 뚫어서 반죽을 넣고 켜 봤다. 나오긴 잘나오는데 펌프를 꺼도 남은 공기가 있어서 반죽이 멈추지 않고 계속 나오는 문제가 있었다. 그래서 펌프를 멈출때 공기를 빼줄 수 있는 밸브를 달기로 했다. 솔레노이드밸브 파는건 대부분 거대하고 비싸서 실리콘 튜브를 RC서버모터로 잡고 접었다 폈다 해주는 방식의 밸브를 만들기로 했다.  


공기펌프는 팬이나 베드히터를 제어하는 단자에 달면되는데, rc서보는 기본적으로 단자가 나와 있는게 아니라 예비용 핀중에 골라서 써야 한다.


기존에 쓰던 팬케익 프린터의 컨트롤 보드였던 printrboard는 teensy++ 2.0과 같은 atmel at90usb1286을 쓰지만 핀 매핑이 틴지와 다르다. 게다가 보통 핀 매핑이 다른 경우(attiny칩은 코어가 두 가지 이상 존재하고 핀매핑이 달라서 왕 짜증)는 아두이노 IDE 디렉토리 하부에 있는 하드웨어 정의 코어가 다르게 마련인데 이경우는 코어는 같은데 marlin 펌웨어의 fastio.h라는 화일에서 핀을 재정의 하고 있다. 


나는 rc용 서보모터를 달아서 에어펌프식 팬케익프린터의 공기배출 밸브 구동을 하려고 했을 뿐인데, 서보 모터 하나 다는게 이런 엉망 진창 수렁에 빠지는 일이 될 줄은 상상도 못했다. 검색을 하면서 돌아다녀보니 나 말고도 많은 사람들이 이 수렁에 빠져서 고생을 했던 흔적을 발견 할 수 있었다. 핀 매핑을 스프레드쉬트로 정리한 사람을 둘이나 봤다. 문젠 표를 봐도 혼란 스럽긴 마찬가지여서 결국은 직접 실행해봐가면서 찾아야 한다.


게다가 핀 매핑만의 문제가 아니었다. 겨우 찾아낸 핀 번호를 서보모터세팅에 넣어도 서보가 끝까지 돌아가서는 덕덕덕 거리기만 할 뿐 명령을 먹지도 않는 것이었다. 결국 수렁은 피해 가는게 답이지, 수렁을 다 퍼내고 새 흙을 매워 넣고 멀쩡한 길로 만들어서 가야할 필요는 없다는 교훈을 얻고, Ramp보드로 바로 갈아탔다.


Ramp보드에서도 서보쪽 전원은 점퍼를끼워줘야만 공급이 되는 특이한 구조라서 잠시 헤매이는 시간을 가졌지만 그리 어렵지 않게 시스템을 새 보드로 교체 하고 서보를 작동하게 할 수 있었다.마이크로스텝핑 설정용 점퍼들이 빠져 있는 줄 몰랐다거나 스텝모터 드라이버가 달라서 마이크로 스테핑이 1/32 이었던 것 때문에 좀 더 시간이 걸리긴 했지만 그정도는 애교지.



연결은 그렇다치고.. 반죽통에 설치한 공기펌프와 공기배출 밸브. 


그러나 서보가 제대로 작동한다고 끝이 아니었다. 서보가 어떤 때는 의도한 것과 반대로 움직이는 것이었다. 항상 그런게 아니라 선분을 하나만 그릴 때만 그러는 것이었다. G1 코드 하나로 이루어진 선분인 경우 바로 뒤에 서보를 움직이는 M280코드가 오는데 선분을 끝까지 그린 후에 작동 해야할 M280이 선분을 그리기 시작함과 동시에 작동해버리는 바람에 팬케익 프린터의 반죽을 쏘면서 가야 하는데 에어 배출 밸브를 시작부터 열고 가는 바람에 에어펌프가 돌아도 바람이 새서 반죽이 나오질 않는 것이었다. marlin의 gcode 해석에 오류인듯 한데 코드가 워낙 방대하여 어딜 손봐야할지 감도 안와서 난감했다. 온갖 삽질을 하다가 결국 G1 코드를 한줄 더복사해 넣는 것으로 가닥을 잡았다.

내일 테스트 해봐야지!


2015.9.27 오늘 해봤는데 안됐다. 결국 반죽으로 하는 테스트를 잠시 접고 볼펜을 달아서 테스트 해보니 상황이 좀 더 명확히 드러났다. 반죽은 정확히 어떻게 그려지는지 좀 알기가 어려웠는데 볼펜으로 그려보니 확실히 상황이 드러남. 테스트용 펜은 모나미 153 볼펜을 개조 해서 스프링을 볼펜심 뒤에 고정하고 서버 혼에 스프링을 끼워서 바닥의 높이차를 흡수 하고 접지력(?)을 높이도록 했다. 펜대와 서보는 물라스틱으로 고정해줌. 빨리 만드는덴 물라스틱을 능가할 것이 없다.





시작점과 끝점으로 이루어진 지코드 두 줄짜리 단일 선분을 그릴 때도 서보가 반대로 움직이지만 수십 줄짜리 원을 그릴 때도 3/4까지만 그리고 마는 것이었다. G1 코드가 여러 줄 있다고 해결되는 문제가 아니었다.   다시금 곰곰히 문제의 근원을 생각해, 보니 G1코드가 다 수행되고 난 후에 서보제어 코드나 팬 제어 코드가 작동해야되는데, 확실히 팬제어 코드인 M106이나 M107는 G1다음에 작동하지만 서보 제어 코드인 M280은 XY축 움직임이 끝나기 전에 작동해버린다는 점이다. 결론적으로 서보 제어 코드와 팬 제어코드는 차별적으로 동작하고 있는 것이고, 서보제어 코드도 팬제어 코드처럼만 구동해주면 되는 것이다.


화면의 그림을 그리고자 했으나 아래 왼쪽 처럼 그려지다가 결국 아래 오른쪽 처럼 의도대로 그려지게 됨.




그래서 Gcode 중에 기다려주도록 하는 명령이 있나 주욱 찾아봤는데 안보였으나.. 결국 검색하다 찾은 내용( https://github.com/MarlinFirmware/Marlin/issues/2125 )엔 M400이 그런 기능을 하는 코드라는 것이다. 

결국 marlin의 버그와도 같은 것인데, 그들의 의도는 모션 제어 관련 코드는 순차적으로 구동하고 아닌 것은 앞에 놈 끝나기도 전에 다 마구 수행 해버리는데 그러면 서보 제어도 당근 모션 제어에 껴줘야하는건데 왜 빼놨냔 말이다.


어찌 어찌 원하는 대로 서보 제어는 되기 시작했다. 그래서 반죽으 농도와 그에 맞는 적절한 펌프출력값을 찾기 시작했다. 시작 시 압력이 찰때까지 반죽이 나오지 않아서, 초기엔 풀파워로 밀어주면서 일초 정도 시간을 끌어준 후에 적절한 파워로 줄이고 시작하는 방법을 쓰니 해결됐다. 그러나 끝날때 공기 배출 밸브가 열러도 남은 압력이 빠지는 시간이 있어서 의도보다 반죽이 더 많이 나오는 현상은 쉽게 해결이 안됐다. 그건 마치 3D프린터에서 이동시 필라멘트 뒤로 당겨 주는 것과 같은 일을 해줘야 하는 것 아닌가. 게다가 커브 구간에서 반죽이 너무 두껍게 쏴지는 현상도 있고, 이런 일들은 스텝모터로 필라멘트 밀당하듯이 정밀하게 제어 하지 않으면 해결이 쉽지 않은 건데 어쩐다?


공기 펌프에서 나오고 들어가는 두개의 튜브를 각각 둘로 나눠서 반죽통 내외로 하나씩 빼어 rc서보로 튜브를 꺾는 방식으로 밸브를 네개 구현하면 반죽통안에 압력을 강제로 채우거나 강제로 뺄 수 있긴한데 좀 복잡해서 꺼리고 있었는데, 결국 그 방식을 써야만 하나?


대략 이런 꼬락서니로 나온다.


2015.9.28 잘 생각해보니 펌프의 위에 말한 밸브네개 달아서 통안에 압력을 넣다가 빼다가 하는 방법은 문제가 있을 것 같다. 공기를 뺄때 밸브를 활짝 열어도 남은 압력 때문에 반죽이 선분 끝에 몰려나오는데, 저 조그만 펌프로 빼봐야 그 속도가 느려서 오히려 지금처럼 밸브 열어 주는 방식만도 못할 것 같다는 것이다.


그러면 남은 방법은 아예 반죽 나오는 노즐에 밸브를 달아주는 방법이 남는다. 그리고 내부 압력이 점점 올라가서 토출량이 점점 많아 지지 않을까 하는 우려가 되어 기존의 공기 배출 밸브도 유지하려고 했다. 그러나 공기 펌프를 좀 약하게 구동하면 노즐로 어느 정도 빠져나오고 선분 시작시에 압력 높이느라 기다릴 필요도 없을테니 아예 배출 밸브를 막아 버리는게 좋겠다 싶어서 막아보니 괜찮았다.


노즐에 설치하는 밸브도 역시 실리콘 튜브를 RC서보모터로 접어주는 방법을 썼는데, 새로 써본 벽이 얇은 튜브는 밀폐가 잘 안되서 벽이 전에 쓰던 벽 두꺼운 튜브로 교체했더니 확실히 작동한다. 다만 서보를 락앤락 통에 고정하는데 물라스틱을 썼더니 접착성이 안좋아서 자꾸 떨어진다. 내일 아예 3D프린터로 뽑아서 달아줘야 겠다. 아무튼 노즐에 밸브를 다는 방법으로 프린팅을 해본 결과가 지금까지 중 가장 훌륭한 결과를 보여서 오랜 삽질이 이제 끝나갈 듯한 느낌이 든다. 



rc서보로 실리콘 튜브를 접는 방식의 밸브



물라스틱으로 임시 고정한 서보모터. 얼마 못가서 떨어져버렸다.


외곽선 그린 후에 서보모터가 떨어져 버리는 바람에 개판 되긴 했지만 외곽선 까지는 정말 잘 나왔다!



2015.10.3 며칠이 걸려서 오늘은 아래처럼 노즐밸브와 반죽통을 모두 하나의 브라켓에 달아 주었다. 이제 후라이팬의 열도 피할 수 있어서 좋다. 반죽통이 열에 노출되면 가동하지 않고 가만히 두기만 해도 시간이 좀 지나면 통안에서 반죽이 익어 버리는 바람에 반죽이 못쓰게 된다.



브라켓은 통에 끼워진 링과 그 아래 부분, 두 개의 3D프린트 된 부품으로 이루어져 있다.



브라켓을 설계 할 때 오토데스크 퓨전 360을 썼다. 오랫동안 라이노를 기구설계에도 쓰느라 개고생을 해왔는데, 그 이유는 맥에서 돌아가는 쓸만한 솔리드 툴이 없어서 였다. 근래에 fusion360과 onshape이 나와서 써보고 있으나 설계 초기에 레이 아웃 잡을 때 불편해서 영 맘에 안들었었는데 이번에 좀 익숙해지면서 쓸만하다는 생각이 들기 시작했다. 



점점 나아지고 있다.



이번에 펌프를 바꾸면서 슬라이서를 쓰지 않고 잉크스케이프의 확장 기능을 이용해서 gcode를 만들고 있다. 잉크스케이프 익스텐션 중에 unicorn이라는 메이커봇 컵케익을 펜 플로터로 쓸 수 있게 해주는 것이 있어서, 그걸 개조해서 쓰고 있다. 펜 들었다 놨다 할때 rc서보모터를 쓰기 때문에 그 코드를 밸브 여닫는데 바로 쓸 수 있고, 냉각 팬 제어코드M106, M107을 추가해서 쓰고 있다. 익스텐션은 파이썬으로 되어 있어서 이번 기회에 파이썬 공부도 겸하고 있다.


그런데 이 익스텐션이 선분을 바로 툴 경로로 바꿔주는 기능만 가지고 있지 3D프린터의 속채움같은 개념이 아예 없어서 그 것까지 짜 넣어 보려고 하는 중인데 일주일 후까지 될지 의문이다.





그래서 아쉬운대로 손으로 한땀 한땀 속채움을 그렸다 --;;  물론 한번에 깔끔하게 채워질 리가 없다. 열번은 고친거 같다. 이걸 자동으로 생성되도록 하는게 목표다. 물론 슬라이서 프로그램 중에 파이썬으로 된 것을 보고 속채움 코드를 쏙 뽑아 오는게 목표이긴 하지만 일주일 내로 될까?..