2014.11.04
サーマルプリンタを使う
今回作ったもの
C#でコマンドラインから使用できるコンソールアプリを作りました。
引数は3つ。
「COMポート、出力タイプ、文字列」です。
出力タイプは、text、img、QRです。それぞれの指定方法は下記のようになります。
textのとき:
SerialPrinter.exe COM30 text "QRコードを読み取って画像をダウンロードしてね"
imgのとき:
SerialPrinter.exe COM30 img c:\temp\logo.png
QRのとき:
SerialPrinter.exe COM30 QR http://www.viva-mambo.co.jp/
完成製品
完成品は、オンラインショップで販売中です。
電子工作が苦手な方は下記のオンラインショップをご利用ください。
感熱紙プリンター 17,000円
http://vivamambo.thebase.in/items/886428
プロジェクト
これだとどんなアプリからでも呼べるしバックグラウンドで実行できるのでいいですよね!
プロジェクト一式を置きました!下記でみてみてね!
https://github.com/SIHO/SerialPrinterTest
用意するもの
サーマルプリンター
http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4EWP
FT232RL USBシリアル変換モジュール
http://akizukidenshi.com/catalog/g/gK-01977/
ミニB端子USBケーブル
http://akizukidenshi.com/catalog/g/gC-07606/
ミニブレッドボード BB-601(白)
http://akizukidenshi.com/catalog/g/gP-05155/
2.1mm標準DCジャック 中継用 MJ-077N
http://akizukidenshi.com/catalog/g/gC-06343/
5V3Aアダプター
http://akizukidenshi.com/catalog/g/gM-08311/
※アダプターはPCにつなげて使うなら5V3A出力のものでOK。マイコン部分への給電はPCからできるからね♪ でも、PCにつなげるのではなく単体で利用するなら、9V1.5Aのアダプターが必要になります。
ただ、9Vのときは、最適なMaxHeating、HeatingTime、Heating Interval の設定値が変わりますので、ご注意ください。
9V1.5Aアダプター
http://www.androidshop-jp.com/peripherals/ac/ac9v15aandroid-a8.html
※「Androidタブレット用」ってあるけど使えるのかな?他に見つからなかったので参考程度に思ってください。
下記の画像は5v3Aアダプターを使用して、MaxHeating 10、HeatingTime 100、Heating Interval 10で出力したものです。くっきりはっきり♪
「部品を買って半田付けして自作する」
「ショップから製品を購入する」
感熱紙プリンタはうえのいずれかの方法で用意可能ですし、前述のプロジェクトに含まれるexeを使うことでプリントも出来ますので、下記の記事は興味のある方だけご覧ください。
--------下記は、参考-----------------------
Arduinoから操作する
結論としてArduinoからQRコードプリントというか画像の出力は1つまでは正常に出来ますが、それ以上となるとArduinoのメモリ容量がボトルネックになります。
メモリギリギリまで使ってコンパイルすると、実行にメモリを使用する時にメモリ不足になって、記録していた画像のカラーコードが欠損し、正常に印刷できなくなります。
また、このサーマルプリンタは2バイト文字に対応していません。
なので、日本語を出力するには画像に変換する必要があります。
ここで疑問を持つ方がいるかもしれません。SparkFunからQRコードを印刷するライブラリが提供されているからです。ただ、私が試した限りではそれらしい感じで印刷できるものの、QRコードリーダーでは全く認識されません。ためしにWebサービスで同じ文字列のQRコードを作成してみるとドットの位置が違うのです。かなりザンネン。
SparkFun Thermal_Printerライブラリ
https://github.com/sparkfun/Thermal_Printer
画像の出力には、adafruitのライブラリを使用しました。
結論としては、Arduino では、「100ピクセル角以下の画像をひとつだけ印刷&英数字のみ印刷」ならば問題なく使用できると思います。
adafruitのライブラリ
https://github.com/adafruit/Adafruit-Thermal-Printer-Library
これ、QRコードは200*200ピクセルの画像、その上のは95*95ピクセルの画像。2点の画像ならこのくらいが限界っぽい。
今回のプログラム作成で参考にしたサイト
「熱転写プリンター」
http://blogs.yahoo.co.jp/carcon999/37118126.html
こちらの記事で「シリアル変換モジュール」を使って印刷できることを知りました。
さらに、C#での漢字印字アプリのプロジェクトがダウンロードできるようになっていたのでこのプロジェクトを参考にしつつ、今回のコンソールアプリに仕上げました。
コンソールアプリにすれば起動時に引数をつけることでアプリを表示することなくプリントを実行できるので!
Tutorial: Arduino and a Thermal Printer
http://tronixstuff.com/2011/07/08/tutorial-arduino-and-a-thermal-printer//
こちらの記事にはサーマルプリンターの機能を紹介する動画があるので、だいたいどんなことか可能かがわかりました。
参考にしたパラメーター
サーマルプリンターって、かすれるんですよ。
デフォルトで出力すると印字がかすれちゃうの。
安心な焼きこみを設定するとこんどはにじんちゃうの。
だから、適度な設定値が必要なんですよ。
それらは供給電力によって違うのです!下記を参考にしてね。
https://github.com/sparkfun/Thermal_Printer/blob/master/Firmware/ThermalPrinter_Example.ino
9V adapter: Heat time = 255, heat interval = 255 5V adapter: Heat time = 255, heat interval = 5
QRコードを作れるライブラリ「DotNetBarcode」
http://www.vector.co.jp/soft/win95/writing/se408449.html
なんと、このライブラリは「配布自由」&「アプリに組み込んでの大量配布や業務用に用いることも自由」という素晴らしいものです。
ありがたく使用させていただきました。
使い方もとっても簡単でした。