一个软件工程师的 2022 电子 DIY 小结

在 2022 年中的时候,已经很久没有玩过 DIY 的我,在看到稚晖君以及其他一些 UP 主的视频之后,又对电子 DIY 捡起了兴趣。在这同时,又了解到了嘉立创的免费打样活动,因此也想在之前使用万用板和飞线的基础上,更进一步,能真正向产品化迈进一点,好好地做个东西出来。

在经过了几个月的学习、尝试,也在嘉立创打了快 30 块板子之后,目前也完成了几个小玩具的开发、组装、使用,也算是完成了一些里程碑。

学习路径

为了使 DIY 产品更像一个产品,就需要使用 PCB 了,因此需要系统地了解和学习硬件产品整体的开发流程。幸运的是,现在 B 站科技区很多 UP 主,在发布视频的时候,都给出了完整的实现方式,这就让我的整个学习过程有了比较详细的参考资料。

整体学习过程中,遵循了看视频》原理图学习》EDA 学习和操作》PCB 布线》项目复刻》自主从头实现这个路径。当然因为是业余 DIY,实践的时候都以满足基本需求为主,没有特别地去优化线路、优化功耗。

总的来说,在入门电子 DIY 的时候,还是遵循了实践大于理论的原则,很多时候并没有特别去深入原理性的东西,像模电的一些内容,并没有花太大精力去深入学习,更多还是直接使用了现成的模块。

EDA

在很久以前玩 Arduino 的时候,也去尝试过一些 EDA 软件,那个时候对整个电路,都比较费解,也不太能从头去画一个原理图,并且由于没有系统地去学习过原理图绘制,因此对于什么元件使用什么符号,各个元件所起的作用之类,都不太了解。

但是在接触到了立创开源硬件平台之后,就像是在 GitHub 上去阅读开源项目代码一样,可以成体系地去学习一下开源硬件项目了,自带的编辑器立创 EDA 可以直接打开项目。并且由于立创 EDA 相对其他 EDA 工具而言,功能还不太复杂,对于我这样的初学者来说,可以比较快的掌握并去画一些基础的原理图。

在使用立创 EDA 过程最大的感受就是,可以完全不需要了解各个元件的封装之类的参数,只需要在立创商城找到的元件,就可以直接放在画布中使用,各个参数、符号、3D 模型都是现成的,这也导致我现在使用立创 EDA 的时候还保留有一个习惯,元件选型的时候,只有有模型可以直接放置在画布的元件才会去选用,这样可以完全不用操心元件封装,还可以直接在 3D 预览中直观的感受整体 PCB 的外观。

因为立创 EDA 和立创开源硬件平台都是打通的,因此在后续从头开发项目的过程中,也很方便地去借鉴已有项目的各个功能模块,例如电源管理、墨水屏驱动等,这样可以快速迭代,进入业务开发,避免在这些通用模块上花费过多时间去验证可行性。在后期尝试自己实现一个单键开关机电路时,就碰到几次打样、焊接,结果都不符合预期,最终还是借鉴了一下稚晖君 PEAK 项目的单键开关机电路,完成了最终的功能实现。

作为一个国产的免费 EDA 软件,还是希望立创 EDA 能好好发展,在 EDA 领域占有一席之地。

PCB

画完原理图之后,就需要进行 PCB 元件摆放、布线操作了。

一开始,我都使用了 EDA 中的自动布线功能,在模块不太多,功能还不太复杂的时候,自动布线也能大概满足需求。虽然偶尔会碰到自动布线无法完成的情况,但是多尝试几次,或者调整一下元件布局之后,总能让自动布线完成所有布线工作。

但是在后面碰到比较复杂的电路,自动布线经常不能完成布线,总会剩下几个连接无法完成时,我就开始尝试手工去布线了。一开始只是手工去将未完成的连接补全,至少可以将整个电路走通。但是在补全线路的时候,总会看到自动布线完成的线路比较奇怪,与原理图中的路径总不是直接对应的,经常会比较绕,或者是一对信号线也并没有走同样的路径。

在这之后,我就开始尝试全手工布线了。开始的时候总会比较难,全部元件一拥而上,完全没有头绪。在经历过几次练习之后,掌握了一些小技巧,先根据原理图,将元件根据模块分区摆放,然后完成模块内部的连接,再将整体元件放在 PCB 的边框内,完成模块间的连接,这样整体进展就会比较顺利。

经历过几块手工布线的 PCB 也可能顺利通过 DRC,打样、焊接后也可以正常工作之后,逐渐对 PCB 布线这件事也没有那么恐惧,花一点时间,总归还是可以完成的。后续也在立创开源平台,对一些四层板进行重新布线,也可以正常工作之后,就大概对 PCB 布局和布线这件事有底了。

