我的首个硬件开发
故事背景
人到30,岁月的痕迹就会在身上体现出来。老婆大人一直很在意她的颈纹,说很难看(我倒是没有很在意啦😅),然后刷小红书看到颈纹治疗仪,看了下价格动辄上千,有的有2 3千,而且效果怎么样也不是很清楚。然后跟我说了这个事,也让我看下原理啥的。
经过一番调查,发现红光(波长720纳米左右)对于胶原蛋白确实有一定的促进左右,现在也有医院有专门的红光治疗,但是要排队,收费也不便宜。顺便说下搜索到的信息里也提到蓝光对于治疗痔疮有一定效果。而胶原蛋白在一些文章里也提到确实对于治疗颈纹有一定的效果。但是如果想完全靠这种方式治疗颈纹也是不可能的,更多的应该靠日常的行为(少低头玩手机📵)来规避,不过作为一种辅助治疗方法每天坚持下去应该还是有少许效果的(起码对于心理上有很大的提升作用,心美了人才美😄)。
先看最终效果
制作手法非常简陋,请将就😜。
前期准备
迫于昂贵的费用(穷),我决定还是自己来做一个吧。本来我自己对于动手类的手作就蛮有兴趣的,正好趁机也可以购入我人生的第一台3D打印机😍。这是我第一次真正意义上做和硬件有关的东西,之前的都是玩玩。于是我开始了疯狂购物的时间,总共买了这些东西:
AnyCubic Mega S
FDM 3D打印机和PLA
耗材STM32F103C8T6
最小系统开发板一个(事后了解到也许AtTiny 85
是个更小的实现方案,不过还需要Arduino
板子来做上传器,以后有机会再试试吧)- 200mAh的锂电池3节(我已经不记得怎么计算电功率了😅,凭感觉买的,事后证明200mAh大概能用4-5次的样子吧)
- 锂电池充电模块2个(用来给锂电池充电,虽然锂电池带了充电保护模块,但是方便使用。不过买回来发现买的是
Micro USB
的口,家里差点没有这种USB线,应该买Mini USB
的,相关知识准备不足) - 电阻包一份(实际用的是47欧姆的电阻,也是不清楚用多大的电阻合适,凭感觉的😅)
- 红光LED 二极管若干(只要是补库存,之前的都用掉了)
- 开关(其实开关也买错了😭,买成了按下去会弹上来的那种一次性reset按钮,应该买自锁开关的)
- 电烙铁套装(电烙铁一直不太会保养,之前的2个30W的都不好用了,这次换了可调功率的黄花电烙铁,用着趁手一些)
- 其它库存小零件,包括杜邦线、铜线、无源蜂鸣器、皮筋以及蓝丁胶
那在开始之前,我们先定义自己的产品名称就叫做“DIY颈纹理疗仪”吧(好土🤣),以下简称理疗仪。
开工之3D列印
鉴于以前自学过一些3D建模的知识便自信满满的开始了理疗仪的3D设计,然后被现实各种打脸。我比较喜欢那种简单的,上手就能用的软件,所以一开始就用的 TinkerCad,但是它更偏向于简单应用,对于复杂点的就不太适用,而且转动操作很难受。第一次用它设计了一个打印出来后发现尺寸不对,而且转动结构也有问题,原件在这,大概是这样:
后来我就开始重新搜索好用的3D设计工具,solidworks
算很常用的工业设计工具了,但是Mac电脑上没法用,最终投入了onshape
的怀抱,作为一款在线设计工具,支持中文,界面也算简洁,找了几个视频学习了下也就开始上手了。其实3D设计也是常用形状/路径+各种布尔运算,和2D设计没有太多本质上的差别(个人理解,请轻喷)。在熬了几个夜后做出了第二版,原件在这,大概是这样的:
这次对转轴结构做了修改,对尺寸也做了重新计算(事后发现其实有点高了,可以再矮一点),挖了2个孔用来放元件(挖孔这里花费了很多时间,实现的也不是很好)。衔接部分采用一边挖孔,一边沾上一个可以插进去的方式实现。
切片,开机,打印。在经过近一天的打印后发现了一些问题,2边半环在填充方式的实现上不一致,后来查看切片预览发现也确实不一样,不知道为什么,一边合理,一边不太合理,可能是有挖孔的原因。另外因为切片工具默认是有支撑的,所以打印完成后还需要手动去除掉一些支撑,尤其是挖洞的支撑很难去掉,挺麻烦的😞。我就在考虑要不要下次打印的时候去掉支撑,但是不加支撑的话一些悬空打印的地方肯定要出问题,所以还是加上吧。最让我开心的是转轴部分是OK的,我看着打印的时候总感觉要坏,毕竟是悬空的结构,也是吓死我了,如果这个结构再设计大一些应该会好很多。
Emmm~ 忘记拍照了,真实效果直接看成品吧。
电路设计和组装
我在3D打印机到之前就先组装好了LED灯组,直接用的裸铜丝接的,最后通电的时候竟然搞错并联电路的接法,实在惭愧,高中学的知识全都还给老师了😂。总共用了16个(原定20个的)LED发光二极管,用了非常简陋的方式并联起来,用热熔枪固定在一个纸片上,极其简陋和随心。然后用2节1.5V电池驱动用了2天,开关都是直接用铜线接触电池并用胶布裹着的最原始的方式使用的,还经常接触不灵。
后来买的元件陆陆续续到了,我也就开始了电路学习和制作之坑。我是先从锂电池充放电开始的,这个模块说起来应该是最简单,最顺利的了,直接锂电池接充电模块的2个IN
接口并公用这2个接口作为输出就可以了。
鉴于开关买错了,只能另辟蹊径,用公母杜邦头的组合来做一个简易的开关,后面还是要买个自锁开关给它换掉。然后插电,测试充放电都OK,LED正常点亮。其实到这一步已经可以用了,但是我还是希望能加个简单的功能,就是10分钟提醒下,20分钟再提醒下。因为我查到的一些文章里也都提到LED照射时间不宜过长,15到20分钟就差不多了。所以我就开始折腾起开发板来了。
对于一个写惯了高级开发语言的程序员来说,写C语言代码还是稍微有那么一些不习惯,但是我们用到的功能也非常简单,都是照着Demo改改,上手还算快。不过这里的难点还是STM32
开发板各种资料和IDE混乱,上网搜索发现有各种方式来开发,导致我一头雾水,一会这种方式试试,一会那种方式试试。我最后用的是基于Arduino
的方式来开发STM32
,但Arduino IDE
非常原始,没有提示,没有校验,有哪些库可用,函数功能什么的都没有。后来换用VSCode
的PlatformIO
插件来开发,但PlatformIO
创建项目时又因为网络问题耽误了很久。所以最终就是一会用用这个,一会用用那个,很烦😣。
在测试的时候发现上传(我用的是USB转TTL的方式)也是很头疼的事,经常上传失败,有时又能成功,一直没发现规律,直到我把阵脚焊接固定住才发现之前可能是阵脚接触不良导致的,真是蠢,当时应该买STLink的上传烧录器。
还有我原来想实现一个简单的倒计时,但是搜索后发现delay
函数并不精准,想要精确可以用时钟,然而时钟这块我看了N篇文章,每一篇讲的都是非常基础知识,涉及到很多基础概念,什么晶振、预分频、频率计算等等,至今我都没搞明白,试了几个demo也没成功,最终还是放弃了😅,还是选用最蠢的delay
累加实现(管它精准不精准,差不多就可以了,20分钟范围内也差不了多少)。
接着是要实现无源蜂鸣器的震动,一开始也是搜索文章,发现很多也是从基础的PWM
讲起,实现代码也很复杂啰嗦,看着我就头晕。直到我测试了tone
这个函数,发现这TM才是我要的简单库函数啊😘,非常符合我们普通开发者使用,简单、直达效果,之前倒计时要是也能这么简单多好。
最终代码是这样的(我在PlatformIO
里写的,去掉第一行直接放到Arduino IDE
里应该也可以编译):
1 |
|
总结
最终我们的理疗仪算是实现了,老婆大人也很开心😃,每天美滋滋的挂在脖子上理疗个20分钟,隔个3-4天充一下电就可以了。
对我来说这次制作蛮有意思的,不仅仅是东西做出来了,更多的是学习的过程,现在我也会学习一些物理知识,学习一些焊接技巧,没事再找点3D模型或者自己做一个打印出来玩玩。但我也意识到,对于完全没接触过的领域,靠着自己那薄弱的知识储备必然要踩很多坑,如果有一个引路人会好很多(虽然这次也认识了一个做硬件开发的,但是段位太高,不适合教我,而且人家也很忙,不过提醒了我一句:初学者还是用Arduino
开发比较好)。所以在做没接触过的事情前1要多学习多了解,2是找相关领域的人去沟通,把盲点在前期抹掉才能避免后续的坑。