株式会社ジーテック

制御機器を小ロット多品種で設計製作

地磁気センサー(HMC5883L)のテスト

I2C接続地磁気センサーが秋月電子さんから販売されていたので試してみました。コンパスセンサーや方位センサーとも言われ、方位を取得する際に用いられます。正確な方位を取得するには物理的なコンパスと並べてキャリブレーションした方がいいみたいです。 3.3V電源という部分に注意が必要です。

使用機器

使用機器は下記のとおり。他、パソコンや電源、PICKIT2も当然ながら必要です。

地磁気センサー 
HMC5883L使用 デジタルコンパスモジュール
3軸地磁気センサ DIP化キット

シリアル変換 USB-USART変換基盤_ZT-FTDI03
マイコンボード(PIC16F1947搭載)
ZEATEC co.,ltd. ZT-PIC16F194701(3.3V仕様)

接続

接続は下記のとおりです。

ちょっと解説

使い方としてはhmc5883l_init()をスタート時に実行し、hmc5883l_getval()を定期的に実行するだけで、各変数に値が書き込まれます。

int hmc5883l_addr_r = 0b00111101;//0x3d
int hmc5883l_addr_w = 0b00111100;//0x3c
long hmc5883l_x = 0;//X軸値
long hmc5883l_y = 0;//Y軸値
long hmc5883l_z = 0;//Z軸値
    
void hmc5883l_write(int reg, int val){
    i2c_start();
    i2c_write(hmc5883l_addr_w);//書込みアドレス送信
    i2c_write(reg);//
    i2c_write(val);//
    i2c_stop();
}
    
int hmc5883l_read(int reg){
    
    int ans = 0;
    
    i2c_start();
    i2c_write(hmc5883l_addr_w);//書込みアドレス送信
    i2c_write(reg);//
    i2c_start();
    i2c_write(hmc5883l_addr_r);//読み込みアドレス送信
    ans = i2c_read(0);
    i2c_stop();
    
    return ans;
}
    
//コンパスモジュールの初期化
void hmc5883l_init(){
    hmc5883l_write(0x00,0x70);
    hmc5883l_write(0x01,0xA0);
    hmc5883l_write(0x02,0x00);
}
    
void hmc5883l_getval(){
    hmc5883l_x = hmc5883l_read(0x03) << 8;
    hmc5883l_x = hmc5883l_x + hmc5883l_read(0x04);
    hmc5883l_y = hmc5883l_read(0x05) << 8;
    hmc5883l_y = hmc5883l_y + hmc5883l_read(0x06);
    hmc5883l_z = hmc5883l_read(0x07) << 8;
    hmc5883l_z = hmc5883l_z + hmc5883l_read(0x08);
}

プロジェクトファイルも含めたサンプル 16f1947_hmc5883l.zip
開発環境:MPLAB_IDE_8_92 + CCS-C PCMコンパイラVer.4.132

©ZEATEC co.,ltd.