[RISC-V MCU 应用开发]

第一百章、CH32V103应用教程——红外测距

[复制链接]
2932|2
手机看帖
扫描二维码
随时随地手机跟帖
RISCVLAR|  楼主 | 2021-6-18 11:26 | 显示全部楼层 |阅读模式
本帖最后由 RISCVLAR 于 2021-6-18 11:25 编辑

CH32V103应用教程——红外测距

在日常使用时,我们常用的测距传感器有超声波测距和红外测距两种方式。关于超声波测距,在前面章节我们已经有过介绍,本章教程主要进行红外测距实验,本章教程所用红外测距传感器型号为SHARP-2Y0A02,关于该传感器参数,可自行上网查阅相关资料,本章主要进行红外测距简单例程介绍。

1、ADC简介
本章教程所用传感器主要通过ADC进行数据采集,根据采集得到ADC值进行一系列数据转换即可。
关于ADC,在前面章节已经进行过介绍,在此不再赘述。
本章教程所用红外测距传感器模块共有3个引脚可与开发板连接:VCC、GND、Aout。其中,VCC支持4.5V-5.5V供电;Aout引脚与对应ADC引脚连接。
关于ADC具体介绍,可参考前面章节及CH32V103应用手册。

2、硬件设计
本章教程使用红外测距模块进行测距。CH32V103开发板与红外测距模块的连接方式如下:
  • CH32V103开发板的VCC引脚与红外测距模块的VCC(5V)引脚连接
  • CH32V103开发板的GND引脚与红外测距模块的GND引脚连接
  • CH32V103开发板的PA1引脚与红外测距模块的Aout引脚连接

3软件设计
本章教程主要进行红外测距实验,在前面ADC教程基础上进行,其中ADC配置程序与前面ADC介绍一致,在此不再介绍,主要在main函数中ADC转换有所区别,main函数具体程序如下:
main.c文件
int main(void)
{
    u8 i = 0;
    u16 adc;
    float temp;     //电压
    float Distance; //距离
    float SUMDistance = 0.0; //距离

    Delay_Init();
        USART_Printf_Init(115200);
        adc_Init();

        printf("SystemClk:%d\r\n",SystemCoreClock);

        while(1)
    {
        adc=Get_Adc_Average(ADC_Channel_1,10);
        temp=(float)adc*(3.3/4096);
        Distance = 1941-2094.1*temp+941.5*temp*temp-152.3*temp*temp*temp;
        SUMDistance += Distance;
        if(i==10)
        {
            Distance = SUMDistance/10;
            printf(" 测量距离= %3.2f mm \n",Distance );
            SUMDistance = 0;
            i = 0;
        }
//        printf("adc:%d\r\n",adc);
//        printf("volate:%0.2f\r\n",temp);
        i++;
        Delay_Ms(250);
        }
}
main.c文件主要进行函数初始化并将所得ADC值转换成电压值之后再转换为距离,并打印输出。在本函数中所用距离计算函数并不准确,在此只是提供一个参考说明,在真正使用时需要根据ADC值和距离关系进行算法分析和校准。

4下载验证
将编译好的程序下载到开发版并复位,与红外测距模块接好之后串口打印如下:
图片1.png

99、红外测距.rar

552.19 KB

使用特权

评论回复

相关帖子

tail066| | 2021-6-18 14:53 | 显示全部楼层
我的遗憾就是缺少一张原理图,还好楼主整理的很工整

使用特权

评论回复
稳稳の幸福| | 2021-6-18 15:06 | 显示全部楼层
没说理论啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

293

帖子

34

粉丝