RaspberryPIとnfcpyを使ってFeliCaで家の鍵を開け閉め

キーワード:RaspberryPI、nfcpy、SC-380S、Python

忘れないように自分用のメモ

nfcpy http://nfcpy.readthedocs.org/

家の鍵をFeliCaのIDmを使って開け閉めする物を作ります。

>IDmって偽装できるよね?
できます。ただ、通常の鍵と比べ、合鍵を作るのが簡単になった程度の問題だと思います。
FeliCa(IDm)は16桁の数字なので総当りでアタックしても、リーダー側でスキャンにディレイを付けておけば問題ありません。
そもそも一般個人宅がFeliCaを使って開け閉めしてるなんて外からわかりません。
非接触なのでリーダーを屋内に置く事で外からのイタズラも回避できます。

・各種インストール
raspbianなら最初から入っているはずですが、

Python入れます。
$sudo apt-get install python-dev
GPIOのモジュールも。
$sudo apt-get install python-rpi.gpio
nfcpyのインストール
$bzr branch lp:nfcpy
(bzrが無いなら $sudo apt-get install bzr )
ServoBlasterも。
$git clone git://github.com/richardghirst/PiBits.git
(gitが無いなら $sudo apt-get install git-core )
ServoBlasterのインストール
$ sudo make install

インストールおわり。

あとはGPIOでLチカが出来るかテスト、
nfcpyでIDmの読み取りが出来るかテスト、
ServoBlasterでサーボ動かせるかテストをそれぞれ行い、プログラムを書いていく。

 

続きはまた書きます。

未分類 Leave a comment

タイ(バンコク、パタヤ)でSIMカードを買う。

タイのバンコクとパタヤに行ってきました。

インターネットが使えれば、観光地を探すのはもちろん、タクシーに乗った時にGPSで現在位置を把握するのにとても便利!

購入

ソニーエリクソンのXperia Active(ST17i)を持って、現地のSIMカードを購入しました。

ST17iはもちろん日本で言うSIMフリーなので、現地のSIMカードを購入すればそのまま使用できます。

空港でAISやDTACのSIMが購入できるようでしたが、今回は時間がなくて現地の電気街で購入しました。

 

今回購入したSIMはこちら

 

2枚購入(+1枚はチャージ)

 

 

 

 

 

 

購入先は、あの有名なMBKではなく、Central Plaza Grand Rama 9とかいうショッピングセンターの向かいにあるビルです。

最初に購入したのは左側にある2GのNET専用SIMで、AISのSIMカードです。

2Gはどこでも繋がるものの、速度が遅いのでもう一枚TOTの3GなSIMも買いました。(右側の)

ついでにチャージカードも。

 

実際に使う

パッケージに使い方は英語で書いてあります。

2GのAISのSIMは59バーツ(≒155円)で600分使用できます。

1分0.258円。10分使っても2円ちょっと。

1日2時間通信し続けても5日も持ちます。

APNはinternet

速度は2Gといっても普通に使用するには問題ないぐらいでました!

 

日本では最大128kのSIMを使用してるので十分。

 

 

 

 

 

 

 

 

*139# で残りの使用時間を確認できます。

正直、このSIMだけで十分だったかもしれません・・・次に書く3GなSIMも使用したので、結局使い切れず6時間ほど余りました。

 

次にTOTのMVNOのi-koolなSIM。

こちらは3Gで、バンコクとパタヤで使用できるとか・・・

SIM自体は89バーツ(≒230円)で100MB分、チャージカードは200バーツ(≒520円)で1GB分

APNはinternet

1MBで0.52円です。1パケット(128バイト)なら0.00006656円です。

 

ホテルに帰って使用してみてびっくり。

 

なんという速度。。。

 

 

 

 

 

 

 

 

4人でテザリングしながら使用してもストレスを感じない速度でした。

SIMについてた100MB分を使用後、チャージカードでチャージしようとしたところ、「もう既にこのPINは使用されてます」的なメッセージが。

もちろん、使用できる容量は増えないものの、有効期限だけ+60日伸びているという謎現象が。

ホテルの人経由でサポートに連絡してもらうと、翌日のお昼にはチャージします。と。。。

(このとき旅の半分が経過)

 

