I2Cセンサーの種類 |
3軸加速度センサー |
|
主な機能 |
X・Y・Z軸の加速度センサー X・Y・Zの各軸±2G、4G、8G,16Gの計測が可能 |
|
I2Cデバイス名 |
ADXL345 |
|
写真
|
||
開発したデバイスの入手先 製品名 品番・型番 |
スイッチサイエンス GROVE – I2C 三軸加速度センサ ADXL345搭載(SEEED-101020054 ) |
|
デバイスのData-Sheet |
http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf |
|
デバイスの主な仕様
|
電源電圧 I2Cアドレス 分解能 I2C通信速度 検出軸 |
2.0V~3.6V (5Vでは使えません) 0X1D,0X3A,0X3B,0X53,0XA6,0XA7(CS、ALTのPinで選択可能) 10bit 100K/400kbps X軸、Y軸、Z軸の加速度検出 |
説明 |
測定時は23μA,スタンバイ時0.1μAと超低消費電力で電源電圧も2.0V~と電池駆動も可能な低消費電力です。 I/Oの電圧も1.7V~VDDと1.8V回路でも利用可能なI2Cデバイスです。 また、用途の例としてハードデスク(HDD)のプロテクション等があり、高感度の 計測が可能で10KGまでのショックに耐える事ができます。 また、シングルタップ、ダブルタップ等の検出も可能と成っています。
測定値の読み出す場合X,Y,Zは、全て10bitですので2つの8bitのレジスタよりデータを得て合算や1bit単位での設定が有りますが、I2Cセンサードライバーでは10bitへの合算/分割はドライバー内部で処理し、10進数でプロパティへセットされます。
通常のレジスタの読み書きは、register |
|
|
|
|
開発・テスト風景
チョットの動きでも、結構値が変化します。高感度です。 |
I2Cデバイス内部のレジスタ構成(レジスタに対する設定値、レジスタの内容等のご質問はお答えできません)
|
I2Cセンサー・ドライバーで準備済みのプロパティ・メソッド
プロパティ
機能名 |
機能説明 |
DEVID |
Device IDを取得します。 |
THRESH_TAP |
タップしきい値を取得または設定します。 |
OFSX |
X-axisオフセットを取得または設定します。 |
OFSY |
Y-axisオフセットを取得または設定します。 |
OFSZ |
Z-axisオフセットを取得または設定します。 |
DUR |
タップ持続時間を取得または設定します。 |
Latent |
タップ待ち時間を取得または設定します。 |
Window |
タップWindowを取得または設定します。 |
THRESH_ACT |
Activityしきい値を取得または設定します。 |
THRESH_INACT |
Inactivityしきい値を取得または設定します。 |
TIME_INACT |
Inactivity timeを取得または設定します。 |
INACT_Z_enable |
INACT_Z_enableを取得または設定します。 |
INACT_Y_enable |
INACT_Y_enableを取得または設定します。 |
機能名 |
機能説明 |
INACT_X_enable |
INACT_X_enableを取得または設定します。 |
INACT_acdc |
INACT_acdcを取得または設定します。 |
ACT_Z_enable |
ACT_Z_enableを取得または設定します。 |
ACT_Y_enable |
ACT_Y_enableを取得または設定します。 |
ACT_X_enable |
ACT_X_enableを取得または設定します。 |
ACT_acdc |
ACT_acdcを取得または設定します。 |
THRESH_FF |
Free-fallしきい値を取得または設定します。 |
TIME_FF |
Free-fall timeを取得または設定します。 |
TAP_Z_enable |
TAP_Z_enableを取得または設定します。 |
TAP_Y_enable |
TAP_Y_enableを取得または設定します。 |
TAP_X_enable |
TAP_X_enableを取得または設定します。 |
Suppress |
Suppressを取得または設定します。 |
TAP_Z_source |
TAP_Z_sourceを取得します。 |
TAP_Y_source |
TAP_Y_sourceを取得します。 |
TAP_X_source |
TAP_X_sourceを取得します。 |
Asleep |
Asleepを取得します。 |
ACT_Z_source |
ACT_Z_sourceを取得します。 |
ACT_Y_source |
ACT_Y_sourceを取得します。 |
ACT_X_source |
ACT_X_sourceを取得します。 |
Rate |
Rateを取得または設定します。 |
機能名 |
機能説明 |
LOW_POWER |
LOW_POWERを取得または設定します。 |
Wakeup |
Wakeupを取得または設定します。 |
Sleep |
Sleepを取得または設定します。 |
Measure |
Measureを取得または設定します。 |
AUTO_SLEEP |
AUTO_SLEEPを取得または設定します。 |
Link |
Linkを取得または設定します。 |
INT_ENABLE_Overrun |
INT_ENABLEのOverrunを取得または設定します。 |
INT_ENABLE_Watermark |
INT_ENABLEのWatermarkを取得または設定します。 |
INT_ENABLE_FREE_FALL |
INT_ENABLEのFREE_FALLを取得または設定します。 |
INT_ENABLE_Inactivity |
INT_ENABLEのInactivityを取得または設定します。 |
INT_ENABLE_Activity |
INT_ENABLEのActivityを取得または設定します。 |
INT_ENABLE_DOUBLE_TAP |
INT_ENABLEのDOUBLE_TAPを取得または設定します。 |
INT_ENABLE_SINGLE_TAP |
INT_ENABLEのSINGLE_TAPを取得または設定します。 |
INT_ENABLE_DATA_READY |
INT_ENABLEのDATA_READYを取得または設定します。 |
INT_MAP_Overrun |
INT_MAPのOverrunを取得または設定します。 |
INT_MAP_Watermark |
INT_MAPのWatermarkを取得または設定します。 |
INT_MAP_FREE_FALL |
INT_MAPのFREE_FALLを取得または設定します。 |
INT_MAP_Inactivity |
INT_MAPのInactivityを取得または設定します。 |
INT_MAP_Activity |
INT_MAPのActivityを取得または設定します。 |
INT_MAP_DOUBLE_TAP |
INT_MAPのDOUBLE_TAPを取得または設定します。 |
機能名 |
機能説明 |
INT_MAP_SINGLE_TAP |
INT_MAPのSINGLE_TAPを取得または設定します。 |
INT_MAP_DATA_READY |
INT_MAPのDATA_READYを取得または設定します。 |
INT_SOURCE_Overrun |
INT_SOURCEのOverrunを取得します。 |
INT_SOURCE_Watermark |
INT_SOURCEのWatermarkを取得します。 |
INT_SOURCE_FREE_FALL |
INT_SOURCEのFREE_FALLを取得します。 |
INT_SOURCE_Inactivity |
INT_SOURCEのInactivityを取得します。 |
INT_SOURCE_Activity |
INT_SOURCEのActivityを取得します。 |
INT_SOURCE_DOUBLE_TAP |
INT_SOURCEのDOUBLE_TAPを取得します。 |
INT_SOURCE_SINGLE_TAP |
INT_SOURCEのSINGLE_TAPを取得します。 |
INT_SOURCE_DATA_READY |
INT_SOURCEのDATA_READYを取得します。 |
Range |
Rangeを取得または設定します。 |
Justify |
Justifyを取得または設定します。 |
FULL_RES |
FULL_RESを取得または設定します。 |
INT_INVERT |
INT_INVERTを取得または設定します。 |
SPI |
SPIを取得または設定します。 |
SELF_TEST |
SELF_TESTを取得または設定します。 |
DATAX |
X-Axis Dataを取得します。 |
DATAY |
Y-Axis Dataを取得します。 |
DATAZ |
Z-Axis Dataを取得します。 |
Samples |
Samplesを取得または設定します。 |
Trigger |
Triggerを取得または設定します。 |
FIFO_MODE |
FIFO_MODEを取得または設定します。 |
Entries |
Entriesを取得します。 |
FIFO_TRIG |
FIFO_TRIGを取得します。 |
メソッド
機能名 |
機能説明 |
Init |
I2Cバスコントローラに指定された接続設定を使って非同期的に接続します。 |
Read |
指定レジスタ読込 |
Write |
指定レジスタ書込 |
定数
機能名 |
機能説明 |
定数値 |
REG_ADDR.DEVID |
レジスタDEVID |
0x00 |
REG_ADDR.THRESH_TAP |
レジスタTHRESH_TAP |
0x1D |
REG_ADDR.OFSX |
レジスタOFSX |
0x1E |
REG_ADDR.DUR |
レジスタDUR |
0x21 |
REG_ADDR.Latent |
レジスタLatent |
0x22 |
REG_ADDR.Window |
レジスタWindow |
0x23 |
REG_ADDR.THRESH_ACT |
レジスタTHRESH_ACT |
0x24 |
REG_ADDR.THRESH_INACT |
レジスタTHRESH_INACT |
0x25 |
REG_ADDR.TIME_INACT |
レジスタTIME_INACT |
0x26 |
REG_ADDR.ACT_INACT_CTL |
レジスタACT_INACT_CTL |
0x27 |
REG_ADDR.THRESH_FF |
レジスタTHRESH_FF |
0x28 |
REG_ADDR.TIME_FF |
レジスタTIME_FF |
0x29 |
REG_ADDR.TAP_AXES |
レジスタTAP_AXES |
0x2A |
REG_ADDR.ACT_TAP_STATUS |
レジスタACT_TAP_STATUS |
0x2B |
REG_ADDR.BW_RATE |
レジスタBW_RATE |
0x2C |
REG_ADDR.POWER_CTL |
レジスタPOWER_CTL |
0x2D |
REG_ADDR.INT_ENABLE |
レジスタINT_ENABLE |
0x2E |
REG_ADDR.INT_MAP |
レジスタINT_MAP |
0x2F |
REG_ADDR.INT_SOURCE |
レジスタINT_SOURCE |
0x30 |
REG_ADDR.DATA_FORMAT |
レジスタDATA_FORMAT |
0x31 |
REG_ADDR.DATAX0 |
レジスタDATAX0 |
0x32 |
REG_ADDR.FIFO_CTL |
レジスタFIFO_CTL |
0x38 |
REG_ADDR.FIFO_STATUS |
レジスタFIFO_STATUS |
0x39 |
I2Cセンサードライバーを使ったVBでのサンプルソース
Imports I2CLibrary Public NotInheritable Class ADXL345Page Inherits Page Private Const ADXL345_Address As Byte = &H53 Private ADXL345 As ADXL345 = New ADXL345() Private WithEvents RefreshTimer As DispatcherTimer = New DispatcherTimer() Public Sub New() InitializeComponent() Call Init() End Sub
Private Async Sub Init() Await ADXL345.Init(ADXL345_Address) End Sub
Private Sub btnStart_Click(sender As Object, e As RoutedEventArgs) ADXL345.Read(ADXL345.REG_ADDR.DATA_FORMAT) ADXL345.Read(ADXL345.REG_ADDR.POWER_CTL) ADXL345.Read(ADXL345.REG_ADDR.BW_RATE) ADXL345.Read(ADXL345.REG_ADDR.INT_ENABLE) ADXL345.Read(ADXL345.REG_ADDR.TAP_AXES)
ADXL345.Range = 0 ‘+-2G ADXL345.Rate = 10 ‘100Hz ADXL345.Measure = 1 ‘測定モード ADXL345.INT_ENABLE_SINGLE_TAP = 1 ‘シングルタップ検知 ADXL345.TAP_X_enable = 1 ADXL345.TAP_Y_enable = 1 ADXL345.TAP_Z_enable = 1
ADXL345.Write(ADXL345.REG_ADDR.DATA_FORMAT) ADXL345.Write(ADXL345.REG_ADDR.POWER_CTL) ADXL345.Write(ADXL345.REG_ADDR.BW_RATE) ADXL345.Write(ADXL345.REG_ADDR.INT_ENABLE) ADXL345.Write(ADXL345.REG_ADDR.TAP_AXES)
ADXL345.THRESH_TAP = &H30 ‘タップ割り込みのしきい値 ADXL345.DUR = &H10 ‘最大タップ持続時間
ADXL345.Write(ADXL345.REG_ADDR.THRESH_TAP) ADXL345.Write(ADXL345.REG_ADDR.DUR) RefreshTimer.Interval = TimeSpan.FromMilliseconds(100) RefreshTimer.Start() End Sub Private Sub Measurement(sender As Object, e As Object) Handles RefreshTimer.Tick RefreshTimer.Stop()
ADXL345.Read(ADXL345.REG_ADDR.DATAX0) ADXL345.Read(ADXL345.REG_ADDR.INT_SOURCE)
Debug.WriteLine(“X-Axis:{0:D}”, ADXL345.DATAX) Debug.WriteLine(“Y-Axis:{0:D}”, ADXL345.DATAY) Debug.WriteLine(“Z-Axis:{0:D}”, ADXL345.DATAZ)
If ADXL345.INT_SOURCE_SINGLE_TAP = 1 Then Debug.WriteLine(“SINGLE_TAP detect”) End If
RefreshTimer.Start() End Sub
Private Sub btnStop_Click(sender As Object, e As RoutedEventArgs) ADXL345.Read(ADXL345.REG_ADDR.POWER_CTL)
ADXL345.Measure = 0
ADXL345.Write(ADXL345.REG_ADDR.POWER_CTL)
RefreshTimer.Stop() End Sub
Private Sub btnBack_Click(sender As Object, e As RoutedEventArgs) RefreshTimer.Stop() ADXL345.close() App.rootFrame.Navigate(GetType(MenuPage)) End Sub
End Class
|