1方案介紹設計思路
做一個測距儀,需要幾部分:
1. 信號采集;
2. 信號轉換成距離;
3. 將距離顯示出來;
這次在網上分別買了超聲測距、紅外測距、激光測距的模塊,一直放那里沒有試,等需要用的時候,發現就紅外測距的模塊有幾根線,可以直接插到板子上用,那么就用紅外測距模塊了。
紅外測距模塊的型號是SHARP GP2D12,輸出的信號是模擬電壓信號,電壓值跟距離有關,那么用板子采集分析這個電壓,就能得到距離;分析模擬電壓,需要用到ADC。本次使用基于GD32F450VET6的小紅板,其中GD32F4系列MCU集成的ADC采樣速率可達2.6M SPS,性能非常高。
2方案框圖


信號換算成距離,ADC得到AD轉換后的數據,但是跟距離還沒有關聯起來,需要用一個公式將ADC輸出數據換算成一個距離值;這個模塊的測程大概是10cm到80cm的樣子,測了4組數據,分別是20cm、40cm、60cm、80cm距離時候的ADC輸出值,將這四組數據擬合一個曲線出來,就可以得到全測程的距離計算公式了;實際擬合的時候用的是指數函數。


關于距離的顯示,可以用串口顯示,也可以用LCD顯示,這里用了串口在調試的時候顯示,調好了用OLED顯示。

測試:
1. while (1)
2. {
3. static uint8_t i;
4. uint16_t adc_data;
5. float m;
6. uint8_t d;
7. uint8_t d_lcd[2] = {0};
8.// printf(" test%3d",i++);
9. bsp_led_on(LED4);
10. delay_ms(100);
11. bsp_led_off(LED4);
12. delay_ms(800);
13. adc_data = adc_regular_data_read(ADC1);
14.
15. m = 160700 * pow(adc_data,-1.097);
16. d = (uint8_t)m;
17.
18. printf(" %3d,adc:%5d,%2dcm",i++,adc_data,d);
19.
20. sprintf((char*)d_lcd,"%2d",d); // 打印到數組
21. OLED_ShowString(0,0,"D:",16);
22. OLED_ShowString(16,0,d_lcd,16);
23. OLED_ShowString(32,0,"cm",16);
24. adc_software_trigger_enable(ADC1,ADC_REGULAR_CHANNEL);
25.
26. }
用一根20cm杜邦線做參考,能測出距離,抬高一點點,也可以反應過來。
-
傳感器
+關注
關注
2576文章
55041瀏覽量
791383 -
模擬信號
+關注
關注
8文章
1232瀏覽量
54672 -
輸出信號
+關注
關注
0文章
311瀏覽量
12744
發布評論請先 登錄
一款將模擬信號轉換為數字信號的高靈敏度、高紅外抑制的環境光傳感器-WH4517V
關于用模擬信號輸出的傳感器做一個測距儀的介紹和研究
評論