S NS(ツイッター、インスタグラム)のフォロワーさん(3D UI lab スリーディーユーアイラボ ) から、双方向ハンドセンサーを頂きました。
距離センサーをいくつも並べ、立体的にモノが検出出来るようにした、センサーモジュールです。
センサーだけだと反応しているのか分からないので、フルカラーLEDも付属しています。
制御方法は、マイコンを使ったSPI通信です。
多機能の為、SPIの4本(SS、MOSI、MISO、SCLK)以外にも、制御する端子があります。
サンプルプログラムは、Arduino、Raspberry Pi、mbedが公開されています。 フォロワーさん(3D UI lab)さんのホームページはこちらです。
販売している、スイッチサイエンスさんのホームページはこちらです。
頂 いた双方向ハンドセンサーには、Arduino Nano Everyが既に付属されていました。
さらに、サンプルプログラムも書き込まれており、すぐに使える状態でした。
下の動画のように、何も反応していない時は、フルカラーLEDが点滅しています。
手を近づけると、手の動きに反応し、フルカラーLEDが点灯します。
結構、反応が良いです。
VIDEO
双方向センサーモジュール表です。
双方向センサーモジュール裏です。
配線写真表。
配線写真裏。
センサーはフォトリフレク、
LEDはフルカラーです。
Arduino Nano Everyです。
商品にはマイコンは付属していません。
ご自身で用意する必要があります。
通常は1つだけ点滅しています。
距離センサーが反応すると、距離に応じ色が変化します。
ねかせてみました。
3DUI lab さん の名入れ。
8 個のセンサーの値は、配列の値として出力されるみたいなので、この配列の値を読み取り、5個のLEDを点滅させてみました。
■回路図
回路図は下図の通り、サンプルの配線に、LEDを取り付けただけです。
配線は、
フォロワーさん(3D UI lab スリーディーユーアイラボ )のホームページからマニュアル及びプログラムをダウンロードし、作っています。
↑回路図とブレッドボードに再現した所
■プログラム
サンプルプログラムに手を加えたスケッチは次のとおりです(赤字の部分が手を加えた部分です)。
難しい部分は、付属のライブラリーでやっているので、
簡単です。
それぞれのセンサーの値は、配列 adVal[1] のように記載すれば呼び出せるので、この値を使います。
最大4300なので、細かい制御の値として使えそうです。
#include "CLED.h"
#include <SPI.h>
Sensor sensor(0); // 40:smaller -> high sense
CLED cled(0); // IHSxx
// ************************** setup ********************************
void setup() {
// 9行のコメントを外すとシリアルモニタで距離(max4300)が見られます
#define Monitor
#ifdef Monitor
Serial.begin(57600);
#endif
sensor.init();
cled.set(5); // init blink
delay(2000);
pinMode(14, OUTPUT);
pinMode(15, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(18, OUTPUT);
}
// *************************** loop ********************************
int adVal[COL_LEN];
void loop() {
sensor.setAd();
#ifdef Monitor
sensor.getColAd(adVal);
for (int i = 0; i < COL_LEN; i++) {
Serial.print(adVal[i]);
Serial.print(", ");
}
Serial.println("");
#endif
if (adVal[1] > 500) {
digitalWrite(14, HIGH);
delay(10);
digitalWrite(14, LOW);
delay(10);
}
if (adVal[2] > 500) {
digitalWrite(15, HIGH);
delay(10);
digitalWrite(15, LOW);
delay(10);
}
if (adVal[3] > 500) {
digitalWrite(16, HIGH);
delay(10);
digitalWrite(16, LOW);
delay(10);
}
if (adVal[4] > 500) {
digitalWrite(17, HIGH);
delay(10);
digitalWrite(17, LOW);
delay(10);
}
if (adVal[5] > 500) {
digitalWrite(18, HIGH);
delay(10);
digitalWrite(18, LOW);
delay(10);
}
}
■動作確認
写真の通り、個々のセンサーに反応して、それぞれのLEDが点灯します。
今回頂いた双方向ハンドセンサーは、たくさんのセンサーがついているモジュールなので、今回のような単純な使い方でなく、画像処理と組み合わせると面白い使い方が出来そうです。
フォロワーさん(3D UI lab スリーディーユーアイラボ ) のホームページには、ハイレベルの応用例がいっぱい紹介されているので、見ると、とても参考になりますよ!
↑左:待機状態 右:ペンを置いたセンサーだけ点灯
VIDEO