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 测量土壤湿度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比较结构的关联词(二)
- 下一篇: 云课堂初识计算机之软件答案,智慧职教云课