工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

VL6180Xとサーボモーターで作るArduino LIDARシステム

必要な部品と材料

部品数量備考
Arduino UNO1制御用マイコン
VL6180X ToF距離センサー (SparkFun等)1短距離用。長距離ならVL53L0X推奨
サーボモーター (SG90等)1センサー水平走査用

使用ソフトウェア・サービス

プロジェクト概要

LiDAR (Light Detection and Ranging) の基礎

LiDARはレーザー光を照射し、反射光が戻るまでの時間(ToF: Time of Flight)または位相差から距離を測定する光学リモートセンシング技術です。ロボティクスでは環境認識や物体分類に、自動運転では高精度な3Dマップ生成に用いられます。

測定原理

VL6180X/VL53L0XはSTMicroelectronics製のToFセンサーで、スマートフォンのカメラオートフォーカスにも採用されています。VL53L0Xはより長距離・高精度で、リニアリティ問題や「二重像」問題が少ないです。

回路図

VL6180Xとサーボモーターで作るArduino LIDARシステム
VL6180X (I2C) + サーボ (D9) + Arduino UNO

Adafruitライブラリのインストール

VL6180Xとサーボモーターで作るArduino LIDARシステム
ライブラリマネージャで「Adafruit VL6180X」を検索・インストール

Arduinoコード (スキャン&シリアル出力)

#include <Wire.h>
#include "Adafruit_VL6180X.h"
#include <Servo.h>

Adafruit_VL6180X vl = Adafruit_VL6180X();
Servo myservo;
float pos = 0;
const float Pi = 3.14159;

void setup() {
  myservo.attach(9);
  Serial.begin(115200);
  while (!Serial) { delay(1); }
  
  if (!vl.begin()) {
    Serial.println("VL6180X not found!");
    while (1);
  }
}

void loop() {
  // 0°→180° スキャン (0.5°ステップ)
  for (pos = 0; pos <= 180; pos += 0.5) {
    myservo.write(pos);
    uint8_t range = vl.readRange(); // 距離取得 (mm)
    
    // "距離pラジアン角p度数" 形式で送信
    Serial.println(String(range) + "p" + String(pos * Pi / 180) + "p" + String(pos));
    delay(10);
  }
  
  // 復路スキャンも必要ならコメントアウト解除
  /*
  for (pos = 180; pos >= 0; pos -= 0.5) {
    myservo.write(pos);
    uint8_t range = vl.readRange();
    Serial.println(String(range) + "p" + String(pos * Pi / 180) + "p" + String(pos));
    delay(10);
  }
  */
  
  myservo.write(0); // 原点復帰
  delay(2000);
}

Processingコード (リアルタイムレーダー表示)

Arduinoのシリアルポート番号(COM3等)を環境に合わせて変更してください。

import processing.serial.*;

Serial myPort;
String val;
int range, i = 0;
float pos;

void setup() {
  size(550, 500);
  frameRate(36);
  String portName = "COM3"; // ★ここにArduinoのポート番号を指定
  myPort = new Serial(this, portName, 115200);
  background(255);
}

void draw() {
  if (myPort.available() > 0) {
    val = myPort.readStringUntil('\n');
    if (val != null) {
      String[] nums = split(val, "p");
      if (nums.length == 3) {
        range = int(nums[0]);
        pos = float(nums[1]);
        i = int(nums[2]);
        
        if (i == 180) background(255); // 1周ごとに画面クリア
      }
    }
  }
  
  // 極座標→直交座標変換して線描画
  translate(25, -50);
  line(250, 500, 
       250 - 2 * (range * cos(pos)), 
       500 - 2 * (range * sin(pos)));
}
VL6180Xとサーボモーターで作るArduino LIDARシステム
Processingによるレーダー風表示

性能と改良ポイント

応用例

質問・提案歓迎します!

製造プロセス

  1. ガスランタン:進化、設計、現代製造
  2. レーザーポインター:設計、製造、安全性の概要
  3. 懐中電灯:発明から現代革新まで
  4. 万華鏡:ブレッサーの科学から現代デザインへ
  5. 半導体レーザー:現代技術を支える精密光生成
  6. 写真プロセスの芸術と科学:ダゲレオタイプから現代フィルムまで
  7. 信号機:工学、歴史、未来の革新
  8. 火からフィラメントへ:現代電球の進化と生産
  9. 光ファイバー:技術、製造、未来展望
  10. ジェスチャー制御 RGB テーブルランプ – インタラクティブなハンズフリー照明
  11. Kodiak 3D LiDAR:高軌道ミッション向け精密宇宙ボーンレンジング