稼働中

Raspberry Pi Pico(d_20)KXR94-2050 加速度センサ

<h2>KXR94-2050モジュール</h2>
KXR94-2050モジュールはチップ型3軸加速度センサーKXR94-2050を基盤に半田付けされたモジュールです。
測定レンジは±2gです。電源3.3Ⅴ時、感度660mV/gです。出力は1.65Vがゼロ点になります。
※micro:bitの記事e_07からRaspberry Pi Picoで使えるように追記、修正等をしました。

<h3>外観</h3>
KXR94-2050モジュールの外観写真です。(以後はKXR94-2050と記載します)
KXR-94-2500外観KXR-94モジュール回路図
※KXR94-2050モジュールのデータシートより抜粋

接続例

KXR94-2050の電源電圧は2.5V~5.25VなのでRaspberry Pi Picoの3.3V電源を使いました。
KXR94-2050の出力(X、Y、Z)をRaspberry Pi PicoのADCで測定します。
ADC0~2(GP26~27)を使いました。ADCの変換は3.3V基準になります。
KXR94-2050のEnable(2ピン)はVddに、SelfTest(5ピン)はGNDに、Vmux(4ピン)は無接続にします。
KXR94-2050 接続図

KXR94-2050の説明

データシートから抜粋してKXR94-2050の説明します。
KXR94-2050の感度、オフセット電圧は、電源電圧により変わります。
感度=電源電圧Vdd ÷ 5 (V/g)、オフセット電圧(0gの出力電圧)=電源電圧Vdd ÷ 2 (V)になります。
電源電圧3.3Vの場合、それぞれ660mV、1.65Vになります。
KXR94-2050の向きで以下の出力応答になります。
KXR94-2050 レスポンス
※KXR94-2050のデータシートから抜粋

スクリプト

まず、ゼロを調整します。KXR94-2050のスクリプトは以下のようにしました。
Position 5 で測定して、その差分をゼロ調整値とします。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。
※Raspberry Pi Pico単独で動作させるには’main.py’としてRaspberry Pi Picoにuploadして使います。


pico_kxr94_zero_01b.py
#!/usr/bin/env python
# -*- coding: utf-8 -*
from machine import ADC,Pin
import time
# KXR94-2500 ±2g Tri-axis Accelerometer
vdd=3300           # 3300mV 
v_ref=(vdd/2**16)  # ADC_ref=3.3V

Pin(26,mode=Pin.IN)   #ADC(0)
Pin(27,mode=Pin.IN)   #ADC(1)
Pin(28,mode=Pin.IN)   #ADC(2)

# X,Y,Z
out_x=int(ADC(Pin(26)).read_u16()*v_ref) #ADC(0) Pin(26)
out_y=int(ADC(1).read_u16()*v_ref) #Pin(27)
out_z=int(ADC(2).read_u16()*v_ref) #Pin(28)
#print(out_x,out_y,out_z)

# Position 5の出力値 x,y,z 1650,1650,2310
of_x=int(1650-out_x)
of_y=int(1650-out_y)
of_z=int(2310-out_z)
# 出力値 測定差分
print(out_x, out_y, out_z, of_x, of_y, of_z)

実行結果
各差分が-45, 11, -10 mVとなりました。この値で補正して出力するようにします。
>>> %Run -c $EDITOR_CONTENT 0.1
1714 1639 2325 -45 11 -10

先に測定したゼロ調整値を使って、x,y,zの加速度を測定します。
値だけでは正常に測定できたかどうかが分かり難いので、測定した値からx軸、y軸の傾きを算出しています。
スクリプトは以下のようにしました。


pico_kxr94_test_01b.py
#!/usr/bin/env python
# -*- coding: utf-8 -*
from machine import ADC,Pin
import math
#KXR94-2500 ±2g Tri-axis Accelerometer
vdd=3300           # 3300mV 
v_ref=(vdd/2**16)  # ADC_ref=3.3V
#sens= Vdd/5 /1g   1g感度は電源電圧÷5
sens=vdd/5
#offset= Vdd/2
ofset=vdd/2

Pin(26,mode=Pin.IN)   #ADC(0)
Pin(27,mode=Pin.IN)   #ADC(1)
Pin(28,mode=Pin.IN)   #ADC(2)

# ゼロ補正値
(of_x, of_y, of_z)=(-45, 11, -10)
#print(of_x, of_y, of_z)

out_x=int(ADC(0).read_u16()*v_ref + of_x - ofset)  #ADC(0) Pin(26)
out_y=int(ADC(1).read_u16()*v_ref + of_y - ofset)  #Pin(27)
out_z=int(ADC(2).read_u16()*v_ref + of_z - ofset)  #Pin(28)
#print(out_x,out_y,out_z)

# out(mV)/sens(mv/g)=g
x=out_x/sens
y=out_y/sens
z=out_z/sens

# 測定した各軸の加速度を表示
print('x, y, z =', '%7.5f ' % x, '%7.5f ' % y ,'%7.5f ' % z) 

# 各軸の傾きを算出表示
xath = math.atan(x/z)     # x軸傾きの計算
xdeg= math.degrees(xath)
print('x_deg=%4.1f'%xdeg) # 傾きの表示

yath = math.atan(y/z)     # y軸傾きの計算
ydeg= math.degrees(yath)
print('y_deg=%4.1f'%ydeg) # 傾きの表示

関数 部分説明

atan の計算ができるようにmathモジュールを読み込みます。
以下で軸の角度を計算しています。
xath = math.atan(x/z) #傾きの計算
xdeg= math.degrees(xath) #ラジアンから角度に変換

実行結果

結果は以下のようになりました。※Thonnyのshellに表示されます。

机の上で水平に置いて測定しました。


>>> %Run -c $EDITOR_CONTENT 0.1
x, y, z = 0.00455  -0.00152  1.00606 
x_deg= 0.3
y_deg=-0.1
>>> 

x軸を基準に概ね45度に傾けて測定してみました。


>>> %Run -c $EDITOR_CONTENT 0.1
x, y, z = -0.00303  0.67879  0.73636 
x_deg=-0.2
y_deg=42.7
>>> 

y軸を基準に概ね45度に傾けて測定してみました。


>>> %Run -c $EDITOR_CONTENT 0.1
x, y, z = 0.67576  0.04394  0.71061 
x_deg=43.6
y_deg= 3.5
>>> 

正常に測定できているように思います。

まとめ

Raspberry Pi PicoでKXR94-2050を使って各軸の加速度測定ができました。測定値からセンサの傾きを計算してみました。