一、在设计之前
前段时间跟即将毕业的同学沟通毕设,主题是智能宿舍、智能农业之类的,然后他们问我怎么做?我每次都会给他们提供这么一个方案:STM32+传感器+步进电机/继电器+LABVIEW/APP。我本科毕设做的就是智能宿舍,当时用的是51单片机,控制几个继电器加步进电机,然后用LABVIEW写了一个上位机控制端,总的来说比较简单,后来在网上逐渐开始加入APP,随后阿里云、华为云这些出来之后很多指导老师又开始说入云。。。。。。因此如果有些同学做毕设而又不知道怎么选题和设计的话,不妨参考我这个思路:一个单片机主控,外加几个传感器,随后搭配一个APP,而具体要怎么选型、采用什么通信方式,我将在下面给大家介绍。
二、系统设计
设计一套系统我的习惯是先画出系统框图,框图只需要大致地罗列出所需的模块以及其中是如何进行沟通的。例如下图,是我之前打算做的一个智能鸟笼设计,后来因为客户原因所以放弃了,从图中可以看出我的主控选择STM32而不是51,传感器包含了4个,分别是水位、重量、温湿度、雨滴传感器,并且标注了各个传感器的型号和作用;下方则是列出了待控制的模块,主要是两类,包括步进电机和继电器;而与PC通信则是采用串口协议,随后还将有一个APP用来显示传感器数据,甚至可以加入控制按钮这些。但在这一步,我们还没有开始选型,或者没有确定所有的型号,那是我们下一步要讲的。
确认完框图时,我们就要开始考虑做一个什么样的东西,怎么做,这些东西可能要在你的脑子里重复好几遍,甚至需要网上搜索可行性,然后再敲定下来,一般我是从以下几个方面进行考虑的。
①我要做什么。我们说做一个智能宿舍,那具体要包含哪几个模块呢?我一般大致分为传感器模块、主控模块、电源模块、控制模块、显示模块、手机或者电脑客户端这个部分,基本上就涵盖了一个设计需要的部分了。我们必须时刻清晰地知道自己的设计是要实现什么功能的,如果不清楚,最简单的做法就是上CSDN,搜索关键词,看看别人怎么做,我之前要设计小四轴时,就很困惑一架四轴飞行器至少应该包含哪几部分,然后就开始去搜索相关资料,直到我对整个框架都有了大致概念才开始动手。在这一步,我们就已经敲定了整个系统需要的传感器种类,而具体的选型则要下一章才开始讲。
②我要怎么做。这个不是让你立马就开始思考怎么编程、设计,而是让你把系统的工作量进行分配,依然以智能宿舍为例,基本上就分为硬件设计、单片机编程、APP编程三块,如果这是一个产品的话,可能就需要至少三个人来完成。粗略分这几个部分可以帮助你更好地认识到,你接下来的工作量和方向,我一般是先把基本的小系统搭建起来,随后一个传感器接一个传感器地调试,随后开发APP,最后整体调试,有条不紊,井然有序。
③协议接口。在这里我必须把这部分讲一下,因为大部分同学对协议这两个字很陌生,他们跟我说要加个APP,我说可以,那APP跟单片机你打算用什么模块通信,他们就开始支支吾吾。。。。。。其实,我要问的就是,你打算用什么协议来实现单片机跟各个传感器和APP进行数据交互,简单来说,APP要回传一些信息,你单片机打算怎么收。这一部分需要去了解,不懂的地方百度是最简单的,一般来说,硬件模块的协议有串口、IIC、SPI这些,网络协议有TCP、MQTT这些,无线类的有蓝牙、射频等,这些都可以用来穿数据,根据你设计的特点和数据量来选择合适的协议。
三、器件选型
在确定了自己想要做什么之后,很多同学开始问下一个问题:我要买哪些东西?换句话说,我要选哪个主控型号,为什么选这个型号?我要怎么选择传感器,淘宝上那么多传感器,我要选择那一家?以上这些问题,基本在我构思整个系统的时候我就大概有个方向了,然后确定要选择哪个型号,往往在我上班摸鱼10分钟内就可以确定了,而我是怎么在如此快的时间内就敲定需要的东西的呢,以下是我的思路,可以供大家参考一下。
①功能。你说你要一个气体传感器,那具体是什么气体传感器,CO2?甲醛?氮气?在下单之前,起码你得知道你的传感器关键词是什么,具体测量什么的。这个一般不会有太大问题,但有些传感器的关键词确实比较模糊,例如之前我要一款CO2传感器,但搜索出来确实气体传感器占了一部分,这时候需要花点时间鉴别一下。
②性能参数。我确定了我要一款CO2传感器,但是淘宝展现出来那么多,我怎么选?这时候你就要考虑第一个参数,精度。基于你的设计,需不需要最高精度,次一点的行不行,只是为了验证还是为了极致的性能,这些都会影响你选择的精度。而对于主控来说,你需要多考虑芯片本身自带的资源,例如STM32,我被问的最多的就是:STM32那么多,我要选哪一款?这里以STM32为例,STM32有很多个系列,常见的F103和F104,以及新出的F407,那么这些代表什么意思,你就需要去看规格书命名规则;而根据我的经验我知道性能排名为F407>F104>F103,一般我们毕设F103即可,网上案例多、设计成熟,而F103也有很多型号,例如C8T6、RCT6,这些简单来说有一个突出的区别,IO口数量不同,C8T6少一点,那根据你上面选的传感器的接口,你数一下,需不需要那么多IO口,如果不需要,那其实C8T6可能就够了。事实上,在工作中选择一款主控要稍微复杂一点,因为还要考虑价格、是否国产、厂家的供货能力支持能力等,但基本上首先考虑的就是性能是否满足本项目要求。
③电压、接口。这两个参数是非常重要的,因为它决定了你是否要额外设计电源电路以及接口电路。一般来说,在毕设水平的通用电压是5V跟3.3V,如果不是这两个电压,恐怕你要多加一个电压转换电路。毕设水平的接口基本根据STM32的接口种类来定,一般选择以下几个接口协议,你的软件编程就不会有太多困难:I2C、UART、SPI、I2S、USB,前三个是最常见的,其他两个是需要一定知识范围的,所以可以将范围缩小到前三个。例如,前段时间我要找一款屏幕,但主控是C8T6,IO口资源有限,我就搜索I2C屏幕,简单且节省资源。
④是否有例程支持。淘宝上很多商家为了提高竞争力,是提供了STM32\51等的例程支持的,方便我们拷贝修改,如果有这种服务,优先考虑。
⑤价格。性价比高可入。
目前先讲这些,后面我会把其他设计思路、调试过程一一分享出来。