欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

STM32 Cube ADC 测量土壤湿度

发布时间:2023/12/20 编程问答 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 STM32 Cube ADC 测量土壤湿度 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一 。说明

本来想买个温湿度模块,结果买了个湿度 - _ - !

1. 什么是AD转换

AD转换是把离散的模拟量转换为数字量的过程,其原理就是使用单片机的高频率和时钟来采样x轴的点样,根据电压的变化使用曲线函数来获取y轴数字值的过程,我们叫做AD转换

2.如何确定AD采样的位数,并知道电压值

如果单片机的的ADC为12位,那么它的最大值为4095。单片机在进行AD转换前需要先设置一个参考电压。假如把参考电压设置为5V,5V=4095,0V=0;根据这样的关系,我们就可以把模拟电压进行数字化了。比如:2V=2/5*4095=1638。

3. 什么是A0 和 D0

A0 输出为模拟量的电压值

D0 根据可调电阻设置传感器的灵敏度,当达到某个阈值时候能输出 1 或者 0 ,变化波动较大

比如:MQ135 未检测到气体时,电压值为4v , 检测到后为0.1V

VCC  连接 5V ( 可查参考手册,不同的模块要求电压不同)

GND  接地

二 。配置

1. 设置采样周期 55.5 cyles,和中断端口 IN1,该端口和A0连接

2. 开启中断 ,这里采用中断方式。也可以不使用中断,直接在main的 while 里来做一样

3. 根据配置的时钟知道AD的采样精度 ,这里我用的是12位的AD

三。湿度取值说明

在实际测试中,ad_value 随着水分的增加,而减少
在干燥的空气中,ad_value 在4020左右 -> 0
在纯水的中的值为:ad_value 在1500左右 -> 100%
根据以上的几个条件,我们可以用1次函数模拟出湿度变化的曲线,所以就可以求值了

四。代码

int main(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();//开启中断HAL_ADC_Start_IT(&hadc1);while(1){} }//这是中断回调函数 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {float vol,hum;uint32_t adc_value;//获取ad valueadc_value= HAL_ADC_GetValue(&hadc1);//2的12次方,所以3V = 4096vol = (float)adc_value*3.3/4096;//在实际测试中,ad_value 随着水分的增加,而减少//在干燥的空气中,ad_value 在4020左右 -> 0//在纯水的中的值为:ad_value 在1500左右 -> 100%//土壤湿度的范围为 0~100 %hum = -0.03968253968253968*adc_value+159.52380952380952;//限制一下上下限if(hum < 0 ) hum = 0;if(hum > 100) hum = 100;//再次启动ADC转换HAL_ADC_Start_IT(hadc); }

四。演示效果(过程有些长,请耐心观看)

1.空气中湿度为:0 

2.水中湿度为:100 

3. 土壤中从浅到深 44 ~ 53%

感谢您的支持,写的文章如对您有所帮助,开源不易,请您打赏,谢谢啦~

 

 

 

 

总结

以上是生活随笔为你收集整理的STM32 Cube ADC 测量土壤湿度的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。