建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

ttking

发帖: 219粉丝: 16

级别 : 外部版主

发消息 + 关注

发表于2020年09月26日 16:05:18 520 5
直达本楼层的链接
楼主
显示全部楼层
[干货分享] 小熊派学习——获取土壤湿度传感器的ADC值

# 一、实验准备 ## 1.实验环境 - 一块stm32开发板(推荐使用小熊派),以及数据线 - 已经安装STM32CubeMX - 已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431RCT6) - 准备一个串口调试助手,我使用的是UartAssist(包含在附件中) - 一个土壤湿度传感器模块 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/30/210008fo7vb37vyayhbht4.png) ## 2.目标效果 - 通过CubeMX创建工程并配置参数 - 获取stm32以硬件IIC获取SHT20传感器值(通过SHT20数据手册转化) - 串口1重定向输出土壤湿度值 # 二、通过CubeMX生产MDK工程 ## A.芯片选择 - **打开CubeMX,进入芯片选择:** ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/30/212026gwrodk54oyp4fcl0.png) - **选择自己的stm32芯片(即STM32L431RCT6):** ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/30/212556cpcaurxs79c0xlnq.png) --- ## B.时钟源RCC设置 - **更改系统时钟源** >系统时钟默认使用内部的高速时钟(HSI),选择使用HSE,时钟更精确 - 设置外部时钟对应的端口 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/30/213059x5earvssmihl5hsf.png) - 配置时钟树 >STM32L431RCT6系统时钟最大可以为80MHz,我们配置到最大即可 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202009/26/1534436vbqjbqigys5aifx.png) --- ## C.参数配置(对应端口设置) ### **1)配置USART1** 使用USART,模式为异步,波特率为115200,无硬件流控制 ---- ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/31/113002az5kmov8zzgjmkkd.png) ---- ### **2)配置ADC通道** >知识补充:ADC,模拟-数字转换器,可以将连续变化的模拟信号转化为离散的数字信号。其中,小熊派的ADC1的通道三已经被引出,即PC2 **打开ADC1通道3** --- ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202009/26/1529127kokg7fnjt8f9qhj.png) ​--- **配置adc** 我们保持默认即可: ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202009/26/153319dnwfw8baqbphzqbg.png) --- ## D.工程设置 一些基础的设置,包括工程名、存储位置、工程环境、工程中各个文件的组成 ---- ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202009/26/153602x5cp9z4vfm3xobbd.png) ---- ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/31/114727qvkul4oarss1pxdq.png) ---- ## E.生成代码 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/31/115001f5olm8dvgsctxvko.png) ---- # 三、代码补充 ## 1. 串口1输出重定向 >我们知道printf是打印函数,原理是根据传入的字符串参数格式化打印输出到stdout中。我们需要让printf打印到串口之中,只需要在usart.c文件中模仿printf写一个输出函数即可 - 在添加头文件 ```c /* USER CODE BEGIN 0 */ #include <stdarg.h> #include <string.h> #include <stdio.h> /* USER CODE END 0 */ ``` - 写输出函数 ```c /* USER CODE BEGIN 1 */ void UsartPrintf(UART_HandleTypeDef *huart, char *fmt,...) { unsigned char UsartPrintfBuf[296]; va_list ap; unsigned char *pStr = UsartPrintfBuf; va_start(ap, fmt); vsprintf((char *)UsartPrintfBuf, fmt, ap); //格式化 va_end(ap); while(*pStr != 0) { USART1->TDR = *pStr++; while((USART1->ISR & 0x40) == 0); } } //使用方法:UsartPrintf(&huart1,"hello world\r\n"); /* USER CODE END 1 */ ``` >注意:自己添加的代码,需要在begin和end之间 ## 2. 读取传感器ADC值 >我们获取传感器adc的值,通过在实验室多次测量不同土壤湿度的ADC值,来表示土壤湿润程度 ### 主函数代码 ```c while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_ADC_Start(&hadc1); //开启ADC1 HAL_ADC_PollForConversion(&hadc1,50); //等待ADC转化完成 for(num=0;num<20;num++) { AD_Value += HAL_ADC_GetValue(&hadc1); } AD_Value = AD_Value/20; //ADC转换的数据20次的平均值 UsartPrintf(&huart1,"ADC20次获取的平均值值为:%d\r\n",AD_Value); Temperature = ((int16_t)(AD_Value-*TEMP30_CAL_ADDR)*1.0/(int16_t)(*TEMP130_CAL_ADDR-*TEMP30_CAL_ADDR))+30; UsartPrintf(&huart1,"Temperature is %.2f °\r\n",Temperature); // //UsartPrintf(&huart1,"%d\r\n",*TEMP130_CAL_ADDR); //UsartPrintf(&huart1,"%d\r\n",*TEMP30_CAL_ADDR); } ``` **代码很简单,但是如果我们需要获取更精确的值,可以加入各种滤波算法。然后根据实验值,判断土壤湿润程度。** **我通过实验发现,在空气中获取的值为1300左右,包上湿润的餐巾纸后,值为两位数以下。** **因此我们可以粗略判断,土壤越湿度,值越小;相反,土壤越干,值越大。** # 四、编译+下载 **点击编译后,0 error,0 warning** ---- ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/31/121955njyncblcptrssxe7.png) **小熊派连接在电脑上,代码下载到开发板** ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/31/122123balqwmlnq0o1x39m.png) ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202009/26/160114uwdfbrt3nti0umw4.png) # 五、效果 ## 1.将小熊派串口1和电脑相连,即拨到 AT-MUC,按下复位键 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/31/163115mub9q4eizoub4uox.png) ## 2.打开串口调试助手 连接端口,设置波特率为115200 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202009/26/155925eum6zttb96ryfype.png) **可以看到,在空气中获取的值为1200-1300;此时,我们不仅掌握了ADC的使用,还掌握了土壤湿度传感器的使用** >附件中包含本文工程文件(cubemx + keilMDK)

BearPiToSoil.zip 13.24 MB,下载次数:8

举报
分享

分享文章到朋友圈

分享文章到微博

Da Vinci

发帖: 92粉丝: 9

级别 : 外部版主

发消息 + 关注

发表于2020年09月27日 10:34:39
直达本楼层的链接
沙发
显示全部楼层

点赞 评论 引用 举报

柠檬PH=2

发帖: 198粉丝: 35

级别 : 外部版主

发消息 + 关注

发表于2020年09月27日 22:42:39
直达本楼层的链接
板凳
显示全部楼层

好详细的分享,赞!

点赞 评论 引用 举报

scu-w

发帖: 206粉丝: 7

级别 : 外部版主

发消息 + 关注

发表于2020年09月28日 22:56:50
直达本楼层的链接
地板
显示全部楼层

干货!感谢分享!!

点赞 评论 引用 举报

andyleung

发帖: 684粉丝: 43

级别 : 外部版主

发消息 + 关注

发表于2020年09月30日 10:46:12
直达本楼层的链接
5#
显示全部楼层

实践棒棒的

点赞 评论 引用 举报

Casperflip

发帖: 13粉丝: 0

级别 : 注册会员

发消息 + 关注

发表于2020年10月14日 09:53:58
直达本楼层的链接
6#
显示全部楼层

楼主你好 我对你的那个电容式传感器比较感兴趣  它是不是开源的呢 有没有相关的资料可以分享一下呢?比如说原理图啥的

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册