STM32
直播中

悬崖勒马2

8年用户 901经验值
擅长:EMC/EMI设计
私信 关注
[问答]

怎么实现基于机智云的智能花盆2.0的设计?

怎么实现基于机智云的智能花盆2.0的设计?

回帖(1)

h1654155275.5714

2021-11-11 11:29:33
一、版本更新内容

1)增加传感器:光照强度传感器GY-30(BH1750)
2)增加交互模块:0.96寸OLED(SSD1306)
3)执行部分:水泵更换为电磁阀、增加LED补光灯(红&蓝)
4)搭建花盆 外壳 支架
5)增加自动模式
二、总体设计

2.1整体模型

     



     总体设计框图   
2.2硬件结构

     



     硬件设计框图   
1)STM32F103最小系统。包括微处理器、带电容稳压的电源接口、复位电路、无源晶振与起振电路一起组成的时钟源以及调试接口等构成最小系统。
2)环境输入检测。主要包括DS18B20温度检测部分、内置ADC转换的数字式光照强度检测部分和使用AD数据采集的土壤湿度检和水位检测部分。
3)执行部分主要包括电磁阀与基于植物光谱吸收峰值的蓝红LED补光灯等继电器驱动部分。
4)数据交互。主要包括MCU 与 ESP8266 的网络通信部分、方便用户查看数据的OLED部分以及调试过程中用到的USB转TTL模块。
2.3软件结构

     



     软件部分结构图   
为方便实现MCU与硬件的通讯引入驱动层负责实现底层硬件支持的通讯协议,并为上层提供方便使用的函数调用接口。主要包括基于“1-Wire”协议的DS18B20驱动程序、基于HAL库的USART 驱动程序、与SSD1306通讯的OLED驱动程序以及数字式光照强度的BH1750驱动程序等。其中 I/O 驱动主要实现了STM32F103C8T6微处理器GPIO引脚的定义和初始化;UART除”printf”函数重定义到串口外还须与ESP8266的通讯;剩余的该部分则是温度、土壤湿度、水位传感器的驱动程序。
执行层通过调用驱动层和机智云协议层提供的函数调用接口来实现智能花盆软件的逻辑控制。它包括初始化部分、数据扫描、上行下行通讯、自动化控制等部分。
网络层实现将数据封装上传、数据包解析等工作。
三、硬件设计

3.1硬件资源布局

     



     硬件资源布局   
3.2主控芯片

3.2.1主控选型

结合当前接触过的芯片以及对市场的浅薄了解,列举了意法半导体(ST)的STM系列、意大利Massimo Banzi的Arduino、AT89C51以及微型电脑Raspberry Pi作比较。最终选用STM32F103C8系列。

芯片
CPU位宽
Flash
RAM
Pin
主频
价格
STM32F103C8
32
64K
20K
48
72MHZ
10.95
STM32F407ZG
32
1M
192K
144
168MHZ
39.55
AT89C51AC2
8
42KB
256Byet
44
40MHZ
36.64
Raspberry Pi3
64
-
1G
40
1.2GHZ
278.55
Arduino_uno_R3
8
32K
2K
14
16MHZ
138
3.2.2引脚配置

     



     STM32Cube引脚分配   

引脚分配
说明
PD0、PD1
启用外部晶振
PB15
DS18B20通讯脚
PA4
土壤湿度AD采集
PA5
水位AD采集
PB0、PB1
BH1750 模拟IIC通讯
PA2、PA3
ESP8266 UART2通讯
PA9、PA10
CH341 UART1调试接口
PB6、PB7
OLED 模拟IIC通讯
PB12
补光灯
PB13
电磁阀
PA0、PB2
重启与模式配置按键
3.3数据采集部分

3.3.1土壤湿度传感器

     



     电阻式土壤湿度传感器   
其原理图如下:
     



     土壤湿度传感器原理图   
该模块主要利用三极管的电流放大原理。土壤中存在水分时形成导体使得三极管的基极B与电源的VCC导通,这时在三极管的基极B和发射极E之间将产生电流,集电极C和发射极E之间则产生以一定倍数放大的电流,经发射极E电阻产生较大压降,送入A/D转换电路。
3.3.2温度传感器

