verus diary このページをアンテナに追加 RSSフィード

Effective ひとり生活++

2009-09-17

ArduinoでGPSデータ受信できたおww

f:id:verus:20090916173502j:image:w400

つい下のエントリで意地あけて,放置していたらいつのまにやら測位できてた.


部屋から出て10分ぐらいPC片手にぶらぶらしてても,測位できなくて,ずーっと部屋の窓際に放置していたら,おそらく2時間ぐらいたって4個だけ衛星が見つかった模様.

出力された数値を緯度経度それぞれ600000で割ってやれば,一般的な緯度経度の値になるので,GoogleMAPで調べてあげたら,しっかりと自宅の地図が出たので安心.


GPSって田舎とか関係ないよね!むしろ田舎の方が測位できるはずだよね!むしろそうあるべきだよね!!!

2009-09-16

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

f:id:verus:20090916173338j:image:w400

スイッチサイエンスさんのところから,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





とりあえずArduinoSDカードアクセスと言ったらこれ!と言われているような,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が動かないことにくじけ始めたので,書き込みとかはまたあとでやることにしよう.

はぁ.

2009-09-04

GPSモジュールが届いた!

f:id:verus:20090903141254j:image:w400

SDカードが刺さったりする.


とりあえずレベル変換回路作ってPCとつなぐ準備中.

Arduinoが欲しくなるね!

去年の高専ロボコンのロボットが下野新聞に載っているらしいお

f:id:verus:20090910182232j:image:w400

でも映っているのは俺じゃなーいw

しかも俺が作ったところは見えなーいww


まぁ説明に行ったところで,操作系作った当人が最も操作が下手(だった)で,もはや操作方法なんて覚えてないけどねw

2009-08-30

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

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

no title

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


赤がカッコ良い.

とりあえず抽選に当選した模様なので,情報を集めておく.


モジュールについて

回路図

部品表

実装図


Arduino用とはいえ,単純にGPSから端子を引き出しているだけなので,一般的なマイコンでも使えると踏んでいる.

GPSだけのっているわけではなく,SDカードスロットまで付いている模様.

適当なマイコンと電源を与えるだけで,GPSロガーになるようだ.

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

gpsrobocar


思ったより,精度が低い模様

GH-81の測位精度 - gpsrobocar

GPS本体について

古野電気株式会社

フルノ製品情報

GH-81データシート


独自のバイナリ出力とのこと.

どっかの大学で研究でFurunoGPSを使っている人と話したところ,それに驚いていたw

なぜ独自バイナリなのか,だれか情報プリーズ.

基板の製造について

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

P板.com


P板.comの協賛も付いている模様.

P板.comに発注をかけたことがなかったので,この基板で仕上がりを見てみたい.

2009-08-21

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

f:id:verus:20090821051652j:image:w600


書籍のISBNを使った拡張現実なんぞをやろうかと思い付き,試してみるテスト

OpenGLOpenCVを組み合わせる件については以下を参考に.

ページが見つかりません。 - 王様の箱庭


そして,バーコードを認識する件については,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