当然,其实在 PCB 布线中还有很多坑,我并没有完全了解和掌握,例如信号完整性、参考地平面、阻抗匹配、EMI/EMC 电磁兼容性等问题上,还是存在一知半解的问题。之前完成的一个小玩具,也存在信号干扰问题一直没有解决,不过毕竟不是一个正经销售的产品,还是可以接受的。

嘉立创

在 2022 年能重新拾起对电子 DIY 的兴趣,更大的一方面,可能也是因为嘉立创的一系列服务,让我觉得入门电子 DIY 这件事不是一件特别困难的事情,从立项到生产都有对应的服务可以完成,并且更重要的是,很多服务还是免费的 :)

在整个学习过程中,使用到了嘉立创的服务有下面几个:

  • 立创开源硬件平台:就跟有了 GitHub 一样,有了立创硬件开源平台,可以让我对硬件 DIY 不再有陌生感,并且有很多爱好者开源了项目,从原理图到 PCB 都有了详尽的参考,可以快速地去重新组织一个项目出来。
  • 立创 EDA:配合立创开源硬件平台,简直太方便了,一键打开项目,并且结合立创商城,可以直接将各种元件放置到原理图和 PCB 中。
  • 立创商城:配合立创 EDA,一键生成 BOM 表,并且添加购物车,在复刻立创开源平台上的项目时,不用纠结到底选择什么元件,至少在初期,还不太明白各种元件参数时,可以避免购买错误的元件。
  • 嘉立创:10cm x 10cm 5 片以内每月两次打样,这应该是我最初入坑电子 DIY 的动力之一了,即使没有免费打样,双层板 20 元包邮的打样费用,也是相当实惠的。有了这个服务,才能让 DIY 也能赶上现代化生产的服务。
  • 嘉立创 SMT:在双 11 的时候,抢券体验了一把嘉立创 SMT,感觉还是相当棒的,不用自己费力烧烤焊接了,虽然价格对于 DIY 来说还是成本有点高。
  • 嘉立创面板打印:这个真的是相当有用,淘宝上光亚克力切割都需要同样的价格,而且很多面板打印根本不是明码标价,嘉立创的面板打印直接可以在线完成设计,根据文档可以自己估算能做多少块面板。

在整个 DIY 过程中,真是感受到了嘉立创在硬件制造过程中的一条龙服务,并且各个服务之间的协作也比较流畅,我即使是一个新手入门,也能很简单地完成一个产品的开发制造。

甚至我觉得,对于一些小批量产品,都可以不需要找代工厂,直接在嘉立创完成所有的制造工作,只需要最后自己做一下组装就可以了。

3D 建模

作为 DIY 产品,当然也需要一个好看的外壳来包装一下,但是 3D 建模这个领域实在有些陌生。

在 KFC 可达鸭玩具很火的时候,我也在 B 站上找了一个使用 Blender 建模的教学视频学习了一下,但是总的体验并不好,整体操作依赖快捷键,操作上也比较难以习惯,在跟着教程做完 Demo 之后,就没有继续深入了。

后来同事推荐了 OpenSCAD 这个软件,在尝试了一下之后,瞬间觉得 3D 建模没有那么难了,毕竟也不需要太复杂的模型,只需要使用代码描述一下我所希望创建的模型就可以了。就这样使用 OpenSCAD 制作了好几个 DIY 产品的外壳。

不过在使用一段时间后发现,使用 OpenSCAD 建模实在太依赖数学计算了,每次计算相对位置什么的,实在太痛苦了,因此又去寻找一些更强大的建模工具。

然后就找到了 Rhino,在简单看了几个教学视频之后,还是比较容易理解整体操作流程和概念的,从点线面再挤出到立体图形,然后通过组件、裁剪形成最终所需要的模型。并且都是图形化操作,建模过程比起 OpenSCAD 实在舒适太多了。

3D 打印

有了模型之后就需要 3D 打印,在 618 的时候就在京东入手了创想三维的 Sermoon V1,选中这个型号最主要的原因就是它的体积和颜值都还不错,可以放在家里日常使用。

3D 打印机买了之后,又是一通学习的过程,调平、切片、各种材料参数等也是一个坑一个坑踩过来。

一开始使用的切片软件是 Ultimaker Cura,使用下来总是觉得有点卡,并且切片过程也比较慢,看了下 CPU 占用似乎并没有多线程,而且界面操作逻辑不太习惯,像参数设置界面是一个浮层,占用面积比较小,不是很容易操作。

