(技術メモ)openFrameworks for iOSで方位磁石を使う / 磁石に反応させる

iPhoneに磁石を近づけると何か反応する,というインタラクションを作るためのメモ.

まず,iPhone3 以降のiPhoneには方位磁石が内蔵されており,CoreLocation.Frameworkというフレームワークを使えば周囲の磁力の変化を計測できる.
i pod touchには残念ながらこの機能は搭載されておらず,新しくても古くてもtouchではコンパスは使えない.

あと最も注意すべきこととして,iPhoneに強い磁石をくっつけたりすると多分壊れる.実験等を行う場合は磁力に注意.

appleがiOS環境のわかりやすいExampleを公開している
https://developer.apple.com/library/ios/samplecode/Teslameter/Listings/ReadMe_txt.html
objectiveCで作りたい人であればこれを参考にすればOK.

このプログラムの肝は

// Compute and display the magnitude (size or strength) of the vector.
//      magnitude = sqrt(x^2 + y^2 + z^2)

CGFloat magnitude = sqrt(heading.x*heading.x + heading.y*heading.y + heading.z*heading.z);

 [magnitudeLabel setText:[NSString stringWithFormat:@”%.1f”, magnitude]];

という部分.ようするにx y z の値を二乗ずつして足してスカラー値を取得している.iPhoneのマイクの辺りに磁石を近づけるとこのmagnitudeが大きく減少したり上昇したりする.

 

さて,ここからはこの機能をOFで使うにはどうするか.

結論としてはOFのExampleに方位磁石を使うものがあるので,それを修正するだけでOK.

使うexampleは「CoreLocationExample」というもの.これを見るとofxiOSCoreLocationというCoreLocationの機能をOF上で使うためのライブラリの使い方が分かる.

あとは

float magnitude = sqrt(coreLocation->getCompassX()*coreLocation->getCompassX() + coreLocation->getCompassY()*coreLocation->getCompassY() + coreLocation->getCompassZ()*coreLocation->getCompassZ());

みたいなかんじで計算すればiOS用のexampleと同様に磁力の変化が計測できる.

注意点として,ofxiOSCoreLocation.mmにあるように

 * ——————– note ———————–

 *

 * To get the compass to work on 3GS+ phones you’ll need to double clock on the iPhone oF target from the targets

 * dropdown in the grops & files menu. Make sure ‘All Configurations’ is selected, and then find the option called

 * ‘Preprocessor Macros’. Add to that: OF_TARGET_BUILD_SDK_IS_3_PLUS

 * ————————————————-

ビルドのターゲットを3GS以上にしないと正常に作用しないようです.

libpd/pd-for-ios settings

It’s pretty simple to do. exampleを動かすだけならとても簡単です

Mac OSX 10.9.2
Xcode version 5.1

reference : https://github.com/libpd/pd-for-ios/wiki/ios

These steps will show you how to set up a new Xcode project with libpd.

In order to set up Pd for iOS, open a shell, go to the directory where you want to put your iOS Xcode projects, and perform the following steps:

git clone git://github.com/libpd/pd-for-ios.git
cd pd-for-ios
git submodule init
git submodule update

 
↑Just downloading a zip file will not work well. You have to  use git and update submodule.
I’ve succeed to install example projects in my i Pod Touch.