作为纯业余爱好者,受益良多
做偏硬件的产品设计和开发工作时,结构和电子是两个不能不清楚的模块,这两个算是必备能力模型中的基础。如果是工程师角色,毫无疑问要在这两个领域要专精其一。而即使作为相关的产品经理角色,要么有过往的背景,要么至少需要尽量同时理解它们,才能准确地把控过程和结果。对我这样出身商科的人来说,除了在数理上有共通点外,教育背景与机械&电子硬件就没多大关系。今天聊一聊Arduino,它算是我在电子硬件的学习中的启蒙教师了。
机缘巧合,歪打正着
六七年之前,做的事情还偏向于纯机械结构部分的类型。后来随着物联网IoT的普及,以及电驱两轮车(如eBike电助力)的兴起,很多传统产品中增加了物联网的属性,以及更多电控的功能,开始意识到除了机械结构之外,越来越有必要去认真的了解和熟悉与电相关的部分。说来简单,做起来比说难许多。尽管电子部分的资料、教程和学习路径非常丰富,但它有很明显的知识技能的专业门槛。若在非科班的出身,且空闲时间有限的条件下,想严谨系统的从专业路线重学单片机、数字电路模拟电路等等显然不切实际。起初也不知从何下手,试了些方法都走不通,也走了很多弯路。最后比较合适自己的且能持续下来的还就是Arduino,一直坚持的学一学(或者在专业人士的眼里叫玩一玩)。虽然积累的知识比较业余,但也明显玩得明白了些。
关于Arduino
Arduino它不单单是一个芯片或器件的名称或品牌,也不单单是一个开发软件工具。它是一个创客Maker可以快速上手的软硬件平台,由一系列的开发板、一个非常简单的IDE软件工具、与之兼容的官方和第三方扩展模块、以及对应的非常多的现成的库文件(Library)所组成。它是一个不需要了解过多的专业知识和设备就能实现一些硬件想法和功能的、具有科普和趣味性的、主要面向业余群体的产品平台。以上是我自己对Arduino实际上手和使用后的理解,相对于专业的平台,它的软件门槛较低,而硬件的扩展性很高。这“一高一低”是它最为突出的功能特征。通过它可以快速地接触到硬件和软件,借着教程学习到一些基础,很快的了解一些应用层面的东西,即便仅仅是初级的皮毛的内容,也比较有意思。
了解原理,然后快速试一试想法和创意
当要打算使用硬件+软件功能实现某个方案、创意和小想法的时候,常常会遇到被一些专业性的门槛给卡住,然后找不到快速的方案落实它,最后只能长期成为头脑里空洞的概念。
实现想法有很多种路径,对我而言可大概归为两类:一个是通过专业的方法去严谨的实现,另一个是基于某些非专业的方法去相对灵活的实现。Arduino(更准确的说是以前的Arduino)毫无疑问是后者,它非常适合快速的做出一些原型,把想法创意从比较虚的想象中落到现实中来,如果你的目标是实现创意,那到这里就足够了。即便你是要更为实际地落地,那它也其实可以在一些严肃产品的生命周期中扮演早期的Demo或者Prototype的角色。
若是基于专业性的平台,非专业背景的人往往很容易就在Hello World层级(也就是Blink和流水灯这类的简单实现)之后陷入停滞不前的状态。与其这样,在Arduino的空间里去多探索探索,是不是相对而言获益和乐趣更多呢?
一种典型的STEAM工具
Arduino非常善于担任一个硬件启蒙老师的角色,和其他平台不同,它不是那么的挑学生的专业背景,可以说是STEAM教育(Science, Technology, Engineering, the Arts and Mathematics)的经典工具之一,一方面与STM32和TI的M430相比,它更好上手,另一方面与乐高相比也更系统化和开放。对业余玩家来说,它在代码逻辑性强的同时,也足够简化(即使不写代码也可以绕过代码用Scratch的方法完成),丰富的扩展板减少了硬件组立过程中的难度和压力。单从学习的目的来看,你能借着它很快的学到关于电路、元器件和通信相关的基础知识,并且第三方支持的模块和对应的库文件(也就是经常所比喻的“现成的轮子”)数量是海量的。当然,如果不想只接触简单易懂的部分,它也可以很深入,比如可以通过研究硬件原理图、数据表和开源库文件的源代码,进一步地深入学习到一些知识(事实上越是这种业余的平台的搭建,往往越是非常专业的人士所辛苦搭建和贡献的)。
难得的娱乐性和趣味性
Arduino上手容易,过程没有那么枯燥,具有一定的娱乐性质,用Fun这个英文单词形容很适合。它的趣味性,对很多容易知难而退的非专业群体非常的友好。你不用把重点太多的放在具体的技术手段上,而可以更多的放在思路逻辑、想法和创意上。从教育功能上,它完全契合了STEAM这种重实践且跨学科的概念。其实仔细想想,当下几乎任何事情的做成,都不是依靠一种独门能力的实现,而是更多介于多种能力之间。比如硬件产品的产生过程,不但需要掌握技术手段、还有功能的创新,市场需求,甚至需要了解艺术、用户心理和经济等方面的综合才能,这样会更能去推陈出新、产生一些符合需求的价值出来。
开放性与多样性
从Arduino具体的几个板子型号说起。经典的Arduino Uno这个型号,普及性极强,简单,硬件和软件的底层完全开源开放,包括第三方的扩展模块。它有很多的克隆体,很多兼容的扩展板,以至于很多专业的元器件厂家都会在自家的MCU开发板/评估板在板子上增加上能兼容Arduino规格的扩展针脚,借此来大幅提升自家开发板的扩展性;
与Uno并驾齐驱的是走小巧路线的Nano,在可穿戴和物联网分支非常风靡。Nano的特点是袖珍,定位是满足各种便携的应用,不需要过多的硬件扩展(想扩展通过引脚走线也能做到)。Nano的克隆体也很多,而且出现了很多类似的带“Nano”后缀的小开发板,基于它有很多带无线通信功能的Nano变体,比如蓝牙、LoRa等等;
较大一些的Mega 2560也不错,它的IO口、通信接口和闪存空间等大幅度增加,适合一些相对复杂的控制的应用,比如简单的3D打印机和键盘原型,但总体上的影响力相比Uno和Nano相对弱化;到后来,Arduino应该是想推出既有类似Nano的小尺寸,又有更更高的性能(比如Arm的Cortex M架构的MCU),于是推出了更专业的MKR系列。MKR单从使用上虽然不错,性能上更强,但是并不是特别的出彩,来自第三方的克隆体和扩展支持变得较少。以及后续推出的PRO系列,那部分就没怎么接触了。
了解Arduino的历史的很多人都知道它曾发生过一次主体的纠纷(Arduino.org与Arduino.cc),背后除了它的商业价值外,还有关于它的不同发展方向的矛盾。我最近在看Arduino官网里的新品,也明显感觉到现在的Arduino和以前相比,从定位到产品也不太相同,它好像开始注重实现商业闭环,也在并行地走业余普及和专业化的两条路线,一方面Uno和Nano这类经典持续出新版本的官方原厂开发板,另一方面MKR在推出专业的型号,以及推出更专业的PRO系列,比如AI边缘计算功能的Portenta,新增的工业PLC模块Opta等等。原本单一的IDE也分成了入门和专业两个软件版本供不同的人群使用。
毕竟,若只是单纯作为一个开源且开放的平台,它的商业生存是有困难的,大家都可以利用它并绕过它来实现硬件架构(比如很多的克隆体)然后借助它的免费软件,这样使得Arduino这个品牌没有收益。还有就是随着Micro:Bit、Grove接口标准,Mbed、MicroPython以及其他如ESP32这种可独立于Arduino生态之外的硬件的普及,Arduino在业余和入门教育的市场也受到了明显的冲击。目前的新品,感觉处于业余的和专业性的“不上不下”的尴尬局面上。
说回我对它的个人喜好上,也许它就不应该太过专业,也许Arduino就应该是面向业余的。不过它也确实具有从业余到专业的潜力,已经能看到很多商业以至于工业应用(这方面国外的居多)在落地。另一方面,很多接触并受益于Arduino启蒙的群体,也产生专业化的成长需求,因此这么看Arduino当前的做法倒也可以理解。
至于它不再像以前那么的开放(有很多新的型号不再从软件和硬件上实现开源了),有些遗憾,但是可以理解的。毕竟不能一直有白拿着开源的习惯,能支持就支持些,除了买些硬件,也有官网的教育平台,我算是在官方原版的板子上有花钱支持了一些,还在官网上付费拿了一个入门小证书。。。
显而易见的局限性和
与之相对的合理性
大多的现实情况是,专业人群对Arduino应该是用的比较少的。Arduino是针对软硬件的有目的的二次包装,这样做导致它与底层相关的性能肯定会有折扣(实际应用基本不会涉及到寄存器方面),性价比也不高(尤其是官方的硬件)。对专业出身的硬件和嵌入式的技术工程师来说,完全可以很快的找到比Arduino更好的且更简化的实现手段(即性能更好、更经济、更易成为量产方案的手段)。它越面向业余的受众,越容易受到专业群体的鄙夷。而且对于玩家来说,习惯了Arduino拿来就用的便利性后,再想进一步切换到用专业性强的开发板/IDE、更标准化且严谨的代码架构去做设计时,就变得容易蒙圈,这很棘手。这是一个悲伤的现实:难就是难,专业就是专业,门槛就是门槛。
硬件和嵌入式软件工程师本身就是一种专业性非常强的职业,不应该妄图去在专业领域尝试挑战和竞争,那样做没有意义,而是找出彼此的差异性价值。不过业余的存在也应是合理的,除了可以衬托专业,它也是非常有规模的。话说回来,从团队协作的意义上看,比如产品经理,拥有一定的技术理解和在专业人员中的技术沟通能力已经能对团队有益,至少不是一问三不知、不懂还瞎指挥的蒙圈状态。
对我个人来说,“业余性”其实就是Arduino的根基和价值所在,它本身具备一定的松弛感和平权属性。打个比方,一个对相机的操作很熟悉的专业摄影师,肯定会更多进行手动操作,并且要求产出高画质的作品,而更多关注乐趣和内容的一些玩家,拍摄是过程之一,更多的是要去重视什么时候去按下傻瓜相机的快门,抓住有趣的瞬间,或者,只是拍拍照就很快乐了。
盘点自己玩过的Arduino和相关的东西
前前后后也整了不少的Arduino或类似的板子,有些玩的多些,有些到手只是简单用用,跑一跑例程后就没怎么玩。有点折腾,也花了一些冤枉钱。。。而且自己觉得官方原版的板子设计做工和质感很好,有些贵但很漂亮,经常就算不怎么用也想收一个。
最早用到的型号是Uno,属实的简单可靠的学习工具,比如驱动LED和按键、串口收发、传感器信息读取、舵机控制等。这个一开始用的第三方的,如前所述,UNO是第三方板和附属的扩展板最多的型号,但性能有限(最新型号的MCU已经从ATmega 328P改成了瑞萨的,功能强悍许多)。板子上的引脚接口是经典的Arduino规格。
小巧的Nano,用的也比较多。之前用Nano做了一个简陋的面包板设备,能与电滑板串口通信的上位机,可以读取和查看和显示车子的状态信息,并发出锁车和解锁指令(加了OLED屏、红外接收LED、3轴、蜂鸣器等等,背面是DCDC电压转换模块)。
IO口非常多的Mega 2560,弄的这个不是官方的,是国产的克隆体,也很好用。
前后也收了好几个ESP32的板子,可以用于蓝牙和Wifi等应用,不用额外增加扩展板。之前尝试使用两个基于ESP32,实现了通过手机蓝牙向一个设备收发信息,设备通过LoRa向另一设备通信,被接收后设备通过Wifi上传到云端,然后更新到手机显示状态的一个链路。现在ESP32的能力以及普及性早已经超越Arduino了。
还有基于ESP32的板子自带OLED小屏幕,口罩期间简单拼凑了一个用红外测温传感器做的简陋额温枪。
还咬牙买了一个MKR的Vidor 4000,带MCU+FPGA,用来学习用,但其实FPGA的部分与Arduino联系不强,有些严重的超纲。不过MCU的性能和引脚资源不错。
试着用MKR驱动用舵机控制的简易六自由度小机械臂(需要加上专门能跑起6个以上的大舵机的驱动板),能实现简单的正逆运动学运算。
还有一些扩展板,比如电机驱动板、CAN收发、陀螺仪等等,或者简单的引脚扩展等,以及舵机、传感器、无线通信、定位模块等积攒的一小器件(有些是买的,也有些是拆的)。
模块里面除了相对简单的零件,也有比Arduino还贵些的。比如这个用NBIoT模块加电信的物联网SIM卡,通过串口连到Arduino的板子,可以结合云端(比如阿里云)平台简单的了解一下MQTT和COAP协议。
配套MKR也收了个支持CAN的扩展模块,可以与别的CAN模块通信,或桥接后尝试读一读自家车子OBD口上的CAN信息(写入要慎重,会出故障码)。
除此之外还弄了些其他第三方推出的支持Arduino平台的小东西。
这个Sparkfun的Edge,采用Ambiq的MCU,支持TensorFlow Lite,可以做些TinyML的小实例,比如图像、语音和动作的识别等。这个支持深度学习和边缘计算的板子其实可以多玩一玩,毕竟接下来是AI的时代了(现在推出了Edge2,当然还有很多其他选择)。
还有这个Intel曾推出的Curie Nano,带6轴和硬件的神经元,只用过几次。可惜现在Arduino平台已经不支持了。用它也可以实现比如像用魔杖挥舞来传输指令的创意功能。
差不多就是这些了。攒下来的Arduino及其他杂七杂八的板子也不少了,偶尔有空还是会拿来玩一玩,算是一个特殊小癖好了。
写在最后
如今再看看Arduino的官网,无论是内容还是产品,都比以前丰富和系统了许多。不过我还是比较喜欢以前完全开源时期Arduino的东西。当然我也会比较好奇和支持后续的产品,它应该一直能坚持住原本的友好度。
感谢Arduino的启蒙老师角色。自己也算是Arduino的小粉丝,希望它能继续推出有意思的东西。还是回到一开始说的,自己作为一个业余爱好者,但也在日常的工作中受益良多。
有想法就去尝试实践一下挺好的。无论何时何地,既要持续专注一些事情,也要拥抱一定的开放性和多样性。
END
2024-8