选用DALLAS公司推出的一种使用l-Wire通讯的数字式温度传感器DS18B20。
     



     DS18B20引脚示意及实物图   
其具有以下优点:
1)DS18B20 温度传感器的工作电压为+3.0V ~ +5.5V,无需电压转换,可直接用于市面上大多数开发板;
2)接口简单,1-Wire 总线结构简洁,只需一根线即可进行通讯,有效减少硬件开销;
3)温度测量范围广,最低可测得-55℃,最高可测得125℃,最高精度可达 0.0625℃;
4)自带 EEPROM,开发者设定的采集分辨率以及报警温度信息都将存储在其中,掉电重启后依然保存相应配置。
3.3.3水位传感器

     



     水位传感器实物图   
本文采用的是水位传感器/雨滴检测传感器Water Sensor,其原理与土壤湿度传感器相同。
3.3.4光照强度传感器

     



     GY-30(BH1750)模块实物图   
市面上可用的光照强度检测模块主要分为两种,一种是利用光敏电阻获得光照强度的模拟信号输出,该传感器价格最为低廉,但需要自己构建光照强度与模拟信号直接的对应公式。另一为内置ADC转换的数字式光照强度传感器,我们采用的就是该类型传感器---BH1750。其不区分环境光源,可忽略复杂计数与标定。利用内置16bit的AD转换电路,直接输出0 ~ 65535lx。
3.4执行部分

3.4.1补光灯

植物的生长离不开阳光,若长期缺乏光照则会出现生长缓慢,叶片小而色淡,茎细长不开花等问题。为了解决以上困扰同时避免花盆的频繁搬动,我们采用LED灯补光的解决方案。
     



     光照波长与植物相对吸收率   

LED光谱波段
光色
对植物的影响
300-400nm
紫色与紫外线
促进色素的形成
440-490nm
蓝色
使叶绿体活跃,促进光合作用
500-600nm
绿色及黄色
抑制叶绿体活动
600-700nm
橙红色
大大增强光合作用,促进植物生长
700-780nm
远红色
植物生长信号灯,调节开花等
结合常见LED光谱波段表及植物吸收的光谱,采用红:蓝 = 2:1的LED组合灯带。
3.4.2电磁阀

     



     水泵与电磁阀实物图   
土壤湿度的补偿方面,若采用传统的水泵,则需要较大功率的输出,为我们的供电模块带来较大的压力,因而改用电磁阀与高水位势能做工的方式,减少控制部分的总功率。
3.5数据交互部分

3.5.1WiFi模块

     



     ATK-ESP8266 的实物图   
该模块接口较多,可支持IIC、PWM、GPIO 以及 ADC 等接口,可轻松实现数据透传。引脚描述如下所示:

引脚编码
引脚说明
VCC
电源引脚, 3.3V – 5V
GND
地线引脚
TXD
模块串口发送引脚
RXD
模块串口接受引脚
RST
复位引脚,低电平有效
IO_0
控制脚,低电平烧写模式,高电平运行模式
该ESP8266模块的工作频段为全球共用的2.4GHz,信号发射功率仅为 15dbm,其主要特性如下表所示:

特征
说明
用户配置
AT+指令集
工作模式
STA/AP/STA+AP模式
安全机制
WEP/WPA-PSK/WAP2-PSK
加密类型
WEP64/WEP128/TKIP/AES
通讯速率
110-921600bps(默认波特率115200)
TCP Client
5个
固件升级方式
本地串口或OTA远程升级
3.5.2OLED模块

     



     0.96寸OLED显示屏   
增加该模块的初衷为1.0版本的交互方式较少,若不打开APP查看,则无法获取花盆实时数据。因而添加该模块,目前仅作数据显示使用,尚无菜单与按键等互动。
3.5.3CH340模块

     



     CH340USB转TTL模块   
该模块主要用于串口调试。
四、软件设计

4.1驱动

4.1.1DS18B20驱动

