Arduinoが届いた.そしてSDカードアクセス.

スイッチサイエンスさんのところから,Arduinoが届いたので,早速GPSモジュールをさしてみたけど,
なんかGPSを全然測位してくれなくて涙目なので,SDカードアクセスを試みる.
#サンプルスケッチ通り,ピンアサインも確認もしたけど,ずっと受信データが全てのパラメータ0のまま,時刻だけ表示されているオワタ

こんな感じorz


0 0 0 0 0 0
2009 9 16 13 18 36 0
0 0 0 0 0 0
2009 9 16 13 18 37 0
0 0 0 0 0 0
2009 9 16 13 18 38 0



とりあえずArduinoのSDカードアクセスと言ったらこれ!と言われているような,SDCardライブラリをゲット!

SD card read/write with Arduino
"The library can be downloaded here:"って書いてあるところだお.


そしたら,解凍したフォルダを\hardware\librariesディレクトリに入れるー.


んでもって,サンプルスケッチ(ディレクトリ内のarduino sd card example.cpp)をコンパイルしようとしたらエラーが起こる.
#error "no sd/mmc pin mapping available!"とか言ってる.


どうやら,Arduino Duemilanove 328がなかったころのライブラリだったと結論.
識別子__AVR_ATmega328P__をSDカードに対するピンマップ宣言っぽいところに追加してあげればいいっぽい気がしたので,
ライブラリフォルダ内のsd_raw_config.hを編集してあげる.

#if defined(__AVR_ATmega8__) || \
    defined(__AVR_ATmega48__) || \
    defined(__AVR_ATmega88__) || \
    defined(__AVR_ATmega168__) || \
    defined(__AVR_ATmega328P__)
    #define configure_pin_mosi() DDRB |= (1 << DDB3)
    #define configure_pin_sck() DDRB |= (1 << DDB5)
    #define configure_pin_ss() DDRB |= (1 << DDB2)
    #define configure_pin_miso() DDRB &= ~(1 << DDB4)

    #define select_card() PORTB &= ~(1 << PORTB2)
    #define unselect_card() PORTB |= (1 << PORTB2)


こんな雰囲気になるように書きかあえてあげてね!
書き換えているのは__AVR_ATmega328P__を追加しているのと,PB2をPORTB2に書き換えているあたり.
ほかの識別に影響しそうだけど,Arduino Duemilanove 328しかもってないからいっかー.


この変更後,サンプルスケッチをコンパイルしたら通ったー,やったー!


んで,このGPSシールドはJ7の/SSだけ結線されてなかったような気がしたので,ジャンピンぐワイヤでJ3にある10ピンにつなげておいた.


そいで,アップロードして実行すると,シリアル経由でなんか出力された.

                                              • -

Data sampling system
send r to read disk
send s to start sampling
send q to stop sampling
Ready.....

                                                • -

rev: 32
serial: 0xA275C196
date: 3
8
size: 2013265920
copy: 0
wr.pr.: 0/0
format: 0
free:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Sampling..
444
347
351
357
357
353
350
351
357
357
355


どうやら無事動いているようだ,よかた.
FAT16だからSDカードは2GBまで対応しているらしく,しっかり2GBさしておいたら,認識してsizeがいい感じで2GBぐらいになってる.
#勘違い.このライブラリは低レベルなインターフェースだけ提供していて,ファイルシステムは提供してなかった.


GPSが動かないことにくじけ始めたので,書き込みとかはまたあとでやることにしよう.
はぁ.

ArduinoのGPSモジュール配布に当選したっぽ

GPSロボットカーコンテストのページでArduino用のGPSモジュールを配布するというので,申し込んでみたお.

http://www.denshi.tosho-u.ac.jp/JIN-GPS/robocar2009/index.html

http://www.denshi.tosho-u.ac.jp/JIN-GPS/robocar2009/photo/redshield.gif


赤がカッコ良い.
とりあえず抽選に当選した模様なので,情報を集めておく.

モジュールについて
回路図
部品表
実装図


