亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

为 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。但是有两个问题 - 无法从磁带上获取读数并且测量速度很慢 - 低于 1 Hz。

为了解决这个问题,我对该激光卷尺进行了逆向工程,并为激光测距仪模块的 STM32 MCU 编写了自己的固件。测量速度对我很重要,我可以达到 ~60 Hz,但最大稳定距离减少到 ~6 m(最大范围为 37 m,但我没有测试)。

距离测量精度可以从 1 毫米到 10 毫米不等,具体取决于目标颜色和距离。

模块尺寸:25x13x50 mm。

重要提示:您将丢失原始固件,因此该设备以后不能用作激光磁带测量!

请注意,“X-40”激光卷尺可以有不同版本的激光测距仪模块,我的固件仅支持其中的一部分!

“X-40”并不是带有这种模块的激光卷尺的唯一名称——我知道有几种不同的带有合适模块的中国激光卷尺。

第一步:拆卸激光卷尺

让我们拆开激光卷尺,从中得到一个激光测距仪模块。

您需要从机箱上拧下 7 个螺丝:

拆开的激光卷尺:

您可以在设备外壳内看到小型激光测距仪模块。您需要从模块上断开带状电缆并从机箱中取出模块:

请注意,模块标记为“701A”。我的固件仅支持“512A”和“701A”模块版本。几位用户确认“703A”模块也可以工作(我没有测试过)。

UPD 11/2019:
注意:发现较新的“x-40”激光卷尺带有“M88B”模块。 在 MCU 附近的 PCB 上标记为“88B”。该模块基于 STM32F0 MCU(它具有 QFN-32 封装)。 我的固件不支持该模块!

UPD 10/2021:
注意: 增加了对 U85B 模块的支持 :见链接!它们用于现代类型的激光卷尺。


如果您的模块受支持,则需要从模块上拆下电源线。

第二步:编程激光测距仪模块

您需要为模块的 MCU 编写专门的固件以获得所需的功能。

1.首先你需要焊接一些电线来编程MCU。 Pinout如图所示:

连接键盘连接器的 7-8 针 - 需要上电。

线路“GND”和“Vbat”必须连接到电源。电源电压范围为 +2.7...+3.3V。给模块供电时,“Vdd”线必须有+3.5V。

“GND”、“SWDIO”、“SWCLK”、“NRST”线必须连接到 ST-LINK 编程器。 “NRST”这一行很重要——MCU 的原始固件被锁定,因此进入 MCU 编程模式需要这一行。

有些程序员有这条线,有些(便宜的)没有,但有一个解决这个问题的方法。

另外,一些编程器(如原来的“ST-LINK/V2”)需要“Vbat”线与编程器的“VCC/TVCC”线相连。

连接示例(此程序员没有“NRST”行):

2. 将“ST-LINK 实用程序”安装到 PC。如果您没有使用该软件的经验,网上有很多教程。

您需要配置实用程序(目标 -> 设置):

如果您的编程器有“NRST”输出,您只需打开电源并在实用程序处按“目标-> 连接”即可。

如果它没有这样的行,则需要执行以下步骤:

  • 打开电源。
  • 将模块的“NRST”线连接到 GND。
  • 在实用程序上按“目标 -> 连接”。
  • 快速断开“NRST”线与 GND 的连接。
  • 实用程序必须显示连接

你必须得到这样的照片:

3. MCU flash 被锁定读取,因此您需要禁用“Read Out Protection”。在这一步您将丢失原始固件!

打开目标 ->“选项字节”菜单。一定有这样的设置:

将“读出保护”切换为“禁用”,然后按“取消全选”按钮,然后按“应用”按钮。尝试重启模块(通过断开电源)。

按目标 -> 连接。日志窗口中必须有关于成功连接的信息,您必须看到内存内容 - 填充为 0xFF。现在您可以将自定义固件加载到 MCU。

4、需要的固件放在这里:https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast

为您的模块选择合适的 HEX 文件并使用“ST-LINK 实用程序”将其下载到 MCU Flash。

第 3 步:将激光测距仪模块连接到 Arduino

您需要将电线或一些连接器焊接到板上的 TX 焊盘:

见下面的连接示意图。

首先,您需要检查测距仪模块是否工作正常。这一步OLED显示器不需要连接Arduino,只需将激光测距仪模块的TX线接到Arduino的TX线,模块的电源线接到+3V电源即可。

创建空草图并将其加载到 Arduino。在 Arduino IDE 中打开“串行监视器”。选择波特率:250000

如果测距仪模块工作正常,您将获得相同的数据:

事实上,这个测试最好使用专门的USB-UART转换器。在实用程序中选择256000波特率(x-40单片机的实际波特率)。

其次,你需要组装完整的原理图和显示器。

将激光测距仪模块的 TX 线连接到 Arduino 的 RX 线(在将程序加载到 Arduino 时需要断开该线)。

如果一切正常,您将得到相同的结果:

您可以看到显示有 3 个数字:

  • "COUNT" - 接收值的计数器
  • "AMPL" - 信号的幅度。下面的符号条(“<--->”)以图形方式显示幅度(以对数刻度)。
  • 最大值 - 以米和毫米为单位的距离。

第 4 步:调零

首次启动后,需要校准激光测距仪模块。

您需要在距模块一定距离处放置一些白色物体。对于测距仪模块,到该物体的距离将变为零距离。要开始校准过程,您需要从激光卷尺连接键盘并按下最低的按钮。模块会发出两次蜂鸣声 - 在校准开始和结束时(校准持续时间接近 10 秒)。

现在你可以使用这个激光测距仪模块了。

链接:

1. Github - 逆向工程结果和源代码。

2. Habr.com - 谷歌翻译的关于激光卷尺逆向工程过程的文章。

抱歉我的英语 - 我来自非英语国家。

代码

  • Arduino 草图
Arduino 草图Arduino
无预览(仅限下载)。
Github
激光胶带代码https://github.com/iliasam/Laser_tape_reverse_engineering

示意图

面包板组装示意图

制造工艺

  1. 如何在 OpenSensors 上测量空气质量
  2. 激光切割机的用途是什么?
  3. 学校的智能温度监测
  4. Arduino 的 8 位 IO 端口库
  5. Arduino 的 64 键原型键盘矩阵
  6. Arduino Nano 的 TFT 扩展板 - 开始
  7. Arduino 的隔离模拟输入
  8. 廉价的 Arduino 呼吸控制器(USB-MIDI)
  9. 控制直流电机的技巧
  10. Arduino 的闪电探测器
  11. 超酷室内导航机器人
  12. 为制造业中的 5G 打造案例