[아두이노] 알림 메시지를 출력해주는 프린터 만들기


 

휴대폰이 사람들의 삶의 중심이 되다보니 중요한 메시지는 휴대폰으로 다 모이죠. 한시라도 휴대폰 화면을 보지 못하면 사람들과 세상에서 멀어지는 불안감이 느껴지는걸 보면 생활 패턴을 좀 바꿔야 하지 않나 생각도 듭니다. 그래서 만들어 본 것이 "프린트 봇" - 메시지 로그 프린터 입니다.

"프린트 봇"은 휴대폰과 블루투스로 연결되어, 자신이 미리 설정한 알림이 오면 종이에 출력해줍니다. 조금이나마 아날로그적인 감성을 느끼실 수도 있을겁니다.

가장 핵심이 되는 프린트 기능을 위해 열전사 프린터(thermal printer)를 사용합니다. 카드 영수증 출력해주는 프린터와 유사한데 DIY 용으로 파는게 있어서 어렵지 않게 구할 수 있습니다. 해외에서는 라즈베리파이와 연결해서 즉석 사진 프린터로 만들어 쓰기도 하고 날씨 및 각종 정보를 출력해주는 DIY에 사용하기도 합니다. 조금만 상상력을 발휘하시면 여기 소개된 프로젝트보다 훨씬 재밌는 것도 만들어 보실 수 있을겁니다.

a6

 

 

1. 준비물

 

아래 부품들을 준비하면 됩니다.

  • 아두이노 : 아두이노 레오나르도 보드를 준비합니다. 왜냐면 열전사 프린터가 Serial 통신을 사용하고 블루투스(HC-06) 모듈도 Serial 통신을 사용하기 때문입니다. 두 개의 Serial 통신을 사용해야 하는데, 이 경우는 아두이노 레오나르도 보드가 유리합니다. 아두이노 레오나르도 보드는 PC와의 USB 통신을 Atmega32u4 칩에서 처리해주기 때문에 하드웨어 시리얼(Serial)을 하나 확보할 수 있습니다. 하지만 레오나르도 보드는 사용법이 표준보드인 우노(UNO) 보드와 완전히 다르다는걸 주의하셔야 합니다. 아두이노 우노 보드도 사용할 순 있는데... 디버깅하기가 어렵습니다.
  • 블루투스 모듈(HC-06) : 휴대폰과 블루투스 연결을 위해 HC-06 모듈을 사용합니다. 기본적인 HC-06 모듈 사용법은 링크를 참고하세요.
  • 열전사 프린터 : DIY 용으로 판매되는 열전사 프린터가 필요합니다. 보통 $50~$60 정도에 구매할 수 있습니다. 자세한 사용법은 링크에 있습니다. 주의하실 점은 열전사 프린터는 열로 프린트하기 때문에 반드시 5V-2A 이상을 공급하는 어댑터가 필요하다는 점입니다. 어댑터 용량이 프린터의 속도와 품질을 결정하는데 프린터 구매시 포함되지 않는 경우가 많으니 주의.

 

 

2. 연결 방법

 

열전사 프린터부터 아두이노에 연결합니다. 열전사 프린터 상세 페이지를 참고하세요. 열전사 프린터 뒷면을 보면 전원부 3핀과 데이터 3핀이 있습니다. 전원부 핀은 어댑터에 연결하고 데이터 3핀을 아래와 같이 아두이노에 연결해주면 됩니다.

  •  프린터 ==> 아두이노 레오나르도
  • RX(노란색) ==> D3
  • TX(녹색) ==> D2
  • GND ==> GND

 

이제 블루투스만 아두이노에 연결해주면 됩니다.

  •  블루투스 ==> 아두이노 레오나르도
  • VCC ==> 5V
  • RX ==> D1
  • TX ==> D0
  • GND ==> GND

아두이노 레오나르도 보드에서는 D0, D1 에 연결된 시리얼 통신을 Serial1 클래스를 통해 사용할 수 있습니다.

 

 

3. 스케치 업로드, 앱 설치

 

열전사 프린터로 글자, 이미지, QR 코드 등을 출력하려면 라이브러리가 있어야 합니다. Adafruit 에서 열전사 프린터용으로 제작한 라이브러리가 있는데 이걸 사용하시면 됩니다. GitHub 에서 Adafruit Thermal Printer Library 를 다운로드 받아서 설치하세요.

 

아래 깃허브 링크에서 아두이노 소스코드를 다운로드 받으세요.

https://github.com/godstale/MessageLogPrinter

MessageLog.ino 파일을 열고 아두이노에 업로드 해주시면 됩니다. 프린터와 블루투스를 정확히 연결해 뒀다면 별 문제없이 진행될 겁니다. 소스코드 중 메인 loop 함수를 보면 대강의 동작 구조를 알 수 있습니다.

void loop() {
  boolean isReceived = false;
  unsigned long current_time = 0;
  
  // Receive data from remote and parse
  isReceived = receiveBluetoothData();
  
  // Update clock time
  current_time = millis();
  updateTime(current_time);
  
  // Display routine
  onDraw(current_time);
  
  // If data doesn't arrive, wait for a while to save battery
  if(!isReceived)
    delay(200);
}

