オラ、ドラゴンレーダーを作るぞ(13)

***13.1 最終構造の決定

先日購入したケースをパートナーに見せびらかしていたら、丸い窓ではなく後ろの四角い窓を正面にしたほうがいいのではないかと言われました。

こっちが丸窓
こっちが丸窓
これが四角い窓。購入したLCD(WBX280V009)にぴったしサイズ。
これが四角い窓。購入したLCD(WBX280V009)にぴったしサイズ。

うーん。確かに四角いほうがLCDを無駄なく使えるんだけどなあ。
でもドラゴンレーダーのあの形が頭にあるものだから、やっぱり丸窓がいいんだよなあ。

「丸い窓から基板とか見えているとかっこいいじゃない。」
な、なるほど。
確かにこの丸いところからArduino Duemilanoveの例の青基板が見えていたら、知らない人が見たら感心してくれるかも・・・
ということで、丸窓ではなく四角い窓を正面にすることにしました。

完成イメージ
完成イメージ


一度そう決めてしまうと、LCDとArduinoの位置が確定してしまったので、いっそのこと先に配線周りのごちゃごちゃを何とかしてしまおう!ということにしました。
ブレッドボードだと片付けるたびにケーブルが抜けて、取り回しにくいんですよね~。

***13.2 必要パーツの購入

というわけで、配線をきれいにするためのパーツを購入しました。

|~商品名|~説明|
|ピンヘッダ(オスL型) 2×40 (80P)|2列になっているL字形のピンヘッダーです。LCDからユニバーサル基盤への接続に使います。|
|ピンヘッダ(オスL型) 1×40 (40P)|こっちはArduinoからユニバーサル基盤へ接続するときに使うもの。|
|シングルピンソケット(低メス) 1×14 (14P)|これが失敗・・・「低メス」の文字を見落としていましたorz
通常のピンソケットと違って一個ずつ切り離せて便利だなあと思っていたら、深さが浅いので普通のピンヘッダーだとすぐ抜けてしまう。|
|ユニバーサル基盤 47 x 72mm 2.54mmピッチ ICB-288|これだけ近所のパーツショップで買ってきました。|

L字型のピンヘッダーの存在をたまたま知ったのですが、これがあればArduinoの勇姿を基板で隠すことなく見せつけられそうだ!と思い購入しました。
それで、秋月電子さんから即効で送られてきたので、居ても立ってもいられずにハンダ作業開始!
完成イメージは次のとおりです。

ある意味この図が設計書
ある意味この図が設計書



要するに、LCDとArduinoを背中合わせにして、それぞれのピンソケットをL字ピンヘッダーでつないでしまおうという作戦です。
完全にハンダと銅線でつなげてしまうとArduinoとLCDが再利用できないので、取り外しやすくかつコンパクトにまとまった、素晴らしい構成なのだっ!!(超自画自賛モード)

***13.3 いざハンダゴテ

要となるユニバーサル基板と短く切ったビニール線との死闘が始まったわけですが、LCDとArduinoを背中合わせにしたせいか、8ピンの順番が逆になってしまい、さらにL字ソケットをつなげているため何がどうつながらないといけないのか大混乱してしまいました。

ようやく出来上がったのがこれ↓

ジャーン
ジャーン

これ動きそうにないだろ・・・だって??
ふふっ、あんたいい勘してるぜ・・・

LCDにつなげるまでもなく、テスターで導通確認をしたところ12本中4本しかつながっていませんでした(T T)。
つながっていたかと思ったらショートしている(つながってはいけないところが接触してしまっている)箇所もあったりして・・・

半日かけてこの有様ですが、買ったはいいけど使い方が分からなかったテスターの使い方がわかったので、それで良しとしよう。

デジタルマルチメータ MAS-830L マニュアルレンジ
デジタルマルチメータ MAS-830L マニュアルレンジ

以前購入したのがこのテスターです(デジタルマルチメータ MAS-830L マニュアルレンジ)。
アナログのテスターが使いやすいと本で見ていたのですが、購入時にあいにく品切れだったため、安かったこいつを買いました(1,000円)。
届いてみたら超かわいい!
真っ黄色のラバーケースに包まれていて、これだけでおもちゃみたいです。案の定2歳の息子がおもちゃ替わりにしていたりします。

上の写真のレバー位置が導通確認のポジションで、この状態でつながっているかどうか確認したい部分の両端をテスターに接続した赤/青の測定リードでつつくと、導通時には「ピー」という音がします(画面には抵抗値も表示されます)。
他のポジションは今のところ理解していませんが、この導通ポジションに関しては完全に理解しましたよ!

