Skip to main content

借助机器学习的力量,让机床更加智能

发布于2022-05-06

引言

要想经营一家专门从事快速原型制造的小公司,就需要在购置和维护机床上投入大量资源。不同种类机器的价格相差巨大,例如一台计算机数控(通常称为CNC)铣床的价格可能会高达数万美元。不过,更受用户欢迎的,往往是那些设计非常成熟的老式机床。它们往往是生产中的主力军,但通常都缺乏一些现代化功能,而这些功能可以使操作人员的工作流程更加高效。

图1:老式机床可能缺乏现代化功能,但往往具有很高的可靠性,并且经过了精细的校准。

图源:Tima Miroshnichenko/Pexels

要设计制造一个原型,往往需要动用遍布车间各处的多台机床,它们的操作和维护绝不是“一劳永逸”的事情。包括数控铣床在内的各式机床,都离不开操作人员细致的操作和维护,否则一旦发生故障,轻则耽误生产时间,重则花费巨资进行维修。对于小公司而言,雇佣许多机械师显然是不现实的。难道就没有更好的方法帮助机械师更高效地开展工作吗?

答案当然是肯定的,因为我们有机器学习算法,有具备专用神经网络功能的低成本硬件,还有各种服务让神经网络训练只需在浏览器里点击几下就可以轻松完成。本文中,我们将探讨如何对数控铣床进行技术改造,使之能够感知到自身的运行状态,并且能够通过互联网将自身状态传达给机械师。

项目材料与资源

图2:Arduino Portenta H7 Lite Connected添加了Wi-Fi和蓝牙功能,是一款面向工业的开发平台。图源:Arduino

如果您正在寻求面向工业级应用的嵌入式平台,那么不久前发布的Arduino Portenta H7 Lite Connected是一个不错的选择。这款H7系列新品采用了和Portenta H7 Lite相同的双核STM32H747作为主处理器。STM32H747包含一个运行频率480MHz的Cortex M7内核和一个运行频率240MHz的Cortex M4内核。其中,计算量较大的神经网络可以在M7内核上运行,而用来驱动传感器和Wi-Fi通信的低延迟代码则可以顺畅地运行在M4内核上。Portenta H7 Lite和H7 Lite Connected的区别在于后者配备Murata 1DX模块,因而增加了无线通信功能。该模块支持802.11b/g/n Wi-Fi®和蓝牙5.1。

为了获得数控铣床的运行状态,本项目拟采用三轴加速度计持续获取机床的X轴、Y轴、Z轴数据。一旦发现可能存在问题的运动特征(例如步进电机发生停顿,其原因可能是设置不正确,或者碎屑卡住了某个轴的导轨),就将触发一个子程序向操作人员发出电子邮件通知。

物料清单 (BOM)

您可以点击此处获取BOM以及其中的物料在贸泽的当前价格。截至本文撰写之时,该BOM需要花费约166美元(不含适用的税费和运费)。1列出了该BOM中的项目。

表1:机器学习数控机床项目的BOM

数量

贸泽编号

说明

1

782-ABX00042

Arduino Portenta开发板

1

474-SEN-13284

LSM9DS1 9自由度加速度计Breakout板

1

485-3174

实芯连接线

1

932-MIKROE-1120

锂聚合物电池

1

424-6-PIN-HEADER

单排公头

资源

本项目所有源文件均可从贸泽GitHub仓库获取。该仓库由三个主要文件夹构成,包括:

Documentation

Documentation文件夹包含原理图的图形文件和其他重要参考资料。

3D Files

3D Files文件夹包含Portenta H7 Lite Connected外壳的.stl文件,可用于查看以及3D打印。这些文件可通过https://viewer.autodesk.com免费查看。

图3:Portenta的一种安装装置。图源:Thingiverse

Software

Software文件夹包含源代码文件,包括:

  • smartercnc_fw.ino
  • smarterCNC_inferencing.h
  • adruino_secrets.h

有关这些文件的更多信息,将在后文“软件开发”一节中进行介绍。

工具

本项目假定您可以使用以下工具:

  • 具有高速互联网连接的计算机
  • 数字万用表 (DMM)
  • 小型螺丝刀套件
  • 束线带

可选:3D打印机,用于打印外壳。建议使用PETG耗材,因其具有较高的机械强度和热弹性。或者,也可以使用项目提供的文件通过在线3D打印服务来制造外壳。

构建项目

本节包含启动和运行本项目的必要步骤,共包含以下几个小节:

  1. 硬件设置
  2. 设置软件开发工具链
  3. 软件开发
  4. 总装和安装

硬件设置

图4:Portenta H7 Lite Connected引脚分布。图源:Arduino

