STM32 Cube ADC 测量土壤湿度
一 。說(shuō)明
本來(lái)想買個(gè)溫濕度模塊,結(jié)果買了個(gè)濕度 - _ - !
1. 什么是AD轉(zhuǎn)換
AD轉(zhuǎn)換是把離散的模擬量轉(zhuǎn)換為數(shù)字量的過程,其原理就是使用單片機(jī)的高頻率和時(shí)鐘來(lái)采樣x軸的點(diǎn)樣,根據(jù)電壓的變化使用曲線函數(shù)來(lái)獲取y軸數(shù)字值的過程,我們叫做AD轉(zhuǎn)換
2.如何確定AD采樣的位數(shù),并知道電壓值
如果單片機(jī)的的ADC為12位,那么它的最大值為4095。單片機(jī)在進(jìn)行AD轉(zhuǎn)換前需要先設(shè)置一個(gè)參考電壓。假如把參考電壓設(shè)置為5V,5V=4095,0V=0;根據(jù)這樣的關(guān)系,我們就可以把模擬電壓進(jìn)行數(shù)字化了。比如:2V=2/5*4095=1638。
3. 什么是A0 和 D0
A0 輸出為模擬量的電壓值
D0 根據(jù)可調(diào)電阻設(shè)置傳感器的靈敏度,當(dāng)達(dá)到某個(gè)閾值時(shí)候能輸出 1 或者 0 ,變化波動(dòng)較大
比如:MQ135 未檢測(cè)到氣體時(shí),電壓值為4v , 檢測(cè)到后為0.1V
VCC ?連接 5V ( 可查參考手冊(cè),不同的模塊要求電壓不同)
GND ?接地
二 。配置
1. 設(shè)置采樣周期 55.5 cyles,和中斷端口 IN1,該端口和A0連接
2. 開啟中斷 ,這里采用中斷方式。也可以不使用中斷,直接在main的 while 里來(lái)做一樣
3.?根據(jù)配置的時(shí)鐘知道AD的采樣精度 ,這里我用的是12位的AD
三。濕度取值說(shuō)明
在實(shí)際測(cè)試中,ad_value 隨著水分的增加,而減少
在干燥的空氣中,ad_value 在4020左右 -> 0
在純水的中的值為:ad_value 在1500左右 -> 100%
根據(jù)以上的幾個(gè)條件,我們可以用1次函數(shù)模擬出濕度變化的曲線,所以就可以求值了
四。代碼
int main(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();//開啟中斷HAL_ADC_Start_IT(&hadc1);while(1){} }//這是中斷回調(diào)函數(shù) 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;//在實(shí)際測(cè)試中,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;//再次啟動(dòng)ADC轉(zhuǎn)換HAL_ADC_Start_IT(hadc); }四。演示效果(過程有些長(zhǎng),請(qǐng)耐心觀看)
1.空氣中濕度為:0?
2.水中濕度為:100?
3. 土壤中從淺到深?44 ~ 53%
感謝您的支持,寫的文章如對(duì)您有所幫助,開源不易,請(qǐng)您打賞,謝謝啦~
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的STM32 Cube ADC 测量土壤湿度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比较结构的关联词(二)
- 下一篇: 云课堂初识计算机之软件答案,智慧职教云课