Edited at

VL6180X(赤外線近接距離センサモジュール)をArduinoで複数個利用してみた

More than 1 year has passed since last update.


できること

VL6180X(赤外線近接距離センサモジュール)をArduinoで複数個利用する


きっかけ

自主製作でVL6180Xを複数個使う機会がありました。

VL6180Xは、I2C通信を用いるセンサーで1つだけなら比較的簡単に利用できます。しかし、複数個利用する場合にはアドレスを書き換えなければならず、そのやり方をまとめてある日本語記事が制作時点では見当たらなかったので、備忘録として残します。


配線図

VL6180XとArduinoの配線図です。

構成図.png

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側のプログラムです。


distance.ino

#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(赤外線近接距離センサモジュール)を仕込んであります。

また、コップを置いて手をかざすとかざした高さまで飲み物が下から注がれる機構になっています。

名称未設定-2.png

制作物のコンセプトや実演動画等は下記のページに詳細があります。

http://uxted.com/spring/


制作物の仕組み

磁気センサでコップの検知を行い、VL6180Xの近距離センサでかざした手の高さを取得しています。

手の高さに応じて、エアポンプモーターの動作時間を調整しコップに水を下から注ぎます。

動作方法.png


最後に

VL6180X自体をArduinoで複数個を利用する方法は、やり方が分かれば意外に簡単に実装する事ができた。