I2C接続地磁気センサーが秋月電子さんから販売されていたので試してみました。コンパスセンサーや方位センサーとも言われ、方位を取得する際に用いられます。正確な方位を取得するには物理的なコンパスと並べてキャリブレーションした方がいいみたいです。 3.3V電源という部分に注意が必要です。
使用機器は下記のとおり。他、パソコンや電源、PICKIT2も当然ながら必要です。
地磁気センサー
HMC5883L使用 デジタルコンパスモジュール
3軸地磁気センサ DIP化キット
シリアル変換 USB-USART変換基盤_ZT-FTDI03
マイコンボード(PIC16F1947搭載)
ZEATEC co.,ltd. ZT-PIC16F194701(3.3V仕様)
接続は下記のとおりです。
使い方としてはhmc5883l_init()をスタート時に実行し、hmc5883l_getval()を定期的に実行するだけで、各変数に値が書き込まれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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.