有点硬核的DIY,自动控制的机箱面板,篇2
创作立场声明:大家好,本人大概是传说中的技术宅一员吧。本职为软件行业从业人员,业余爱好电子DIY,偶尔动手折腾个小玩意儿,通常偏向有实用性、便利性的东西,欢迎探讨指正。
上篇文章文末说到V2.1版还不太满意,最大的问题是,CPU的温度有时候波动很大,而且机箱盖开启和关闭状态也会造成机箱内温度变动,最终导致的结果是有时一场游戏里,机箱盖可能会开开关关好几回,尝试了修改BIOS风扇温控曲线的上升、下降速率,效果也不理想。
如果能采集到显卡温度,效果可能会好些,可惜风扇策略中温度来源可以选择CPU、主板甚至是给CPU供电的MOS管,唯独没有GPU。单片机温度采样算法调试修改了多遍,简单的程序写着写着,FLASH空间就已用掉了6KB(总大小8KB),加之STVD这古董开发工具用的人头疼,于是决定重新设计3.0版。
要不就直接从系统中获取CPU温度吧,意味着需要写一个Windows软件了,而既然都在系统中跑软件了,顺便温度记录、平均值计算都可以在电脑中完成,再不用在单片机那可怜的空间上面扣扣索索的。更进一步的,CPU温度都读到了,再加个GPU温度应该也不过分吧 ,干脆控制策略都在这软件中做好了,装置只需要接收下软件发送的控制指令,转化成舵机的控制命令就行,策略还可以写成配置的方式,修改策略就不需要每次编译代码了,想想就有点小激动 。
于是现在需要解决两个新问题:
1.PC端软件(通常称为‘上位机’)编写,负责获取温度等;
2.软件与自己的装置(通常称‘下位机’)通信。
资料搜集
首先得确定Windows中读取CPU温度的可行性,万一有什么没法解决的难点就麻烦了。
很快找到了一个老外做的一个温控风扇的Demo http://www.lattepanda.com/topic-f11t3004.html
用到了一个开源的软件库叫Open Hardware Monitor, 看起来可行,找到软件官网一看感觉不太妙,最后更新是2016年,能支持2019年上市的CPU么?怀着忐忑的心情下载了软件,果然CPU只识别出来使用率这一个参数,这一开始就被卡住了,放弃又点不甘心哎。
要不到GayHub,啊错了是GitHub上找找,居然真的有收获
https://github.com/LibreHardwareMonitor/LibreHardwareMonitor
看介绍,这是一个fork自Open Hardware Monitor的软件库,而且一直有人在维护,看起来有希望能支持新的CPU,马上下载一个最新编译的版本看看:
这回支持了,温度、使用率、频率甚至功耗都可以获取到了,同样也是开源软件,可以获取到C#源代码(C#是微软开发的编程语言,Windows软件开发最常用的语言之一)。至此Windows中获取温度应该是没有问题的。
另一个问题是上/下位机如何通信,常用的方式有网络、串口、USB等。网络速度最高,但软硬件都较复杂;串口程序最简单,不过现在的PC大多已经不再提供串口(九针)了,USB转串口需要额外硬件和安装对应的驱动;综合考虑决定采用USB方式:设计成自定义HID设备,不需要驱动,也不需要额外的芯片,就是单片机需要支持USB功能,价格会高点,不过DIY也不在乎多花几块钱。方案确定了,就开始动手吧。
硬件
顺带一提,在上一版完成之后还找到了同牌子的另外一款舵机,比上一版用的那款更薄,意味着可以考虑使用完整的光驱外壳,而不是上一版那样只用了半个铁壳,控制指令基本完全相同,也省去了很多事。新款的电压能直接支持到12V, 可以直接使用电脑电源供电了。
既然准备使用完整的光驱外壳,那么为了利用原有的固定柱、螺丝之类的,PCB就得兼容原版的形状,最简单的方法就是照抄原版PCB的外形啦,幸好之前拆出来的部件还没扔掉。
测量记录各个部分尺寸 (据说真正的大佬是不屑使用数显卡尺的 )
又来一次奇奇怪怪的原理图了,PCB面积好大,忍不住又加了些备用/测试元件(光耦,晶振,DC-DC降压部分,I2C接口),对了这次的USB口是真有用的了。供电就准备直接从电脑电源获取,所以增加了一个SATA电源插座(J1):
这次的MCU是STM32G431KBT,这是ST近期出的一款单片机,带有USB功能,128KB的FLASH,用在这里其实性能过剩了。之所以选它是因为它还带有PD功能,想要顺便多做一块板测试。至于DC-DC部分是考虑如果需要换别的舵机,而新舵机支持的电压低于12V时就把DC-DC部分焊上,调整好电压而不用重新画板。
上一篇评论看到有朋友对学习单片机和PCB设计有兴趣,就多说几句,没有太好的技巧,两个字:多练。现在网上视频资料很多,但不能光看,一定要自己动手。这里先打住了,不然就跑题了,评论里可以再聊吧。
还是JLC给做的板子,才5块还包邮,便宜到快不好意思了 ,想要尝试的小伙伴上吧,做错了也就5块钱。不过目前最好是先等一等,这段时间大概因为复工未完全产能还比较紧张,我们做着玩的就先别添乱了。
跟原版对比下,没有100%照着做的,只要不影响安装固定就行。
装到光驱中框里试下。其实有点误差,左边的矩形有一条边打磨掉了约2mm,当然不需量产,就不必重做了。
再一次铁板烧(恒温加热台)+电烙铁之后,元件都装好了。左下比较多的空元件位是DC-DC降压部分,新舵机直接支持12V不需要降压,就不装了。未来如果换了别的电压的舵机可以装上。
下方的排线连接到了光驱的另一块小板上,上边原本还有一个电机,已经被拆掉了。这块板上现在只有一个LED和一个按钮,都可有可无的,就懒得单独再画一块板了。
装到中框上,试试会不会影响安装:
背面,旁边的木块是用来辅助固定舵机的,后面会有体现:
新舵机背后有一个螺丝孔,安装固定起来更方便了些,光驱背壳上对应位置打一个孔
上盖中间原来有个部件用来压光碟的,影响到了拨杆转动,把它挖掉了,还剩下一个铁质环形凸起,手上没有什么工具能搞定,就留着了。黑乎乎的斑点是上一版贴的胶布撕不干净,不管了。
上图的凸起部分妨碍了拨杆转动,也只能妥协了。重新做一条吧,折成这个形状:
结果孔没钻好废掉了 ,最后还是用回旧的,折弯(好难看,想重做可铝条没有了)。
装起来试试:
这是外挂的断电关门用电容器,这里也看到木块的作用了:
这时候还不能把外壳装起来,得先写好软件,至少先测试好电路设计、焊接以及元件都没有问题。
终于摆脱STVD这货了,STM32开发可选的IDE挺多的,MDK是其中比较常用的一个,网上还有人提供了MDK工程转Visual Studio工程的工具,虽然VS只能用来编辑,编译和调试还是需要用MDK,但能有智能提示、代码补全等,编辑起来体验也要好很多:
USB部分的代码基本都是STM32Cube(ST公司提供的STM32系列单片机开发辅助工具)自动生成的,剩下主要需要实现的是等待USB接收到数据之后解析操作,以及返回给上位机相应的数据。总结起来基本上就两个工作:读取舵机角度和控制舵机转到指定角度。
测试完没问题就可以专心写软件了,但是通常情况下是不会这么顺利的 。本来在线调试时挺正常的,但是重启后单片机就不工作了 。。。
折腾了不少时间,直接说结论吧,这个芯片有个BOOT0引脚,要接到GND芯片重启才会从FLASH区引导,好在这个引脚旁边就是个GND引脚,直接加点锡短接上就行,不然得飞线就比较难看了。
软件
硬件测试完,困难才刚刚开始,因为我不会C#编程 。。。
虽然写过不少程序,但基本没有写过Windows下,还带界面的
利用吃饭时间边看了几集视频,了解了一些基础:控件、变量、语法、类库……
网上找一些参考代码,差不多就可以动手了,使用了两个第三方库(图中红框),边查边学边改:
终于V1.0出炉啦,丑了点,勉强也能用哈 :
继续学习、完善,期间学了图表(chart)、配置文件读写、注册表读写、管理员权限检查、单一进程限制、最小化到系统托盘……
这是V2.0的,看起来顺眼点了吧:
温度值通过图表展示出来,才终于知道上一版为什么效果调不好了,这CPU温度变化的也太任性了,居然是锯齿形的。接着就可以装上外壳了:
前盖也可以装回去,不过留下的口子比较大,以后找到合适的像帘子之类的材料再装饰下吧,找不到也无所谓。
背后看看(调试口PCB上的丝印看不到,只好写到外壳上了),这接口看着有点原装的意思吧 :
装机:
工作时LED会闪的:
内部接线:
USB为了整洁买了个USB3.0扩展模块,以便在内部连接。其实用2.0的就可以,不过这机箱前置两个USB口外加一个读卡器,把内置2.0接口用完了,只好买个3.0的了(主板共两个3.0接口):
插在主板上了:
成果展示
现在的控制规则写在上位机,容量可以说没了限制,写起来就任性了,加入了CPU最低温度和平均负荷参与判断。经过两个月的实测效果很好,几乎不会发生游戏中反复开合的情况了。
大家想看的动图来啦,但这不是温度高自动开启的,而是为了录视频点的 '手动开'、'手动关'的效果:
总结和补充
补充:文中提到的Open Hardware Monitor软件,在写此文时又去看了下,就在前几天已经再次更新了,测试了下最新版已经能支持AMD的新CPU。
这V3.0的作品大概是最后一版了,哪天可能换上个好点的散热器,它的使命也就完成了,不过大概可以继续留着没事时候点下开关玩玩,听着舵机吱吱声把门开开关关,还挺有机械感的。
其实C#软件还有些可以改进的地方,不过大都是锦上添花,工作已经很累,没太大动力去做了。。。
等等,好像有些什么不对,我在干啥来着?玩游戏->机箱热->……->写(学)C#
谢谢欣赏,以下是上一篇,有兴趣也欢迎去瞧瞧:
S2nake
校验提示文案
小长假老堵车
校验提示文案
Wildernesss
校验提示文案
值友3682717559
校验提示文案
杰克小老弟
校验提示文案
值友1102508359
校验提示文案
全年无bug
校验提示文案
厕所墙上挂国画
校验提示文案
值友8706127529
校验提示文案
灯_等登蹬凳
校验提示文案
Justin雄
校验提示文案
Kanana7
校验提示文案
瓜田守望者
校验提示文案
Superlu
校验提示文案
值友6338660529
校验提示文案
silencesou
校验提示文案
magic2ma
校验提示文案
武德斯托夫斯基
校验提示文案
万南贝
校验提示文案
值友6817030055
校验提示文案
勤做盒子
校验提示文案
laik
校验提示文案
补充资料好难
校验提示文案
pattonxie
校验提示文案
taol
校验提示文案
Kyle_Guan
校验提示文案
没钱点值
校验提示文案
凸卡丘
校验提示文案
灯_等登蹬凳
校验提示文案
阿里爸爸_
校验提示文案
世界和平已注册
校验提示文案
Dia_
校验提示文案
叫兽_sk
校验提示文案
猪坨猕hotel
校验提示文案
值友8706127529
校验提示文案
torobucks
校验提示文案
高粱地里吃了亏
校验提示文案
一颗青石123
校验提示文案
杰克小老弟
校验提示文案
lovxymei
校验提示文案