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

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

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

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

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秒間ブートローダーが起動します。

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で外部からもログインできるので、これはすごいですね。

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

 

Raspberry Pi を無線LAN化

このプロジェクトの目的はRaspberry Pi でロボットを作ることです。

ロボットとして縦横無尽に地を這いまわるためには、「ケーブル」という呪縛から解き放たれなければなりません。

IMG_0322

現状はこのような状況です。

電源ケーブル・HDMIケーブル・マウス・キーボード・LANケーブル

これらのケーブル類を一本ずつ解き放っていきましょう。

IMG_0324

今日はLANケーブルを無線化します。極小無線LANアダプタです。

このアダプタをUSBポートにぶっ刺して設定を行いますと無線LAN接続出来ました!

スクリーンショット 2015-06-24 3.00.03

 

詳しい設定方法はGoogleで検索してください。私が書かなくても詳しく解説してくださっている方がいますので。

最終的にはディスプレイやマウスやキーボードも外して単体運用したいのですが、起動時にDHCPで割り当てられたIPアドレスを通知する機能を追加しようと思います。

apt-get で postfix  をインストールして /etc/rc.local  にメールを送信するコマンドを記述します。

スクリーンショット 2015-06-24 2.57.27

おぉ、再起動すると無線LANに割り当てられたIPアドレスの情報が自動的に送られてきました。

 

 

 

Raspberry Pi に最新OSをインストール(続)

先日、Raspberry Piに最新OSをインストールしようとして、NOOBSをダウンロードしてインストールしていたんですが、途中で寝てしまって本当にインストールできたのか未確認でした。

IMG_0320

もう一度電源を入れてみてブートしてみると、確かにインストールできていました。

IMG_0321

 

ちゃんとネットワークにも接続できています。

これでいろいろ捗りそうです。

 

Raspberry PI に最新OSをインストール

今まで時間がなくて実行できなかったプロジェクトを再度始動。

初期のRaspberry PIと32GBのSDカードに最新のOSをインストールして起動してみることに。

IMG_0317

新しい Raspberry PI が発売されていたので、もう初期型は使用できないのではないかと思っていたら、OSは新旧区別なく同じものが使用可能とのこと。

しかもインストーラーも新しくなっているようなので、早速ダウンロードしてインストールすることにしました。

IMG_0318

ほとんどの解説サイトではWindows環境からのインストールでしたが、Mac でも同じようなことができるのか、確認のために Mac から SDカードをフォーマットしてインストールしてみることにしました。

IMG_0319

 

日本語環境も標準で入っているようです。インストーラーが起動するまでしばらく待ってみます。