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アプリ

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

Apache で基本認証を設定する方法

まず下記のコマンドを入力して .htpasswd を作成します。ここでは admin というユーザーを作成しています。


$ htpasswd -c -m .htpasswd admin
New password:
Re-type new password:
Adding password for user admin
$

次に .htaccess に下記のように記載します。


AuthUserFile /home/test/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic
require valid-user

AuthUserFile の値はフルパスで指定する必要があります。相対パスでは指定できません。

Raspberry Pi に NGINX をインストール

火星に送った Raspberry Pi を地球からコントロールしたいのですが、わざわざ SSH でログインしてコマンドを叩いてログインするというのも使いづらいので、ブラウザからコントロールできるように NGINX をインストールしたいと思います。

インストール方法は至って簡単。

sudo apt-get install nginx

スクリーンショット 2015-07-01 18.28.00

インストール後に下記のコマンドでnginxを起動します。

sudo /etc/init.d/nginx start

スクリーンショット 2015-07-01 18.30.43

Mac のブラウザでアクセスすると、見えました。nginx!

Raspberry Pi 起動時に自動的に nginx が起動するように設定します。

sudo ln -s /etc/init.d/nginx /etc/rc3.d/nginx

nginx は組込機器向けの軽量なウェブサーバーでPHPも動作するということで、最初はApacheを入れようかと思ったのですが、Raspberry Pi のサイトでもおすすめだった nginx にしました。

ゆくゆくはnginxで動作するプログラムを作成して Raspberry Pi をコントロールしようと思います。

Raspberry Pi にカメラモジュールを装着

今回はロボットの目となるカメラモジュールを追加します。

FullSizeRender-2

Raspberry Pi には標準のカメラモジュールが用意されています。このモジュールは、フラットケーブルでRaspberry Pi の基板に直接搭載できる様になっています。

FullSizeRender-3

このままではケースの蓋が閉まらないのですが、ちょうどうまい具合にフラットケーブルの幅とイーサネットのコネクタの幅が同じぐらいで、その隙間からケースの外へカメラを回すことができました。

FullSizeRender-4

早速電源を入れてカメラの動作テスト。Linux上ではカメラもコマンドラインから撮影を行います。

FullSizeRender-5

撮影した画像がこれ。かなり高解像度で綺麗に撮影できます。

image

画像のサイズは2592×1944ピクセルで2.8Mバイトぐらい、JPEGで保存されます。

これぐらいの解像度があるとかなり細かいところまで確認できます。

多分、顔認識とかもできると思いますので、最終的にはOpenCVで顔認識とかも実験したいと思います。

 

 

Raspberry Pi でモバイル運用

Raspberry Pi をケーブル呪縛から解き放つために、電源アダプタをモバイル電源にできないか実験します。

FullSizeRender

容量大きめのモバイルバッテリーに接続してみて起動した所、電源1Aだと再起動を繰り返して起動しない模様。

unnamed-2

電源2.1Aに接続しなおして起動してみたところ、無事起動しました。全く何も繋がっていない状態で稼働しています。SSHで外部からもログインできるので、これはすごいですね。

火星に放り出しても通信ができるということですよね。