손바닥 프린터 사용기

오늘도 재밌는 제품을 소개 시켜드리겠습니다.
누구보다도 제가 갖고싶었던 아이템인지라 손에 잡히는 날(오늘)로 사용테스트를 해봤습니다.
예전부터 손바닥만한 휴대형 프린터를 갖고 싶었는데 아직 세상에 그런 제품이 안나왔네요.
대신, 도처에서 이미 많이 활용되고 있는 열전사 방식의 소형 프린터를 입수하게 되었습니다.
여기서 소개하는 제품은 TTL 레벨(5V) 시리얼 통신 제어로 간단히 제어가 되는 10만원 이하의 일명(자칭)

손바닥 프린터

입니다.

쉽게말하면, 전원선 빼고 전선 2가닥만 TX/RX핀에 연결해주면 아두이노 같은 손바닥 컴퓨터로 곧바로 제어가 가능합니다. 정말 군침도는 아이템이네요 ^^.

간단한 문자 출력과, 바코드 출력, 비트맵 출력이 가능하므로 다양하게 응용이 가능합니다.

참고로, 아두이노 UNO는 하드웨어 시리얼 통신포트가 1개 있으나, 본 예제에선 편리한 테스트를 위해서
하드웨어 시리얼 통신포트는 PC와의 연결에 사용하고, 실제 프린터와의 통신은 소프트웨어 시리얼을 사용하였습니다.
이렇게하여 PC측에서 사용자 입력을 받아서 프린터 테스트를 할 수 있게됩니다.
물론, PC없이도 아두이노 만으로도 모든 기능의 작동이 가능합니다.

※ 소프트웨어 시리얼 이란?
 아두이노와 같은 마이크로 콘트롤러들을 대게 하드웨어 시리얼포트를 제공합니다.
하드웨어 지원이라 속도,안정,사용편리성이 모두 우수합니다만 개수 제한이 있으며
아두이노 UNO의 경우 1개만 제공됩니다.(참고로, Mega 2560은 4개 지원)
이럴때 여러기기와 시리얼 통신이 필요할 경우에 사용하는 것이 소프트웨어 시리얼입니다.
범용 디지탈핀을 소프트웨어적으로 제어하여 시리얼 통신을 가능케하는것이므로,
성능과 충돌가능성에 좀더 제약이 있는편입니다.
하지만, 적절히 사용하면 편리하게 이용할 수 있겠죠.
현재 아두이노 스케치에서도 기본적으로 소프트웨어시리얼 라이브러리가 포함되어 있습니다.
본, 예제에선 기본제공 라이브러리가 아닌 다른버전의 라이브러리를 사용하므로 따로 설치 해줘야 합니다.


자 이제, 정말 되는지 예제소스를 바로 실행해봤습니다.
아래의 절차를 참고하시기 바랍니다.


A. 하드웨어 준비

 1. 전원선 연결(vcc,gnd)
프린터 + - 전원선을 5V ~ 9V 전압에 연결해줍니다. (5~9V 정전압, 최소  2A 이상 전력 요함)
프린터 자체 전력소모가 큰 편이므로 PC측 USB케이블로 공급되는 전원을 사용하면 절대 안되고
전용 아답터전원을 이용하시기 바랍니다. 제 경우 테스트 전용 PC파워에서 공급되는 5V전원을 사용하였습니다.
(작동시 1.3A정도의 전류가 소모되므로 최소 2A이상 지원되는 전원 요함, 9V 1A급 전원에서 정상작동이 안되는것을 확인하였습니다.)


 2. 통신선 연결(tx,rx,gnd) 

아두이노 하드웨어 시리얼포트로 프린터와 연결할 경우,
프린터 TX단자 출력선을 아두이노 측 RX입력(D0)에 연결하고
프린터 RX단자 출력선을 아두이노 측 TX출력단자(D1)에 연결합니다.
GND는 아두이노 GND에 연결합니다.

하지만, 본 사용기(예제소스)에서는 아두이노 하드웨어 시리얼포트(D0핀, D1핀)를 PC측 디버그 통신용으로 사용하므로
프린터 TX단자 출력선(녹색)을 D2(소프트웨어 RX핀)에 연결하고
프린터 RX단자 출력선(노란색)을 D3(소프트웨어 TX핀)에 연결합니다.
프린터 GND와 아두이노 GND를 공통 연결합니다.

참고로, 여기서, D2, D3은 아두이노 디지탈 핀번호이고, 소프트시리얼 핀 정의에 따라 다른 핀을 사용할 수 도 있습니다.

참고로, 소프트웨어 시리얼 통신을 위해서 본 예제는 NewSoftSerial 라이브러리를 사용했습니다.
라이브러리 이용법은 아래에서 설명


B. 예제소스 실행 준비

 제품소개 페이지에 링크된 아두이노 예제 소스를 다운받아서 살펴봅니다.
 아마도 예제를 실행하면 오류가 뜰겁니다.
 본 예제는 특정 소프트웨어 시리얼 라이브러리를 사용하므로 NewSoftSerial 라이브러리를 설치해줘야 정상 작동하기 때문입니다.
