ArduinoでLCDにキャラクター表示

IMG_0917
LCD画面上にキャラクターを表示してキー入力で上下左右に移動させることができるようになりました。

キャラクターの画像は、LCDライブラリにキャラクターデータを転送する関数がなかったため、8バイトのドット絵を作成して1ピクセルずつ描画しています。

キー入力で画面を縦横無尽に移動できるようになったのですが、LCDに描画する量が少ないとかなり早く移動出来ます。
ただ、画面全体を書き換えたり、ちょっとした正方形を塗りつぶすだけでも、結構時間が掛かるようでキャラクターの移動が遅くなってしまいます。

Arduino Mini Console Circuit Graph

スクリーンショット 2015-11-11 9.42.43

プリント基板を発注しようと考えているんですが、ガーバーデータ作成などいろいろとハードルが高いので、まずはユニバーサル基板で量産化しようと思い、回路設計をしました。

回路図を作成するのに fritzing を試してみたのですが、パーツが登録されていなかったりでフリーハンドで図面を引けない為、Excelで作成することにしました。1マスが1ピンになっています。

ピンの幅など、若干違っているかもしれませんが、多分こんな感じです。

Arduino Mini Console で LCD に画像を表示

IMG_0915

LCDモジュールの動作確認として、SDカードから画像を読み込んでLCD画面に表示するというテストプログラムを作成しました。

SDカードからBMP形式の画像を読み込むのですが、BMPファイルが大きいとメモリが足りなくて表示できないようです。20KBぐらいのファイルであれば写真のように表示出来ました。

 

Arduino Mini Console 開発

Arduino と LCD を使用してミニコンソールを作成してみたいと思います。

このLCDモジュールですが、Arduino のライブラリが使用でき、SD カードスロットも搭載しているので、入力ボタンをつけるとミニゲーム機として動作させることができるのではないかと思います。

まず部品を実装します。部品と言ってもタクトスイッチぐらいなのですが、Arduino 用と LCD 用のピンソケットもつけてプロトタイプとして動作できるようにします。

IMG_0909

部品を実装するとこんな感じです。最初はタクトスイッチを Arduino のポートに直結しただけだったのですが、これだとボタンを押していない時にピンが接続されていない状態となり、信号が不安定になるため、10kΩの抵抗を入れて GND と接続しています。

IMG_0910

通電した所、ちゃんとLCDも動作しているみたいです。

IMG_0912

すべてのタクトスイッチの検査をするためにサンプルプログラムを作ってみました。
押したボタンに応じて、Arduino 上のLEDを点滅させます。


#define KEY_UP 1
#define KEY_DOWN 3
#define KEY_LEFT 0
#define KEY_RIGHT 5
#define KEY_A 6
#define KEY_B 14

#define LED 13
#define DELAY 100

void setup() {
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(3, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(14, INPUT);

pinMode( LED, OUTPUT);
}

void loop() {
int blnFlag = 0;

if ( digitalRead( KEY_LEFT ) == 1 ) {
blnFlag = 1;
}
if ( digitalRead( KEY_UP ) == 1 ) {
blnFlag = 2;
}
if ( digitalRead( KEY_DOWN ) == 1 ) {
blnFlag = 3;
}
if ( digitalRead( KEY_RIGHT ) == 1 ) {
blnFlag = 4;
}
if ( digitalRead( KEY_A ) == 1 ) {
blnFlag = 5;
}
if ( digitalRead( KEY_B ) == 1 ) {
blnFlag = 6;
}

if ( blnFlag > 0 ) {
for ( int intI=0; intI digitalWrite( LED, HIGH);
delay( DELAY );
digitalWrite( LED, LOW);
delay( DELAY );
}
} else {
}
digitalWrite( LED, LOW);
}

キー入力は無事にすべて動作するようになりました。
次はLCDに何か表示してみたいと思います。

Mac で Adafruit Pro Trinket – 5V 16MHz を開発

IMG_0889

スイッチサイエンスで Adafruit Pro Trinket を購入しました。

以前に Atmega32u4 ボードを持っていたのですが、調子がおかしくなってしまい動作が安定しなくなったため、新しく Arduino を購入しました。
このボードは Arduino 互換でクロックが水晶なので、シリアルLEDテープを駆動したり、プログラムの開発に Arduino IDE が使えるなどいろいろ便利かと思います。

IMG_0898

ただ、通常の Arduino IDE ではプログラムの転送が出来なかったため、その方法を解説します。

1.まず Arduino IDE を最新バージョンにします。
私がダウンロードしたバージョンは 1.6.6 でした。

https://www.arduino.cc/en/Main/Software

2.次にダウンロードした IDE を起動して、ツール⇒マイコンボード⇒ボードマネージャーを選択します。

スクリーンショット 2015-11-07 14.26.37

3.Type で Contributed を選択すると「Adafruit AVR Boards by Adafruit」が表示されます。
これをクリックして「インストール」します。

スクリーンショット 2015-11-07 14.31.38

4.するとマイコンボードに「Pro Trinket 5V/16MHz(USB)」が表示されますので、選択します。

5.書き込み装置に”USBtinyISP”を選択します。

スクリーンショット 2015-11-07 14.35.03

これでUSB経由でプログラムを転送することが出来ます。

スクリーンショット 2015-11-07 14.23.20

USB接続後、10秒間はブートローダーが起動した状態となります。この間に書き込みを行ってください。
10秒経過すると書き込まれたプログラムが動作します。ボード上のリセットボタンを押すともう一度
10秒間ブートローダーが起動します。

研究所の目的とプロジェクトの一覧

今までは時間がなくてできなかった電子工作ですが、生活にゆとりが出てきたので、この研究所を立ち上げて、マイコンを使った工作やロボット開発をやっていきたいと思います。

最近は Kickstarter や Makezine によって手作り商品が活性化してきています。また、Arduino や Raspberry Pi の登場により、手軽にマイコンやロボットに触れる事ができるようになりました。

この研究所では下記のようなテクノロジーを使って、世の中に無い製品を作り出していきたいと思います。

Arduino
Raspberry Pi
iPhone
ウェブ技術

また、これらの技術を使って下記のようなプロジェクトを立ち上げて、製作の過程をこのブログで公開していきたいと思います。

LEDマトリックスディスプレイ
近所探索ロボット
写真公開サイトとiPhoneアプリ

不定期での更新となりますが、いろいろと情報を発信していきたいと思いますので宜しくお願い致します。