创意的课程设计——憨憨钟设计(碾压)

创意的课程设计——憨憨钟设计(碾压)目录写在前面的话设计的实际演示憨憨钟的主要功能设计的实现过程界面设计模型结构设计元件清单调试异常分析结语写在前面的话大家好,学习之余给大家分享一个这学期设计的课程设计,互相学习借鉴。课程设计,尤其是自定义的课程设计,自盘古开天地以来就困扰着每一位工科男。我,一枚工科男,觉得需要站出来为大家排忧解难了。这学期有自定义的课程设计,所以我就设计了一个很有创意的课程设计,是一个国外开源的设计,结合了国外开源资料和一些大佬的实践经验。设计的实际演示憨憨钟自动写时间的效果:憨憨钟的演示效果1憨憨钟自动画天气

大家好,又见面了,我是你们的朋友全栈君。

写在前面的话

大家好,学习之余给大家分享一个这学期设计的课程设计,互相学习借鉴。课程设计,尤其是自定义的课程设计,自盘古开天地以来就困扰着每一位工科男。我,一枚工科男,觉得需要站出来为大家排忧解难了。这学期有自定义的课程设计,所以我就设计了一个很有创意的课程设计,是一个国外开源的设计,结合了国外开源资料和一些大佬的实践经验。

设计的实际演示

  1. 憨憨钟自动写时间的效果憨憨钟的演示效果1
  2. 憨憨钟自动画天气的效果憨憨钟的演示效果2

憨憨钟的主要功能

本设计主要有两大部分:控制部分和显示部分。

  1. 显示部分:手机界面显示,以及监控电脑端的CPU工作情况
  2. 控制部分:自动写时间,自动画天气

设计的实现过程

本设计的硬件电路是十分简单的,即使没有接触过电路的同学也很容易入手的,因为这个设计不需要设计电路!!没错!就是不需要设计电路,不要焊板。是不是很开心。设计可分为如下几点研究:

  1. 显示界面的设计
  2. 模型结构的设计
  3. 准备相关元器件
  4. 调试以及烧录程序

界面设计

界面自古以来都被QT占领了一片天,我,觉得反其道而行,我选用了一个更加简单入手,适合小白的界面设计软件,不需要任何编程基础就可以搞定——Aida_Extreme
显示界面,主要是为了更加直观地监控电脑进程和数字时间。原本的界面显示是OLED屏,但是由于OLED屏尺寸太小了,故尝试用手机屏幕代替OLED,手机屏幕也是OLED一种,但是它的分辨率和尺寸都是十分客观的,界面布局也相对丰富点。。
Aida_Extreme有一个十分强大的功能,就是可以实时监控电脑的进程,利用这个功能可以较简单地实现本课题界面显示需要的功能。通过Aida_Extreme自带的插件以及图像化布局,可以较为快速的实现布局,省去底层程序的编写,大大减少开发时间。具体的,该界面布局有常见的时间日期、温度,还有布局设计有电脑的CPU温度、CPU运作时间和电源情况等。
设计完界面后,通过运行Aida_Extreme,手机游览器访问电脑的IP即可得到界面。如图所示,为手机显示布局界面的效果图。原理就是基于端口映射,通过手机访问电脑IP,将电脑端的布局界面映射到手机端口。
实际界面效果图

模型结构设计

模型可以说是整个设计的门面了,所以,这个得设计好看点,生活要有仪式感!设计也不能没有。通过solidworks软件设计出初步的模型设计图。整体模型由三个舵机和舵机臂组成传动结构、白板笔与舵机臂咬合、上舵机通过舵机拉杆控制左右舵机上下运动、左右舵机控制舵机臂的咬合在白板处自由运动。舵机臂直接利用对接螺丝固定关节。整体结构布局合理且较为节省空间。下图为实际的模型结构(打印配合完成的实际效果,模型是参考国外开源项目以及结合网上大佬的模型)
实际结构图

元件清单

元件以及材料清单如下:在这里插入图片描述
:购买元器件的时候记得多备份一些,以防万一,烧坏板子或者哪个电容爆炸了都是工科同学的家常便饭

