LoginSignup
4
5

More than 5 years have passed since last update.

obniz に ToFセンサ( VL53L1X レーザー距離測定 ) と カメラ ( ArduCAMMini )を繋ぐ

Last updated at Posted at 2019-03-28

obniz に ToFセンサ とカメラを繋ぐ方法のまとめ。

ToFセンサ(レーザー距離測定)

4m まで測定する事ができる VL53L1X ToFレーザー測距センサモジュール を 利用します。

スクリーンショット 2019-03-28 23.03.54.png

GY-53-L1X [aliexpress]
STM32が実装されていてUARTから距離データを取得できるモジュール
このモジュールがかなり便利なので aliexpress から購入すると実装がかなり楽になります。

GY-53-L0X 仕様書
UART等の通信仕様が同じなので参考にする。

参考
Amazonよりだいぶ安い!AliExpressでガジェットの購入に挑戦してみた

ArduCAMMini カメラ

obniz.jsに標準で含まれている ArduCAMMini OV2640の2Mピクセル カメラを利用します。

3780_001_9WoIsEn.jpg

ArduCAMMini OV2640の2Mピクセル

obniz.jsに標準で含まれている ので利用がかなり簡単です。

電源回路

obnizの端子からの電源では 電流がたりなくて 不安定になる可能性があるので
別で電源回路を用意します。

ブレッドボード用電源ボード5V/3.3V切り替え式
ACアダプター 9V/1.3A

GY-53-L1X, ArduCAMMini 接続方法

VCC,GND 以外を obniz に接続する。 VCC,GND は別電源回路から5Vを供給。

ArduCAMMini
cs:0, mosi:1, miso:2, sclk:3, sda:4, scl:5

GY-53-L1X
tx:6, rx:7

プログラム

距離が近くなったら 撮影して ブラウザに撮影した画像を表示するコードを書いてみます。

ArduCAMMini を動かしてみる

obniz.jsに標準のライブラリを使ったサンプルが動作するか確認。

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>
<img id="image">

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, sda:4, scl:5 });
  await cam.startupWait();
  const data = await cam.takeWait('1024x768');
  console.log("image size = " + data.length + " bytes");

  const base64 = cam.arrayToBase64(data);
  document.getElementById("image").src = "data:image/jpeg;base64, " + base64;
}
</script>
</body>
</html>

VL53L1X レーザー距離測定 を動かしてみる

距離を測定して 画面に表示してみるサンプル
GY-53-L0X 仕様書 UARTの通信仕様などが同じなので参考にデータを取得してみる。

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>
<div id="distance">---</div>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var uart = obniz.getFreeUart();  
  uart.onreceive = function(data, text) {
    if(data[0] == 0x5A){
      if(data[1] == 0x5A){
        if(data[2] == 0x15){
          if(data[3] == 0x03){
            var distance = data[4] << 8 | data[5];
            //obniz.display.clear();
            //obniz.display.print("distance "+distance);
            console.log({"distance":distance});
            $("#distance").text(distance+" mm");
          }
        }
      }
    }
  }
  uart.start({rx: 6, tx: 7, baud:9600, bits:8, stop:1});
}
</script>
</body>
</html>

距離が近くなったら 撮影して ブラウザに撮影した画像を表示する

2つのサンプルを組み合わせて 1m 以内になったら撮影するサンプル。

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>
<div id="distance">---</div>
<img id="image">

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, sda:4, scl:5 });

  var uart = obniz.getFreeUart();  
  uart.onreceive = function(data, text) {
    if(data[0] == 0x5A){
      if(data[1] == 0x5A){
        if(data[2] == 0x15){
          if(data[3] == 0x03){
            var distance = data[4] << 8 | data[5];
            //obniz.display.clear();
            //obniz.display.print("distance "+distance);
            console.log({"distance":distance});
            $("#distance").text(distance+" mm");
            // 1000 mm 以下の場合 撮影して表示する
            if(distance < 1000){
                await cam.startupWait();
                const data = await cam.takeWait('1024x768');
                console.log("image size = " + data.length + " bytes");

                const base64 = cam.arrayToBase64(data);
                document.getElementById("image").src = "data:image/jpeg;base64, " + base64;
            }
          }
        }
      }
    }
  }
  uart.start({rx: 6, tx: 7, baud:9600, bits:8, stop:1});
}
</script>
</body>
</html>
4
5
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
4
5