本项目的硬件由两块电路板组成。第一块是Portenta H7 Lite Connected板,包含项目的“大脑”和通信模块。第二块是LSM9DS1加速度计Breakout板,它将检测在铣削操作期间电机旋转时引入到数控铣床框架的X、Y和Z运动。建议将加速度计板通过足够长的电缆连接到Portenta,以便为您的特定数控铣床测试各种安装点。本原型已在X-Carve第二代台式数控铣床上测试通过,对其他铣床也应该适用。

  1. 将一个四引脚排针插入LSM9DS1 Breakout板。由于该项目采用I²C串行通信,因而需要将排针插入到带有GND、VDD、SDA和SCL的一侧。
  2. 将LSM9DS1板的GND和VDD引脚分别通过电缆连接到Portenta板的GND和3V3引脚。
  3. 将LSM9DS1板的SDA和SCL引脚分别通过电缆连接到Portenta板的PH8和PH7引脚。

-

图5:LSM9DS1 IMU Breakout板的外观。图源:贸泽

设置软件开发工具链

本项目的固件开发工作采用Arduino新版2.0 IDE,可以从这里免费下载。下载并安装该软件后,还需要进行一些额外操作才能开始编辑代码。请按照以下步骤操作,让IDE准备好对Portenta H7 Lite Connected进行编程。

图6:Arduino新版IDE 2.0加入了调试器等新功能。图源:Green Shoe Garage

  1. 单击工具栏上的Tools > Board > Board Manager。
  2. 在搜索栏中输入“Portenta”。
  3. 选择搜索结果中的Arduino Mbed OS Portenta Boards by Arduino。
  4. 单击INSTALL。

同时,需要为LSM9DS1 Breakout板安装合适的库文件。请按照以下步骤操作:

  1. 单击工具栏上的Sketch > Include Library > Manage Libraries。
  2. 在搜索栏中输入“LSM9DS1”。
  3. 选择搜索结果中的Sparkfun LSM9DS1 IMU。
  4. 单击INSTALL。

此外,Edge Impulse平台还需要在计算机上安装以下依赖项:

图7:通过IFTTT webhook,物联网设备可通过简单的HTTP请求与其他服务进行互动。图源:IFTTT

最后,我们需要在IFTTT设置一个帐户。本项目利用IFTTT的webhook技术来触发通知和邮件的发送。点击此处可设置IFTTT帐户。点击此处了解如何设置webhook。

软件开发

本项目的代码库采用C语言编写。但是,在进行本项目特定的软件开发之前,需要先用Edge Impulse的服务来开发一个专门针对我们的机床和仪器的机器学习算法。这项服务还可以自动为任何基于ARM的Arduino平台生成代码库。首先,我们需要从加速度计获取训练数据,并将这些数据输入到基于云的Edge Impulse训练环境,为此需要用到Edge Impulse CLI工具套件中的Data Forwarder工具。该工具的协议很直观。Portenta将通过串行端口以115200bps的波特率发送加速度计数据,其中每组读数都由X轴、Y轴和Z轴三个数值组成,每行一组读数,并使用逗号隔开三个数值,但每行最后一个数值后面不能有逗号。

图8:Edge Impulse的Data Forwarder工具提供了一种便捷的方式,将训练数据从嵌入式设备发送到云端。

图源:Edge Impulse

对于本项目,我们认为铣床在任何时候都处于以下工作状态之一:

  • 空闲:铣床在开始正常工作之前和结束正常工作之后所处的状态,此时刨槽机主轴的步进电机几乎不会产生任何运动。
  • 正常工作:正常情况下铣床在铣削物体时所处的状态。
  • 发现错误:如果因为发生错误而导致强烈振动(如电机故障或碎屑阻碍主轴运动),则推定机床处于错误状态。
  • 未定:当神经网络的置信度不足以判定机床处于以上某种状态时,便处于此默认状态。

图9:通过Edge Impulse,只需在浏览器中进行点击和拖动操作即可训练神经网络。图源:Edge Impulse

主要文件

本项目的关键性文件包括:

  • smartercnc_fw.ino:包含设置 (setup) 例程、项目的主循环,以及一些支持功能,这些功能用于和传感器交互,并使设备能通过SMTP电子邮件协议与机械师通信。
  • smarterCNC_inferencing.h:该文件包含Edge Impulse为特定机床和传感器训练神经网络后生成的推理引擎。
  • arduino_secrets.h:保存特定Wi-Fi网络的唯一变量(SSID和加密密钥)以及通过IFTTT服务发送电子邮件所需的唯一IFTTT API密钥。

主要变量和常数

您可能需要注意一些变量,可能还需要根据特定的设计选择来对它们进行调整。以下变量位于smartercnc_fw.ino文件中:

  • #define CONVERT_G_TO_MS2 9.80665f:将G力读数转换为加速度的建议转换系数,测量单位为m/s²。此变量可以根据需要进行调整,但默认值应该适用于大多数情况。
  • static bool debug_nn = false:如果希望查看更详细的调试信息输出,请将此变量设置为true。
  • const char *prediction:此变量保存的是根据当前加速度计读数对铣床运行状态所作的最新预测,其值是以下四种状态之一:Idle(空闲)、Error(错误)、Normal(正常)、Uncertain(未定)。
  • static bool error_detected = false:此变量在第一次检测到错误时会设为true。
  • static bool led_status = false:Portenta H7板的LED_BUILTIN是低电平有效的,也就是说将引脚设为LOW会点亮LED,而将引脚设为HIGH则关闭LED。

