实践案例丨利用小熊派开发板获取土壤湿度传感器的 ADC 值
摘要:一文带你用小熊派开发板动手做土壤湿度传感器。
一、实验准备
1.实验环境
一块 stm32 开发板(推荐使用小熊派),以及数据线
已经安装 STM32CubeMX
已经安装 KeilMDK,并导入 stm32 开发板对应的芯片包(小熊派使用的是 STM32L431RCT6)
准备一个串口调试助手,我使用的是 UartAssist(包含在附件中)
一个土壤湿度传感器模块
2.目标效果
通过 CubeMX 创建工程并配置参数
获取 stm32 以硬件 IIC 获取 SHT20 传感器值(通过 SHT20 数据手册转化)
串口 1 重定向输出土壤湿度值
二、通过 CubeMX 生产 MDK 工程
A.芯片选择
打开 CubeMX,进入芯片选择:
选择自己的 stm32 芯片(即 STM32L431RCT6):
B.时钟源 RCC 设置
更改系统时钟源
系统时钟默认使用内部的高速时钟(HSI),选择使用 HSE,时钟更精确
设置外部时钟对应的端口
配置时钟树
STM32L431RCT6 系统时钟最大可以为 80MHz,我们配置到最大即可
C.参数配置(对应端口设置)
1)配置 USART1
使用 USART,模式为异步,波特率为 115200,无硬件流控制
2)配置 ADC 通道
知识补充:ADC,模拟-数字转换器,可以将连续变化的模拟信号转化为离散的数字信号。其中,小熊派的 ADC1 的通道三已经被引出,即 PC2
打开 ADC1 通道 3
---
3)配置 adc
我们保持默认即可:
D.工程设置
一些基础的设置,包括工程名、存储位置、工程环境、工程中各个文件的组成
E.生成代码
三、代码补充
1. 串口 1 输出重定向
我们知道 printf 是打印函数,原理是根据传入的字符串参数格式化打印输出到 stdout 中。我们需要让 printf 打印到串口之中,只需要在 usart.c 文件中模仿 printf 写一个输出函数即可
在添加头文件
写输出函数
注意:自己添加的代码,需要在 begin 和 end 之间
2. 读取传感器 ADC 值
我们获取传感器 adc 的值,通过在实验室多次测量不同土壤湿度的 ADC 值,来表示土壤湿润程度
主函数代码
代码很简单,但是如果我们需要获取更精确的值,可以加入各种滤波算法。然后根据实验值,判断土壤湿润程度。
我通过实验发现,在空气中获取的值为 1300 左右,包上湿润的餐巾纸后,值为两位数以下。
因此我们可以粗略判断,土壤越湿度,值越小;相反,土壤越干,值越大。
四、编译+下载
点击编译后,0 error,0 warning
小熊派连接在电脑上,代码下载到开发板
五、效果
1.将小熊派串口 1 和电脑相连,即拨到 AT-MUC,按下复位键
2.打开串口调试助手
连接端口,设置波特率为 115200
可以看到,在空气中获取的值为 1200-1300;此时,我们不仅掌握了 ADC 的使用,还掌握了土壤湿度传感器的使用
附件中包含本文工程文件(cubemx + keilMDK)
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/086fca9c423079f96c32dbeb2】。文章转载请联系作者。
评论