먼저 블루투스 모듈을 통해 도착한 데이터가 있는지 확인하고 저장해둬야 합니다. receiveBluetoothData() 함수안에서 도착한 데이터를 파싱합니다. 휴대폰에서 전달된 데이터가 모두 도착하면 isReceived 변수에 true를 담아줍니다.

updateTime() 함수는 현재 시각을 처리하는 부분입니다. 아두이노는 현재 시각을 알 수 있는 방법이 없기 때문에 휴대폰에서 보내주는 시간 데이터를 받아 자체적으로 계산해서 사용합니다.

onDraw() 함수가 열전사 프린터를 이용해 메시지를 출력하는 함수입니다. 파싱 완료된 메시지가 있는 경우 프린터로 출력해주도록 되어 있습니다.

 

휴대폰에도 앱을 하나 설치해줘야 합니다. 앱은 주요한 메시지들을 모아서 아두이노에 보내주는 역할을 합니다. 일전에 아두이노 스마트 워치 DIY 프로젝트 하면서 제작한 RetroWatch 앱이 있는데, 이걸 그대로 사용하시면 됩니다. Google Play Store에서 RetroWatch 로 검색한 뒤 제작자가 tortuga 인 앱을 받으세요. 아이폰용 앱은 아직 없습니다;;;;;;;;;

 

 

4. 테스트

 

프린트 봇에 어댑터로 전원을 넣고, 아두이노에도 전원을 넣어줍니다. 휴대폰의 RetroWatch 앱을 실행시키고 블루투스를 활성화 하세요. 안드로이드 v4.3 이상을 지원하는 앱을 다운로드 받은 경우 우측 상단 [i] 아이콘을 눌러 Notification 수집 권한을 부여해줍니다.

FVCP0TAHRPBJRQ0.MEDIUM

우측 상단의 [눈] 모양 아이콘을 눌러 프린터 봇 블루투스를 찾아 페어링합니다. 페어링이 완료되면 연결되었다고 하단에 초록색 아이콘이 뜰겁니다.

원하는 메시지를 클릭해서 활성화를 해줍니다. 메시지가 활성화되면 이후부터는 같은 계열의 메시지는 자동으로 프린트 봇으로 보내줍니다. 바로 동작을 확인하고 싶으신 경우 메뉴키를 눌러 메시지 전송을 강제로 해주세요.

 

하드웨어적인 문제가 없다면 프린터 봇이 메시지를 찌익~ 찌익 출력해 줄겁니다.

printbot2

 

소스코드를 바꿔서 여러가지 용도로 변형해서 활용해보세요.

 

이 프로젝트는 지난 8월에 개최된 "Nabi Art Center - 2015 H.E.ART Bot 나비 해커톤"에 전시한 "모모토 프로젝트"의 일부입니다.


출처 HARD COPY WORLD (http://www.hardcopyworld.com) 

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

메이커 스토리

번호 제목 글쓴이 날짜 조회수
125 아두이노 헬박사님의 로봇팔 살리기 icon 양재동메이커 05-13 4,326
124 일반 레이저 커터 동파 사고 icon 양재동메이커 04-23 4,286
123 일반 기존 고양이 마이크로 파이썬으로 포팅 - 밀린 숙제하기 icon 양재동메이커 01-03 6,006
122 일반 휴식 icon 청계천도사 12-13 5,533
121 일반 기기를 수리한다는 것 icon 청계천도사 09-09 6,072
120 일반 수학 공부 왜 하나요? icon 청계천도사 07-20 6,774
119 아두이노 ESP32 CAM을 활용한 도깨비 자동차 Ver 3.0 icon 양재동메이커 06-12 8,103
118 라즈베리파이 Pupper 시작해서 Mini Pupper로 마무리 - 밀린 숙제하기 icon 양재동메이커 01-08 8,902
117 일반 말벌 인식 및 레이저 타격기 V 2.0 icon 양재동메이커 08-23 10,980
116 아두이노 ESP32 CAM - 도깨비 자동차 2 icon 양재동메이커 07-13 11,902
115 아두이노 ESP32 CAM - 도깨비 자동차 icon 양재동메이커 05-07 13,397
114 일반 급~한~개~발!! icon 청계천도사 04-08 12,407
113 일반 말벌 레이저 타격 테스트 모듈 icon 양재동메이커 03-10 13,535
112 아두이노 로보티즈 다이나믹 셀 MX-12W를 Arduino로 제어하기 (without 3 state buffer) +2 icon 양재동메이커 02-24 17,430
111 일반 2021 피우다 프로젝트 출품작 소개 자료집 icon HellMaker 01-12 12,952
110 일반 서보 모터 관련 여러가지 문제 icon 양재동메이커 11-19 13,788
109 라즈베리파이 Top Maker 해커톤 2021 icon 양재동메이커 08-29 13,311
108 라즈베리파이 라즈베리 파이 4 WiFi 안테나 확장 방법 icon 양재동메이커 08-24 18,948
107 아두이노 Otto Bot Bluetooth 연동하기 icon 양재동메이커 05-14 14,173
106 일반 자이로센서 roll, pitch, yaw 데이터 처리 구조 #2 icon HellMaker 03-01 14,157