以下变量位于arduino_secrets.h文件中:

  • #define SECRET_SSID "PortentaAccessPoint":Portenta的无线通信应当连接到的Wi-Fi网络名称。
  • #define SECRET_PASS "123Qwerty":连接到无线网络所需的密码。
  • char HOST_NAME[] = "maker.ifttt.com":Portenta向机床操作人员发送消息时提交POST请求使用的URL;此处所示为使用IFTTT服务发送电子邮件。
  • string PATH_NAME = "/trigger/event-name/with/key/your-key":IFTTT验证webhook用户身份的密钥。
  • string queryString = "?value1=Error":HTTP请求可以附加任意类型的数据;此处所示为告知IFTTT机床处于错误状态。

主要函数

smartercnc_fw.ino文件包含本项目的初始化代码、主循环和支持函数。支持函数包括:

  • void handle_error_detection():当神经网络将预测变量设为“Error”(错误)时,将触发此函数。可在此函数中调用项目中的其他函数以满足特定需求。
  • void send_email():此函数通过IFTTT.com基础设施及其webhook功能发送电子邮件。简而言之,当发出HTTP请求(http://maker.ifttt.com/trigger/event-name/with/key/your-key?value1=Error)时,IFTTT将依次向您想要的收件人发送电子邮件。这种方法优点颇多,包括:

    • 无需在Arduino固件中保存电子邮件密码
    • 适用于具有各类互联网连接的各种嵌入式平台
    • 收件人电子邮件地址发生变化时无需重新刷固件;只需在IFTTT网站上更改即可。

总装和安装

将固件上传到Portenta板后,就可以将这个电子设备与铣床配对了。加速度计的安装方式(位置和方向)必须和神经网络训练期间的数据收集阶段一致,否则可能会导致误报和漏报。将本项目安装到铣床上的具体过程如下:

  1. 将加速度计安装到铣床上。再次重申,加速度计的安装方式(位置和方向)必须和训练期间一致。
  2. 如果需要的话,将Portenta板插入到外壳中。
  3. 将Portenta板安装到铣床上,并确保连接加速度计和Portenta的电缆安全地绕过铣床的任何移动部件。

-

图10:安装到外壳中的Portenta H7 Lite Connected。图源:Green Shoe Garage

  1. 使用束线带以合适的方式捆住电缆,确保不妨碍铣床正常工作。
  2. 将锂聚合物电池连接到Portenta板的J4连接器。

最后,还有几点故障排除提示:

  • 确保锂聚合物电池已充满电。
  • 验证所有电缆都已牢固连接到PCB。
  • 检查SDA和SCL电缆,确保它们没有接反;同时也务必确保3V和GND电缆不会意外接反。
  • 验证加速度计的X轴、Y轴、Z轴方向是否正确;确保加速度计的安装方式(位置和方向)在训练和正常工作期间保持一致。

根据我们的测试,要想获得尽可能准确的结果,加速度计的安装位置应尽可能靠近控制着立铣刀主轴的电机。

实际运行

本项目完成总装和安装后,就可以开始验证其是否正常工作了。此时可以设置铣床铣削一个简单的物体。铣削工作开始后,按下Portenta上的重置按钮,开始监测数控机床的运行状态。

图11要想获得尽可能准确的结果,需要将加速度计(红色箭头)安装在尽可能靠近主轴电机(蓝色箭头)的位置。图源:Green Shoe Garage

固件需要经过几秒钟时间才能开始监测铣床运行状态。在此期间,操作人员务必在场,以确保设备安全运行,并穿戴护目镜等安全装备。

图12:通过Portenta的串行端口获得的调试数据。图源:Green Shoe Garage

在正常工作状态下,内置LED常亮。发现错误时,LED将会闪烁,并向机械师发送电子邮件通知。您可以根据自己的需要更改本项目的源代码,例如可以增加声音警报,或者将通信方式更改为蓝牙连接。

结语

要让快速原型制造业务更加现代化,并不一定需要投入数万美元来进行改造。Arduino新品Portenta H7 Lite Connected是一款工业级嵌入式平台,可以让专门从事快速原型制造的小公司轻松升级其传统的数控铣床,从而实现运行状态远程监控以及互联网通信功能。

作者简介

专业工程师Michael Parks是Green Shoe Garage的所有者。Green Shoe Garage是一家提供定制电子设计的工作室和技术咨询机构,位于马里兰州南部。Michael Parks创办了《S.T.E.A.M. Power Podcast》播客来提升公众对科技的认知。他拥有马里兰州专业工程师资质,并拥有约翰·霍普金斯大学的系统工程硕士学位。

访问网站

来自Mike Parks的更多内容