5.6 KiB
近接検知 - Wio Terminal
このレッスンでは、Wio Terminalに近接センサーを追加し、距離を読み取る方法を学びます。
ハードウェア
Wio Terminalには近接センサーが必要です。
使用するセンサーは、Grove Time of Flight距離センサーです。このセンサーはレーザー測距モジュールを使用して距離を検知します。このセンサーの測定範囲は10mmから2000mm(1cm - 2m)で、この範囲内の値をかなり正確に報告します。1000mmを超える距離は8109mmとして報告されます。
レーザー測距モジュールはセンサーの背面にあり、Groveソケットの反対側に位置しています。
これはI²Cセンサーです。
Time of Flightセンサーを接続する
Grove Time of FlightセンサーはWio Terminalに接続できます。
タスク - Time of Flightセンサーを接続する
Time of Flightセンサーを接続します。
-
Groveケーブルの一端をTime of Flightセンサーのソケットに挿入します。ケーブルは一方向にしか挿入できません。
-
Wio Terminalをコンピュータや他の電源から切り離した状態で、Groveケーブルのもう一端をWio Terminalの左側のGroveソケットに接続します(画面を見たときの左側)。このソケットは電源ボタンに最も近いソケットで、デジタルとI²Cの両方に対応しています。
- これでWio Terminalをコンピュータに接続できます。
Time of Flightセンサーをプログラムする
これで、Wio Terminalに接続されたTime of Flightセンサーを使用するプログラムを作成できます。
タスク - Time of Flightセンサーをプログラムする
-
PlatformIOを使用して新しいWio Terminalプロジェクトを作成します。このプロジェクトを
distance-sensor
と名付けます。setup
関数内にシリアルポートを設定するコードを追加します。 -
プロジェクトの
platformio.ini
ファイルに、Seeed Grove Time of Flight距離センサーライブラリの依存関係を追加します:lib_deps = seeed-studio/Grove Ranging sensor - VL53L0X @ ^1.1.1
-
main.cpp
で、既存のインクルードディレクティブの下に以下を追加し、Time of Flightセンサーとやり取りするためのSeeed_vl53l0x
クラスのインスタンスを宣言します:#include "Seeed_vl53l0x.h" Seeed_vl53l0x VL53L0X;
-
setup
関数の末尾に以下を追加し、センサーを初期化します:VL53L0X.VL53L0X_common_init(); VL53L0X.VL53L0X_high_accuracy_ranging_init();
-
loop
関数内でセンサーから値を読み取ります:VL53L0X_RangingMeasurementData_t RangingMeasurementData; memset(&RangingMeasurementData, 0, sizeof(VL53L0X_RangingMeasurementData_t)); VL53L0X.PerformSingleRangingMeasurement(&RangingMeasurementData);
このコードはデータを読み取るためのデータ構造を初期化し、それを
PerformSingleRangingMeasurement
メソッドに渡して距離測定値を取得します。 -
この下に、距離測定値を出力し、1秒間の遅延を追加します:
Serial.print("Distance = "); Serial.print(RangingMeasurementData.RangeMilliMeter); Serial.println(" mm"); delay(1000);
-
このコードをビルド、アップロード、実行します。シリアルモニタで距離測定値を確認できます。センサーの近くに物体を置くと、距離測定値が変化するのがわかります:
Distance = 29 mm Distance = 28 mm Distance = 30 mm Distance = 151 mm
測距モジュールはセンサーの背面にあるため、距離を測定する際は正しい側を使用してください。
💁 このコードはcode-proximity/wio-terminalフォルダにあります。
😀 近接センサーのプログラムが成功しました!
免責事項:
この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。