#できること
VL6180X(赤外線近接距離センサモジュール)をArduinoで複数個利用する
#きっかけ
自主製作でVL6180Xを複数個使う機会がありました。
VL6180Xは、I2C通信を用いるセンサーで1つだけなら比較的簡単に利用できます。しかし、複数個利用する場合にはアドレスを書き換えなければならず、そのやり方をまとめてある日本語記事が制作時点では見当たらなかったので、備忘録として残します。
ArduinoとVL6180Xを以下のように対応させて繋げてください。
VL6180X① - Arduino
VDD - 接続先なし
VIN - 5V
SDA - SDA
SCL - SCL
GPIO0/CE - D4(デジタルピンのどれか、Leonardoの場合D2とD3は避ける)
GPIO01 - 接続先なし
VL6180X② - Arduino
VDD - 接続先なし
VIN - 5V
SDA - SDA
SCL - SCL
GPIO0/CE - D5(デジタルピンのどれか、Leonardoの場合D2とD3は避ける)
GPIO01 - 接続先なし
#プログラム(Arduino)
下記はVL6180Xを複数個動かすArduino側のプログラムです。
#include <Wire.h>
#include <VL6180X.h>
#define XSHUT_PIN01 4
#define XSHUT_PIN02 5
VL6180X sensor01;
VL6180X sensor02;
void setup()
{
pinMode(XSHUT_PIN01, OUTPUT);
pinMode(XSHUT_PIN02, OUTPUT);
digitalWrite(XSHUT_PIN01, LOW);
digitalWrite(XSHUT_PIN02, LOW);
delay(50);
Serial.begin(9600);
Wire.begin();
//1つ目のセンサーのアドレスの書き換え
digitalWrite(XSHUT_PIN01, HIGH);
delay(100);
sensor01.init();
sensor01.configureDefault();
sensor01.setAddress(0x52);//好きなアドレスに設定
//2つ目のセンサーのアドレスの書き換え
digitalWrite(XSHUT_PIN02, HIGH);
delay(100);
sensor02.init();
sensor02.configureDefault();
sensor02.setAddress(0x56);//好きなアドレスに設定
}
void loop()
{
Serial.print("ONE = ");
Serial.print(sensor01.readRangeSingle());
Serial.print(", TWO = ");
Serial.println(sensor02.readRangeSingle());
delay(10);
}
#実際に制作したもの
些細な日常に魔法のような体験ができるものを制作しました。
テーブル表面の左右にVL6180X(赤外線近接距離センサモジュール)を仕込んであります。
また、コップを置いて手をかざすとかざした高さまで飲み物が下から注がれる機構になっています。
制作物のコンセプトや実演動画等は下記のページに詳細があります。
http://uxted.com/spring/
#制作物の仕組み
磁気センサでコップの検知を行い、VL6180Xの近距離センサでかざした手の高さを取得しています。
手の高さに応じて、エアポンプモーターの動作時間を調整しコップに水を下から注ぎます。
#最後に
VL6180X自体をArduinoで複数個を利用する方法は、やり方が分かれば意外に簡単に実装する事ができた。