4.1.2GY-30(BH1750)驱动

4.1.3OLED(SSD1306)驱动

暂未写博客,占坑。有时间我整理出来。
4.2主控逻辑

     



     工作流程图   
系统在上电后开始工作:首先完成的是各模块的初始化以及机智云协议初始化,随后在OLED上显示开机动画,ESP8266开启机智云一键配置。继而进入循环检测传感器数据,并将数据发送至OLED显示;随后进行模式判断,实现自动化智能化。为避免频繁的数据上传导致APP端控制命令冲突,在数据上传前,需获取计数器的值,实现非阻塞的延时上传。最后检测是否有云端控制命令,如有则进行对应的处理。在步入下一循环之前,须检测是否系统异常,如存在异常则结束工作,如无异常则开始下一次循环。
4.3机智云协议

4.3.1数据格式


Header
(2B)
Len
(2B)
Cmd
(1B)
Sn
(1B)
Flags
(2B)
Payload
(xB)
Checksum
(1B)
1) 包头(header)固定为0xFFFF;
2) 长度(len)是指从cmd 开始到整个数据包结束所占用的字节数;
3) 命令字(cmd)表示具体的命令含义,详见协议举例;
4) 消息序号(sn)由发送方给出,接收方响应命令时需把消息序号返回给发送方;
5) 标志位(flag),本产品填写默认0;
6) payload(p0数据区),详细参见p0 数据区约定;
7) 检验和(checksum)的计算方式为从len~DATA,按字节求和;
8) 所有发送的命令都带有确认,如在200 毫秒内没有收到接收方的响应,发送方;应重发,最多重发3 次;
9) 多于一个字节的整型数字以大端字节序编码(网络字节序);
p0 数据区约定”有如下功能:
1) WiFi模块向MCU发送控制命令时携带p0 命令和命令标志位以及可写数据区
2) MCU主动发送状态时或者回复模块的状态查询时携带p0命令和完整数据区
3) 数据区会自动合并布尔和枚举变量,且有严格的顺序,不可任意改变





上传协议P0区:action(1B) + dev_status(11B) ;
下达协议p0区:action(1B) + attr_flags(1B) + attr_vals(6B)
4.3.2数据上报

     



     机智云协议-数据上报   
4.3.3下行控制

     



     机智云协议-下行控制   
4.4Gizwits运作流程






起始工作是对外设、用户和协议等的初始化。当 WiFi 通过串口设备配置并成功连接云平台后,ESP8266将不断收到来自云端的数据点和状态信息。这些信息在接收完成后,会以GAgent协议帧的方式传递给主控芯片,而主控芯片再则将其放入缓冲区,之后进行抓包解析,并进行事件的处理,也就是下行的动作执行。如果再有上行数据采集,主控芯片将收到到数据处理为协议帧发送给WiFi 设备,再由WiFi负责将数据传输到服务器。
五、装配与测试

本文使用的方法是先将各模块调通,再组合在一起,组合时电源问题凹显,于是买了一个多路电源模块。外型部分目前仅用角钢切割组成支架,算是半成品吧。
     



     智能花盆半成品   
     



     APP互动界面与实物图   

视频地址:自制智能花盆
六、存在问题与改进建议

6.1传感器数据异常

解决办法,数据采集后经滤波处理,立Flag,近期出。





6.2运行日志

改用SD卡存储设备运行日志





6.3外型改进

智能花盆支架--->将设备整合到花盆内,为此应该要自己画PCB...





6.4传感器升级

持续优化传感器部分,例如采用博世BME280环境温湿度大气压三合一传感器替代DS18B20实现数据采集宽度上的升级。
6.5交互升级

未来可增加按键实现OLED菜单选择;增加蜂鸣器实现报警提醒,增加LED状态指示灯提示供电状态与工作模式。
6.6自建服务器

使用自建服务器,数据库存储常见植株的最适宜生长环境,为自动化控制提供更智能的选择。

MCU部分代码可在本人上传资源处下载
部分资料可在百度云下载 提取码: psea
举报

更多回帖

发帖
×
20
完善资料,
赚取积分