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)が働いている.
以上