大家好,又见面了,我是你们的朋友全栈君。
写在前面的话
大家好,学习之余给大家分享一个这学期设计的课程设计,互相学习借鉴。课程设计,尤其是自定义的课程设计,自盘古开天地以来就困扰着每一位工科男。我,一枚工科男,觉得需要站出来为大家排忧解难了。这学期有自定义的课程设计,所以我就设计了一个很有创意的课程设计,是一个国外开源的设计,结合了国外开源资料和一些大佬的实践经验。
设计的实际演示
憨憨钟的主要功能
本设计主要有两大部分:控制部分和显示部分。
- 显示部分:手机界面显示,以及监控电脑端的CPU工作情况
- 控制部分:自动写时间,自动画天气
设计的实现过程
本设计的硬件电路是十分简单的,即使没有接触过电路的同学也很容易入手的,因为这个设计不需要设计电路!!没错!就是不需要设计电路,不要焊板。是不是很开心。设计可分为如下几点研究:
- 显示界面的设计
- 模型结构的设计
- 准备相关元器件
- 调试以及烧录程序
界面设计
界面自古以来都被QT占领了一片天,我,觉得反其道而行,我选用了一个更加简单入手,适合小白的界面设计软件,不需要任何编程基础就可以搞定——Aida_Extreme
显示界面,主要是为了更加直观地监控电脑进程和数字时间。原本的界面显示是OLED屏,但是由于OLED屏尺寸太小了,故尝试用手机屏幕代替OLED,手机屏幕也是OLED一种,但是它的分辨率和尺寸都是十分客观的,界面布局也相对丰富点。。
Aida_Extreme有一个十分强大的功能,就是可以实时监控电脑的进程,利用这个功能可以较简单地实现本课题界面显示需要的功能。通过Aida_Extreme自带的插件以及图像化布局,可以较为快速的实现布局,省去底层程序的编写,大大减少开发时间。具体的,该界面布局有常见的时间日期、温度,还有布局设计有电脑的CPU温度、CPU运作时间和电源情况等。
设计完界面后,通过运行Aida_Extreme,手机游览器访问电脑的IP即可得到界面。如图所示,为手机显示布局界面的效果图。原理就是基于端口映射,通过手机访问电脑IP,将电脑端的布局界面映射到手机端口。
模型结构设计
模型可以说是整个设计的门面了,所以,这个得设计好看点,生活要有仪式感!设计也不能没有。通过solidworks软件设计出初步的模型设计图。整体模型由三个舵机和舵机臂组成传动结构、白板笔与舵机臂咬合、上舵机通过舵机拉杆控制左右舵机上下运动、左右舵机控制舵机臂的咬合在白板处自由运动。舵机臂直接利用对接螺丝固定关节。整体结构布局合理且较为节省空间。下图为实际的模型结构(打印配合完成的实际效果,模型是参考国外开源项目以及结合网上大佬的模型)
元件清单
元件以及材料清单如下:
注:购买元器件的时候记得多备份一些,以防万一,烧坏板子或者哪个电容爆炸了都是工科同学的家常便饭
调试
- 电路调试:由于一些不可抗拒的原因,电路搭建是通过面包板搭建,如图所示。由于本设计的电路驱动十分简单,为成功设计制作提供了无限的可能性。而且电路的简易化使得驱动调试也十分简单。图中,面包板是起转接作用,即转接舵机与MCU引脚,这样转接可以避免在密集的MCU引脚中引脚接触短路;MCU是选用市面上性价比较高的NodeMcu-V3。由于我们设计的主控选用的是联网主控,而不是选择STM32,所以编译器选用了Arduino-IDE,通过Arduino-IDE可以直接上传算法到MCU,无需多余复杂的操作,先对比与MDK5,就此而已优势自然是较为明显的。
具体的,调试是通过COM端口调试的,首先确定好esp8266的板卡包,在IDE里面设置好,从左往右看,第一张是板卡包参数设置调试,开发板设置为esp8266类、波特率设置为115200等;第二张是端口调试,通过端口调试,可以较为准确地确定落笔坐标以及白板笔与白板地接触情况。程序调试均在Arduion-IDE环境下完成的。由于选用的MCU具有支持直接上传程序的功能,所以在这种情况下,程序的容错性十分可观,只要调试好参数,几乎不会出现异常。
- 结构搭建调试:模型的搭建我采用了3D打印和亚克力雕刻两种方式。模型的亚克力切割草图如图所示。亚克力切割的好处在于精度高,出品效率高,基本几个小时就可以完成出品,3D打印则是打印一些需要韧度的结构,例如在本设计中需要韧度的就是白板笔与舵机臂的咬合结构。其他的结构则不需要,所以就选用激光切割的方式。这样不仅节约成本而且制作效率高。
- 程序调试:程序可以直接使用,无需修改,看得懂程序的可以自行修改,看不懂的可以直接用,不打紧。程序在我的资源那里,大家去下载即可。
异常分析
整体测试中,在联网正常,MCU工作正常的情况下,舵机臂控制白板笔出现异常,即无法稳定、正确地书写出时间。异常情况包括:写出来的时间模糊,不连续,写到一般无法归位、无法擦除时间等。在程序正常运行的情况下,出现这种异常的话,可能是结构出问题。如图所示,是一个异常复位的情况,这个情况也致使舵机无法正常控制白板笔书写时间在白板上。即在初始状态下,笔头与白板没有完全接触,致使后续舵机无法控制书写。其他的例如一些结构的松懈也会出现这种异常,只要确保结构稳定即可。
结语
谢谢大家,希望可以帮助到一些为课程设计忧伤的同学。
下面是体会(比较多):
说说选这个课题的感受,其实这个电子综合设计是我一直期望的,因为这个课程设计开放性很高,没有什么具体的硬性指标,就单单选题上就给我很大的选择空间,有更高的自主性。自由,一直是追求的目标。而这个课程设计完美诠释了这个自由,选题自由,组队自由,制作自由。
起初,我在确定选题时,利用网络查看了很多课程设计,但是大部分都是基于STM32的设计和51单片机的,例如基于STM32的温湿度报警装置、智能锁等普遍的课设,这些课设在我大二的时候基本都接触过,所以,如果再做类似的作品会让人觉得无趣。通过反复的斟酌,我决定设计一个富有创新性作品,尝试以前没有接触过的作品,尝试研究以前没有接触的主控和不熟悉的IDE。于是,我决定设计一个由国外开源的、基于esp8266的小机器人(也是本课题的主要研究内容),主控是基于nodemcu也不是基于STM32,这个对我来说是一个富有挑战性的课设。这也是确定这个选题的初衷,创新+大胆。不固步自封,不拘于泥于现状,敢于挑战自己不曾接触的领域,也是本人一直向往的自由。
虽然这个选题让人看起来觉得难度很低,但是课设虽小,却蕴含深意,里面的技术难度,我个人觉得不是普通的STM32课设可以媲美的。技术难度和设计难度都是较高的。这个报时机器人技术难点就在于算法和联网驱动那里,控制三个舵机运动的算法,通过时间反馈,输出PWM波,从而让舵机臂运动到预想的落笔点,这无疑就是一套闭环的PID,
起初,在研究舵机运动算法的时候,我查找了很多资料,调试后都是不理想的,但是一次机缘巧合下,我在github上找到一位大神写的算法,与我这个课题有很大的出入,有很高的参考价值,于是通过github平台,我研究了这套成熟的算法,通过移植,成功实现了需要的算法功能。在这里也十分感觉无私开源的大神们,让我这个课程设计算法的研究进度加快了很多。正所谓,算法虐我千万遍,我待算法如初恋;联网驱动这里也是一个很大的坑,如果没有接触过蓝牙模块这类透传数据的模块,想征服这块esp8266可能有点难。要保证模块正常入网,需要设置好AT指令,这些指令在官方文档里都有,无论是刷固件库还是指令设置,都是一个考验耐心的过程,细心+耐心,即可成功。当然了,如果想速成入网,可以使用Arduion-IDE和选用nodemcu,由于nodemcu支持直接上传程序,Arduion-IDE又可以为主控提供一个较为“舒适”的入网环境,这样就省去了手动设置入网指令的过程。那时候我都惊呆了,无意间被我找到了一条捷径,正所谓条条大路通罗马,不拘于泥一条大路,也许可以更容易通过成功。
解决了关键算法后,就开始设计模型了,之前说过,除了技术难点,这里也存在着一个设计难点——模型设计。作为一名“电子生”,专业主要是和电路板接触,几乎不太可能会接触结构学。但是,本人有幸和其他专业的同学合作,故自学了点结构设计的知识。通过solidworks软件——一款设计结构的应用软件,设计模型。这个课程设计都国外开源网站是可以找到类似的,我参考了那些大神的结构后,稍加修改,让结构更加符合我的审美。毕竟,看着舒服的结构,让能激起你的调试兴趣。试想一下,如果一个“恶心”的结构在你面前,难道不会影响你的心情么?就如身边好看的女朋友和难看的哥们约你出去看电影,审美观正常的人肯定都是选前者(当然不排除审美观奇特的)。设计结构加上修缮细节大概花费了我一个星期的时间,正所谓时间投入和收获成正比,确实,经过一周多的设计,我深刻了解到自己的审美观是多么奇特!设计完结构后,仿真可以后,就开始着手准备模型打印,我选择了结合两种打印方式来共同完成结构的打印:3D打印和激光切割。3D打印虽然耗时,但是可以打印出立体感很强而且韧性度高的部件,激光切割虽然韧性度低,但是耗时短且便宜。设计结构需要考虑下性价比,能省则省(这不是抠,是睿智)。从设计模型,到打印模型,最后到组装模型,前前后后一共耗时两周。耗时之长,足以体现模型设计的难度。每个细节的修缮和每次打印失败都是对自己的一种考验。坚持+努力,是设计成功的根本,也是我学到的。
完成模型搭建后,接下来就进入了,电路的设计。传统的课程设计都是视电路设计为核心,但是我决定摈弃传统理念,挑战创新。电路设计在我这里,属于次重点,不是主要核心。就举例以前的课程设计,不是焊板就是在焊板的路上。虽然说不上腻,但是如果这个我期望的课程设计还要进入这一步的话,就和我创新的理念背道而驰了,所以,我决定来一次大胆的挑战——挑战不焊板,即使用挑战不用电烙铁、不用洞洞板,用面包板完成电路设计。更主要的是,一些不抗拒的原因,工具在学校,无法拿到,如果再买的话可能会耗费一笔不太乐观的资金,左思右想,如果用面包板代替的话,可以省去很多工具,具有较高的可行性。而且,最主要的是,我这个课设的驱动电路十分简单,就驱动三个舵机。简单电路简单设计。这不是懒,这是睿智。通过面包板简单完成了驱动电路,耗时半小时,十分客观。较比以前焊板,节省了大概半天的时间,正所谓时间即金钱,无意间节省了很多金钱。电路设计没啥难度,如果偏要说一个的话,就是线要接对,不可粗心。
电路设计完成后,就进入界面设计。这个界面设计是我自己加进去,软硬结合,可以为这个课程设计增添光彩(应该吧)。界面设计我也是另开新路去设计,我们都知道,传统的界面设计是利用QT设计或者基于UCOII设计的,这两类也是网上开源最多,也是较容易实现的,而尝试选用了Aida_Extreme——基于电脑进程布局。之所以选用Aida_Extreme,是看中它的一个强大功能——实时监控电脑进程。本设计中有一个监控电脑进程的功能,而Aida_Extreme无疑是为这个功能的实现提供了无限的可能性;而且,Aida_Extreme支持图形化布局,也就是说,我们不需要自己手动编写底层布局layout,只需要通过鼠标拖拽就能实现界面布局了,十分方便亲人。对于我这种小白而言,这个Aida_Extreme无疑是最好的选择了。省时且不费力。
模型设计组装、界面设计和电路设计工作都完成后,接下就行进入最后一个进程:调试。调试分为:结构调试、软件调试和硬件调试。结构调试,是关键点,也是确保整体运作的保证之一。结构调试的诀窍在于502胶水的使用方式,本模型设计打印均存在误差,这个是刚性误差,人工无法去除,为了解决这个误差,我采用了502粘合的方式,就是通过502粘合一些松散的结构件,从而达到稳定的效果,经实际验证,确实不错,不愧是固定结构的翘首。结构调试上需要关注一点是,程序复位后,舵机臂的位置以及白板笔和白板的接触情况,正常情况下,需要保证复位时白板笔和白板接触;软件调试,这主要是参数的整合,毕竟这个涉及到PID,对参数的整合是确保舵机稳定工作的关键,我是通过串口检测舵机运动位置以及查看落笔坐标,通过反复修改,达到预想的落笔位置;硬件调试的话,就是联网设置,通过正确的指令设置,保证模块正常入网。这三部分的调试耗时两天。调试是一个枯燥的过程,然而,只要度过这个过程,你就会发现自己已经步入成功的大门了。因为我相信,努力是不会欺骗人的,如果努力了还失败,只能怪你太笨,不关努力的事。
前前后后耗时一个月的设计制作,从一张手绘的草图,到最后成功的作品,无疑都是一段段艰辛的路程。生活亦是如此,不努力又怎么会知道自己是否失败呢?最后,无论这个作品在他人眼里多么不值,但在我眼里它就是最好的,是我努力的成果,是我的骄傲。
在这里我要感谢我的女朋友,这十几年来不曾出现在我生命里,让我能专心地完成了这个课程设计。——————By-LittleDome
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143766.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...