Arduino(3)続・カラーLCDを接続してみる

前回はArduino UNOにaitendoの2.4インチカラーLCD「UL024TF」を接続し、表示ができることを確認しました。

UL024TFには、このほかにmicroSDカードインタフェースとタッチパネルが組み込まれています。これで1,500円とは安いですね。

さて今回は、Adafruit TFTLCD-Libraryに付属している残りのサンプル、「rotationtest」「tftbmp」「tftpaint」を動かしてみます。

1.rotationtest

rotationtestは、その名の通り画像を回転表示するテストです。
回転といっても任意の角度ではなく、90度ずつ回転するだけですが・・・。

まずは試してみましょう。
前回同様、メニューから「ファイル」→「スケッチの例」→「TFTLCD-Library-master」で「rotationtest」を選択し、「→」ボタンでコンパイルしてArduinoに書き込みます。

このプログラムは、Arduinoがシリアルポートから何か受信するごとに表示を90度回転させるようになっています。
IDE内蔵のターミナルウインドウを呼び出しましょう。
「ツール」メニューの「シリアルモニタ」を選択すると、ターミナルウインドウが表示されます。

arduino013.jpg
arduino014.jpg

このプログラムに限らず、シリアルポートはArduinoとのほとんど唯一の通信手段ですので、エラー等を確認したいときはとりあえずシリアルモニタを呼び出してみるのが良いでしょう。

rotationtestでは、シリアルモニタの「送信」ボタンを押すと(文字は何も入れる必要なし)、Arduinoから0,1,2,3という数字が送られてきて、その都度表示が回転します。

表示の内容は
「ピクセル」→「斜線」→「縦横直線」→「矩形」→「塗りつぶし矩形」→「円」→「塗りつぶし円」→「テキスト」
の順で変化します。「ピクセル」は1ピクセルだけの描画ですので、よく見ないと見つからないかもしれません。

2.tftbmp

tftbmpは、microSDカードから画像を読み出してLCDに表示するデモプログラムです。
フォトフレームの簡易版と思えば良いでしょう。

このプログラムは、microSDカードから”woof.bmp”および”miniwoof.bmp”というファイルを読み出して、それをLCDに表示します。
microSDカードを用意し、TFTLCD-Libraryの「bitmaps」フォルダ(ライブラリ\ドキュメント\Arduino\libraries\TFTLCD-Library-master\bitmaps)に入っている”woof.bmp”と”miniwoof.bmp”をmicroSDカードへコピーして、それをUL024TFのmicroSDカードホルダへセットしてください。

tftbmpを実行すると、画像が表示されます。

arduino011.jpg

正直なところ画質は悪いです。このLCDは写真の表示には向いていませんね。

3.tftpaint

tftpaintは、その名の通りタッチパネルでお絵描きをするデモです。
このプログラムは、追加のライブラリおよび若干のプログラムの修正が必要です。

まず、以下からタッチパネルのライブラリをダウンロードし、IDEのライブラリに追加します。
ダウンロードからライブラリ追加までの方法は、前回の記事で書きました。

adafruit/Touch-Screen-Library · GitHub

次に、「スケッチの例」の「TFTLCD-Library-master」からtftpaintを開きます。

そして、以下のように修正を行います。

スクロールバーが上から1/4くらいの位置、赤い箇所を修正

//   D5 connects to digital pin 38
//   D6 connects to digital pin 39
//   D7 connects to digital pin 40

#define YP A3  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin

#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

 

スクロールバーが下から1/4くらいの位置、赤い行を追加

    if (p.y < (TS_MINY-5)) { Serial.println("erase"); // press the bottom of the screen to erase tft.fillRect(0, BOXSIZE, tft.width(), tft.height()-BOXSIZE, BLACK); } // scale from 0->1023 to tft.width
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
p.x = 240-p.x;
p.y = 320-p.y;

 

以上の修正で、UL024TFのタッチパネルを使うことができます。
色を選択する以外、ほとんど何もできないお絵描きソフトではありますが、ちゃんと動きます。
画面最下部(USBジャック側)をタッチすると画面をクリアします。

arduino010.jpg

Arduino(2)カラーLCDを接続してみる

今回はArduino UNOにカラー液晶パネルを接続して、まずは表示ができることを確認してみます。

液晶パネルは、aitendoで1480円(税別)で購入できる「UL024TF」というカラーLCDシールドを使います。

arduino-012.jpg

この製品は、Arduinoに接続するためのピンヘッダが最初から基板に取り付けられています。
このような、Arduinoボードに接続できるように設計された拡張ボードは「シールド」と呼ばれています。

UL024TFは2.4インチのTFT LCDで、解像度は240×320ピクセルです。
microSDカードスロットも実装されています。
また、aitendoの商品説明では

※4線抵抗膜型タッチスクリーンが付いているが、接続が行われていないので使用できません

とありますが、少なくとも私の購入したものはタッチスクリーンを使用できました。

それでは、まずはPCをArduinoのプログラミングができる状態にしましょう。

以下のページからArduino用の開発環境(IDE)をダウンロードし、インストールします。

Arduino – Software

この記事を書いている2015年7月現在の最新版は1.6.5でした。
なお、インストール中に3回ほど、「このドライバをインストールしますか」と訊かれますが、もちろんインストールしてください。

arduino001.jpg

インストールが完了したら、USBケーブルでPCとArduinoを接続します。
IDEが正常にインストールされていれば、Arduino用のドライバが自動でインストールされるはずです。
デバイスマネージャで確認すると、Arduinoは「シリアルポート」として認識されています。

arduino001b.jpg

次にIDEを起動します。
まず最初に使用するボードの選択と、Arduinoのシリアルポートの選択が必要です。
これらは「ツール」メニューから選択できます。

arduino002.jpg
arduino003.jpg

そして、まずはLEDをチカチカさせる、通称「Lチカ」で動作確認です。
この例題は、最初からIDEに含まれています。
メニューから「ファイル」→「スケッチの例」→「01.Basics」→「Blink」を選択します。

arduino004.jpg

するとウインドウが開きますので、ウインドウ左上、「ファイル」メニューの下の丸い「→」ボタンをクリックします。
これで、あとは自動的にプログラムがコンパイルされ、Arduinoへ転送されます。
無事転送されれば、プログラムは勝手に起動し、ボード上の小さなLEDが点滅するはずです。

arduino005.jpg

普通は、このあとスイッチやセンサの読み取り、サーボモータの制御などの様々な例題にチャレンジします。
しかし、私自身はあまり興味が無いので省略します。
Arduinoで動く例題の解説は既にネット上に沢山ありますし、「Arduinoをはじめよう」といった書籍も出版されていますので、興味のある方はそちらを参照してください。

それでは、ともかくLCDをつないでみましょう。
使うのは先に書いたaitendoのLCD「UL024TF」です。

まず、このLCDを動かすには、IDEにライブラリを追加する必要があります。
ライブラリのダウンロード先は、

adafruit/TFTLCD-Library · GitHub

adafruit/Adafruit-GFX-Library · GitHub

の2つです。

いずれも、ページの右側の「Download Zip」ボタンでダウンロードします。

arduino006.jpg

ライブラリを追加するには、IDEの「スケッチ」→「Include Library」→「Add ZIP Library…」でダウンロードしたZIPファイルを指定します。
すると、ZIPファイルは展開されて「ライブラリ\ドキュメント\Arduino\Libraries」フォルダへコピーされます。

arduino007b.jpg

二つのライブラリを追加すると、IDEの「スケッチの例」メニューの中に新しい項目「TFTLCD-Library-master」が追加されます。
これでライブラリの追加は完了です。

arduino007.jpg

なお、ライブラリを手動で追加する場合も、フォルダを「ライブラリ\ドキュメント\Arduino\Libraries」へコピーすればよいようです。

Arduino – Libraries

次に、LCDをArduinoに取り付けます。
これは単にピン位置を合わせて押し込むだけです。

arduino008.jpg

きちんと取り付けられたら、USBポートでPCと接続します。

このとき、LCDのバックライトの電源が入るはずですが、何の変化も起こらなければ接触不良の可能性があります。
実は私の入手したものも、若干の接触不良箇所があるようで、パネルを指で押すと接続できたりできなかったりするという現象がありました。
テストするだけなら問題ないのでそのまま使っていますが、値段なりの品質ということかもしれません。

Arduinoが接続できたら、先ほど説明した「スケッチの例」→「TFTLCD-Library-master」から、「graphicstest」を選択してください。
そして、「→」ボタンでコンパイルしてArduinoへ転送します。

これで、LCD上でグラフィックスのデモが表示されるはずです。
(下のビデオは、同じデモを別のLCDモジュールで動かしていますが、UL024TFでも動作は同じです。)

Arduino(1)ArduinoとAVR

このところ、プチコンにもちょっと飽きてきましたので、唐突ですがこれからしばらく、Arduino(アルドゥイーノ)をいじってみることにします。

Arduinoは、元来は教育用のマイコンボードです。
様々なバリエーションがありますが、最もポピュラーな「Arduino UNO」は名刺程度の大きさで、USBでPCに接続すれば、PC側の開発ツールでArduinoボードに接続したセンサなどを制御するプログラムを作成できます。

価格も、正規品で3000円前後と、比較的入手しやすくなっています。
「UNO」とLEDやスイッチ、センサ、抵抗器など基本的なパーツをセットにした「Arduinoをはじめようキット」を買えば、センサの値を読み取ったりLEDを点滅させたりといった、プチコンとは一味違うプログラミングを始められます。
(ちなみにUNOはイタリア語で「1」、Arduinoはイタリアの製品です。)

arduino-uno.jpg

…という感じで持ち上げておきながら、実はこれまで私は、Arduinoにさほど関心を持っていませんでした。

Arduinoの心臓部はATMEL社のAVRという8bit CPUです。
上の写真では右下に写っている一番大きなICがAVRです。
AVRはフラッシュメモリ、SRAM、EEPROMとADコンバータやタイマなどを内蔵しており、適切なツール(プログラマとかライタと言います)を使ってプログラムを内蔵フラッシュへ書き込めば、最小限の外付け部品で、動くシステムを作成することができます。

Arduinoの登場以前から、AVRはPICと並んで、ホビイストの間では非常にポピュラーなマイコンでした。価格は100円~200円と安価で、DOS上で動作するCコンパイラなどの開発環境がATMELから配布されており、PCのパラレルポートやシリアルポートに簡単な回路を付加すればコンパイルしたプログラムをAVRに書き込むことができました。

以下のサイトは当時お世話になっていたサイトで、AVRのプログラマの製作方法や様々なライブラリなどが数多く紹介されています。

ELM – Atmel AVRについて

AVRライタの製作 (4種)

当初、私にはArduinoは学生向けの授業に使うような教育「専用」のボードに見えていました。
実際、ArduinoでできることはAVRでできることそのものであり、Arduinoで再度AVRを学習しようという気にはなりませんでした。

ところが、Arduinoの登場から数年経った頃から、ちょうど中国が世界の秋葉原として多様な電子部品を供給しはじめたこともあり、Arduino用の様々なパーツが安価に流通し始めました。
同時に「Arduino用のソフトウェア」もパーツと合わせて配布されるようになりました。

その結果、Arduinoは単なる教育用マイコンボードから、かつてのDOS/V PCのような「オープンなハードウェア規格」へと変わり、ハード・ソフトのパーツを組み合わせて手軽にプロトタイプを作成することができるようになりました。

例えば3Dプリンタの制御エンジンなども、Arduinoを使って開発している人達がいます。
また、Googleが発表した、Androidの周辺機器をArduinoで開発できる「Android Open Accessory Development Kit」も大きな話題となりました。

私自身は、昨年の夏ごろ、Arduino用の様々な「フルカラーのLCD」が1000~2000円程度で入手できるようになっているのに気付き、Arduinoへの評価が変化しました。

昔、AVRを使っていたころは、カラーLCDは高値の花でした。
価格自体も数千円はするものでしたし、CPUとの結線、バックライト用電源の準備、制御ソフトウェアの作成、描画ルーチンの作成、といったハードルを一つ一つ超える必要がありました。
私も、簡単に使えるキャラクタ液晶モジュールの利用で済ませていました。

その憧れのカラー液晶が安価かつ簡単に使えるようになったのを知り、ちょっと手を出してみようという気になったのです。

というわけで、次の記事では早速、ArduinoにカラーLCDを接続してみます。