使用arduino的超声波测距仪。

使用8051单片机的超声波测距仪我已经在这个网站上发表过了。这次是一个使用arduino的超声波测距仪。这里使用HC-SR04超声波测距模块作为传感器。该显示器由三位数多路复用七段显示器组成。该测距仪可测量200厘米,精度为1厘米。还有一个以英寸显示距离的选项。该测距仪的典型应用有停车传感器、障碍物预警系统、液位控制器、地形监控设备等。我们先来看看HC-SR04超声波模块。

HC SR04超声波模块。

HC SR04是一款精度为0.3cm的超声波测距模块。该模块的传感范围从2cm到5m。该传感器的工作电流为15mA,测量角度为15°。HC-SR04传感器的正面和背面照片如下图所示。

SR04超声波测距仪

HC-SR04有四个引脚。它们的名称和功能如下所述。

  • Vcc:5V电源电压给这个引脚。
  • 触发:一个10uS长的脉冲给这个引脚触发传输。当接收到一个有效的触发脉冲时,HR-SR04发出8个40KHz脉冲。测量这些脉冲反射回来所花费的时间,并从中计算距离。
  • 回音:在这个引脚HC-SR04输出信号的高时间是成比例的范围。
  • 地面:接地接在这个引脚上。
HC-SR04时序图如下图所示。

HC-SR04时间图电路图。

arduino超声波测距仪全电路图如下图所示。
使用arduino的超声波测距仪

超声波测距模块的触发脚连接arduino的数字脚0。超声波模块的Echo引脚连接到arduino的数字引脚13。SPDT开关S1用于选择显示器中显示的测量单位。SPDT开关S1的极接arduino的数字引脚4如果数字引脚4保持高,输出将以厘米为单位,如果数字引脚4保持低,输出将以英寸为单位。arduino的数字驱动晶体管Q1, Q2和Q3接口到arduino的数字引脚1,2和3。多路段a到dp接口到arduino的数字引脚5到12。arduino板可以通过板上的+9V插孔供电。电路其他部分需要的5V电源可以从arduino板上可用的5V源获得。电阻R9, R10和R11限制了相应晶体管的基极电流。 330 ohm resistors R1 to R8 limits the current through the corresponding segments. Pin out of an E1-3056ASR1 three digit MUX seven segment display in shown in the figure below.

多路7段显示引脚

程序。

#包括#定义trig 0#定义echo 13#定义最大200 int a;整数单位;int usec;int输入=4;int disp1=1;int disp2=2;int disp3=3;int segA=5;int-segB=6;int-segC=7;int-segD=8;int segE=9;int-segF=10;int-segG=11;int-segDP=12;新平声纳(触发、回波、最大值);void setup(){pinMode(disp1,输出);pinMode(disp2,输出);pinMode(disp3,输出);pinMode(segA,输出);pinMode(segC,输出);pinMode(segD,输出);pinMode(segE,输出);pinMode(segG,输出);pinMode(segDP,输出);pinMode(输入,输入);}void loop(){延迟(20);usec=sonar.ping();//发送ping并估计回声的持续时间,单位为uS unit=digitalRead(输入);//如果(单位=1){usec=usec/58;//以厘米为单位的距离}否则{usec=usec/148;//以英寸为单位的距离}a=usec%10;数字写入(disp1,低);数字写入(disp2,低);数字写入(disp3,高);数字写入(segDP,高);显示(a);延迟(4);usec=usec/10;a=usec%10;数字写入(disp3,低);数字写入(disp2,高);数字写入(segDP,高);显示(a);延迟(4);usec=usec/10;a=usec;数字写入(disp2,低);数字写入(disp1,高);数字写入(segDP,高);显示(a);延迟(4);}int显示(int a){开关(a){案例0:数字写入(segA,低);数字写入(segB,低);数字写入(segC,低);数字写入(segD,低);数字写入(segE,低);数字写入(segF,低);数字写入(segG,高);中断;案例1:数字写入(segA,高);数字写入(segB,低);数字写入(segC,低);数字写入(segD,高);数字写入(segE,高);数字写入(segF,高);数字写入(segG,高);中断;案例2:数字写入(世嘉,低);数字写入(世嘉,低);数字写入(世嘉,高);数字写入(世嘉,低);数字写入(世嘉,低);数字写入(世嘉,高);数字写入(世嘉,低);中断;案例3:数字写入(世嘉,低);数字写入(世嘉,低);数字写入(世嘉,低);数字写入(世嘉,低);数字写入(世嘉,低);数字写入(世嘉,高);数字写入(segF,高);数字写入(segG,低);中断;案例4:数字写入(segA,高);数字写入(segB,低);数字写入(segC,低);数字写入(segD,高);数字写入(segE,高);数字写入(segF,低);数字写入(segG,低);中断;案例5:数字写入(segA,低);数字写入(segB,高);数字写入(segC,低);数字写入(segD,低);数字写入(segE,高);数字写入(segF,低);数字写入(segG,低);中断;案例6:数字写入(segA,低);数字写入(segB,高);数字写入(segC,低);数字写入(segD,低);数字写入(segE,低);数字写入(segF,低);中断;案例7:数字写入(segA,低);数字写入(segB,低);数字写入(segC,低);digitalWrite(segD,高);digitalWrite(segE,高);digitalWrite(segG,高);break;案例8:digitalWrite(segA,低);digitalWrite(segC,低);digitalWrite(segD,低);digitalWrite(segF,低);digitalWrite(segG,低);break;案例9:digitalWrite(segA,低);数字写入(segB,低);数字写入(segC,低);数字写入(segD,低);数字写入(segE,高);数字写入(segF,低);数字写入(segG,低);中断;}

