关于用模拟信号输出的传感器做一个测距仪的介绍和研究

描述

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杜邦线做参考,能测出距离,抬高一点点,也可以反应过来。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分