后来接触到了 Prusa Slicer,发现这才是我想要的切片软件,设置分层保存,打印设置、材料设置、打印机设置,并且修改前后都有对比视图,还可以多配置文件对比,整体操作流畅,还可以对模型进行简单的修改,后来就一直使用 Prusa Slicer 来作为切片软件了。

在打印不同材料时,也同样需要尝试很多不同的参数,像 PLA、TPU、PETG 等,每种材料打印所使用的温度、速度、挤出比例等参数,都不太相同,需要不断尝试才能得出最佳的参数。不过目前也基本只使用 PLA 了,TPU 和 PETG 实在有点难打,而且大多数场合下,PLA 也足够使用了。

因为怕污染的原因,到现在也一直没有去尝试光固化打印,这个只能等条件允许的时候再看看了。

Arduino

在几年前,还不太熟悉单片机开发时,做了一些 DIY 的东西,是基于 ESPEasy 去实现的,直接就拿 ESPEasy 当作一个应用开发框架,提供了模块管理、任务管理、数据保存等能力,我只需要去实现业务代码即可。

在那个时候,通过 ESPEasy 实现了各种传感器的驱动、屏幕驱动、数据上传到阿里云平台等功能,也让我对单片机开发稍微了解一点。

基于 Arduino 这个框架下,作为一个软件开发工程师来说,其实并没有太多难点,大多数元器件都有对应的库提供了封装,可以直接去读取或设置,对于 I2C、SPI 等总线来说,也不太需要了解它的原理,直接当作一个请求模块来使用。

2022 年,还尝试从头构建一个单片机应用,不再依托 ESPEasy 这样的系统,自己去管理各个事件、各个页面的生命周期等。对于一个客户端开发工程师来说,这些并不是太难的事,我模拟 iOS 的 ViewController 生命周期搞了一套页面切换逻辑,目前工作也还可以。

我觉得对于软件工程师来说,只要懂一些单片机的基本概念,Arduino 可以很好地屏蔽各种细节,直接使用一般软件开发中的逻辑来进行单片机项目的开发,特别是对于一般 IoT 项目来说,更多就是请求、处理响应这样的业务逻辑,不太需要处理复杂的底层工作细节,对于常见的外部器件,也有现成的库去沟通。

而且基于 Arduino 可以直接使用 C++ 来开发,C++ 11 甚至 C++ 17 中的一些特性也可以直接使用,外加我现在更多使用 ESP32 MCU,内存足够大,在整个开发业务逻辑中,完全没有压力。

最近也使用 ESPHome 这个固件做了一些项目,感受也非常好,除非有实时性比较高的需求,也可以拿来当应用开发框架,例如我用来做了一个开源的空气检测设备 AirCube

乐鑫

最早接触乐鑫还是使用 ESPEasy 的时候,直接部署在 NodeMCU-12E 上,了解到了还有 ESP8266 这么便宜、性能足够、自带 Wi-Fi 的 MCU。

一直以来,对于我来说,入门电子 DIY 并且能提高成就感的,可能就是联网了,乐鑫 ESP8266 就很好的具备了这个特质。在玩 Pi 或者其他 MCU 时,还需要考虑如何去联网,外接模块还得再考虑如何通信,但是使用 ESP8266 时,配合 Arduino 框架,直接就可以使用 HTTPClient 发出 HTTP 请求,这简直跟开发一个手机客户端没有任何区别。

后来碰到 ESP8266 GPIO 不太够用的情况后,又开始了解 ESP32,GPIO 更多、内存更大、性能更强,怎么说呢,自从熟悉 ESP32 之后,就不考虑其他 MCU 了,随便 DIY 个什么东西,都直接上 ESP32,配合 16MB Flash 的版本,甚至外置存储也不用考虑,又同时具备 Wi-Fi 和 BLE 能力,对于常见场景来说,甚至很多外设都不需要了。

现在乐鑫还推出了更多更强大的 MCU 型号,例如 ESP32-S3 等,在 Arduino 环境成熟的情况下,也是可以直接替换使用的,后续就是希望有廉价支持 5G Wi-Fi 的型号了。

总结

总的来说,在电子 DIY 这个领域,2022 还是学到了一些东西,做出了一些东西,现在掌握的能力,基本可以满足一般 DIY 的需求,后面再限制发挥的,应该就是想象力了 :)

希望 2023 年,还能保持对电子 DIY 的兴趣,并且能继续做出一些好玩的东西吧。

参考资料

发表评论?

1 条评论。

  1. 非常好的文章,一直就想尝试DIY,没有向你一样开始,希望今年可以开始。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>