基于Android的3D打印机远程控制与调度系统
2020-06-11神显豪臧一豪潘角卢森锴
文/神显豪 臧一豪 潘角 卢森锴
(1.桂林理工大学信息科学与工程学院 广西壮族自治区桂林市 541004)
(2.桂林凯歌信息科技有限公司 广西壮族自治区桂林市 541000)
科技发展日新月异,3D 打印技术正在飞速发展中,而随着人们使用手机的频率逐渐提高,手机APP 控制需求的不断增加,通过移动端来远程控制3D 打印机的技术应运而生,大大改善了传统设备通过有线连接的弊端,成为目前最受人们青睐的3D 打印技术。
本文将设计基于android 的3D 打印机远程控制与调度系统,Wi-Fi 模块连接上服务器,在android 端开发程序实现连接上服务器,以服务器在中间当做桥梁作用建立联系,Wi-Fi 模块接收到数据就发送到3D 打印机硬件,最终完成远程对3D 打印机的控制管理。
1 系统总体设计
1.1 系统总体框架设计
硬件系统主要由打印机主板、Wi-Fi 模块两部分组成。Wi-Fi 模块用于接收来自手机 APP 和服务器端的控制命令。用户可以通过手机无线网络或者Wi-Fi 连接到服务器端,通过 APP 控制系统发送控制命令对打印机进行控制,3D 打印远程控制系统体系结构如图1 所示。
2 系统硬件设计
2.1 硬件总体框架设计
控制系统整体硬件连接较为简单可以轻松接入,3D 打印机主板有专用的打印机USB 接口,将USB 连接线接入计算机其中一个USB 连接口[4]。另外的Wi-Fi 模块使用USB-TTL 模块接入计算机另一个USB 接口,USB-TTL 模块引出的串口TX、 TX 接口接入Wi-Fi 模块则完成了硬件连接,3D 打印机与Wi-Fi 模块硬件连接示意图如图2 所示。
其中,计算机是核心部分,计算机程序为Wi-Fi 模块和打印机之间的桥梁,计算机端程序也可以对打印机喷头移动、喷头和热床温度、温度读取等控制。并且将打印机信息发送到Wi-Fi 模块,Wi-Fi 模块将数据传输到服务器再到手机,做到手机端也可以控制打印机打印文件或简单移动等等[5]。
2.2 Wi-Fi模块设计
Wi-Fi 模块负责与服务器数据传输、消息收发等,Wi-Fi 模块本次设计选择使用ESP8266,这款Wi-Fi 模块有价格低、方便使用等特点。在当前不少企业和厂家都使用该模块做智能家居或远程控制的应用。
2.3 打印机主板设计
图1:系统总体体系示意图
图2:硬件连接示意图
3D 打印机控制实质为对3D 打印机主板的控制,控制打印机主板过程都使用的G-code 代码对打印机控制。现在也有不少优良的打印机控制程序,例如Repetier Host 软件就能够对市面大多数打印机控制,并且程序内部能导入stl 文件或gcode 文件显示3D 图形,软件内置了两款当前时下流行和比较优秀的切片引擎Slic3r 和curaEngine,切片引擎其实就是将3D 模型stl 文件分层处理,通过引擎内部的算法,编码成为3D 打印机能够读懂的一条条G-M 指令组。
打印机通常就只需要控制喷头、热床温度,X、Y、Z 轴移动,文件打印等。本设计中所涉及的控制的G-code 代码如表1 所示。
在打印文件stl 文件经过切片引擎切片后获得的G-M 指令的gcode 文件,程序进行逐行的读取文件信息过滤掉注释并发送到3D打印机主板上面,就能够实现打印出一个完整的物品。本次设计中程序与打印机之间通信使用Ping-Pong 通信,其实质就是在打印文件过程只有收到了打印机返回的ok 应答才发送下一行G-code 代码。
3 系统软件设计
3.1 计算机桌面控制程序设计
桌面控制应用基层需要实现使用串口进行读取和发送数据,使用Eclipse 软件建立新工程后,首先导入所需要的jar 包。MainFrame.Java 是程序的主类,也是程序的入口类,类中实现应用显示控件,控件监听,读取文件等方法等。程序中桌面用于的主要逻辑事件完成是监听事件,其余部分都几乎都是初始化控件或者数据等。程序中最主要部分就是是通过按键监听事件开启和关闭线程、发送指定的G-M 指令等,完成后台逻辑。当喷头Y 方向键点击监听事件触发,第一步需要判断打印机的串口目前是否为打开状态,如果串口打开情况下就发送G1 Y Moving_distance (移动距离)指令使喷头向相应位置移动一定距离。在程序中创建了MyThread_ESP8266、thread_AndroidPrint、MyThread_file,3 个线程类,在点击按钮的时候实现相应功能则开启线程。
3.2 Android客户端App设计
使用“android studio” 软件新建空白项目,程序选择android9.0(API28),在android 程序要实现接和收服务器端的数据、数据解析和生成、控件布局、按键监听等。
android 程序在真机上运行时需要对程序中使用权限声明,在本设计中使用了网络权限,所以需在APP 中提早声明,添加网络请求权限如下所示:
android 端连接服务器需要实现长连接才能接收到服务器端发送过来的数据,建立长连接分为4 个部分完成,长连接的配置ConnectionConfig 类、长连接管理ConnectionManager 类、session管理SessionManager 类、服务中实现长连接MinaService 类。长连接配置类中配置了服务器公网IP 地址、端口号、读取数据的Buffer大小、超时连接等,在每次打开程序的时程序都会发送数据自动与服务器建立长连接。
4 系统测试
4.1 计算机控制端功能测试
计算机控制主要功能是对打印机温度、X、Y、Z 轴移动、打印文件等控制。下面就进行对程序进行黑盒测试,在打开文件直接将打印机的USB 接入电脑串口,ESP8266 模块使用USB-TTL 模块连接电脑另外一个串口。双击程序图标打开程序,设置打印串口波特率250000 和ESP8266 模块波特率115200 再打开串口,准备开始测试。
首先对计算机端程序单机测试,仅测试程序能否独立控制打印机和发送数据等,对计算机控制程序黑盒测试过程记录如表2 所示。
4.2 Android客户端功能测试
首先需要利用计算机控制程序将ESP8266 模块初始化并连接上服务器端,连接完成后程序会默认为当前所有打印机为空闲状态,每隔12S 会发送10 台打印机空闲状态的JSON 数据到服务器端然后将这数据转而下发到android 手机APP,这时仅需要打开手机APP 查看是否为10 台空闲打印机即可,查看程序中空闲碎片中的确为10 台空闲中的打印机信息。在android 客户端能够接收到ESP8266 模块发送的数据,在打印机一号预约打印页面,点击喷头位移控制按钮可以对当前打印机喷头的移动和温度控制,当移动Y轴20 时在计算机控制程序段能接收都android 客户端发送的一条Json 数据,这条数据通过计算机控制程序可以过滤并解析后向打印机发送移动喷头的指令信息。
对3D 打印机打印整个文件测试只需要在一号打印机预约打印页面点击打印物品,android 会发出一条“{"PID":"01","GID":"4"}”的Json 数据,表示打印机1 号打印机4 号物品,打印机就能实现整个模型的打印。
表1:本设计设计的G-code 代码表
表2:计算机控制程序测试结果表
通过在android 手机APP 多种输入测试,可以发现程序几乎没有任何功能上的问题。
通过对计算机控制程序、服务器端程序、android 客户端程序黑盒测试,程序各个部分都能正常符合预期的运行,功能无异常情况,在对android 客户端程序测试其实就是相当于对整个系统整合起来进行测试,都无异常情况,表明整个控制系统功能是可以实现的。
5 结论
通过实际测试表明,用户可通过移动端来远程控制3D 打印机,并对其进行一系列指令操作,并且3D 打印机打印出的物品符合用户需求,具有高效、精准的优点。