macsbug

Just another WordPress.com site

VL6180X distance sensor in ESP8266

leave a comment »

VL6180X 距離センサーを ESP8266 で動かす。          2016.09.25

機能:最大 60cm までの距離を mm単位で表示します。
構成:OLED + WeMos D1 mini Pro + VL6180X。
_  I2C接続で OLED – D1 mini – VL6180X は 4ピンソケット で接続。
_  I2C は ソケット接続すると 他の I2C も簡単に交換でき便利です。



 

VL6180X 近距離センサーのお話:
伊仏合弁 STMicroelectronics社の製品で赤外光が対象物で反射し戻るまでの
時間を測定する高精度の環境光/近接センサーです。0~60cmまで計測可能。
分解能は1mm。精度は100mmで3%。応答速度は 30ms。
精度考察:8bitセンサーで 精度0.25 で一般的基準の0.5をクリアー。
今回のスケッチは 765mm まで表示します。

スマートフォンやタブレット端末、家庭用ゲーム機のコントローラー、
家電機器、産業機器、自動車ロボットなどに使用されています。
2個使用する事により ジェスチャー機能も可能です。

VL53L0X のお話:
2016.06.10 に発売され 最大2mまでの絶対距離(単位:mm)を30ms以内に測定。
Arduino用モジュールも販売されています。


 

準備:費用合計:1582円。(低価格のOLEDで1466円)

No Nomen  Link Price Memo
1 VL6180X Board VL6180X Board 718円  ebay
2 WeMos D1 mini WeMos D1 mini 342円 $3.39
3 OLED 128 x 64 OLED 128 x 64 522円 $4.02
4 Resistor 10KΩ  –  –  2個
5 4ピンコネクター  –  –  1個
6 VL6180X Library vl6180x-arduino  –  pololu
7 OLED Library esp8266-oled-ssd1306  –  squix78

 

部品の詳細:購入先と価格。

No Nomen  Link Price Memo
1 VL6180X Board VL6180X Board:ebay  718円 ebay 4個 $28.45 ,2872円
VL6180   Board VL6180   Board:eray 1543円 1299 + 244:未調査
VL6180   Board VL6180   Board:ebay 1587円 少し高い:未調査
VL6180X Board Strawberry Linux 1580円 1200 + 380:取り付け安い
VL6180X Board SWITCHSCIENCE 1694円 1544 + 150:2.4倍 高い
VL6180X Board 朱雀技研工房ストア 1752円 1532 + 250:2.4倍 高い
2 D1 mini Pro D1 mini Pro  683円 $6.76:WeMos,16MB Flash
3 OLED 128 x 64 OLED 128 x 64  406円 $4.02:低価格:未調査
OLEDの端子配列は、VCC, GND, SCL, SDA が望ましい。
今回の VL6180X ( GY6180 ) と同一配列。
注意:電源の端子配列が逆の GND, VCC, SCL, SDA の物がある。

 

配線:
1. D1 mini と OLED は端子を重ねました。VL6180Xはコネクターで接続します。
2. D7(13)(SCL), D6(12)(SDA) 端子は 10KΩ チップ部品でプルアップします。
3. D8 は GND へ配線します。


 

技適 ( TELEC ) を不要にする方法:

今回の電子工作は電波は使用しませんので 電波の出力を停止しました。
WeMos D1 mini は TELEC の記載はありません。
この命令により 電波を出力しない場合 技適は適用しないと聞いています。
これによりESP-WROOM-02 TELEC を使用せずともは日本国内で使用できると
聞いています。さらに電波を出力しない為に省電力にする事ができます。
WiFi.mode(WIFI_OFF);


 

VL6180X:

参考:
Pololu:VL6180X Time-of-Flight Distance Sensor Carrier
_   with Voltage Regulator, 60cm max:基板の基本が書かれている。

VL6180X:Proximity and ambient light sensing (ALS) module

AN4545 Application note:VL6180X basic ranging application note:ICの基本。
_ このマニュアルは良く読む必要がある。

DT0030 Design tip:VL6180X ambient light sensing


 

配線図:
_ VL6180X ( GY6180 ) の基板(上記基板画像)を調べ 以下の図面を作成しました。
_ 基本は Polou の VL6180X ですが  GY6180 は 小型化された基板です。
_   Polou の配線図はありますが VL6180X ( GY6180 ) は未公開の様です。
_ VL6180X は 2.8V 動作です。
_ LDO ( 540L )は 2.8VOUTPUT。
_ 入力の SCL, SDA は 3.3V。
_ Transistor ( 702V ) でレベル変換し 出力は 2.8V。


 

校正:以下に校正の要領が記載されています。
UM1651 User manual:
_ VL6180X premium evaluation kit (EVK) hardware user manual


 

感想:
VL6180X:
距離:
_  scalingで x3 765 mm まで計算可能ですが実測では 561 mm まででした。
_ マニュルアルには他の値も書いてある様ですがライブラリは 1,2,3 が設定。
_ 最大10cm までの情報もありますが 今回の条件では 56cm まで可能でした。
_ データーの取得時間は 30ms と速い。この応答速度は重要ですね。
アベレージング:
_ データーの変動を軽減する為に簡単なアベレージングを加えました。
_ 効果は 1/ root ( 回数 ) です。例えば 16回ならば 4倍の精度になります。
_ この場合 速度が低下しますので 必要なければ取り除いてください。
ミスカウント:
_ 561 mm以上の距離で条件によりミスカウントする時がある。
_ ダブルバウンスも含め分析が必要である事と対策が必要かと思います。
何に使うか:
_ 今回は距離を表示するのみでケースも作りませんでした。
_ このセンサーは奥が深いので驚いています。

VL53L0X:最大 2m まで測定でき AliExpress や ebay で販売しています。
_ 応答速度が速く(30ms)ドローン等に最適と思われます。
_ 今回のVL6180X と同じく小型化したものがあり 現在ESP8266 では
_ Wdt error (1, 6) がでて動作せず 調査中です。
_ AliExpress や ebay での小型化した基板(VL6180XとVL53L0X)を比較した所
_ パターンは同じでした。違いは VL53L0Xでの LDO は 662K で 3.3V出力の
_ ものです。VL53L0X は 2.8V 仕様ですので 疑問があり中断しています。


スケッチ:


/* VL6180X. The sensor uses 1x scaling by default.
scaling to 2x or 3x : 2mm or 3 mm .*/

#include 
#include 
#include "SSD1306.h"
SSD1306 display(0x3c, 12, 13);  // SDA, SCL
#include 
#define scaling 3 // scaling factors are 1, 2, or 3.
VL6180X sensor;

void setup(){
  WiFi.mode(WIFI_OFF);
  Wire.begin(12, 13);  // SDA, SCL
  display.init();
  display.flipScreenVertically();
  display.displayOn();
  display.clear();
  sensor.init();
  sensor.configureDefault();
  sensor.setScaling(scaling);
  sensor.setTimeout(500);
}

void loop(){
  int d = 0;
  for ( int i = 0; i< 16; i++ ){   // accuracy=1/root(N)
    d = d + sensor.readRangeSingleMillimeters();
  }
  d = d / 16;
  String mm = String(d) + " mm";
  if (sensor.timeoutOccurred()){mm = " Timeout";}
  if (d == 255 * scaling){ mm = " over";}
  display.clear();
  display.setFont(ArialMT_Plain_16);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawString(0,  0, "VL6180X  scale " + String(scaling));
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  display.setFont(ArialMT_Plain_24);
  display.drawString(120, 32, mm);
  display.display();
}

Written by macsbug

9月 25, 2016 @ 12:10 am

カテゴリー: ESP8266

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。