HMC6352デジタルコンパスの使い方
花岡ちゃんのウィークエンド:デジタルコンパスの実験
前回の続きです。HMC6352の使い方を説明します。
このICはハネウェル製です。余談ですが、ハネウェルといえばアビオニクスの会社というイメージがあって、こんな本物を遊びに使えるとはさすが21世紀だなあという感慨がありますね。
インターフェイスはI2Cです。マイコンはPIC16F886、I2Cのインターフェイスを搭載していますから、下図のとおり、接続は簡単です。また、電源電圧は2.7V-5.2Vなので、5V系でも3.3V系でも問題なく使えます。今回の実験は3.3Vで行いました。
ソフトはCCS-Cで製作しました。実験ソフトは他のコードの改造のため可読性が悪いので、全部を公開するのではなく要所だけを解説します。
CCS-CでI2Cを利用するには、まず下記の擬似命令で設定します。CCS-CのIDEからウィザードでプロジェクトを生成すると、自動的にヘッダに入ります。
#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)
デフォルトの状態では電源投入時、HMC6352はコマンドで方位の読み出しができる「スタンバイモード」になります。ただし、デフォルトがスリープかどうかわからなかったので、念のためプログラムの初期化部分で次の処理を実行してウェィクアップしています。(多分この必要はないと思います)
//
// HM6352をウェィクアップ
//
i2c_start();
i2c_write(0x42); //I2Cアドレス
i2c_write('W'); //WakeUpコマンド
i2c_stop();
なお、HMC6352のデフォルトのI2Cアドレスは0x42です。
次に、方位データを読み出す関数です。
//
// HMC6352から方位を読み出す
//
unsigned long checkCompass(void){
unsigned long xx;
//読み出しコマンドの送信
i2c_start();
i2c_write(0x42);
i2c_write('A');
i2c_stop();
//2バイトの連続読み出し(有効部分12bit)
i2c_start();
i2c_write(0x43);
xx=i2c_read();
xx= (xx << 8) + i2c_read(0);
i2c_stop();
return(xx);
}
スタンバイモードではAコマンドで方位を読み出します。この関数はその読み出し結果、0-3599を返します。この数値は360度を分解能0.1度であらわしたものです。
試作ソフトでは定期的(100ms周期)にこの関数を呼び出して、進行したい方位との誤差をとり、左右のキャタピラを制御しています。
« HMC6352デジタルコンパスを使ってみる | トップページ | すごいオモチャSPY Video TRAKR »
「花岡ちゃんのウィークエンド」カテゴリの記事
- レーザー距離センサVL53L0Xを複数使うには(2022.05.01)
- 【訂正!】PIC24Fでレーザー距離センサVL53L0Xを使う(2022.04.13)
- PIC24Fでレーザー距離センサVL53L0Xを使う(おしまい)(2022.04.14)
- PIC24Fでレーザー距離センサVL53L0Xを使う(その3)(2022.04.13)
- PIC24Fでレーザー距離センサVL53L0Xを使う(その2)(2022.04.12)
コメント