드론 쿼드콥터/3D 프린팅

3D 프린터로 QR 코드 만들기

하늘이푸른오늘 2016. 3. 9. 00:04

지금까지 3D 프린터를 사용해 여러가지를 만들었지만, 그중에서 제일 많이 만든 것이 지오캐싱용 키체인입니다.


아래가 바로 그것입니다. 지오캐싱 마크를 적당히 넣어서 배치하고, 윗부분에 구멍을 뚫어서 군번줄을 끼워넣도록 했습니다.


아마도 총 50개 이상 출력하지 않았나 싶습니다. 이분 저분 많이 나눠드려서 지금 가지고 있는 건 몇개 되지를 않습니다.



아래는 이걸 만들 수 있는 스케치업 파일입니다. 한꺼번에 6개씩 출력할 수 있도록 만들어 두었습니다. 이걸 제작하면서 사실 많은 시행착오를 거쳤습니다. 지오캐싱 마크를 3D 모델로 변환하는 과정이 쉽지 않아서 OpenCAD와 Sketchup을 왔다갔다 해야 했습니다. 무슨 이야기인지는 아래를 읽어보시면 알 겁니다.


geocaching_key_Final_geocaching_6set.skp



그 다음에는 예전에 어디론가 사라져버린 지오코인(Geocoin)들을 제작하기도 했습니다. 윗 그림에서 Geocaching 대신 지오코인의 코드만 넣으면 되니까 제작하기는 어렵지 않았습니다. 하나씩 따로 만들어야 해서 귀찮았습니다. (이제 해결되었네요. ㅎㅎ)


===

아무튼.... 이번엔 지오코인을 QR코드로 만들기로 했습니다. 이렇게 만들어두면 그럴듯해 보일 것 같아서 입니다. :)


일단 먼저 QR 코드를 만들 수 있는 사이트가 필요합니다. 원래는 다음에서 제공하는 QR코드 사이트 http://code.daum.net/를 사용하려고 했습니다. 그런데 만들고 보니 QR 코드가 상당히 복잡하더군요. 아래가 제 지오캐싱아이디(bluesky61)와 지오코인코드(AK28TX)만을 넣어 만들어본 QR코드입니다.



너무 복잡하면 3D 프린터로 출력할 때 문제가 발생합니다. FDM 방식의 3D 프린터는 노즐의 두께로 인해 최소로 표현할 수 있는 두께... 즉 수평해상도가 0.4 mm 정도 뿐이 안되기 때문입니다. 아마 이대로 출력했다가는 거의 다 뭉게져 버릴 것 같네요.


그래서 제가 사용한 사이트가 goqr.me 라는 사이트입니다. 그냥 간단합니다. 1에서 Text를 선택하고, 2에서 문자열(bluesky61 AK28TX)을 넣어주기만 하면 됩니다. 여기서 만들어준 코드가 다음에서 생성한 것보다 훨씬 간단하다는 걸 아실 수 있을 겁니다.



아래가 Download 받은 QRCODE 입니다.



이제 이 그림을 3D 프린터용 모델로 만들어야 합니다.

OpenSCAD에서 Surface 명령을 사용해 만들면 간단합니다. 


module QRCode() {

    sc=ww/400; // 크기를 맞추어주기 위함

    translate([ww/2, ww/2, 1.]) scale([sc, sc, sc/2])

    surface(file = "qrcode.png", center = true); // 이미지를 불러들여 3D로 만듧니다.

    

}


이렇게 해서 프리뷰(F5)을 하면 아래와 같은 모델이 만들어집니다. 간단하죠.



하지만, 이 상태에서 Render(F6) 명령을 내리면 OpenSCAD가 한참 낑낑거리고 돌아가다가 프로그램이 정지됩니다. 아마도 surface 모듈로 만들어진 3D 모델에 뭔가 문제가 있지 않나 싶은데, 하여튼 여러 번 시도해 봐도 계속 동일한 결과만 나옵니다. 그리고 Suface로 만든.... QR코드 모양은 엄청나게 큰 파일이 만들어 집니다. 스케치업에서 불러오면 그냥 뻗어버립니다. 결국 Surface 모듈이 주요 원인이고, 이것은 경계선이나 면이 깨끗하게 생성되지 않아 수많은 면들이 생기기 때문입니다.


이건 JPG나 PNG 등의 그림을 사용해서 STL 파일로 만들어주는 다른 프로그램도 비슷합니다. 예를 들어, thingiverse에 있는 2D image to STL 도구를 사용해서 STL 파일을 만든 후 이것을 Sketchup에 불러와 보면 아래와 같습니다.