ちなみにチャージは *777*PINcode#

残高は*711*2#

 

更に持っていった充電ケーブルが断線、まる1日使用できず、

100MB+1000MBのうち350MBしか使用できませんでした。。。

なんてもったいない・・・

 

ちなみにこのSIM、チャージはセブンイレブンでもできるみたいです。

なので、次回行ったときは、セブンでチャージさえすれば使えます!べんりー!

 

3Gと2G両方使えるSIMもあるみたいですが、バンコクのみであれば、3Gでほぼ問題ないと思います。

もし不安であれば59バーツの2GなSIMを購入してもいいかもしれません。

全部で900円ほどかかってしまいましたが、その価値はあったかと。

もし、ローミングで使用していたら1日でそれ以上は・・・

技術メモ, 趣味, 雑記 Leave a comment

プロペラを付けたDCモーターの回転数を非接触で測定する

プロペラを付けた状態のFA130相当品モーターの回転数を測定したい。

しかし、フォトインタラプタなんて普通家に無いですよね。

今回は家にある身近なものだけでモーター(プロペラ)の回転数を測定してみました。

2つの性能の異なる(AとBとします)FA130相当品で測定します。

 

測定方法

1.簡易ストロボスコープでの測定

2.電源ラインに乗るノイズを利用して測定

の2つを試しました。

 

測定風景

今回使用するモーター その1

その2は写真撮ってませんでした。まぁ形は同じです。

 

電源装置からミノムシなどで伸ばすとあれなので、直接接触させています。

簡易ストロボスコープ

周波数発振器にライン型のLED、周波数測定用のテスタを接続してます。

 

 

 

 

 

 

ストロボスコープについて詳しくは

株式会社菅原研究所:http://www.sugawara-labs.co.jp/faqstrobo1.html

を参考にしました。

あとプロペラが3枚なので、3倍の周波数でも停止して見えてしまいます。なので、プロペラの1枚をマジックで黒くしました。

 

電源ラインに乗るノイズでの測定

ぴこぴこ。

 

 

 

 

 

このブラシモーターは3極で、1回転する間にブラシと6回、ブラシは2つなので12回ノイズが発生するはず・・・(ここらへん曖昧です・・・)

測定結果

ストロボスコープでは

A:46.5Hz→2790RPM

B:56.9Hz→3414RPM

ノイズでは、ノイズの間隔が

A:1.7ms →1.7*12=20.4ms →2941.2RPM

B:1.5ms →1.5*12=18ms→3333.4RPM

という結果でした。

なんだかんだ、それっぽい結果になってるのでノイズでの測定も正しいのかな・・・

モーターも測定中に発熱して性能落ちてることも考えられるので10%程度の誤差であれば問題ないのかなと・・・。

 

ちなみにAが新しく購入したモーターで、ちょっとショックです。

いや、相当ショックです。

 

なんか間違えてたら教えてください!

 

技術メモ, 趣味, 電子工作 Leave a comment

野田市1周弱サイクリング

ウォーキングにも飽きが出てきたので野田市を自転車で1周してきました。

野田市は江戸川、利根川、利根運河と全方向が川で囲まれているので1周するのはとても簡単です。

最後、腹が減りすぎて途中で野田市役所方面へ曲がってしまいました・・・トータルで52.78kmです。

 

GPSロガーで計測したデータを元にGoogleMapsにトレースしてみました。

GoogleMaps 野田市1周弱

KMLファイルも上記リンクよりDLできます。

KMLファイルについては下の方で詳しく書きます。

 

ロガーは秋月のGT-730FL-Sを使用しました。

3000円(2012/05現在)と値下げしているようですね・・・。

少し癖があったりしますが、この価格でこの性能なので文句ありません。(高度以外)

ロギング出来るデータ数は仕様書によると

2M Bytes flash memory for data logging, with 16 bytes binary data per record that stores up to 256K data records

とあります。なんか矛盾している気がしますが・・・

2MBのフラッシュメモリが乗っていて、1レコード当たり16バイト! だから256Kレコード記録できるぜ!

よくわかりませんが、最低でも128Kレコードは記録できるはずです。

