前回のJY901が楽しかったので、bluetoothモジュールのものも買ってみました。BWT901CLって名前らしいです。
加速度、ジャイロ、磁気の9軸センサーです。 勝手に角度とかも計算して出力してくれます。
充電してから使用するので、コードレスで角度などを取得することができます。
値の取得にはBluetoothを使用します。
amazonでも売ってた
届いたものがこれです。センサ本体と充電用ケーブル、あとUSB-TTLですね。
使用する前にPCとペアリングをします。
設定→Bluetoothとその他のデバイス→Bluetoothまたはその他のデバイスを追加する から
センサの電源が入っていれば、HC-06というデバイスが選択肢にあるはずなので、クリックしてください。
PINコードは1234です。
ペアリングが完了したらCOMポートを確認しましょう。
Bluetoothとその他のデバイス→その他のBluetoothオプションをクリックし、COMポートのタブで確認できます。
発信と受信で2つありますが発信の方のCOMポートを使用すれば大丈夫です。
これでセンサから受信できます。受信プログラムはpythonで書きました。
コード(COMポートは使用しているものに編集してください。私はCOM5でした)
from serial import Serial class BWT901(Serial): def __init__(self, Port): self.myserial = super().__init__(Port, baudrate = 9600, timeout = 1) while True: data = super(BWT901, self).read(size=1) if data == b'\x55': print("success!") super(BWT901, self).read(size=10) break print("trying", data) def readData(self): try: for i in range(6): data = super(BWT901, self).read(size=11) if not len(data) == 11: print('byte error:', len(data)) #Time if data[1] == 0x50: self.YY = data[2] self.MM = data[3] self.DD = data[4] self.hh = data[5] self.mm = data[6] self.ss = data[7] self.ms = int.from_bytes(data[8:10], byteorder='little') #Acceleration if data[1] == 0x51: self.accel_x = int.from_bytes(data[2:4], byteorder='little')/32768.0*16 self.accel_y = int.from_bytes(data[4:6], byteorder='little')/32768.0*16 self.accel_z = int.from_bytes(data[6:8], byteorder='little')/32768.0*16 self.Temp = int.from_bytes(data[8:10], byteorder='little')/340.0+36.25 #Angular velocity elif data[1] == 0x52: self.angular_velocity_x = int.from_bytes(data[2:4], byteorder='little')/32768*2000 self.angular_velocity_y = int.from_bytes(data[4:6], byteorder='little')/32768*2000 self.angular_velocity_z = int.from_bytes(data[6:8], byteorder='little')/32768*2000 self.Temp = int.from_bytes(data[8:10], byteorder='little')/340.0+36.25 #Angle elif data[1] == 0x53: self.angle_x = int.from_bytes(data[2:4], byteorder='little')/32768*180 self.angle_y = int.from_bytes(data[4:6], byteorder='little')/32768*180 self.angle_z = int.from_bytes(data[6:8], byteorder='little')/32768*180 #Magnetic elif data[1] == 0x54: self.magnetic_x = int.from_bytes(data[2:4], byteorder='little') self.magnetic_y = int.from_bytes(data[4:6], byteorder='little') self.magnetic_z = int.from_bytes(data[6:8], byteorder='little') #Data output port status elif data[1] == 0x55: self.D0 = int.from_bytes(data[2:4], byteorder='little') self.D1 = int.from_bytes(data[4:6], byteorder='little') self.D2 = int.from_bytes(data[6:8], byteorder='little') self.D3 = int.from_bytes(data[8:10], byteorder='little') except KeyboardInterrupt: super(BWT901, self).close() def getAngle(self): self.readData() return (self.angle_x, self.angle_y, self.angle_z) if __name__ == "__main__": jy_sensor = BWT901("COM5") while True: print(jy_sensor.getAngle())
センサーの電源を入れた後(要充電)、プログラムを実行すればロール、ピッチ、ヨーの角度が表示されたと思います。(実行してから数秒待ってください)