さて作り直しなわけですが、ピンソケット(黒い穴が開いているやつ)はべったりハンダ付けしてしまったし、ビニール線も扱いにくいし、一からつくり直そうと近所のパーツショップに自転車を飛ばします。
・・・と付いてみたらなぜか休み∑(゜ε゜!!坂道きついのに・・・
仕方ないのでうちに帰って、失敗作からハンダを吸い取り線で一個ずつ吸い取って再チャレンジすることにしました。

基板作成ver.2。LCD側です。
基板作成ver.2。LCD側です。

・・・どう思われるかはわかりませんが、自分の中では最高最善の出来です。
作り上げたあとはうっとりと眺めこんでしまいました。

こっちがArduino接続側
こっちがArduino接続側

基板のLCD側にピン接続するケーブルを這わせ、Arduino側に3.3V(プラス極。赤いリード線につながっているの)とGND(マイナス極。基板上の錫メッキ線)を這わせました。
ああ、うっとり・・・

自分で基板上のホールの穴の数を数えたり、糸ノコで基板を小さく加工したり、ホールの位置とピンヘッダーの位置を検討したりと、初めて機械いじりらしいことができて、かつ完成できたことがこんなに嬉しいとは・・・

LCDにつなげたところ
LCDにつなげたところ

さらにArduinoにつなげたところ
さらにArduinoにつなげたところ



出来上がりだけ見ると「ふーん」という感じかもしれませんが、私自身からみると奇跡の構造です。

そしてケースに入れたところ・・・!
そしてケースに入れたところ・・・!

パートナーのイメージ通り、後ろの丸窓からArduinoのかわいい姿が。
パートナーのイメージ通り、後ろの丸窓からArduinoのかわいい姿が。


この後、接触不良を直したり、つけ忘れていたプルダウン用の抵抗を付けたりしたのですが、概ねスムーズに作業が完了しました。
それもこれも全てテスターのおかげです。
基盤づくりをこれから始める人は、絶対にテスターが必須ですので、ハンダごてと一緒に買い揃えましょう!

そしてこれが、実際に動かしたところです。

ケースに全部収まって、チャックの間からUSBケーブルをちょろっと出すことができるので、すごく取り回しがいいです。
出来たぞー!!

オラ、ドラゴンレーダーを作るぞ(12)

*** 12.1 LCDでの色表現

LCDを自由自在(?)に使いこなせることが分かったので、早速画面のデザインをしようと思ったのですが、LCDでの色表現ってHTMLでいう「#FFFFFF(白色)」みたいな表記ではないことに改めて気づきました。

FFFFFFはすなわち24ビットカラーですが、ILI9325などのLCDで色を指定する場合は16bitで指定する必要があります。
白色は0xffffですし、青色は0x001fといった感じです。

そういう色見本みたいのがどこかに転がってるんだろうと、軽~く考えて検索してみたのですが、なぜか見つからない!?
拾ったライブラリなどでは「#define ORANGE 0xFC00」みたいに定数定義していたりします。

それじゃあということで、色見本ページを作りました。
カラーピッカーも作りましたので、欲しい色の16bitカラーが確認できると思います。

16bit Color Picker & Color List

・・・それとも、本当はみんな違う方法で色指定しているんでしょうか??
う~ん、不明だ。

オラ、ドラゴンレーダーを作るぞ(11)

*** 11.1 タッチパネルをどうするか

LCD操作の目処が立ったので、あとはGPSとコンパスモジュール・・・と思っていたのですが、そういえば今回買ったLCDってタッチパネルが付いてるんですよね。
せっかく付いているんだから試してみたい!

・・・と思ったのですが、Arduinoのピン数が足りなくなりそう。

LCD接続のためにすでに12本のピンが使用済みで、残るピン数は8本。
改めてタッチパネルの使用ピン数を確認してみたところ、なんと5本(x1, x2, y1, y2, タッチ状態チェック)。
ということは、LCDとタッチパネルをつなげただけで17本のピンを消費してしまい、残るピンはたったの3本だけになってしまうぅ。。

ドラゴンレーダーには、少なくともコンパスモジュールとGPSモジュールが必要なのですが、これらには何本必要なんだろ。

まずコンパスモジュールはこれ、HMC6352搭載デジタルコンパスモジュール
マニュアルによると・・・2本必要。

GPSモジュールはこれ、SparkFun Electronicsの32 Channel LS20031 GPS 5Hz Receiver
これも2本必要だと・・

てことは、ピンが1本足りない!!
どれかいらなそうなの無いかなあと本気で探してみましたが、もちろんそんな無駄ピンは使ってない。

*** 11.2 タッチパネル諦めてボタンにするか、もしくは・・・

そもそもタッチパネルを何に使うのかといいますと、ドラゴンレーダーのユーザー機能としては、縮尺を変えることができないといけないし、管理機能(ドラゴンボール=お宝の位置座標を登録する)にも色々画面操作できないといけないので、そういったユーザーインターフェースで使おうと思っていたのです。

これが使えないとなると、ボタン?みたいのでやるしか無いかあ。。
まあボタンも機械っぽくていいかなあ。

それとも、3軸加速度センサーをつけて、Wiiみたいなインターフェースを実現するとか!
う~ん・・技術力がついていけなさそうだ・・
でも、傾けるとカーソルが動くようなインターフェースも面白いかもなあ・・・。

とにかく!残る8本-GPSの2本-コンパスの2本=残る4本でユーザーインターフェースをつくんないと。
ああ・・・タッチパネルが4本でよかったらなあ・・・(←しつこい)

オラ、ドラゴンレーダーを作るぞ(10)

*** 10.1 画像も表示できたよ

前回の記事からさらに一ヶ月経ってしまいました。
その間何をしていたかと言いますと、来る10月31日にサービス終了してしまうBloglinesの代替サービスを作っていました。
それについてはまた後ほどアナウンスするとして、ようやくその代替サービスの開発が一段落したので、まだドラゴンレーダー作りを再開です。

前回、ようやくLCDとArduinoがつながったところまで進めていたので、もう少しLCDの使い込みをすることにします。
ここから先はソフトウェアの領域なので、ハンダゴテを握らなくて済むのが楽だー。

画像出力のサンプルコードを以前拾っていたので、それを動かしてみました。

楽勝楽勝♪
これまでのハードウェアで難儀したのが嘘のように、あっさり動作しました。

*** 10.2 描画速度が3倍に!

画像の出力は出来ましたが、何だか描画が遅いかなあ・・・
テケテケ~と表示されるのは、作った本人は楽しいものですが、人が見たら遅いと思うだろうなあ。

サンプルコードとは別のライブラリコードを見ていたところ、何だか電子工作室 – 2.4/2.8インチ QVGA液晶表示器の制御で公開されているライブラリコードのほうがすっきり書かれていることに気がつきました。

ということで、電子工作室のライブラリを頑張って移植してみました!

例えば↓これ。

変更前
void LCD_Writ_Bus(char VH,char VL)  
{  
  unsigned char i,temp,data;
  data=VH;
  for(i=0;i<8;i++)   {     temp=(data&0x01);     if(temp)       digitalWrite(i,HIGH);     else       digitalWrite(i,LOW);     data=data>>1;
  }
  digitalWrite(LCD_WR,LOW);
  digitalWrite(LCD_WR,HIGH);
  data=VL;
  for(i=0;i<8;i++)   {     temp=(data&0x01);     if(temp)       digitalWrite(i,HIGH);     else       digitalWrite(i,LOW);     data=data>>1;
  }
  digitalWrite(LCD_WR,LOW);
  digitalWrite(LCD_WR,HIGH);
}

変更後。こんなにすっきり
void LCD_Write_Bus(char VH,char VL)
{
    // 上位バイト出力
    PORTD = (VH & 0xFF);
    digitalWrite(LCD_WR,LOW);
    digitalWrite(LCD_WR,HIGH);

    // 下位バイト出力
    PORTD = (VL & 0xFF);
    digitalWrite(LCD_WR,LOW);
    digitalWrite(LCD_WR,HIGH);
}

データの出力を行うD0~D7の8ピンに対して、元のソースでは何度もdigitalWrite関数を呼び出していたのですが、新コードではPORTD(Arduinoのポート操作用のキーワード)を使ってすっきり簡潔になりました。

この変更により、ものすごく描画速度が早くなった!
これぞ8bitアクセスの醍醐味!(?)

この移植作業を行ったおかげで、Arduinoのコーディング方法がだいぶ理解できてきた~。

*** 10.3 文字も表示できた!

移植した電子工作室のライブラリには文字表示の関数も用意されていたので、それを使って文字表示できることを確認しました。

↑ちょっと見えづらいですが、カタカナや一部の漢字もきれいに表示出来ています。
ありがたや~

それと、改めてLCD(ILI9325)のリファレンスを読み直していると、縦表示と横表示の切り替えができることがわかりました。
今回作るドラゴンレーダーでは横表示の方が都合が良いので、横表示に変えてみました。

変更したのはLCD_Init関数の中の下記の箇所です。

LCD_Out(0x0003, 0x1028); → LCD_Out(0x0003, 0x1018);

リファレンスに詳しく(英語で)書かれていますので、必要な方はリファレンスのp.55~56(8.2.5. LCD Driving Wave Control (R02h)をご参照ください。

*** 10.4 ケース発見!

そして、今日一番の出来事ですが、ドラゴンレーダーを収めるのにぴったりなケースをGeogesで見つけてしまいました!

ドラゴンレーダー用のケース。本当は写真入れです。
ドラゴンレーダー用のケース。本当は写真入れです。

以前から「惜しい」ケースをGeogesで見つけていたのですが、こんなにぴったりのが売られているなんて・・・・
写真ケースにはむしろ微妙なデザインですが(おい)、ドラゴンレーダーを収めるには本当にサイズぴったりで、見つけたときは自分のために作ってくれたとしか思えませんでした。
ありがとうGeoges!!

周りがチャックになっていて、ぱかっと開く。しかも中はふわふわ。
周りがチャックになっていて、ぱかっと開く。しかも中はふわふわ。
丸い穴部分が少し大きいので、ボール紙でマスキング。改良の余地あり。
丸い穴部分が少し大きいので、ボール紙でマスキング。改良の余地あり。
後ろにも窓が付いていて、これがなんとILI9325と超ぴったり!もはやILI9325のために作ったとしか思えない。
後ろにも窓が付いていて、これがなんとILI9325と超ぴったり!もはやILI9325のために作ったとしか思えない。

今は配線をブレッドボードで行っているのでごちゃごちゃしていますが、ユニバーサル基盤できれいに作り直したら早速はめてみます。
楽しみだ~

*** 10.5 本日までの報告書

本日版の最終ソースです
移植した電子工作室のライブラリも含まれていますので、良かったら使ってください。

あと、PORTDを使うために少し配線も見直しました。

|~LCD側|~Arduino側|
|DB10|D0|
|DB11|D1|
|DB12|D2|
|DB13|D3|
|DB14|D4|
|DB15|D5|
|DB16|D6|
|DB17|D7|
|RS|D8|
|WR|D9|
|CS|D10|
|RESET|D11|
|LEDA、VCC(3箇所)、RD|3V3|
|DB0~DB7、LEDK1~LEDK4、GND(2箇所)|GND(1kΩの抵抗を一つ入れて)|


オラ、ドラゴンレーダーを作るぞ(9)

*** 9.1 LCDが動かない!ピクリともしない!

前回のエントリーからなんと1ヶ月くらい経ってしまいました。
その間帰省をしていたり、仕事が忙しくなったということもあるのですが、なんといってもLCDが動かないのでブログも書きようがないという状況です。

この1ヶ月間何をしていたかというと、とにかく知識をつけるために電子工作の本を読みまくっていました。
図書館に行って理解できそうな本を取り上げてはざっと読んでみて、ためになりそうな本は借りてきて・・・を繰り返し、その都度分かったことをドラゴンレーダーに適用しては失敗してという感じです。

その中でも一番勉強になったのは次の本です。

★ 作る・できる/基礎入門 電子工作の素 [単行本]

各ページの横に電子工作についての基礎知識がふんだんに書かれており、これまでどの本を読んでも書いていなかった電子工作の「常識」が少しずつ理解できるようになってきました。
もう図書館に返却してしまいましたが、この本は自分でも一冊買おうと思っています。

↑に挙げた本やその他の本で知った、今回のLCDトラブルに関係ありそうな知識として、次のようなものがありました。

|GNDとVCC|間違いなく笑われそうですが、LCDにGNDとVCCをつなげていませんでした。だってどこにも書いてないんだもん・・・。
GNDとは電源のマイナス側、VCCとは電源のプラス側のことで、あまりにも常識なので回路図などでは省略されることもあるそうです。
今回購入したLCDにもVCCとGNDというソケットがあったのですが、これまで見てきたサンプルでは触れられていなかったので、全く無視していました。
電源なしでは何も動きませんよね(笑)|
|プルアップ・プルダウン|これはWebで得た知識ですが(プルアップ・プルダウンについて)、単純にVCCとGNDに線をつなぐだけだと電流の向きが不安定になるそうで、GND側に抵抗を入れるのだそうです(これはプルダウン)。プルアップはその逆なんだそうですが、いまいち理解できていません。。
最初はこのプルダウンの抵抗を入れていなかったのですが、GND側に抵抗を入れるようにしました。|
|電圧のスレッショルド|パーツには有効な電圧の範囲があって、その範囲を外れると正しく動かないのだそう。|
|間違った電圧をつなげたとき|アンプ関係の話で読んだ知識ですが、高すぎる電圧をかけるとパーツから「ブーン」という唸りがすることがあるそうです。|

以上の知識を踏まえて色々と模索した結果、前回Arduinoを3.3V化したつもりが、どうもこれが上手くいっていないのではないかと。
購入したLCDの動作電圧は「2.6~3.5V」となっており、Arduino Duemilanoveそのままの5Vでは動いてくれません。

LCDと悪戦苦闘しているときにLCDから突然「ブーン」という小さな唸り音が聞こえてきたことがありました。
何をやってもうんともすんとも言ってくれなかったので、ちょっとでも反応があって喜んでいたのですが(バカ)、後から得た知識からするとどうも5Vを流してしまって規定の動作電圧を超えた電圧を流していたのではないかと思われます。

その後妥協の電子工作:4線式抵抗膜方式タッチパネル付きLCDパネルの試用に書かれてあった

ちなみに「WBX280V009」でも同様の方法で8ビット化できますが、この場合は、11番端子をVCC(6番)に接続しないと8ビットモードでは動作しません。

妥協の電子工作に書かれていた8bit化のための処置
妥協の電子工作に書かれていた8bit化のための処置


を行い、プルダウン抵抗を取り付けた後、3.3VにしたときだけArduino本体についているLEDが点滅しなくなったことに気がつきました。
5Vに設定したときだけLEDが点滅するので、3.3V化に失敗しているのかなと。

前回行ったのは次の写真の作業。

だめだめ3.3V化
だめだめ3.3V化


それで今回行ったのはパターンカットのやり直しと(ちゃんと切れていなかったようなので、もう一回やり直してみたら、明らかに線が残っていた・・・)、次の写真の箇所のはんだ付け。
一つ前の写真で「ここはどこともつながっていない」と書かれているところ。

三端子レギュレータの「IN」とおぼしき場所をつなげた
3端子レギュレータの「IN」とおぼしき場所をつなげた

もともと三端子レギュレータの「OUT」しかつなげてなかったので、電流が流れるはずがない。。とは思っていたものの、どう見てもこの場所は無関係な出っ張りだろうと思い、無視していました。
反対側の「IN」とつながっているのかなあというのが今の理解。

*** 9.2 LCDの現状

たった今さっき三端子レギュレータのハンダ付けを行ったところで、物は試しとPCとUSB接続したところ、なっなんと、LCDが光った!!光ったよ~っっっ!!!

LCDとごちゃごちゃ配線
LCDとごちゃごちゃ配線

LCD側についていた「LEDA」というソケットとArduinoの5Vをつなげていたのですが、「LEDK1」~「LEDK4」をGNDにつなげるようにしたところ、突然LCDが真っ白く輝いてくれました!!!
ふぎゃーーっっ

LCDもArduinoも壊れていなかったんだ~。
心底ほっとしましたよ!

*** 9.3 ・・・と思ったら、今LCDが動いた!色が出た!!

ここまでブログを書いてきてあれっと思ったのですが、なぜかLEDAを5Vにつなげていました。
なんでだっけと思いだしていたところ、ITDB02-2.4 8Bit Mode Demoに書かれている接続方法を真似たことを思い出しました。

それでもう一度このページを見なおしたところ、なんと!LEDAは3.3Vって書いてあるぞ?色々やっているうちに接続を間違えてしまっていたようです。
でも動いていたしなあと思いながらも、LEDAを3.3Vにつなげ直したところ、さっきよりも明るさが減ったような感じ・・・
と見ていたら、夢にまで見た綺麗なブルーが我がLCDに写っているではありませんか!
ま、マジですか?!

勢いでYoutubeに動画をアップしてしまった。

一番の難関をやっとこさ越えたぞ~~~~~っっっっっ!!!

*** 9.4 ここまでのまとめ!

ということで、いったん現在のドラゴンレーダーの配線についてまとめて置きます。

|~LCD側|~Arduino側|
|RD|D1|
|DB12|D2|
|DB13|D3|
|DB14|D4|
|DB15|D5|
|DB16|D6|
|DB17|D7|
|RS|D8|
|WR|D9|
|CS|D10|
|RESET|D11|
|DB10|D12|
|DB11|D13|
|LEDA、VCC(3箇所)|3V3|
|DB0~DB7、LEDK1~LEDK4、GND(2箇所)|GND(1kΩの抵抗を一つ入れて)|

それでこっちがスケッチ(Arduinoのソース)
あちこちのサンプルソースをツギハギしているので、元ソースがどこだったのか思い出せませんが・・・

*** 9.5 今日までの報告書

ブックマークしたページ

|~タイトル|~説明|
|妥協の電子工作 – 4線式抵抗膜方式タッチパネル付きLCDパネルの試用|数少ないWBX280V009の情報でした。ありがとうございました!!|
|電子工作室|ここの2.4/2.8インチ QVGA液晶表示器の制御というページで、「QVGA液晶表示器用ライブラリ」というライブラリが公開されており、大いに参考にさせていただきました。|
|ITDB02-2.4 8Bit Mode Demo|このページを見て、ArduinoとLCDの接続にはVCCとGNDの接続が必要なことを知りました。|
|プルアップ、プルダウン|分かりやすく説明されたページです。|

次は文字表示だ!

オラ、ドラゴンレーダーを作るぞ(8)

*** 8.1 Arduino Duemilanoveの3.3V化

例によってワタシ、ハードウェアワカリマセン状態に変わりはないので、3.3V化改造に書かれている手順の通りに進めました。

すごく分かりやすく書かれているのですが、あちらこちらで理解できない説明があるんですよね・・・
自分なりに読み解いて、こんな感じでつなげてみました。

!注意!まだこの組み立てで動いていません!良い子は真似しないでください!
!注意!まだこの組み立てで動いていません!良い子は真似しないでください!


あと、表面のパターンカットも自信ないのですが、ググってみたところカッターナイフやマイナスのドライバーで傷をつけるということなので、そのようにしてみました。

分かりにくいけど、パターンカットした後。違うところまで傷ついているような・・・
分かりにくいけど、パターンカットした後。違うところまで傷ついているような・・・


あと、ピンヘッダそのものは購入していたのですが、2つのピンヘッダをつなげるコードを買っていない!
っていうか、このコードなんていう名前なの?(T T)
ピンソケットが両側にくっついているような感じなんだけど・・・

そういえば、LCDのピンソケットで半分にぶった切った残りがあるから、それをジャンパワイヤの先にくっつけちゃえ。
我ながらいい思い付きだと思ったのですが、ピンソケットをニッパーできるのはかなり無理があり、どんどん駄目パーツが増えていく・・・

ピンソケットの亡骸。ほんとごめんなさい。
ピンソケットの亡骸。ほんとごめんなさい。


とにもかくにも、やっと3.3V化が完了したぞ~。

パターンカットが一番びびりました。後戻りできないから・・・
パターンカットが一番びびりました。後戻りできないから・・・


*** 8.2 配線してみたけど・・・

Arduino Forum › Software › Development › Arduino control the 2.4″ TFT LCDを参考に、ArduinoとLCDをつなげていきます。
が、購入したLCDと微妙に違うので、なんか番号が違うんだよなあ。。

とりあえずこんな感じでつなげてみました。

|Arduino Duemilanove側|WBX280V009-PCB(ILI9325)側|
|デジタル0|DB10|
|デジタル1|DB11|
|デジタル2|DB12|
|デジタル3|DB13|
|デジタル4|DB14|
|デジタル5|DB15|
|デジタル6|DB16|
|デジタル7|DB17|
|デジタル8|RS|
|デジタル9|WR|
|デジタル10|CS|
|デジタル11|RESET|
|GND|DB0~7をブレッドボード経由で|

そして、USBでPCにつなげて、itdb02のサンプルコードを流し込む!!
一発で動くといいなあ~♪
(そんなに甘くはない・・・)

これがサンプルコードのスケッチ。

#include <ITDB02.h>
 
ITDB02 lcd(0,1,2,3,4,5,6,7,8,9,10,11);
 
void setup()
{
  lcd.Initial();
  lcd.CleanLCD();
}
 
void loop()
{
  lcd.Setcolor(0x00,0xffff);
  lcd.Dispshowstr(80,300,"iteadstudio.com");
}

どきどきしながら「アップロード」ボタンを押す!
ってこんな無造作にアップしていいものなのかもよく分からない!

いつものようにTXとRXのLCDがテケテケと点滅し、そして・・・あれ、TXだけが延々点滅しているぞ・・・
よく分からないけど、いったんUSBを外し、うーんどうしよう。

*** 8.3 問題の切り分け

いっぺんにLCDの8bit化とArduinoの3.3V化をやったので、原因箇所とおぼしきものはすごく多い。
とりあえず大まかに切り分けるとこんなところでしょうか。

  • LCDの8bit化のチップ抵抗付け替えをミスった
  • Arduinoの3.3V化の手順に誤りがある(配線方法の間違い)
  • Arduinoの3.3V化の作業に誤りがあった(ハンダ付けがへた)
  • ArduinoとLCDの配線に誤りがある
  • LCDが壊れている。または自分が壊した。
  • Arduinoを壊した。

一番嫌なのは、Arduinoそのものが壊れたのではないかということです。
いったん配線を外して、一番シンプルな、LEDをデジタル13ピンとGNDにつけて点滅させるプログラムが動くかどうかを試してみました。

と、アップロードしようとすると今度はArduino IDEにエラーメッセージが。
こんな感じのエラーが出ます。

avrdude: stk500_getsync(): not in sync: resp=0x30
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

あ~・・・どんどん悪くなっていく~・・・
どうもコードの接触不良とか配線ミスが原因らしいのですが、なんといってもさっきパターンカットとかしたばっかりだしなあ(大汗)

3.3Vのほうについていた電源切り替えのピンソケットを5Vに変えて再トライしたところ、今度は動いたっっ!!!
LEDが点滅してくれました。良かった~。Arduinoそのものはまだ死んでいないようです。

5Vに差し込んだり3.3Vに差し込んだりしても、いずれも問題ないようなので、改めて3.3VにつなげてLCD用のサンプルコードをアップロードします。
今度はTXとRXが数秒点滅した後止まって・・・LCDを期待の目で見つめるのですが・・・うんともすんとも言わないなあ。
まったく無反応です。

う~ん・・・やっぱり配線が悪いのかなあ。
また後日チャレンジすることにします。

現状の組み立て。動いてないこともあり非常にしょぼく見える。
現状の組み立て。動いてないこともあり非常にしょぼく見える。

オラ、ドラゴンレーダーを作るぞ(7)

*** 7.1 ILI9325の8bit化

先日注文したハンダゴテが届きました!が、意外にコテ先が大きいなあ・・・
もっと針みたいのを想像していたんだけど、これであの米粒6分の1サイズのチップを外したりつけたり出来るのか。
ともかくもねむいさんの該当記事お気楽工作日記を開いてハンダゴテを温める。。

ええい、ままよっ!と左手にはんだ吸取線、右手にハンダゴテを持ってチップの接着部分をジュウジュウ温めること3分。変化ないなあ。
ラジオペンチでぐいぐい引っ張ろうにも、小さすぎてつかむことが出来ないし。
さらにハンダゴテで温めつつコテ先でぐいぐい押していたら、ずるっと斜めにずれた!
よしっとばかりにさらに力を加えたところ・・・どこかへチップが飛んでった!!!

ぎええ!あんなに小さなチップ、一度なくしたら絶対見つからないぞ!
慌ててきょろきょろと探しまくりますが、右手には高温のハンダゴテ、前方には興味深々で近づいてこようとする1歳11ヶ月の息子!
「アッチッチだからね!」「こっちこないでね!」と絶叫しながらハンダゴテの電源を抜き、もしかしたら自分の服についたかもしれない、床に落ちたかもしれないと目を皿にしてチップを探します。
とはいえせいぜい1mmくらいしかないチップなので、見つからない・・・
あんなのどうやって注文したらいいのか分からないし、こんな情けない形でプロジェクトが終わるのか・・・と思うと探す気力も萎えてくる。

灯台下暗しだと改めて基盤のそばを探していると、、あった!!!!!!もう絶対なくさんぞ!!!

この写真を撮っているときはまだ心臓がどきどきしています
この写真を撮っているときはまだ心臓がどきどきしています

*** 7.2 外した抵抗チップの取り付け

一息ついて、またハンダゴテを温め直します。
付けるほうがまだ簡単だろうと思いながら、さっき見つけたチップをラジオペンチでつかみつつハンダゴテを当てますが、チップが小さすぎてラジオペンチでつかみながらというのはほぼ不可能。
それではと目標となるR2の場所にチップを置いて、そこにコテ先を当てる感じで作業したところ、良さ気にチップがくっついたかな・・?
出来るだけ真っ直ぐになるように微調整して終了!ということにしよう!

付いたけど、周辺がハンダゴテで焦げていないか不安
付いたけど、周辺がハンダゴテで焦げていないか不安

*** 7.3 ついでにピンソケットもつける

同じくLCDのキャリーボードに、LCDと一緒に購入したピンソケットをハンダでくっつけます。
↓ の動画で見えているやつ。

が、間違えててピン数40のを2列買っちゃった!
正しくはピン数20の2列ですが、半分に切らないと・・・とニッパーで無理やり半分のぶった切りましたが、すごくいい加減な感じになってきたぞ。
まあ気にするな俺!

裏面からハンダ付けしますが、さっきのチップと比べると超簡単です。
とはいえど素人の私なので、出来上がりを見るとすごくムラだらけ。
これでちゃんと動くのかな・・・

こうやって写真で見るとますます粗が目立つ。
こうやって写真で見るとますます粗が目立つ。

これで動くかどうかを確認するには更にArduinoの3.3v化と、いまだよく分かっていない配線の問題をクリアするまでお預けです。

*** 7.4 今日までの報告書

理解した用語

|~用語名|~説明|
|はんだ吸取線|一度つけたハンダを取り除くのに使う布状の金属線。素人仕事の場合ハンダをのせる時間より、これを握っている時間の方が長くなる傾向がある。あっという間にハンダが吸い取られるのが気持ちいい。うかうかしていると吸取線そのものがあっちっちになる。|

オラ、ドラゴンレーダーを作るぞ(6)

*** 6.1 タッチパネルについて

待ちに待った2.8インチTFT液晶が届きました!
縦長なので、上のほうにドラゴンレーダー、下のほうに操作関連のボタンなどを配置できればと思っています。
そう!この液晶はタッチパネルなのです。

はじめタッチパネルは無視しようと思っていたのですが、今回購入した液晶のコントローラチップ(ILI9325)でも使えるらしいArduino用のライブラリを作っている人がいたのです!

itdb02

す、すばらしい・・・
2010/6/1に最初のバージョンがアップされていますので、本当に出来立てほやほやです。
今日現在ではV1.2が最新バージョンです。
使い方などを少し見てみましたが、これなら衝撃的初心者の私でも扱えそうなレベルにまでブレイクダウンされています。

LCDの扱いは8bitもしくは16bitのようで、SPIでの処理は検討されていない模様。。
やっぱりそういうものなのか~。

逆にタッチパネル用の接続をSPIで行うようで、そうなると8bit接続(つまりラインが8本のIOピン必要)と併せると12本のIOピンが必要になります。
ますますGPSが使えなくなるぞ。

*** 6.2 ピンについて再調査

以前ブックマークしたなんでも作っちゃう、かも。 Arduinoで遊ぼう – GPSを使った高精度な時計みたいに、アナログINのピンを使えるといいんだけどなあ・・・ということであらためてググってみて、衝撃の事実が・・・!

アナログINピンはデジタルIOピンとしてつかえるそうな。

Arduino Referenceより
Note
If the pin isn’t connected to anything, digitalRead() can return either HIGH or LOW (and this can change randomly).
The analog input pins can be used as digital pins w/ numbers 14 (analog input 0) to 19 (analog input 5).
※この情報は日本語訳サイトや教本「Arduinoをはじめよう」にはまだ未掲載です。

ただ、「digital pins w/」の最後の「w/」って書き込みだけってこと?
まあ試してみれば分かるかな。

これを使えば、デジタルIOピン14本+アナログINピン6本=最大20ピンをデジタルIOピンとして使えるわけだ!
8bitモードでLCD接続してタッチパネルも扱うとしても、ぎりぎりGPSやコンパスも乗っけられそうだ・・・

*** 6.3 よーし液晶をつなげるぞー

とはいえ、まずやらなくてはいけない難関が2つ。

  • 1. LCDの8 bit化
  • 2. Arduino Duemilanoveの3.3V化

「2. Arduino Duemilanoveの3.3V化」は3.3V化改造 – arduinoまとめサイトに書かれているパーツを追加購入したので、それの到着待ち。

ということは「1. LCDの8 bit化」を先にやってみよ~と、あらためてねむいさんの該当記事を確認してみました。

んでもってWBX280V009もJ4にあるチップ抵抗をR2に移すと8bitバス化できるけど
この改造でIM0が端子に引き出せられるようになるので外部から簡単にバス幅を切り
替えられますよぅ!!
(20100720追:
 当たり前ですがこの改造を行ったら外部に出たIM0端子は使用するバス幅に
合わせてちゃんとレベルを決めてやらないとだめです)

なんのことやらと思っていたこの文章ですが、LCDが届いてみて初めて意味を理解できました。
LCDにくっついているビニールぽいコネクタケーブルについているチップ型の抵抗をいったん外して隣りのラインにハンダ付けするということだそうです。
思わずデキルカボケーと叫んでしまいました。だって、数mmの世界なんですよ(T T

できるかぼけー
できるかぼけー

まあ、うすうすこういうことかとは思っていたのですが、こんなにも小さいとは想像していませんでした。
私が持っているごついハンダゴテでは、ケーブルに穴を開けるのが関の山というところです。

仕方がないので、またも出費・・・新しいハンダゴテ(HOZAN(ホーザン) H-130 ハンダゴテ 15W 2,356円(税込))を購入しました。
いつ先に進めるんだー!!

*** 6.4 今日までの報告書

ブックマークしたページ

|~タイトル|~説明|
|TFT-2.4″-320*240-With-Touch-Shield-(Arduino-Compatible)|今回買ったLCDに似てるLCDシールド。ソースコードを参考に出来そう。|
|Arduino control the 2.4″ TFT LCD|今回利用させていただくitdb02はこのフォーラムから生まれた!ITeadさんVery Thank you!!!です。|
|New Ball Prototype|ドラゴンレーダーとは関係ないけど、真似したい!ボールがころころ動きます。なぜか癒されます。|

オラ、ドラゴンレーダーを作るぞ(5)

*** 5.1 もしかしてドラゴンレーダーだめ?だめ?

一つ前の日記にも載せていた動画。
早ければ明日にも注文したLCDが来るということもあり、ヒマさえあれば何となく眺めていました。

それで気がついたのですが、デジタルIOピンのほとんどがLCDとの接続に使われてる・・・?
外部パーツを制御するのに使うデジタルIOピンはArduino Duemilanoveで14ピンあるのですが(pin 0~13)、そのうち12本くらい使われているように見えるぞ・・・。

LCDを表示してお終いなら構わないのですが、ドラゴンレーダーにはGPSやデジタルコンパス、もしかしたら加速度センサーもつける予定です。
ArduinoにはデジタルIOピン以外にもアナログINピンが6本(pin 0~5)あるので、もしかしたらセンサー関係はこっちにつなげられるのかもしれませんが、残るデジタルIOピンが2本だけというのは多分致命的な気がします。

あわてて「Arduino ピン数 増やす」とかでググったりしましたが、見つかるのはDuemilanoveのピン数少ないよね的な話題ばかり。
Arduino MEGAという姉妹品はデジタルIOピンが53本もあるのですが、6,980円と高めの値段設定。いや、これも最初に買っていれば安いものかもしれない。
いやいや、MEGA買ったとしてもこんなの大きすぎるぞ。。

iPhoneとかあんなに小さいのに、GPSもカメラもLCDもタッチセンサーもよく詰め込まれているなあ・・・

*** 5.2 大は小を兼ねない電源

ピン数のことでショックを受けている私に追い打ちをかけるように、もう一つ別の問題に気がつきました。
注文したLCDの電圧は2.6~3.5Vとのこと。そういえば5Vとか3.3Vとかってどこかで読んだなあ・・・
Arduinoについている電源は5Vなので、そのまま接続するとパーツが壊れるかもしれない・・・?

5Vがあるんだったら抵抗とかトランジストとか使って3.3Vに小さく出来るんじゃないかと軽く考えていたのですが、いろいろなページを読んでいるとそういう簡単なものでもないらしい。
電圧の変換はレベルシフトと呼ぶそうですが、ケースバイケースなので「このチップをはさめばOK!」的な感じではないようです。

Arduino Duemilanoveの仕様書を見ていて5Vと3.3Vの電源が用意されていることに気がつきましたが、3.3Vは50mAまでしか使えないそうです。
LCDって何mAなんだろ。

さらにウェブ検索していると、3.3V化改造 – arduinoまとめサイトというページに3.3Vに対応する改造法が載せられていました。
「対象デバイスは50mA以上の消費電流を持つTFTディスプレイやCMOSカメラです。」とあるので、今回の僕のドラゴンレーダーでもこの改造は必要なのか・・・
パターンカットってなんだ。。基盤の裏にくっつけてるのは何なんだ。。!

気落ちしながらも一番上のLCDの接続サンプル動画をもう一度見ていたら、3.3V化改造してるじゃん!!
・・・実は一番最初にこの動画を見たときも、なんか自分の基盤にはないのがくっついてるぞと思っていたのですが、見てみない振りをしていました(おい)。

しょうがない!3.3V化改造は避けては通れないか。
ということで、追加のお買い上げ~(とほほ)

|~商品名|~単価|~個数|~金額|
|電解コンデンサー 100μF 25V 85℃|10円|5個|50円|
|表面実装型低損失CMOS三端子レギュレーター3.3V500mA NJU7223DL1(4個入)|100円|1個|100円|
|ピンヘッダ(オス) 1×40 (40P)|50円|1個|50円|
|はんだ吸取線 CP-3015|190円|1個|190円|
|デジタルマルチメータ MAS-830L マニュアルレンジ|1,000円|1個|1,000円|
|透明熱収縮チューブ φ1mm 1m|58円|1個|58円|

「はんだ吸取線」と「デジタルマルチメータ」はせっかくなので一緒に注文しました。
そうじゃないと送料の方が高くつくので悔しい。

*** 5.3 LCDのマニュアルを読むことに

電圧の方は何とか対応できそうですが、問題はピン数。
LCDって何でこんなにピンを使うんだろ。
しかもいまだに取り付け方や扱い方が全く分かっていない。

LCDを購入したaitendoさんのページに、英語ですがLCDのマニュアルがついていましたので、それをよく読むことにしました。
今出来ることはそれぐらいだもんなあ。

|~マニュアル名|~内容|
|コントローラチップ:ILI9325(PDF)|一番大きなドキュメント。これがメインドキュメント|
|詳細データシート(PDF)|インターフェース仕様の概要。あと取り扱いの注意点など。|
|アプリケーションノート(PDF)|何だか初期化の方法?みたいのが書いてある。あまり関係なさそう。|

メインドキュメントの目次を見ていると、「7. システムインターフェース」という項目があり、「18ビットシステムインターフェース」「16ビットシステムインターフェース」「9ビットシステムインターフェース」「8ビットシステムインターフェース」「SPI」「VSYNCインターフェース」「RGBインターフェース」と色々なインターフェース(接続方法)が説明されています。
そういえばArduinoで8ビットで使うためにはどこかの抵抗を移動するとか何とか書いてあったなあと読んでいたら、「SPI(Serial Peripheral Interface)」で使う端子の数がすごい少ないことに気がつきました。
4本しかいらないの??(nCS/SCL/SDI/SDOの4本らしい)
多分電源とかは別途つなげるんだろうけど、10本以上つなげなくちゃいけないと思っていたら、こんな簡易なインターフェースもあるのかな。本当かな。
でも、16本とか10本使うところをたった4本で行うんだから遅いんだろうな。でもでも、ドラゴンレーダーってチープなインターフェースで済むし、SPIでいけるのならこれでいいじゃん!

あらためて「Arduino SPI LCD」とかで検索すると、やっぱり4本でつなげることが出来るらしい。しかもやっぱり少し遅いらしい。
それでも今回のドラゴンレーダーにはぴったりだ!SPIで接続できるといいなあ~!

*** 5.4 今日までの報告書

ブックマークしたページ

|~タイトル|~説明|
|3.3V化改造 – arduinoまとめサイト|詳しい解説をありがとうございます!うまく出来るかなあ・・・|
|お気楽工作日記 FRマイコンでLCD・・・|Arduinoではないですが、今回買ったLCDの8bit化する手順を書かれています。|
|ねむいさんのぶろぐ ねむいさんは心がきれいだからウソなんて付けない|ここにも8bit化の手順が書かれていました。バス幅という用語はググってみたけど、何となく分かったような・・・?|
|REDUINO-GHOST644U|ピン数と電源の問題があって、またこんなの見てた。|
|なんでも作っちゃう、かも。 Arduinoで遊ぼう – GPSを使った高精度な時計|このLCD、なぜかデジタルIOではなくアナログINに挿しています。何でこんなこと出来るんだろう。裏技?|
|132×132 Serial Color Graphic LCD|サイズが小さいLCD。こいつは5Vでもいけるらしい。|
|Arduino control AD7843 to achieve handwriting|買ったLCDのチップでも同じコードがいけるらしいサンプルコード。|
|エレキジャック ArduinoにSPI通信を行う機器を接続する(1)|書かれている用語はいまだ理解できないのですが、SPIはやっぱり4本でいけるらしいですよ。|
|INAの日記 今週末のINA|僕と同じようにArduino+ILI9325にトライしていて、しかも成功しています!ただ8bitインターフェースなので、13本(!)の線をつなげています。|
|Arduino cheat sheet|Arduinoのチートシート。これ便利かも。回路図とかいちいち本を開くの面倒だもんね。|
|2.8 inch QVGA TFT LCD with Touch Screen|似た感じの液晶の販売ページ。サンプルコードとか参考になるかしら。|
|Arduino Forum – i2c Vs SPI LCD connection|i2cとSPI、LCDをつなげるのはどっちがいいの?という話題。よく分からないけど、今回買った液晶もi2cっていうの使えるのかな。|
|マイコミジャーナル シンプルなバス(その5):SPI(その1)|SPIの説明。マスターとスレーブって言うのがいまだ理解不能。何となく懐かしい響きなんだけどIDE的に|

オラ、ドラゴンレーダーを作るぞ(4)

*** 4.1 LCDを注文した

最後の最後まで迷いに迷いましたが、aitendoで2.8インチTFT液晶(キャリーボード付き)[WBX280V009-PCB]を注文しました。

2.8インチTFT液晶(キャリーボード付き)[WBX280V009-PCB] 2,580円 (税込)
2.8インチTFT液晶(キャリーボード付き) / WBX280V009-PCB / 2,580円 (税込)

一回り小さい2.4インチTFT液晶(キャリーボード付き)[YHY024006A-PCB]ノキア液晶3300の3点セット[NOKIA3300LCD-SET] はArduinoとの接続成功例などありましたが、ドラゴンレーダーとしては少し小さすぎるかなあと・・・。

まあ失敗して買いなおしたとしても1,500~2,000円くらいだし、まずは自分が欲しいと思うものからトライしようと思います。

2.4インチTFT液晶(キャリーボード付き)[YHY024006A-PCB] 1,980円 (税込)
2.4インチTFT液晶(キャリーボード付き) / YHY024006A-PCB / 1,980円 (税込)
ノキア液晶3300の3点セット[NOKIA3300LCD-SET] 1,480円 (税込)
ノキア液晶3300の3点セット / NOKIA3300LCD-SET / 1,480円 (税込)

あと、せっかくなので他にもいくつかパーツなど購入してみました。
Arduinoなしでも動かすことが出来そうな電子工作がありましたので、それらも一緒に作ってみたいと思います。

|~商品名|~単価|~個数|~金額|
|緑色LED(5mm)(50個入り)[CSL-500G1AT-50P]|200 円|1 個|200 円|
|ボタン電池(3V)[CR3032]|100 円|5 個|500 円|
|電池ボックス(単3×2本)[BATTERYBOX-T3-2]|120 円|1 個|120 円|
|カラーキーボードスイッチ(○3.5/10個入り) (色: 黄)[SW-6X6X5H]|100 円|1 個|100 円|
|ジャンプワイヤ(70本セット)[JWIRE-80X60P190X10P]|590 円|1 個|590 円|
|2.8インチTFT液晶(キャリーボード付き)[WBX280V009-PCB]|2,580 円|1 個|2,580 円|
|ピンソケット(2.54mmピッチ・メス・単列)(ピン数:: 40)[PSOKET-2.54PT-S]|50 円|2 個|100 円|

上記注文リストのうち、一番下の2つ以外はドラゴンレーダーとは関係なく買ったものです。

そうそう、今日買うのを迷った2.4インチTFT液晶(キャリーボード付き)[YHY024006A-PCB]のArduinoとの接続サンプル動画を見ていたら、Arduinoとの接続部分に商品には含まれていないパーツがありました。

ピンヘッダとかピンソケットというものらしいのですが、いまいち自信がない・・・。
動画を見る限りピンソケットのように見えるので、これも一緒に注文しました。
今回買った液晶にも同様のものが必要そうです。

ハンダ付けが必要そうなパーツですが、なぜかハンダごてとハンダは持っています。
以前から憧れていた世界ですので、何かの折に秋葉原で買った記憶があります。

*** 4.2 今日までの報告書

理解した用語

|~用語名|~説明|
|マイコン|マイクロコンピュータのこと。パートナーに「Arduinoって何?」と聞かれて「マイコンだよ」と答えたのですが、「マイコンって何?」と聞かれて「マイコンピュータの略じゃない?」なんてことを答えていました。|

ブックマークしたページ

|~タイトル|~説明|
|Arduino 日本語リファレンス|言語仕様はJavaに似ているため、何の違和感もなく使えます。こりゃ楽だ。|
|PIC AVR 工作室別館 arduinoの館:キャラクターLCD表示ライブラリ|ドラゴンレーダーではキャラクターLCD(文字表示)ではなくグラフィックLCD(グラフィック表示)を使うのでそのまま真似することは出来ないですが、丁寧に書かれているため私にも理解できます。|
|ねむいさんのぶろぐ|液晶関係の記事が充実しています。何している人なんだろう・・・|
|BL-TFT240320PLUS V2| BL-TFT240320PLUS V2 とは TFT LCD QVGA 3.2インチの開発ボード(タッチスクリーンつき)だそうです。Arduinoのシールドとして使えるのでこれを買えば一発でLCDのハードウェアは解決するのですが、何となくつまらないんだよなあ。|
|How to use LCD TFT Arduino shield BL-TFT240320PLUS LCD|上記LCDシールドの使い方ページ。なんだかんだ言って気になっている。|
|2.4″ TFT LCD Screen Module: ITDB02-2.4|これもArduinoのシールドになるLCDパーツ(別売りのでかいコネクタが必要)。|
|TFT-LCD Shield|まだ発売前みたいですが、これもArduinoに取り付けできそうなLCDシールド。あれ、「ネムイ・トリノミアスさまデザイ」ってこれねむいさんだ。|
|エレ玩 Konyaの開発記録:AitendoのTFT液晶モジュール(ZY-FGD1442701V1)を使う|この方も詳しくLCD関係の記事を載せています。私の場合ハードウェア愛が少ないんだよなあ・・・|