1秒に1レコードでも35時間は記録できそうなので、ウォーキング、ジョギング、サイクリングには全く問題ありません。

 データの加工

実は上記のKMLファイルは加工してます。

実際のロギングしたデータは1秒1レコードなため、13500ポイント近く(4時間弱)あり、

ロガーからDLした状態ではKMLファイルでロガーのメモリの関係か2分割されていました。

当初はこのままGoogleMapsに載せたのですが、GoogleMapsでは1度に表示できるのが1000ポイントまでで

それ以上は分割されて表示する形になってしまいました。

そこでデータの変換のついでに間引きを行いました。

GPSBabelというソフトウェアでGPSデータフォーマットの相互変換が行えます。とっても便利。

ただ、今回は変換ではなく、間引きなので

Filters→Routes&Tracks→Simplify の Limit toを1000にセット。

 

これでGoogleMapsに乗せても分割されないKMLファイルができたので後はアップロードするだけです。

 

ちなみに・・・

GoogleMapsAPIでもKMLファイルの読み込みができます。

GoogleEarthでは1秒ごとにKMLファイルの読み込み、表示が出来ます。

 

モバイル機器からGPSデータをPOSTし続けてWeb上、PC上で共有することも出来ますし、

PC上で軌道計算しKMLファイルを吐かせれば衛星の位置をリアルタイムで追跡することも出来ます。

べんりー

 

技術メモ, 趣味 Leave a comment

【応用】MaxScript – 3dsmax – 樹木をMatIDで分割

AEC拡張機能の樹木をMatIDで分割したい時ありますよね。
今回は標準で入っているヨーロッパ赤松を操作してみます。

まず、MatIDを調べます。
MatIDは

getFaceMatID $tree01 i

で取得できます。

$tree01はオブジェクト名で、iはface番号です。

標準で入っているヨーロッパ赤松はIDが1~4だったので、今回は4つにわけます。

1:幹、2:枝、3:小枝、4:葉 のようです。

もちろん他の樹木パックとかでは枝と葉のように2つだったりします。

事前に編集可能メッシュにしておきます。

んで、振り分けます。

for i = 1 to $tree01.numfaces do
(
type = getFaceMatID $tree01 i

	if(type == 1) then (
		append leader i
	)
	if(type == 2) then (
		append branch i
	)
	if(type == 3) then (
		append subbranch i
	)
	if(type == 4) then (
		append leaf i
	)
)

次に元のオブジェクトからデタッチします。

test = meshop.detachFaces $tree01 leader delete:false asMesh:true isSelected:on
mesh mesh:test
$Object001.name ="1"

test2 = meshop.detachFaces $tree01 branch delete:false asMesh:true isSelected:on
mesh mesh:test2
$Object001.name ="2"

test3 = meshop.detachFaces $tree01 subbranch delete:false asMesh:true isSelected:on
mesh mesh:test3
$Object001.name ="3"

test4 = meshop.detachFaces $tree01 leaf delete:false asMesh:true isSelected:on
mesh mesh:test4
$Object001.name ="4"

最後に元オブジェクトを削除します。

delete $tree01

まとめ

leader=#()
branch=#()
subbranch=#()
leaf=#()

for i = 1 to $tree01.numfaces do
(
type = getFaceMatID $tree01 i

	if(type == 1) then (
		append leader i
	)
	if(type == 2) then (
		append branch i
	)
	if(type == 3) then (
		append subbranch i
	)
	if(type == 4) then (
		append leaf i
	)
)

test = meshop.detachFaces $tree01 leader delete:false asMesh:true isSelected:on
mesh mesh:test
$Object001.name ="1"

test2 = meshop.detachFaces $tree01 branch delete:false asMesh:true isSelected:on
mesh mesh:test2
$Object001.name ="2"

test3 = meshop.detachFaces $tree01 subbranch delete:false asMesh:true isSelected:on
mesh mesh:test3
$Object001.name ="3"

test4 = meshop.detachFaces $tree01 leaf delete:false asMesh:true isSelected:on
mesh mesh:test4
$Object001.name ="4"

delete $tree01

実行結果

(移動させています。スクリプト実行後は全て原点にあります)

 

ネタ切れ気味です。

 

3dsmax, maxscript Leave a comment