코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-08-12 17:22:48
아두이노에 연결할 수 있는 장치들 중 하나인 열전사 프린터를 아두이노로 제어해보자.
이 손바닥만한 프린터는 간단한 문구나 바코드를 인쇄할 수 있고 글씨에 밑줄과 폰트 변경 등 약간의 효과를 줄 수 있다.
아래 사진은 아두이노로 제작한 3D프린터 이다. 왼쪽 모니터에 구현된 사물을 프린터가 구현하는 모습이다.
현재 아두이노로 3D프린터를 활발히 개발 중이고 Item의 Lifecycle이 빠른 주기로 바뀌는 이 시점에서 나온지 좀 된 열전사 방식의 이 프린터는 메리트가 없다고 느낄 지 모르겠지만 아직까지 바코드나 소형 메모가 필요한 도서관 등지에서는 유용하게 쓰이고 있고 또 막상 사용해본다면 소형프린터를 사용해본다는 호기심과 매력에 끌려 충분히 재미를 느낄만한 물건이라고 생각한다.
NO
|
부품명
|
수량
|
상세정보
|
1 | 아두이노 | 1 | 오렌지 보드 |
2 | 미니 프린터 | 1 | |
3 | 5~9V 어댑터 | 1 | |
4 | 케이블 | 3 |
부품명 | 아두이노 | 미니프린터 | 5~9V 어댑터 | 케이블 |
부품사진 |
/* Example 38.2 - Sparkfun Thermal Printer Test II (COM-10438) http://tronixstuff.com/tutorials > chapter 38 Based on code by Nathan Seidle of Spark Fun Electronics 2011 */
#include <SoftwareSerial.h> SoftwareSerial Thermal(2, 3); int zero=0; int heatTime = 80; int heatInterval = 255; char printDensity = 15; char printBreakTime = 15; void setup() { Serial.begin(57600); //시리얼 통신 설정 Thermal.begin(19200); //프린터와의 통신 설정 initPrinter(); } //프린터의 초기 설정값 구현 void initPrinter() { //프린터 dots, Heating time, heating interval시간 설정 Thermal.write(27); Thermal.write(55); Thermal.write(7); //Default 64 dots = 8*('7'+1) Thermal.write(heatTime); //Default 80 or 800us Thermal.write(heatInterval); //Default 2 or 20us //프린터 density, breakTime설정 Thermal.write(18); Thermal.write(35); int printSetting = (printDensity<<4) | printBreakTime; Thermal.write(printSetting); //Combination of printDensity and printBreakTime Serial.println(); Serial.println("Printer ready"); } void loop() { // 밑줄 1pixel로 사용 Thermal.write(27); Thermal.write(45); Thermal.write(1); Thermal.println("Underline - thin"); Thermal.println("01234567890123456789012345678901"); Thermal.write(10); // 밑줄 2pixel로 사용 Thermal.write(27); Thermal.write(45); Thermal.write(2); Thermal.println("Underline - thick"); Thermal.println("01234567890123456789012345678901"); Thermal.write(10); // 밑줄 사용 X Thermal.write(27); Thermal.write(45); Thermal.write(zero); delay(3000); Thermal.write(10); // bold체 사용 Thermal.write(27); Thermal.write(32); Thermal.write(1); Thermal.println(" #### Bold text #### "); Thermal.println("01234567890123456789012345678901"); delay(3000); // bold체 사용 X Thermal.write(27); Thermal.write(32); Thermal.write(zero); Thermal.write(10); //Sends the LF to the printer, advances the paper delay(3000); // 글자 크기 확대 Thermal.write(29); Thermal.write(33); Thermal.write(255); Thermal.println("ABCDEF"); Thermal.println("012345"); delay(3000); // 기본설정으로 다시 세팅 Thermal.write(29); Thermal.write(33); Thermal.write(zero); delay(3000); Thermal.write(10); Thermal.println("back to normal"); Thermal.write(10); Thermal.write(10); do { } while (1>0); // do nothing }
내용은 소스코드이기 보다 기존에 있는 프린터 관련 소스를 돌려보는것에 가깝다.
소스 출처
위의 소스는 위 링크에서 가져온 소스로 프린터에 관련한 폰트나 굵기 밑줄관련하여 여러가지를 출력해보는 예제 소스이다.
프린터 자체가 출시된지 오래되었기 때문에 기존에 잘 돌아갔던 소스임에도 컴파일과정에서 버전차이등으로 인해 오류가 뜨는 경우가 있다.
통신은 SoftwareSerial라이브러리를 사용하여 디지털2번핀(Tx)에 녹색선 연결, 디지털3번핀(Rx)에 노란색선을 연결하여 시리얼통신을 한다.
프린터는 Thermal이라는 객체를 생성하여 프린터를 제어한다.
write()함수를 통해 프린터를 제어하는데 write함수안에 들어가는 매개변수 명령어set은 양이 많아 따로 매뉴얼에 나와있으니 참고하길 바란다.
메뉴얼 링크 (command set에서 Decimal 부분을 참조)
많이쓰는 몇가지만 보면 write(10)은 라인피드(줄바꿈)를 나타내고 write(27); write(50);은 줄간격의 초기화를 나타낸다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!