IMU WT901からUARTでデータ取得①接続

 WT901は、IMUのMPU9250とコントローラCortex-M0を搭載したボードです。MPU9250はTDK InvenSenseのGyroscope(ジャイロスコープ)、Accelerometer(加速度)、Magnetometer(磁力)の9軸慣性測定ユニットです。商社マウザーによると製造中止商品になっていますが、市場にはたくさん出回っています。

 アマゾンから入手しました。

WT901おもなスペック

  データシート  ユーザーズマニュアル

  • 動作電圧 3.3〜5V
  • 消費電流 25mA以下
  • 形状 15.24×15.24×2mm
  • パッド間隔:上下100ミル(2.54mm)、約600ミル(15.24mm)
  • 測定 加速度:X、Y、Z、角度:X、Y、Z、磁気:X、Y、Z
  • 範囲 加速度:±16g、角速度:±2000°/s、磁気:±4900uT
  • 分解能(16ビット) 加速度:0.01g、磁気:0.15µT
  • 安定性 加速度:0.005g、角速度:0.05°/ s
  • 出力レート 0.1~200Hz
  • ノイズ 加速度:300μg/√Hz 、0.01°/√Hz 
  • 測定誤差:0.05°
  • シリアル(UART、TTLレベル) 2400〜921600bps。デフォルト9600bps
  • I2C 400kHz

ピン配置

D0 アナログ入力、ディジタル入出力、PWM D2 アナログ入力、ディジタル入出力、PWM
Vcc 3.3/5V Vcc 3.3/5V
RX シリアル入力 SCL I2Cクロック
Tx シリアル出力 SDA I2Cデータ
GND GND GND GND
D1 アナログ入力、ディジタル入出力、PWM D3 アナログ入力、ディジタル入出力、PWM

USB-シリアル

 アマゾンからUSB-シリアル変換ボードを入手しました。

  • チップ CP2102
  • 電源電圧 5V
  • 外形 16×20mm
  • サポートするボー レート 300bps~1Mbps

接続

USB-シリアル・ボード WT901ボード
+5V Vcc
TxD Rx
RxI Tx
GND GND

サンプル・プログラム

 COMポートと通信速度を合わせました。

s=serial('com3','baudrate',9600) ;fopen(s) ;%Open Com Port

 実行例です。

 COMポートの記述は、matlab(R2021b)の解説ではserialではなくserialportになっています。変更して動かしましたが、エラーが出ます。

 serialportでreadすると、[1,2,3,4,5]のようにデータが取得できますが、 serialは[1;2;3;4;5]のようです。転置して対応しました。また、serialはfopenしてfreadですが、serialportはreadで読み込めます。


clear
close all;
instrreset;
disp('Press Ctrl+C to stop collecting data!')
s = serialport('COM3', 9600);
f = 20;%DataFrequce
t=0;
cnt = 1;
aa=[0 0 0];
ww=[0 0 0];
AA = [0 0 0];
tt = 0;
a=[0 0 0]';
w=[0 0 0]';
A=[0 0 0]';
while(1)
    Head = read(s,2,'uint8');
    if (Head(1)~=uint8(85))
        continue;
    end    
    switch(Head(2))
        case 81 
            a = (read(s,3,'int16')/32768*16)';     
            End = (read(s,3,'uint8'))';
        case 82 
            w = (read(s,3,'int16')/32768*2000)';    
            End = (read(s,3,'uint8'))';
        case 83 
            A = (read(s,3,'int16')/32768*180)';
            aa=[aa;a'];
            ww = [ww;w'];
            AA = [AA;A'];
            tt = [tt;t];
            if (cnt>(f/5)) %Plot in low frequce, 
                subplot(3,1,1);plot(tt,aa);title(['Acceleration = ' num2str(a') 'm2/s']);ylabel('m2/s');
                subplot(3,1,2);plot(tt,ww);title(['Gyro = ' num2str(w') '。・s']);ylabel('。・s');
                subplot(3,1,3);plot(tt,AA);title(['Angle = ' num2str(A') '。']);ylabel('。');              
                cnt=0;
                drawnow;
                if (size(aa,1)>5*f)%clear history data
                    aa = aa(f:5*f,:);
                    ww = ww(f:5*f,:);
                    AA = AA(f:5*f,:);
                    tt = tt(f:5*f,:);
                end
            end
            cnt=cnt+1;
            t=t+0.01;
            End = (read(s,3,'uint8'))';
    end    
end

前へ

Nicla Sense MEをデータ入力に使う②クオータニオンのデータをBLEで受け取るセントラル

次へ

IMU WT901からUARTでデータ取得②クオータニオンのデータを取得