1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ev3dev(python) : 加速度センサー(HiTechnic社製)の使い方

Last updated at Posted at 2021-10-03

ev3devでHiTechnic社製の加速度センサーを使う方法が見当たらなかったのでメモ
#参考サイト
[1]

[2]

#センサーの確認
Base"Sensor"クラスを使用してセンサ情報を確認する(参考サイト[1])。
※加速度センサーはポート1に接続

#!/usr/bin/env/ python3
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor import Sensor

s1 = Sensor(INPUT_1)
print(s1.address, s1.driver_name)

実行結果
加速度センサが接続されている「ht-nxt-accel」と表示される

ev3-ports:in1:i2c1 ht-nxt-accel

他にも色々確認してみる

#!/usr/bin/env/ python3

# from ev3dev2.sensor import INPUT_1, INPUT_2, INPUT_3, INPUT_4
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor import Sensor

s1 = Sensor(INPUT_1)
print(s1.address, s1.driver_name)

#mode一覧を確認
print("modes:", s1.modes)
#modeを"ALL"に設定
s1.mode = "ALL"
#modeを確認
print("mode:", s1.mode)
#取得するvalueの数を確認
print("num_values", s1.num_values)
print("//---------//")
#各valueの値を確認する
for i in range(s1.num_values):
    print("Value[{}] : ".format(i) ,s1.value(i))

実行結果

robot@ev3dev:~/testspace$ python3 ScanSensorPort.py 
ev3-ports:in1:i2c1 ht-nxt-accel
modes: ['ACCEL', 'ALL']
mode: ALL
num_values 6
//---------//
Value[0] :  1
Value[1] :  253
Value[2] :  49
Value[3] :  1
Value[4] :  1
Value[5] :  1

参考サイト[2]よりmode='ALL'にしてvalue(0)~(2)を取得すれば
3軸(x, y, z)の値が取得できることがわかる。

#3軸(x, y, z)の加速度を取得するプログラム
上記の確認より以下のプログラムで3軸の加速度が取得できる。

AccelerationSensor.py
#!/usr/bin/env/ python3
 
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor import Sensor

class AccelerationSensor:
    # クラスを呼び出す際に引数として加速度センサーが接続されているポートを指定する。
    # modeで"ALL"(3軸の加速度が必要な場合)を指定しな場合、初期値が"ACCEL"となりエラーになる
    def __init__(self, input_n):
        self.s = Sensor(input_n)
        self.s.mode = "ALL"
    
    def ThreeAxisAcceleration(self):
        #3軸の加速度を取得する
        x = self.Conversion(self.s.value(0))
        y = self.Conversion(self.s.value(1))
        z = self.Conversion(self.s.value(2))
        acce_value = (x, y, z)
        return(acce_value)
    
    def Conversion(self, value): 
        # 生のセンサデータ(0~255)を加速度g(-2g ~ 2g)の値に変換する
        # 0~127   = -2g ~ 0g
        # 128~255 =  0g ~ 2g 
        coefficient = 2/128
        if value < 128:
            value = (value * coefficient) * -1
            value = round(value, 2)
            return(value)
        elif value >= 128:
            value = (255 - value) * coefficient
            value = round(value, 2)
            return(value)

if __name__ == '__main__':
    acc_sensor =  AccelerationSensor(INPUT_1)
    while True:
        print(acc_sensor.ThreeAxisAcceleration())

実行結果

robot@ev3dev:~/testspace$ python3 AccelerationSensor.py 
(0.09, -0.02, -0.78)
(0.09, -0.02, -0.78)
(0.09, -0.02, -0.78)
(0.09, -0.02, -0.78)
...

※注意
加速度センサーでは重力により地面に対して垂直に重力加速度(0.98)が測定される
(センサにより実際の値は誤差がある)
上記結果だとz軸のマイナス方向に重力加速度(-0.78)が働いている.

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?