I2Cセンサーの種類 |
ジェスチャーセンサー |
|
主な機能 |
上、下、右、左、近づく、遠ざける、時計回りの指、反時計回りの指、手を振る の9種類の動きを認識します |
|
I2Cデバイス名 |
PAJ7620U2 |
|
写真
|
||
開発したデバイスの入手先 製品名 品番・型番 |
スイッチサイエンス GROVE – ジェスチャー(SEEED-101020083) |
|
デバイスのData-Sheet |
http://www.pixart.com/upload/PAJ7620U2_GDS_v1.0_29032016_20160623194552.pdf |
|
デバイスの主な仕様
|
電源電圧
I2Cアドレス I2C通信速度 検出距離、角度 検出速度 |
2.8V~3.6V (LED専用電源入力が有り3V~4.2V) GROVE – ジェスチャーセンサーは5V動作回路です。 0x73 400Kbps 5~15cmの距離で視野は60°です。外来光の明るさは100K-Lux以内です。 標準モード:60°/S~600°/S ゲームモード:60°/S~1200°/S |
説明 |
人間の手の動き等を検出できるジェスチャーセンサーです。 赤外線を発光するLEDの反射を60×60pixのアレー状の光センサーで受けて動きの検出をしています。 テストの結果では、リアルタイムに近づきつつある等の検出では無く、ひとつの動作が完了してから、その動作は何? だったのかの結果が返ってくる為、ワンテンポ遅れる感じがします。 むやみに、手を動かしてもダメなので、センサーの前でやさしく手を動かして下さい。
レジスタバンクと言う考え方でレジスタアクセスが行われています。また、レジスタは1bit単位での設定箇所が多くあり、I2Cセンサードライバーでは1bit単位の読み書きも個別にプロパティとして準備していますので、どのbitなのかを意識せず、利用できます。
通常のレジスタの読み書きは、register |
|
|
|
|
開発・テスト風景
|
|
I2Cデバイス内部のレジスタ構成(レジスタに対する設定値、レジスタの内容等のご質問はお答えできません)
I2C suspend command (Write 0x01 to enter suspend state). I2C wake-up command is |
PS gain setting (Only functional at proximity detection mode) |
Gesture detection interrupt flag mask |
IDLE S1 Step, for setting the S1, Response Factor |
Gesture/PS detection interrupt flag mask |
IDLE S2 Step, for setting the S2, Response Factor |
Gesture detection interrupt flag |
OPtoS1 Step, for setting the OPtoS1 time of operation state to standby 1 state |
Gesture/PS detection interrupt flag |
S1toS2 Step, for setting the S1toS2 time of standby 1 state to standby 2 state |
State indicator for gesture detection (Only functional at gesture detection mode) |
Enable/Disable PAJ7620U2 |
PS hysteresis high threshold (Only functional at proximity detection mode) |
|
PS hysteresis low threshold (Only functional at proximity detection mode |
|
PS approach state, |
|
PS 8 bit data (Only functional at proximity detection mode) |
|
Object Brightness (Max. |
|
Object Size (Max. 900) |
|
I2Cセンサー・ドライバーで準備済みのプロパティ・メソッド
プロパティ
機能名 |
機能説明 |
REGISTER_BANK |
Register |
Suspend |
REGISTER_BANKが0の場合、サスペンドを設定します。 |
Enable |
REGISTER_BANKが1の場合、PAJ7620U2のEnabled/Disableを取得または設定します。 |
Counter_Clockwise_Mask |
REGISTER_BANKが0の場合、反時計回りのジェスチャーのマスクを取得または設定します。 |
Clockwise_Mask |
REGISTER_BANKが0の場合、時計回りのジェスチャーのマスクを取得または設定します。 |
Backward_Mask |
REGISTER_BANKが0の場合、後退のジェスチャーのマスクを取得または設定します。 |
Forward_Mask |
REGISTER_BANKが0の場合、前進のジェスチャーのマスクを取得または設定します。 |
Right_Mask |
REGISTER_BANKが0の場合、右ジェスチャーのマスクを取得または設定します。 |
Left_Mask |
REGISTER_BANKが0の場合、左ジェスチャーのマスクを取得または設定します。 |
Down_Mask |
REGISTER_BANKが0の場合、下ジェスチャーのマスクを取得または設定します。 |
Up_Mask |
REGISTER_BANKが0の場合、上ジェスチャーのマスクを取得または設定します。 |
Wave_Mask |
REGISTER_BANKが0の場合、ウェーブジェスチャーのマスクを取得または設定します。 |
機能名 |
機能説明 |
Counter_Clockwise |
REGISTER_BANKが0の場合、反時計回りのジェスチャーを取得します。 |
Clockwise |
REGISTER_BANKが0の場合、時計回りのジェスチャーを取得します。 |
Backward |
REGISTER_BANKが0の場合、後退のジェスチャーを取得します。 |
Forward |
REGISTER_BANKが0の場合、前進のジェスチャーを取得します。 |
Right |
REGISTER_BANKが0の場合、右ジェスチャーを取得します。 |
Left |
REGISTER_BANKが0の場合、左ジェスチャーを取得します。 |
Down |
REGISTER_BANKが0の場合、下ジェスチャーを取得します。 |
Up |
REGISTER_BANKが0の場合、上ジェスチャーを取得します。 |
Wave |
REGISTER_BANKが0の場合、ウェーブジェスチャーを取得します。 |
State |
REGISTER_BANKが0の場合、状態を取得します。 |
IDLE_S1_Step |
REGISTER_BANKが1の場合、IDLE_S1_Stepを取得または設定します。 |
IDLE_S2_Step |
REGISTER_BANKが1の場合、IDLE_S2_Stepを取得または設定します。 |
OPTOS1_Step |
REGISTER_BANKが1の場合、OPTOS1_Stepを取得または設定します。 |
S1TOS2_Step |
REGISTER_BANKが1の場合、S1TOS2_Stepを取得または設定します。 |
ObjectBrightness |
REGISTER_BANKが1の場合、ObjectBrightnessを取得または設定します。 |
ObjectSize |
REGISTER_BANKが1の場合、ObjectSizeを取得または設定します。 |
PSGain |
REGISTER_BANKが1の場合、PSGainを取得または設定します。 |
Proximity_Mask |
REGISTER_BANKが0の場合、近接検出のマスクを取得または設定します。 |
機能名 |
機能説明 |
Proximity |
REGISTER_BANKが0の場合、近接検出を取得します。 |
PS_High_Thd |
REGISTER_BANKが1の場合、PS_High_Thdを取得または設定します。 |
PS_Low_Thd |
REGISTER_BANKが1の場合、PS_Low_Thdを取得または設定します。 |
PS_Approach |
REGISTER_BANKが1の場合、PS_Approchを取得します。 |
PS_8bits_Data |
REGISTER_BANKが1の場合、PS_8bits_Dataを取得します。 |
メソッド
機能名 |
機能説明 |
Init |
I2Cバスコントローラに指定された接続設定を使って非同期的に接続します。 |
Read |
指定レジスタ読込 |
Write |
指定レジスタ書込 |
定数
機能名 |
機能説明 |
定数値 |
REG_ADDR.REGISTER_BANK |
レジスタバンク |
0xEF |
REG_ADDR.Suspend |
レジスタバンク0、サスペンド |
0x03 |
REG_ADDR. GESTURE_DETECTION_INTERRUPT_FLAG_MASK |
レジスタバンク0、ジェスチャー検出割り込みフラグマスク |
0x41 |
REG_ADDR. GESTURE_DETECTION_INTERRUPT_FLAG |
レジスタバンク0、ジェスチャー検出割り込みフラグ |
0x43 |
REG_ADDR.State |
レジスタバンク0、ジェスチャー検出のための状態インジケータ |
0x45 |
REG_ADDR.PS_High_Thd |
レジスタバンク0、PSヒステリシス高閾値 |
0x69 |
REG_ADDR.PS_Low_Thd |
レジスタバンク0、PSヒステリシス低閾値 |
0x6A |
REG_ADDR.PS_Approach |
レジスタバンク0、PSアプローチ状態 |
0x6B |
REG_ADDR.PS_8bits_Data |
レジスタバンク0、8bitデータ |
0x6C |
REG_ADDR.ObjectBrightness |
レジスタバンク0、被写体輝度 |
0xB0 |
REG_ADDR.ObjectSize |
レジスタバンク0、オブジェクトサイズ |
0xB1 |
REG_ADDR.PS_Gain |
レジスタバンク1、PSゲイン設定 |
0x44 |
REG_ADDR.IDLE_S1_Step |
レジスタバンク1、S1、レスポンスファクタ |
0x67 |
REG_ADDR.IDLE_S2_Step |
レジスタバンク1、S2、レスポンスファクタ |
0x69 |
REG_ADDR.OPTOS1_Step |
レジスタバンク1、OPtoS1ステップ時間 |
0x6B |
REG_ADDR.S1TOS2_Step |
レジスタバンク1、S1toS2ステップ時間 |
0x6D |
REG_ADDR_Enable |
レジスタバンク1、PAJ7620U2有効/無効 |
0x72 |
I2Cセンサードライバーを使ったVBでのサンプルソース
Imports I2CLibrary Public NotInheritable Class PAJ7620U2Page Inherits Page
Private Const PAJ7620U2_Address As Byte = &H73 Private PAJ7620U2 As PAJ7620U2 = New PAJ7620U2() Private WithEvents RefreshTimer As DispatcherTimer = New DispatcherTimer()
Public Sub New() InitializeComponent() Call Init() End Sub
Private Async Sub Init() Await PAJ7620U2.Init(PAJ7620U2_Address) End Sub
Private Sub btnStart_Click(sender As Object, e As RoutedEventArgs)
PAJ7620U2.Write(PAJ7620U2.REG_ADDR.REGISTER_BANK)
PAJ7620U2.Suspend = &H0 PAJ7620U2.Write(PAJ7620U2.REG_ADDR.Suspend)
PAJ7620U2.REGISTER_BANK = &H1 PAJ7620U2.Write(PAJ7620U2.REG_ADDR.REGISTER_BANK)
PAJ7620U2.Enable = &H1 PAJ7620U2.Write(PAJ7620U2.REG_ADDR.Enable)
PAJ7620U2.REGISTER_BANK = &H0 PAJ7620U2.Write(PAJ7620U2.REG_ADDR.REGISTER_BANK)
PAJ7620U2.Up_Mask = &H1 PAJ7620U2.Down_Mask = &H1 PAJ7620U2.Left_Mask = &H1 PAJ7620U2.Right_Mask = &H1 PAJ7620U2.Forward_Mask = &H1 PAJ7620U2.Backward_Mask = &H1 PAJ7620U2.Counter_Clockwise_Mask = &H1 PAJ7620U2.Clockwise_Mask = &H1 PAJ7620U2.Wave_Mask = &H1 PAJ7620U2.Proximity = &H0
PAJ7620U2.Write(PAJ7620U2.REG_ADDR.GESTURE_DETECTION_INTERRUPT_FLAG_MASK)
RefreshTimer.Interval = TimeSpan.FromMilliseconds(100) RefreshTimer.Start() End Sub Private Sub Measurement(sender As Object, e As Object) Handles RefreshTimer.Tick RefreshTimer.Stop()
PAJ7620U2.REGISTER_BANK = &H0 PAJ7620U2.Write(PAJ7620U2.REG_ADDR.REGISTER_BANK)
PAJ7620U2.Read(PAJ7620U2.REG_ADDR.GESTURE_DETECTION_INTERRUPT_FLAG) PAJ7620U2.Read(PAJ7620U2.REG_ADDR.State)
If (PAJ7620U2.Up = 1) Then Debug.WriteLine(“Up”) End If If (PAJ7620U2.Down = 1) Then Debug.WriteLine(“Down”) End If If (PAJ7620U2.Left = 1) Then Debug.WriteLine(“Left”) End If If (PAJ7620U2.Right = 1) Then Debug.WriteLine(“Right”) End If If (PAJ7620U2.Forward = 1) Then Debug.WriteLine(“Forward”) End If If (PAJ7620U2.Backward = 1) Then Debug.WriteLine(“Backward”) End If If (PAJ7620U2.Clockwise = 1) Then Debug.WriteLine(“Clockwise”) End If If (PAJ7620U2.Counter_Clockwise = 1) Then Debug.WriteLine(“Counter_Clockwise”) End If If (PAJ7620U2.Wave = 1) Then Debug.WriteLine(“Wave”) End If
RefreshTimer.Start() End Sub
Private Sub btnStop_Click(sender As Object, e As RoutedEventArgs) RefreshTimer.Stop() End Sub
Private Sub btnBack_Click(sender As Object, e As RoutedEventArgs) RefreshTimer.Stop() PAJ7620U2.close() App.rootFrame.Navigate(GetType(MenuPage)) End Sub End Class
|