DIY低コストレーザー測距モジュール for Arduino - 高速・信頼性・低価格
部品と用品
| Arduino Nano R3 | ×1 |
| Elecrow OLED 0.96インチ 128x64 | ×1 |
| X-40 レーザー巻尺 | ×1 |
| LM2596 DC-DCモジュール | ×1 |
必要なツールと機械
- ハンダゴテ(汎用)
- ST-LINKプログラマー
アプリとオンラインサービス
- STMicroelectronics ST-LINK Utility
このプロジェクトについて
Arduinoプロジェクト用に高速で安価なレーザー測距モジュールが必要ですか?
もちろん、このタスク専用のモジュールを使うこともできますが、ほとんどは高価です。VL53L0X/VL53L1Xモジュールは安価ですが、視野角が非常に広いという欠点があります。
そこで見つけた解決策:安価な「X-40」レーザー巻尺をレーザー測距モジュールとして使用することです。これらは20ドル以下で購入でき、最大40mまで、精度約3mmで測定可能です。しかし2つの問題があります - 巻尺から測定値を取り出す方法がなく、測定速度が遅い(1Hz未満)。
これらを解決するため、レーザー巻尺のリバースエンジニアリングを行い、STM32 MCU用の独自ファームウェアを書きました。測定速度が重要だったため、約60Hzを達成しましたが、最大安定距離は約6mに減少しました(フル最大範囲は37mですが未テスト)。
測距精度はターゲットの色と距離により1mm〜10mmの範囲で変動します。
モジュール寸法:25x13x50mm。
重要な注意:オリジナルファームウェアが失われるため、その後レーザー巻尺として使用できなくなります!
「X-40」レーザー巻尺にはレーザー測距モジュールの異なるリビジョンが存在し、私のファームウェアは一部のみ対応しています!
「X-40」以外にも、同じようなモジュールを搭載した中国製レーザー巻尺がいくつか存在します。
ステップ1: レーザー巻尺の分解
レーザー巻尺を分解してレーザー測距モジュールを取り出します。

ケースから7本のネジを外します:

分解後のレーザー巻尺:

ケース内部に小さなレーザー測距モジュールが見えます。モジュールからフレックスケーブルを外し、モジュールを取り出します:

モジュールは「701A」とマークされています。私のファームウェアは「512A」と「701A」のみ対応。複数ユーザーが「703A」も動作確認済み(私は未テスト)。
2019年11月更新:
注意:新しい「X-40」レーザー巻尺には「M88B」モジュールが搭載されていることが判明しました。 PCB上のMCU付近に「88B」のマーキングがあります。これらはSTM32F0 MCUベース(QFN-32パッケージ)です。これらのモジュールは私のファームウェアでは非対応です!
2021年10月更新:
注意: U85Bモジュールのサポートを追加:詳細はリンク参照!これらは最新タイプのレーザー巻尺で使用されています。

対応モジュールの場合、モジュールから電源線をハンダ除去します。
ステップ2: レーザー測距モジュールのプログラミング
MCUに専用ファームウェアを書き込み、必要な機能を得ます。
1. まずMCUプログラミング用の配線をハンダ付けします。ピンアウトは画像の通り:

キーボードコネクターのピン7-8を接続 - 電源投入に必要。
「GND」と「Vbat」は電源に接続。電圧範囲は+2.7〜+3.3V。モジュールに電源供給時、「Vdd」ラインには+3.5Vが必要。
「GND」、「SWDIO」、「SWCLK」、「NRST」をST-LINKプログラマーに接続。「NRST」ラインは非常に重要 - オリジナルファームウェアはロックされているため、このラインでプログラミングモードに入ります。
一部のプログラマーにはこのラインがありますが、安価なものはありません。しかし回避策があります。
また、一部のプログラマー(オリジナル「ST-LINK/V2」など)は「Vbat」ラインをプログラマーの「VCC/TVCC」ラインに接続する必要があります。
接続例(このプログラマーには「NRST」ラインなし):

2. PCに「ST-LINK utility」をインストール。使い方がわからない場合はWebに多数のチュートリアルがあります。
ユーティリティを設定(ターゲット → 設定):

