Arduino用の安価なレーザー距離計を作る
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> ![]() |
| |||
|
アプリとオンラインサービス
|
このプロジェクトについて
Arduinoプロジェクトに高速で安価なレーザー距離計モジュールが必要ですか?
もちろん、このタスクに特化したモジュールを使用することもできますが、それらのほとんどは高額です。 VL53L0X / VL53L1Xモジュールは安価ですが、視野が非常に広くなっています。
そこで私は解決策を見つけました。レーザー距離計として安価な「X-40」レーザー巻尺を使用することです。これらのデバイスの価格は20ドル以下で、最大40mの距離を最大3mmの精度で測定できます。ただし、2つの問題があります。テープから読み取り値を取得する方法がなく、測定が遅い-1Hz未満です。
その問題を解決するために、私はそのレーザー巻尺のリバースエンジニアリングを行い、レーザー距離計モジュールのSTM32MCU用に独自のファームウェアを作成しました。測定速度は私にとって重要であり、約60 Hzに達することができますが、最大安定距離は約6 mに減少しました(最大範囲全体は37 mですが、テストしていません)。
距離測定の精度は、ターゲットの色と距離に応じて1mmから10mmまで変化します。
モジュールの寸法:25x13x50mm。
重要なお知らせ:元のファームウェアが失われるため、デバイスを後でレーザー巻尺として使用することはできません!
「X-40」レーザー巻尺は、レーザー距離計モジュールのリビジョンが異なる可能性があり、私のファームウェアはそれらの一部のみをサポートしていることに注意してください!
「X-40」は、そのようなモジュールを備えたレーザー巻尺の唯一の名前ではありません-適切なモジュールを備えたいくつかの異なる中国のレーザー巻尺が存在することを私は知っています。
ステップ1:レーザー巻尺の分解
レーザー巻尺を分解して、そこからレーザー距離計モジュールを入手しましょう。
<図>
ケースから7本のネジを外す必要があります:
<図>
分解されたレーザー巻尺:
<図>
デバイスのケース内に小さなレーザー距離計モジュールがあります。モジュールからリボンケーブルを外し、ケースからモジュールを取り外す必要があります:
<図>
モジュールには「701A」のマークが付いていることに注意してください。私のファームウェアは「512A」と「701A」のモジュールバージョンのみをサポートしています。何人かのユーザーは、「703A」モジュールも機能していることを確認しました(私はそれをテストしませんでした)。
UPD 11/2019:
注意:新しい「x-40」レーザー巻尺には「M88B」モジュールが付属していることがわかりました。 マーキングはMCU付近のPCBで「88B」です。そのモジュールはSTM32F0MCUに基づいています(QFN-32パッケージがあります)。 そのモジュールは私のファームウェアではサポートされていません!
UPD 10/2021:
注意: U85Bモジュールのサポートを追加 :リンクを参照してください!それらは現代のタイプのレーザー巻尺で使用されています。

モジュールがサポートされている場合は、モジュールから電力線をはんだ付け解除する必要があります。
ステップ2:レーザー距離計モジュールのプログラミング
必要な機能を得るには、モジュールのMCUに専用のファームウェアを書き込む必要があります。
1.まず、MCUをプログラミングするためにいくつかのワイヤーをはんだ付けする必要があります。ピン配置は写真に示されています:
<図>
キーボードコネクタのピン7〜8を接続します。電源を入れる必要があります。
ライン「GND」と「Vbat」は電源に接続する必要があります。電源電圧範囲は+2.7 ... + 3.3Vです。モジュールに電力が供給されるときは、「Vdd」ラインに+ 3.5Vが必要です。
ライン「GND」、「SWDIO」、「SWCLK」、「NRST」は、ST-LINKプログラマーに接続する必要があります。行「NRST」は非常に重要です。MCUの元のファームウェアがロックされているため、MCUをプログラミングモードにするにはこの行が必要です。
一部のプログラマーにはこの行があり、一部の(安価な)プログラマーにはありませんが、この問題の回避策があります。
また、一部のプログラマー(元の「ST-LINK / V2」など)は、プログラマーの「VCC / TVCC」ラインに接続するために「Vbat」ラインを必要とします。
接続例(このプログラマーには「NRST」行がありません):
<図>
2.「ST-LINKユーティリティ」をPCにインストールします。そのソフトウェアの使用経験がない場合は、Webに多くのチュートリアルがあります。
ユーティリティを設定する必要があります([ターゲット]-> [設定]):
<図>
プログラマーが「NRST」出力を持っている場合は、電源を入れて、ユーティリティで「ターゲット->接続」を押すだけです。
そのような行がない場合は、次の手順を実行する必要があります。
- 電源を入れます。
- モジュールの「NRST」ラインをGNDに接続します。
- ユーティリティで[ターゲット]-> [接続]を押します。
- 「NRST」ラインをGNDからすばやく切断します。
- ユーティリティは接続を表示する必要があります
ヨンはそのような写真を撮らなければなりません:
<図>
3. MCUフラッシュは読み取り用にロックされているため、「読み取り保護」を無効にする必要があります。このステップで元のファームウェアが失われます!
[ターゲット]-> [オプションバイト]メニューを開きます。そのような設定が必要です:
<図>
「ReadOutProtection」を「Disabled」に切り替えて「Unselectall」ボタンを押し、「Apply」ボタンを押します。 (電源を切断して)モジュールを再起動してみてください。
[ターゲット]-> [接続]を押します。ログウィンドウに正常な接続に関する情報があり、0xFFで満たされたメモリの内容を確認する必要があります。これで、カスタムファームウェアをMCUにロードできます。
4.必要なファームウェアはここに配置されます:https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast
モジュールに適したHEXファイルを選択し、「ST-LINKユーティリティ」を使用してMCUフラッシュにダウンロードします。
ステップ3:レーザー距離計モジュールをArduinoに接続する
ボードのTXパッドにワイヤーまたはコネクタをはんだ付けする必要があります:
<図>
以下の接続回路図を参照してください。
まず、距離計モジュールが正常に機能していることを確認する必要があります。このステップでは、OLEDディスプレイをArduinoに接続する必要はありません。レーザー距離計モジュールのTXラインをArduinoのTXラインに接続し、モジュールの電力線を+ 3V電源に接続するだけです。
空のスケッチを作成し、Arduinoにロードします。 ArduinoIDEで「シリアルモニター」を開きます。ボーレートを選択: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スケッチ Arduino
プレビューなし(ダウンロードのみ)。
Github
レーザーテープのコードhttps://github.com/iliasam/Laser_tape_reverse_engineering 回路図
ブレッドボードアセンブリの概略図 
製造プロセス