关于这个项目。

用于与超声波测距仪模块通信,库功能< NewPing.h >使用。库函数完成了发送10uS触发脉冲、等待回波和测量回波宽度等工作。只有一行代码美国铀浓缩公司= sonar.ping ()将使arduino做上述所有的工作和以微秒为单位的回波脉冲宽度将存储在变量中购买.将美国的脉冲宽度除以58将得到以厘米为单位的距离,将美国的脉冲宽度除以148将得到以英寸为单位的距离。一个“if - else”环路用于根据SPDT选择开关(S1)的位置选择单元。在3位7段显示器上显示距离是通过在早期项目中使用的方法完成的电压表使用arduino

库可以从这里下载:NewPing_v1.5.下载这个压缩文件,解压缩到一个文件夹,命名为NewPing或其他什么,然后复制到.......程序文件/ Arduino /库文件夹。

液晶显示超声波测距仪。

这只是上述项目的LCD版本。该电路的工作原理与7段LED版本相同。唯一的变化是在显示设备上。在该电路中,一个16×2 LCD显示器用于显示距离。在LCD屏幕上同时显示以厘米和英寸为单位的距离。在尝试使用LCD之前第二版,浏览本文:将LCD连接到Arduino.液晶测距仪电路图如下图所示。

电路图:液晶测距仪。

超声波测距仪液晶显示器

程序:液晶测距仪。
#包括#包括#定义trig 0#定义echo 13#定义最大200 int usec;int cm;float inch;NewPing声纳(trig,echo,max);liquidcystal lcd(12,11,5,4,3,2);void setup(){lcd.begin(16,2)}void loop(){lcd.clear();lcd.setCursor(2,0);lcd.print(“测距仪”);usec=sonar.ping();cm=usec/58;inch=usec/58/2.54;lcd.setCursor(0,1);lcd.print(cm);lcd.print(“cm”);lcd.setCursor(7,1);lcd.print(inch);lcd.print(“inch”);延迟(250);}
作者

7评论

  1. 马赫什

    你为什么在这个项目中使用arduino而不是微控制器。。

  2. RJ

    我可以扩大HR-SR04的射程吗?如何?蒂雅

    • 乔乔

      @RJ -不可能扩大HCSRO4的范围。你可以做的是使用不同的传感器模块,范围更广。

  3. azhagar

    谢谢你的这个项目,我有一个问题给你,以前你用微控制器添加了这个项目,现在你用arduino添加了这个,所以哪个模块会花费更多。arduino板的价格是多少?
    我可以将这个项目扩展为我的主要项目吗?谢谢你!

  4. 幸运的

    你好,感谢分配你的工作,帮助我分配我的最后一年的项目,我使用七个部分,我不知道从哪里开始。帮助分配。

    重击!

    • azhagar

      我也将使用这个在我的主要项目发现..

  5. 约翰

    Halo,这段代码可以在树莓派中工作吗?我如何转换这些代码使它适合树莓派?

Baidu