Arduino用とはいえ,単純にGPSから端子を引き出しているだけなので,一般的なマイコンでも使えると踏んでいる.
GPSだけのっているわけではなく,SDカードスロットまで付いている模様.
適当なマイコンと電源を与えるだけで,GPSロガーになるようだ.

モジュールについてのブログ
gpsrobocar


思ったより,精度が低い模様
GH-81の測位精度 - gpsrobocar

GPS本体について
古野電気株式会社
http://www.furuno.co.jp/product/gps/receiver/gh81.html
GH-81データシート


独自のバイナリ出力とのこと.
どっかの大学で研究でFurunoGPSを使っている人と話したところ,それに驚いていたw
なぜ独自バイナリなのか,だれか情報プリーズ.

基板の製造について
プリント基板の製造・設計・実装ならプリント基板ネット通販P板.com
P板.com


P板.comの協賛も付いている模様.
P板.comに発注をかけたことがなかったので,この基板で仕上がりを見てみたい.

バーコード認識とか,OpenCVとか,OpenGLとか合わせてみる.


書籍のISBNを使った拡張現実なんぞをやろうかと思い付き,試してみるテスト.
OpenGLOpenCVを組み合わせる件については以下を参考に.

http://www.masayashi.com/opencv_and_opengl


そして,バーコードを認識する件については,ZBar bar code readerなるライブラリを使ってみる.

ZBar bar code reader

ただ,OpenCVのキャプチャデータIplImageから,ImageMagickを使うべきライブラリに持ってこないといけないので,ちょっと弄っておく.
バーコードを見つけて,ISBNコードを返すコードを以下.

bool findBarcode(IplImage *src, char *code)
{
	cvCvtColor(src, grayImage, CV_BGR2GRAY);
	ImageScanner scanner;
	scanner.set_config(ZBAR_ISBN13, ZBAR_CFG_ENABLE, 1);

	Image image(grayImage->width, grayImage->height,
		    "GREY", grayImage->imageData,
		    grayImage->width * grayImage->height);
	// scan the image for barcodes
	int n = scanner.scan(image);

	// extract results
	for(Image::SymbolIterator symbol = image.symbol_begin();
		symbol != image.symbol_end();
		++symbol) {
		if(strcmp(symbol->get_type_name().c_str(), "ISBN-13") == 0)
		{
			strcpy(code, const_cast<char *>(symbol->get_data().c_str()));

			return true;
		}
	}

	// clean up
	image.set_data(NULL, 0);

	return false;
}


とりあえずGoogle Bookからデータも引っ張ってきてみる.

char code[13];
if(findBarcode(capFrame, code))
{
	cout << code << endl;
	System::Net::WebClient wc;
	System::String^ strCode = gcnew System::String(code);
	System::String^ bookdata = wc.DownloadString("http://books.google.com/books?bibkeys=ISBN:" +
						     strCode + "&jscmd=viewapi&callback=mycallback")->Replace("\\x26","&");
	System::Console::WriteLine(bookdata);
}

ネットワークは面倒だったので,CLSで誤魔化し始めていたりw


書籍とARなんてありがちなところだけど,あんなこんなできるといいなー,と考えるだけでも面白くなってくるw

VR920なるヘッドマウントディスプレイを買ってみた.


お盆で実家に帰ったらうっかり><
[rakuten:getplus:10096123:detail]


これのすごいのは,3軸のヘッドトラッキングがついてて,そのうえ3D表示できること!
マイクやイヤホンがついてるから,音声チャットしながら使うことも考えられる.


とりあえずSDKが公開されているので,トラッキングと3D表示を試してみた.
ラッキングはyaw,pitch,rollがLongで返ってくる簡単な感じ.
3D表示は,右目を指定する関数,右目用のグラフィックをレンダリング,左目を指定する関数,左目のぐらふぃk(ry
な感じで,扱える.OpenGLならgluLookAtで一発です^q^


これで画面のあっち側に行けるね!

SmartQ 5 MIDにAndroidを乗せてみた!


以下のアドレスにイメージデータがあったので,ファームウェアを更新するのと同じ感じでそのまま.

http://www.jiongtang.com/blog/html/smartq5/how-to-install-software-in-android-on-smartq5.html


Android端末としても,安いよね.