머... 그런대로 괜찮네... 라고 생각될 수도 있지만, 오른쪽 아래 구석만 확대해보면...



이 그림처럼 비어 있는 곳도 나오고, 쓸데없는 선들이 엄청 많다는 걸 알 수 있습니다. Cleanup Extention을 사용해보면 좀 낫기는 하지만, 여전히 경계선이 정확하지 않다는 게 보일겁니다.



===

그래서... 이런 종류의 그림을 STL로 만들 때에는 DXF와 같은 Vector로 변환한 후 이를 3D 모델로 만드는 게 깔끔합니다. 좀 번거럽기는 하지만요. 


아래는 이 글을 참고로 했습니다. 여기에서 사용하는 프로그램은 무료 오픈소스 벡터 편집기인 Inkscape 입니다. Inkscape에는 벡터를 DXF로 만들어주는 기능이 있습니다. 그런데 문제는 OpenSCAD가 (잘 만들어진 프로그램이 아니라서) 아무 DXF나 마구 읽어들이지를 못합니다. 그래서 Inkscape에 Extension을 다운로드 받아야 합니다. 


그다음에는... 버전에 따라 다른 것 같은데... openscad_dxf 폴더와 openscad_dxf.inx 파일을 Inkscape/share/extensions 에 복사해 넣어주기만 하면 됩니다.


===

그 다음 Inkscape를 실행하고 원하는 파일을 불러들입니다.




그 다음으로 경로(Path) -> 비트맵 따오기(Trace Bitmap)을 선택합니다. 그러면 다음과 같은 다이얼로그가 뜨고... 여기에서 확인을 누르면...




그림이 별 차이가 없어보이지만, 그림을 클릭해서 약간 옮겨보면 아래와 같이 두가지 버전이 있음을 알 수 있습니다. 위는 Vector 버전이고, 아래(움직이지 않은 것)은 원래의 그림입니다. 이걸 지워주고, vector 버전을 원래 위치로 가져다 놓습니다.


이제 파일 -> 다른이름으로 저장으로 들어간 후, dxf 포맷으로 저장해주면 됩니다. 이제 이 파일을 사용해서 OpenSCAD에서 불러들여 보면...


linear_extrude(height=40)

 import("qrcode.dxf");


그러면 이렇게 아주 깨끗하게 불러집니다.



이렇게 해서 최종적으로 만든 QRCode.scad 파일은 다음과 같습니다.


$fn=50; // 해상도에 사용됩니다.

ww=30; // 기본 크기

hh=3;

module body() { // 몸체를 만드는 부분

    difference() {

        linear_extrude(height=hh) {

            minkowski() { //minkowski를 하면 둥근 모서리가 만들어집니다.

                union() { // 집모양을 만들고

                    square([ww,ww]);

                    translate([0,ww,0]) scale([1,1/2,1])rotate([0,0,-45])

                        square([ww/sqrt(2), ww/sqrt(2)]);

                    translate([0,-ww/5])square([ww,ww/5]);

                }

                circle(r=3);

            }

        }

        

        translate([ww/2, ww+ww/5, -2]) // 고리를 끼워넣을 구멍

            cylinder(r=1.5, h=10);

    }

}


module QRCode() {

    sc=ww/400; // 크기를 맞추어주기 위함

    scale([sc, sc, 1.8])

    linear_extrude(height=3)

    import("qrcode.dxf");    

}


module b_text() {

    translate([1,-ww/4.5,hh]) resize([ww*0.9,ww/6,hh/3])

        linear_extrude(height=0.6)text(font="Arial Black", "Geocaching");

}


body();

b_text();

QRCode();


그런데... 이런 식으로 해서 제작을 하면 Rendering 과정에서 에러가 발생합니다. 이유는 QR Code 이미지를 잘 보면 네모와 네모가 한 선에서 만나기 때문입니다. 이런 도형의 경우, OpenSCAD에서는 반드시 에러가 발생합니다. 따라서 이미지를 미리 편집하여, 까만 부분을 약간 확대해 주는 게 좋습니다. 아래그림처럼요.





그리고... 제가 가진 Ares 3D 프린터의 특성일 수도 있는데, 이렇게 해서 출력해도 아래와 같이 네모가 떨어져서 출력이 됩니다. 그래서 QRCode 앱으로 처리해도 잘 인식을 못합니다. 



아래는 2px을 확장시켜서 동일한 방법으로 제작한 것입니다. 훨씬 인식이 잘되네요~



이상입니다.


민, 푸른하늘