プログラマーに「NRST」出力がある場合、電源を入れてユーティリティの「ターゲット → 接続」を押すだけ。
ない場合は以下の手順:
- 電源を入れる
- モジュールの「NRST」ラインをGNDに接続
- ユーティリティで「ターゲット → 接続」を押す
- 素早く「NRST」ラインをGNDから外す
- 接続成功が表示されるはず
以下の画面になるはず:

3. MCUフラッシュは読み出しロックされているため、「Read Out Protection」を無効化する必要があります。このステップでオリジナルファームウェアが失われます!
ターゲット → 「オプションバイト」メニューを開く。以下の設定になっているはず:

「Read Out Protection」を「Disabled」にし、「Unselect all」ボタンを押してから「Apply」ボタンを押す。モジュールを再起動(電源切断)してみる。
「ターゲット → 接続」を押す。ログウィンドウに接続成功の情報が表示され、メモリ内容が0xFFで埋められているはず。これでカスタムファームウェアをMCUフラッシュに書き込めます。
4. 必要なファームウェアはこちら:https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast
お使いのモジュールに適したHEXファイルを選び、ST-LINK utilityでMCUフラッシュにダウンロードします。
ステップ3: レーザー測距モジュールをArduinoに接続
基板上のTXパッドにワイヤーやコネクタをハンダ付けします:

接続回路図は下記参照。
まず、測距モジュールが正常動作するか確認。この段階ではOLEDディスプレイをArduinoに接続不要 - レーザー測距モジュールのTXラインをArduinoのTXラインに接続し、モジュールの電源ラインを+3V電源に接続するだけ。
空のスケッチを作成しArduinoに書き込む。Arduino IDEの「シリアルモニタ」を開く。ボーレート:250000を選択。
測距モジュールが正常なら、以下のデータが得られます:
実際には、このテストには専用のUSB-UARTコンバーターを使うのがベター。そのユーティリティで256000ボーレートを選択(X-40 MCUの実ボーレート)。
次に、ディスプレイ込みの完全な回路を組み立てます。
レーザー測距モジュールのTXラインをArduinoのRXラインに接続(Arduinoへのプログラム書き込み時はこのワイヤーを外す必要あり)。
全て正常なら、以下の結果が得られます:

ディスプレイに3つの数値が表示されます:
- 「COUNT」 - 受信値のカウンター
- 「AMPL」 - 信号振幅。下のシンボルバー(「<--- >」)は振幅をグラフィカルに表示(対数スケール)
- 最大の値 - メートルとミリメートルでの距離
ステップ4: ゼロキャリブレーション
初回起動後、レーザー測距モジュールのキャリブレーションが必要です。
モジュールから一定距離に白い物体を置きます。この物体までの距離が測距モジュールのゼロ距離になります。キャリブレーション開始には、レーザー巻尺のキーボードを接続し、最下部のボタンを押します。モジュールが2回ビープ音を出します - キャリブレーション開始時と終了時(所要時間約10秒)。

これでレーザー測距モジュールが使用可能になります。
リンク:
1. Github - リバースエンジニアリング結果とソースコード。
2. Habr.com - レーザー巻尺リバースエンジニアリングプロセスの記事(Google翻訳版)。
英語が不自由で申し訳ありません - 私は非英語圏出身です。
コード
Arduinoスケッチ Arduino
No preview (download only).
Github
レーザー巻尺用コード: https://github.com/iliasam/Laser_tape_reverse_engineering
回路図
ブレッドボード組み立て回路図
製造プロセス
- OpenSensorsで空気質を測定: ArduinoとPythonによるガイド
- 学校向けスマート体温監視システム: 正確、リアルタイム、安全
- Arduino用8ビットI/Oポートライブラリ:デジタル制御を拡張
- Arduino 64キー プロトタイピング キーボードマトリックス: シフトレジスタで自作キーボード
- Arduino Nano用 高性能2.8インチTFTシールド - 320×240 SPIディスプレイ
- Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
- 安価なArduinoブレスコントローラー自作 - USB-MIDI対応でDAW直結
- DCモーター制御の極意:PID制御とPWM出力による速度・方向制御のエキスパートガイド
- Arduino向けスマート屋内ナビゲーションロボットキット
- レーザー切断用途:木材から航空宇宙まで
- なぜ5Gが現代のスマート製造に不可欠なのか