您的 Arduino 项目需要快速且廉价的激光测距仪模块吗?
当然,你可以使用专门的模块来完成这项任务,但它们中的大多数价格都很高。VL53L0X/VL53L1X 模块价格便宜,但视野非常大。
所以我找到了一个解决方案:使用便宜的“X-40”激光卷尺作为激光测距仪。这些设备的成本为 20 美元或更低,它们可以测量距离高达 40m,精度约为 3mm。但是有两个问题 - 无法从磁带上获取读数并且测量速度很慢 - 低于 1 Hz。
为了解决这个问题,我对该激光卷尺进行了逆向工程,并为激光测距仪模块的 STM32 MCU 编写了自己的固件。测量速度对我来说很重要,我可以达到 ~60 Hz,但最大稳定距离降低到 ~6 m(最大范围为 37 m,但我没有测试)。
距离测量精度可以从 1 毫米到 10 毫米不等,具体取决于目标颜色和距离。
模块尺寸:25x13x50 毫米。
重要通知:您将丢失原始固件,因此该设备以后不能用作激光卷尺!
请注意,“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:
注意:增加了对 U85 模块的支持:见链接!它们用于现代类型的激光卷尺。
如果支持您的模块,则需要从模块上拆下电源线。
您需要将专用固件写入模块的 MCU 以获得所需的功能。
1. 首先,您需要焊接一些用于对 MCU 进行编程的电线。引脚排列如图所示:
连接键盘连接器的针脚 7-8 - 需要通电。
线“GND”和“Vbat”必须连接到电源。电源电压范围为+2.7...+3.3V。为模块供电时,“Vdd”线必须有 +3.5 V。
“GND”、“SWDIO”、“SWCLK”、“NRST”线必须连接到 ST-LINK 编程器。“NRST”线很重要——MCU的原始固件被锁定,所以进入MCU进入编程模式需要这条线。
有些程序员有这条线,有些(便宜的)没有,但是有一个解决这个问题的方法。
另外,有些编程器(如原来的“ ST-LINK/V2 ”)需要“Vbat”线与编程器的“VCC/TVCC”线相连。
连接示例(此程序员没有“NRST”行):
2. 将“ST-LINK 实用程序”安装到 PC。如果您没有使用该软件的经验,网上有很多教程。
您需要配置实用程序(目标 -> 设置):
如果您的编程器有“NRST”输出,您只需打开电源并在实用程序中按“Target -> Connect”即可。
如果它没有这样的行,您需要执行以下步骤:
Yon 必须得到这样的图片:
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。
您需要将电线或一些连接器焊接到板上的 TX 焊盘:
请参见下面的连接示意图。
首先,您需要检查测距仪模块是否正常工作。在这一步您不需要将OLED显示器连接到Arduino - 只需将激光测距仪模块的TX线连接到Arduino的TX线,并将模块的电源线连接到+ 3V电源。
创建空草图并将其加载到 Arduino。在 Arduino IDE 中打开“串行监视器”。选择波特率:250000
如果测距仪模块工作正常,您将获得相同的数据:
DIST;01937;AMP;0342;TEMP;1223;VOLT;115 DIST;01937;AMP;0343;TEMP;1223;VOLT;115 DIST;01938;AMP;0343;TEMP;1223;VOLT;115 DIST;01938;AMP ;0343;温度;1223;伏特;115
事实上,这个测试最好使用专门的 USB-UART 转换器。在其实用程序中选择 256000 波特率(它是 x-40 MCU 的真实波特率)。
其次,您需要将完整的原理图与显示器组装在一起。
将激光测距仪模块的 TX 线连接到 Arduino 的 RX 线(在将程序加载到 Arduino 时需要断开该线)。
如果一切正常,您将得到相同的结果:
您可以看到显示 3 个数字:
首次启动后,需要校准激光测距仪模块。
您需要在距离模块一定距离处放置一些白色物体。对于测距仪模块,到该物体的距离将变为零距离。要开始校准过程,您需要从激光卷尺连接键盘并按最低按钮。模块将发出两次哔声 - 在校准开始和结束时(校准持续时间接近 10 秒)。
现在您可以使用此激光测距仪模块。
链接:
1. Github——逆向工程结果和源码。
2. Habr.com - 谷歌翻译的关于激光卷尺逆向工程过程的文章。
对不起我的英语 - 我来自非英语国家。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !