0
0

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 1 year has passed since last update.

nüno ver.2 キットを使って VR 用入力補助デバイスを作る

Last updated at Posted at 2022-09-02

導電性布入門キット nüno ver.2 を使って膝上キーボードを作ります。
image.png

サンプルプログラムでは膝の上に載せた布デバイスをタッチすることでキーボードのタスク切り替え、ESC、Enter を入力できます。
膝の上に載せることで、視界が遮られるシーンでも良好なタッチ感、ホームポジションへの誘導感が得られます。VRでの補助入力デバイスに最適だと思うけど、どうかな?

image.png

パーツリスト

  • nuno ver.2 ケース 上下
  • Arduino Nano 互換機
  • 線材 数本
  • 粘着ジェルテープ 約22cm
  • 両面テープ 約1m
  • 両面スポンジテープ 約3cm
  • 絶縁シール 数個
  • スポンジシート 約7x30cm

つくりかた

nüno ver.2 キットの基板を加工します。

ボタン電池電極x2を取り外し、Grove端子を取り外します。

image.png

黄色い絶縁テープを貼り付け、両面スポンジテープを写真の位置に貼ります。
image.png

Arduino Leonarudo 互換機を貼り付け、ケースしたにはめ込みます。ケースは一部削ってください。

image.png

配線を以下のようにします。
image.png

nuno ver.2基板側 Arduino側 信号名 ケーブル色
VCC VCC 電源供給
GND GND 電源供給
GROVE W 2(SDA) I2C データ
GROVE Y 3(SCL) I2C クロック

ケーブル色はGROVEケーブルの色に合わせています。

ケース上を適宜削ってはめ込みます。

image.png

導電布を2つ折りにし、両面テープで貼り合わせます。
image.png

スポンジシートを両面テープで貼り付け、好きな形に切ります。
image.png

スポンジシートを膝の形に丸め、両面テープと粘着ジェルテープを貼り付けます。
image.png

microUSBケーブルでPCに接続します。膝に貼り付けます。
image.png

サンプルスケッチは以下のとおりです。

ボード設定を LilyPad Arduino USB としてください。(使用しているボードは 3.3V で 8Mhz
系です。16MHz 系で書き込むと復旧できなくなってしまうので注意!)

Arduino 1.8.10 で確認しています。なお、Linux+Arduino 1.8.19 の環境ではエラーになるようです。(Windows上のArduino 1.8.19 では問題ないらしい) 原因究明中です。スミマセン!!

ライブラリ設定などはこちらを参照してください。



#include "MTCH6102.h"
#include "Keyboard.h"
#define ADDR 0x25
# define HOLDHI 254
# define HOLDLO 200



MTCH6102 mtch = MTCH6102();

const int len = 8;//感知ポイント数
bool sound = false;
void setup() {
  Serial.begin(115200);

  mtch.begin(ADDR);
  
  
  delay(100);
  mtch.writeRegister(MTCH6102_NUMBEROFXCHANNELS, 0x07);
  mtch.writeRegister(MTCH6102_NUMBEROFYCHANNELS, 0x03);//最低3点必要なため
  mtch.writeRegister(MTCH6102_MODE, MTCH6102_MODE_FULL);
  delay(500);
  Serial.println("start");
  Keyboard.begin();

}


void loop() {



  byte data;
  int sensVals[len];
  int keephold[len];   // only use 0,3,6

  Serial.println();
  for (int i = 0; i < len; i++) {
    data = mtch.readRegister(MTCH6102_SENSORVALUE_RX0 + i + 1);
    Serial.print(data);
    Serial.print(",");    sensVals[i] = data;
    sensVals[i] = data;

  }                     
  if ( HOLDHI == sensVals[0] || HOLDHI == sensVals[1]  ){
     Serial.println("ESC");
     if ( 0 == keephold[0] ){
        Keyboard.press(KEY_ESC);
        delay(100);
        Keyboard.releaseAll(); 
     }
     keephold[0] = 1;
  }
  if ( HOLDHI == sensVals[6] || HOLDHI == sensVals[7]  ){
     Serial.println("RETURN");
     
     if ( 0 == keephold[6] ){
        Keyboard.press(KEY_RETURN);
        delay(100);
        Keyboard.releaseAll(); 
     }
     keephold[6] = 1;
  }
  if ( HOLDHI == sensVals[3] || HOLDHI == sensVals[4] || HOLDHI == sensVals[5]  ){
     if ( 0 == keephold[3] ){
       Serial.println("ALT+TAB");
       Keyboard.press(KEY_LEFT_ALT);
       delay(100);
       Keyboard.press(KEY_TAB);
       delay(100);
       Keyboard.release(KEY_TAB); 
       delay(100);
       
     }   

     keephold[3] = 1;
  }
  if ( HOLDLO > sensVals[0] || HOLDLO    > sensVals[1]  ){
     keephold[0] = 0;
  }
  if ( HOLDLO > sensVals[6] || HOLDLO > sensVals[7]  ){
     keephold[3] = 0;
  }
  if ( HOLDLO > sensVals[3] && HOLDLO > sensVals[4] &&  HOLDLO > sensVals[5]  ){
     if ( 1 == keephold[3] ){
        Serial.println("RELEASE ALT+TAB");
        Keyboard.release(KEY_LEFT_ALT);
      }
      keephold[3] = 0;
  }
  delay(100);
}

プログラムは、

No.0 または No.1 電極を長押しすると 「Esc」キー(キャンセル)、
No.3 または No.4 電極を長押しすると 「Alt+Tab」キー(タスクスイッチ) 、
No.6 または No.7 電極を長押しすると 「RETURN」キー(エンター) 、

となります。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?