물론, 응용에따라 하드웨어 시리얼포트를 사용하거나 다른 라이브러리를 사용할수도 있습니다.
 위 아두이노 예제소스를 테스트하려면 아래와 같이 준비해야합니다.
 
 일단, pbe소스 상단에있는 안내문을 주의깊게 읽어주시기 바랍니다.
 
 NewSoftSerial 라이브러리는 아래의 링크에서 다운받을 수 있습니다.

 
.newSoftSerial 소개 페이지 [링크]
.newSoftSerial 라이브러리 [파일링크]
 
※ 라이브러리 설치방법
  다운로드 받은 라이브러리(zip파일)의 압축을 해제하면 나오는 NewSoftSerial폴더를,
  아두이노 개발환경(Sketch)폴더내에 있는 libraries폴더안에 복사합니다.
 
  가령, arduino-0022\libraries\NewSoftSerial 의 경로로 복사해주면 됩니다.
  구조가 이해가 안되면 이미 있는 라이브러리 폴더의 파일들과 비교하여 복사하시기 바랍니다.
  이제 스케치를 닫았다 다시 엽니다.
  새로운 라이브러리가 인식되면 스케치 예제에 NewSoftSerial 예제가 등록되니 참고바랍니다.
 
이제 예제를 실행하면 정상 작동됩니다.
물론, 말안해도 아두이노 종류와 포트번호는 정확히 지정해줘야 하는건 아시죠^^.
 

C. 프린터 작동 테스트

컴파일과 전송이 완료되면,  시리얼 모니터 창을 열고 통신 속도를 38,400으로 지정합니다.
 
아래와 같은 명령 메시지가 아두이노로 부터 수신됩니다.

Thermal Printer Testing
1) Print Hello World!
2) Type to print
3) Dull boy
4) Printer status
5) Reverse white/black
6) Print characters upside down
7) Adjust heat settings
8) Adjust print settings
9) Print factory test page
a) Print entire character set
b) Print numberic barcode
c) Print alpha barcode
d) Bitmap test
:

원하는 명령번호/알파벳을 입력하여 전송합니다.

특정 기능에따라,
가령 2)Type to Print같은 기능 수행시
시리얼 모니터 "no line ending" 을 carriage return등으로 설정해줘야합니다.

전압별 설정
사용 전압에 따라 heat interval 값을 다르게 세팅해야 합니다.
제 경우 5V전원을 사용했으므로 소스에서 heat interval을 5로 조절하였습니다.
위 값이 제대로 설정되지 않으면 작동이 제대로 되지 않습니다. 제 경우 다른 소스는 수정한것이 없습니다.
기타 상세한 옵션은 아두이노 소스 주석을 참고하시기 바랍니다.

문제해결
.제품소개 페이지상의 예제소스는 아두이노의 하드웨어 시리얼 핀(0,1번)을 PC와의 연결용으로 사용하고 프린터와의 통신은 softwareSerial을 이용합니다. 이곳에 프린터를 연결하거나 다른용도로 사용하시면 통신이 되지 않으니 필요시 소스를 수정하여 사용하시기바랍니다.
.명령전송 후에 약간의 미동만 있고 인쇄가 되지 않는다면,  전원의 허용전류가 부족하거나 위에서 말씀드린 전원에 따른 인수값 설정이 잘못된 경우입니다. 2A 이상의 전류를 지원하는 5~9V 전원을 이용하시고  주석부분의 설명을 참고하셔서 인수값을 조정하시기 바랍니다.
.USB케이블로 공급되는 PC전원만으로는 작동되지 않으며 아두이노와 PC에 무리를 줄 수  있으므로 반드시 프린터 독립 전원을 사용하시기 바랍니다.


비트맵 인쇄
80x80 points 크기의 비트맵 인쇄의 예는 아래와 같습니다. 
메뉴얼에서 DC2 * r n  타입 명령을 사용한 예입니다.

      //Bitmap example
      Serial.println("Print bitmap image");
     Thermal.print(18, BYTE); //DC2
      Thermal.print(42, BYTE); //*
      Thermal.print(80, BYTE); //r   (80줄을 의미합니다.)
      Thermal.print(10, BYTE); //n  (한줄의 폭: 10바이트는 80비트이므로 80개의 점 데이타로 대응됩니다.)

      for(int y = 0 ; y < 80 ; y++) {
        for(int x = 0 ; x < 10 ; x++){
          Thermal.print(0xF0, BYTE); //0b.11110000  
        }
      }

      Thermal.print(10, BYTE); //Paper feed
      Thermal.print(10, BYTE); //Paper feed

      Serial.println("Print bitmap done");





기술자료 링크:
 
테스트 사진 및 동영상들

 

 

 

 

 

 

 

 

 






+ Recent posts