LoginSignup
3
1

More than 3 years have passed since last update.

nüno ver.2 TINYキットを使ってみよう

Last updated at Posted at 2020-12-31

キットの確認

※この記事では@nanbuwksさんのArduino互換機、
「AKBONE2020」を使用して作例を作っています。
「AKBONE2020」を使用されない方は各自お持ちのマイコンで読み替えて使用してください。

AKBONE2020の使用方法については AKBONE2020 (Ver.20210114) ではんだづけをはじめよう を参考にしてください。

キット同梱物一覧

IMG_0789a.png
- フレキシブル基板
- リジット基板
- GROVEケーブル
- ブリッジ
- 導電布
- スナップボタン(8組)

6種類の部品が揃っているか確認します
※リジット基板のGROVE端子の写真は縦型ですが、横型になっている場合があります

フレキシブル基板と導電布を接続する

導電布には予め基準となる穴が8つ開けられています
IMG_0795a.png

この穴にスナップボタンを嵌めていきます

スナップボタンは、凸側、凹側の2つのパーツで1組になっています。
IMG_0790.JPG

凸側と凹側を分けて、導電布にあらかめ空いている穴に凸側の突起部分をさしこみます。
はめ込んだ状態のオモテ面
IMG_0791a.png

はめこんだ状態のウラ面
IMG_0792a.png

この状態で、上側からフレキシブル基板の穴にも、スナップボタンの凸側突起部分をさしこみます。
IMG_0793.JPG

このときのフレキシブル基板の向きは、白い面が上面となり、フレキシブル基板の7つある切れ込みが、導電布の端に近くなるようにしてください

差し込んだ後、スナップボタンの凹側を上からはめ込めればこの端子は接続できました。
IMG_0794.JPG

同じように残りの7箇所も接続します
IMG_0796.JPG

フレキシブル基板とリジット基板を接続

フレキシブル基板の端子部分を、リジット基板のコネクタに接続します。
リジット基板のコネクタの黒いパーツの両端をつかんでゆっくり引き出します。
強く引っ張りすぎると、黒いパーツが抜けてしまうので注意してください。
IMG_0797a.png

黒いパーツを引き出した状態
IMG_0798.JPG

黒いパーツを引き出した状態で、リジット基板を裏返しにして、コネクタが下側になるようにします
IMG_0799.JPG

リジット基板の引き出した黒いパーツと白いパーツの間にフレキシブル基板を差し込みます。
IMG_0803a.png

差し込んだ状態で、引き出した黒いパーツを押し込んで元に戻します。
IMG_0801a.png

押し込む際にフレキシブル基板がずれないように注意してください。
これでフレキシブル基板とリジット基板の接続ができました。

GROVEケーブルを接続

GROVEケーブルをAKBONE(Arduino)に接続します。

Arduinoのサンプルプログラム1

PCとAKBONEを接続してArdinoを立ち上げます。
このプロジェクト用のディレクトリに新規ファイルを作成します。

ここで、nünoをArduinoで使用するためにMTCH6102用のライブラリをインクルードします。
MTCH6102のライブラリは下記のファイルから持ってきます。

上記からダウンロードしたファイルの中にある
Arduino/mtch6102_proof_of_concept/ ディレクトリから
- MTCH6102.cpp
- MTCH6102.h
の2ファイルを先程作成したディレクトリに入れます。
ディレクトリに入れたら、一度このプロジェクトのArduinoのウィンドウを閉じてください。
再度開いた時に、MTCH6102.cpp、MTCH6102.hの2ファイルがタブで開かれていたらOKです。

この状態でサンプルプログラムを実行します。
1つめのサンプルプログラムは下記になります。

#include "MTCH6102.h"
#define ADDR 0x25

MTCH6102 mtch = MTCH6102();

const int len = 8;//感知ポイント数
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);
}


void loop() {

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

  delay(1000);
}

このサンプルが実行できたらシリアルモニタ、シリアルプロッタを開いてみてください。
タッチするごとに値が変化しているのが確認できます。

Arduinoのサンプルプログラム2

2つめのサンプルプログラムです。
AKBONE2020のneopixelをタッチ位置に応じて光らせます。

#include "MTCH6102.h"
#define ADDR 0x25

//neopixel
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN        8 // On Trinket or Gemma, suggest changing this to 1
#define NUMPIXELS 8 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

MTCH6102 mtch = MTCH6102();

const int len = 8;//感知ポイント数

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);

  //neopixel
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)

}


void loop() {

  pixels.clear(); // Set all pixel colors to 'off'

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

    if (data > 50) {
      pixels.setPixelColor(i, pixels.Color(0, 10, 0));
    }
  }
  Serial.println();

  pixels.show();   // Send the updated pixel colors to the hardware.

  delay(1000);
}

Arduinoのサンプルプログラム3

3つめのサンプルプログラムです。
2つめのLEDに加え、8点ある静電容量タッチポイントのうち、1つでもしきい値(50)
を超えたポイントがあれば圧電スピーカーから音がなります。

#include "MTCH6102.h"

#define ADDR 0x25

//neopixel
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN        8 // On Trinket or Gemma, suggest changing this to 1
#define NUMPIXELS 8 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

//speaker
#define SPIN A1

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);

  //neopixel
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)

  //speaker
  tone(SPIN, 440);
  delay(500);
  noTone(SPIN);
}


void loop() {

  pixels.clear(); // Set all pixel colors to 'off'

  sound = false;
  byte data;
  int sensVals[len];
  for (int i = 0; i < len; i++) {
    data = mtch.readRegister(MTCH6102_SENSORVALUE_RX0 + i);
    sensVals[i] = data;
    Serial.print(data);
    Serial.print(",");
    if (data > 150) {
      pixels.setPixelColor(i, pixels.Color(0, 10, 0));
      sound = true;
    }
    if(sound){
      tone(SPIN, 440);
    }else{
      noTone(SPIN);
    }
  }
  Serial.println();


  pixels.show();   // Send the updated pixel colors to the hardware.

  delay(1000);
}

以上です!

さらに自分でカスタマイズしてみましょう。

また
- 専用ケース
- ボタンホック(凹側)がついたフレキシブル基板の保護カバー
- ボタンホック(凸側)がついた導電布
がついたnüno ver.2モジュールをお求めの方はこちらの公式サイトからご連絡ください。

3
1
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
3
1