调试

  1. 电路调试:由于一些不可抗拒的原因,电路搭建是通过面包板搭建,如图所示。由于本设计的电路驱动十分简单,为成功设计制作提供了无限的可能性。而且电路的简易化使得驱动调试也十分简单。图中,面包板是起转接作用,即转接舵机与MCU引脚,这样转接可以避免在密集的MCU引脚中引脚接触短路;MCU是选用市面上性价比较高的NodeMcu-V3。由于我们设计的主控选用的是联网主控,而不是选择STM32,所以编译器选用了Arduino-IDE,通过Arduino-IDE可以直接上传算法到MCU,无需多余复杂的操作,先对比与MDK5,就此而已优势自然是较为明显的。
    具体的,调试是通过COM端口调试的,首先确定好esp8266的板卡包,在IDE里面设置好,从左往右看,第一张是板卡包参数设置调试,开发板设置为esp8266类、波特率设置为115200等;第二张是端口调试,通过端口调试,可以较为准确地确定落笔坐标以及白板笔与白板地接触情况。程序调试均在Arduion-IDE环境下完成的。由于选用的MCU具有支持直接上传程序的功能,所以在这种情况下,程序的容错性十分可观,只要调试好参数,几乎不会出现异常。
    电路搭建
    参数设置
  2. 结构搭建调试:模型的搭建我采用了3D打印和亚克力雕刻两种方式。模型的亚克力切割草图如图所示。亚克力切割的好处在于精度高,出品效率高,基本几个小时就可以完成出品,3D打印则是打印一些需要韧度的结构,例如在本设计中需要韧度的就是白板笔与舵机臂的咬合结构。其他的结构则不需要,所以就选用激光切割的方式。这样不仅节约成本而且制作效率高。
    亚克力切割
  3. 程序调试:程序可以直接使用,无需修改,看得懂程序的可以自行修改,看不懂的可以直接用,不打紧。程序在我的资源那里,大家去下载即可。

异常分析

整体测试中,在联网正常,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账号...

(0)
blank

相关推荐

  • print()方法和println()方法的区别_println的用法

    print()方法和println()方法的区别_println的用法今天在写一个关于socket的程序,无意间把PrintWriter中的print与println混淆了,于是写了个小demo测试了一下,代码如下:服务端代码:packagecom.city.server;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;…

  • zabbix 监控多个mysql_zabbix 监控多实例mysql[通俗易懂]

    zabbix 监控多个mysql_zabbix 监控多实例mysql[通俗易懂]zabbix监控多实例mysql一台服务器上开启了3个mysql实例进程,占用不同的端口3306、3307、3308原理说明:通过自动发现规则来获取MySQL实例的端口,自动发现规则上的{$MYSQLPORT}是要传递给agent自动发现脚本的参数,这个值是从主机定义的宏{$MYSQLPORT}获取过来的,自动发现的脚本将其解析成{#MYSQLPORT}:端口的形式,监控项原型再根据{#MYS…

  • kafka是什么牌子_kafka为什么叫kafka

    kafka是什么牌子_kafka为什么叫kafka一、定义ApacheKafka是一款开源的消息系统。可以在系统中起到“肖峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。系统包括四个主要API:ProducerAPI允许一个应用推送流记录通过一个或多个Kafkatopics;ConsumerAPI允许一个应用订阅一个或多个topics并且处理这些流记录;StreamsAPI允许一个应用作为一…

    2022年10月13日
  • linux objdump命令,Linux objdump命令

    linux objdump命令,Linux objdump命令一、简介objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。二、选项三、实例1)显示文件头信息objdump-ftest2)显示SectionHeader信息objdump-htest3)显示全部Header信息objdump-xtest4)显示全部Header信息,并显示对应的十六进制文件代码objdump-stest5)输出目标文件的符号表objdump…

    2022年10月30日
  • 2020考研,老学长帮你规划[通俗易懂]

    2020考研,老学长帮你规划[通俗易懂]高能干货预警,文章目前已经近三万字,这可能是最负责的一篇文章了。文章很长,建议拿好笔记慢慢看。本文会解决你在考研各科在不同时期不同阶段遇到的所有问题,方法具体到草稿纸怎么使用,课本具体怎么使用,相信我,读完你一定会有巨大收获。我总结了我一年以来遇到的所有问题,使用的所有方法。既然最终目的是在考研这场「考试」中获得高分,那么所有的时间和精力,都应该围绕着「考试」进行,才是效率最高的方式。但是…

  • Java Serialized 序列化 作用

    今天在看设计模式时,看到迪米特法则时,有一点,谨慎使用Serialized:一个项目中使用远程方法调用方式传递一个VO(值对象),这个对象就必须实现Serialized接口,也就是把需要网络传输的对象进行序列化,否则会出现NotSerialiableException异常。若VO修改了一个属性的权限,由private改为public访问权限变大了,如果服务器上没有做出相应的变更,就会报…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号