角度を測るセンサはいくつかありますが、可変抵抗のようなアナログ式のエンコーダは計測時にブレ(ノイズ)が入るため、デジタル式のを探していました。代表的なのがAS5048A(SPI通信)とMT6701(I2C通信)で、どちらも14bit(16,384)の解像度(=0.0220°)があります。
購入方法
MT6701で検索するとAmazonやAliexpressがヒットします。納品日や価格を考えるとAliexpressで良いかと思います。磁石付きのものを買うのがオススメ。購入リンクは↓

TENSTAR 2 個 MT6701 ブラックボード磁気エンコーダ磁気誘導角度測定センサーモジュール 14 ビット高精度 - AliExpress 502
Smarter Shopping, Better Living! Aliexpress.com
接続方法


・VDD:5~3.3V(使うマイコンと同じ電圧にする)
・SCL:I2Cのクロック(プルアップ済み)
・SDA:I2Cのデータ(プルアップ済み)
・GND
・Analog/PWM:今回は使いません
テスト用治具
3Dプリントでテスト用治具を作りました。丸いノブを回すと磁石が回転します。磁石はICの中心にから真上に1mm離したところで回転します。


テスト用プログラム
Arduinoで実行しています。I2CはSDA:2ピン、SCL:1ピンにしていますが、適宜変更可能です。
|
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
#include <Wire.h> #define MT6701_ADDR 0x06 void setup() { Serial.begin(115200); // CoreS3のGrove端子 Wire.begin(2, 1); // SDA=2, SCL=1 Serial.println("MT6701 Angle Monitor"); } uint16_t readAngleRaw() { uint8_t highByte, lowByte; // レジスタ0x03読み出し Wire.beginTransmission(MT6701_ADDR); Wire.write(0x03); Wire.endTransmission(false); Wire.requestFrom(MT6701_ADDR, 1); if (Wire.available()) { highByte = Wire.read(); } else { return 0xFFFF; } // レジスタ0x04読み出し Wire.beginTransmission(MT6701_ADDR); Wire.write(0x04); Wire.endTransmission(false); Wire.requestFrom(MT6701_ADDR, 1); if (Wire.available()) { lowByte = Wire.read(); } else { return 0xFFFF; } // 14bit角度値生成 uint16_t angle = ((uint16_t)highByte << 6) | (lowByte & 0x3F); return angle; } void loop() { uint16_t raw = readAngleRaw(); if (raw != 0xFFFF) { float deg = raw * 360.0f / 16384.0f; Serial.print("Raw: "); Serial.print(raw); Serial.print(" Angle: "); Serial.print(deg, 2); Serial.println(" deg"); } else { Serial.println("Read Error"); } delay(500); } |
シリアル通信出力
|
1 2 3 4 5 6 7 |
Raw: 6628 Angle: 145.63 deg Raw: 6628 Angle: 145.63 deg Raw: 6628 Angle: 145.63 deg Raw: 6628 Angle: 145.63 deg Raw: 6628 Angle: 145.63 deg Raw: 6628 Angle: 145.63 deg … |
丸いノブを回すと角度が変わります。角度の正確性はわかりませんが、ノブに触っていないときは数値が全く動かないため、安定度は抜群だと思われます。


コメント