查看: 3789|回复: 1
收起左侧

超声波模块 HC-SR04 简介/编程示例

2014-1-2 17:11:38 | 显示全部楼层 |阅读模式
[align=left]1、本模块性能稳定,测度距离精确,模块高精度,盲区小。 产品应用领域:    机器人避障   物体测距  液位检测  公共安防 停车场检测 。[/align][align=left]2、 主要技术参数:[/align][align=left] 1:使用电压:DC---5V   [/align][align=left]2:静态电流:小于2mA       [/align][align=left]3:电平输出:高5V     [/align][align=left]4:电平输出:底0V         [/align][align=left]5:感应角度:不大于15度    [/align][align=left]6:探测距离:2cm-450cm [/align][align=left]7:高精度 可达0.2cm    [/align][align=left] T2ktZPXdBaXXXXXXXX_!!406368984.jpg [/align][align=left]接线方式:VCC、trig(控制端)、  echo(接收端)、 GND[/align]
全套资料下载包:[url]http://pan.baidu.com/share/link?shareid=3073390663&uk=671504480[/url]

树莓派结合超声波模块参考资料:[url]http://www.raspberrypi-spy.co.uk/2012/12/ultrasonic-distance-measurement-using-python-part-1/[/url]
[url]http://www.raspberrypi-spy.co.uk/2013/01/ultrasonic-distance-measurement-using-python-part-2/?1366202216[/url]
请看附件中的ultrasonic.py
注意修改里面的GPIO端口号

[align=left][b]基本工作原理:[/b] (1)采用IO口TRIG触发测距,给至少10us的高电平信号; (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;     本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,即可以达到你移动测量的值[/align]
1.jpg 2.jpg

[align=left]5、 操作:初始化时将trig和echo端口都置低,首先向给 trig    发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照   测试距离=(高电平时间*声速(340M/S))/2   就可以算出超声波到障碍物的距离。 [/align]

[align=left]6、 下面是飞思卡尔XS128单片机测距的程序:[/align][code]while(1)

  {

        PT1AD0_PT1AD00 = 1;//给超声波模块输入高脉冲



        PITINTE_PINTE1=1;  //打开PIT1定时器

        while(!(counter0>=4)); //等待20us

        PITINTE_PINTE1=0;counter0 = 0;//关闭定时器,计数清零

        PT1AD0_PT1AD00 = 0; //trig管脚拉低

      

        PORTB_PB0 = 0;      //指示灯0

        while(!(PT1AD0_PT1AD01 == 1)); //等待echo输出上升沿



        PORTB_PB1 = 0;  //指示灯1

        PITINTE_PINTE0=1;   //打开PIT0定时器

        while(!(PT1AD0_PT1AD01 == 0));  //等待下降沿

        distance = counter*17/20;  //计算距离,单位CM



        PITINTE_PINTE0=0;    //关闭定时器

        PORTB_PB2 = 0;       //指示灯2

   

      

        PITINTE_PINTE0=1;    //打开定时器定时500ms,数码管显示

        while(!(counter>=10000))

        {

            Showing(distance);   //显示距离,精确1cm

        }

          PITINTE_PINTE0=0;counter=0;  //关闭定时器,清零   

  

    }
[/code]
回复

使用道具 举报

2018-1-4 15:32:03 | 显示全部楼层
都很卓越阿!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们,了解更多

官方微信

服务时间:10:00-16:00

13714503811

公司地址:深圳市龙岗区南湾街道东门头路8号

Copyright © 2012-2020 Powered by 树莓派论坛 2019.4  粤ICP备15075382号-1
快速回复 返回列表 返回顶部