-
Notifications
You must be signed in to change notification settings - Fork 11
Yanshee传感器 2 神秘的超声波距离传感器
通过本课程你可以学到什么叫超声波传感器,在生产生活中人们为什么会使用传感器,而超声波传感器又是如何在我们的机器人Yanshee身上使用的呢? 通过本课程,你还可以发现超声波传感器的使用方法和应用场景。你会发现一个充满趣味的测距世界。
蝙蝠分辨声音的本领很高,耳内具有超声波定位的结构。蝙蝠是惟一能真正飞行的哺乳动物,非常适合在黑暗中生活,它的眼睛几乎不起作用,通过发射超声波并根据其反射的回音辨别物体。飞行的时候由口和鼻发出一种人类听不到的超声波,遇到昆虫后会反弹回来。蝙蝠用耳朵接收后,就会知道猎物的具体位置,从而前往捕捉。如果是小飞虫,它会毫不客气地吃掉,如果是障碍物,它就会改变方向,朝没有反射超声的方向飞去。机器人也想拥有这种能力,于是超声波传感器被引入进来了。
超声波是一种频率高于20000赫兹的声波,它的方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。在医学、军事、工业、农业上有很多的应用。超声波因其频率下限大于人的听觉上限而得名。
反射波是指波动在不同密度的媒质分界面发生反射与折射,反射波并没有发生半波损失;分界两侧的媒质密度之差是决定波动的反射量与折射量的因原之一,媒质密度差越大,反射量越大,反之折射量越大。
放大电路亦称为放大器,它是使用最为广泛的电子电路之一、也是构成其他电子电路的基础单元电路。所谓放大,就是将输入的微弱信号(简称信号,指变化的电压、电流等)放大到所需要的幅度值且与原输入信号变化规律一致的信号,即进行不失真的放大。只有在不失真的情况下放大才有意义。放大电路的本质是能量的控制和转换,根据输入回路和输出回路的公共端不同,放大电路有三种基本形式:共射放大电路、共集放大电路和共基放大电路。实际的放大电路通常是由信号源、晶体三极管构成的放大器及负载组成。(一个典型的放大电路如图所示:)
单片机到底是什么呢?就是一个电脑,只不过是微型的,麻雀虽小,五脏俱全:它内部也有和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元......用它来做一些控制电器一类不是很复杂的工作足矣了。排烟罩VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。单片机就是一个微型电脑,它是靠程序工作的,并且可以修改。通过不同的程序实现不同的功能。目前最常用的单片机为MCS-51、STM32等等。
Yanshee机器人一台、超声波测距传感器一个
树莓派Rasbian系统、linux系统、python环境
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。
原理图:
Yanshee机器人身上的超声波传感器安装图
基本数据读取,我们通过Yanshee SDK API 实现相应的编程功能。然后执行相关代码:
#!/usr/bin/python
# _*_ coding: utf-8 -*-
#!/usr/bin/python
# _*_ coding: utf-8 -*-
importtime
importRobotApi
RobotApi.ubtRobotInitialize()
#------------------------------Connect---------------------------------
gIPAddr=""
robotinfo=RobotApi.UBTEDU_ROBOTINFO_T()
#The robot name you want to connect
robotinfo.acName="Yanshee_0A7E"
ret=RobotApi.ubtRobotDiscovery("SDK",15,robotinfo)
if(0!=ret):
print("Return value: %d"%ret)
exit(1)
gIPAddr=robotinfo.acIPAddr
ret=RobotApi.ubtRobotConnect("SDK","1",gIPAddr)
if(0!=ret):
print("Can not connect to robot %s"%robotinfo.acName)
exit(1)
#---------------------------Read Sensor Value--------------------------
ultrasonic_sensor=RobotApi.UBTEDU_ROBOTULTRASONIC_SENSOR_T()
whileTrue:
time.sleep(2)
ret=RobotApi.ubtReadSensorValue("ultrasonic",ultrasonic_sensor,4)
ifret!=0:
print("Can not read Sensor value. Error code: %d"%(ret))
else:
print("Read Ultrasonic Sensor Value: %d mm"%(ultrasonic_sensor.iValue))
#---------------------------Disconnect---------------------------------
RobotApi.ubtRobotDisconnect("SDK","1",gIPAddr)
RobotApi.ubtRobotDeinitialize()
结果输出截图:
在基础实验的基础上让Yanshee机器人绕开高约25cm的障碍物并在靠近障碍物时发出语音提示:“发现障碍物,前方危险!”。向左向前方避开障碍物之后,语音提示:“我已成功绕过障碍物,请做出其它指示。”
超声波距离传感器在电子玩具、智能机器人、工业探测、生物仿生、医学影像、教育、农业等行业具有广阔的应用场景。
后续有了超声波距离传感器我们就可以通过它获得机器人的距离障碍物的远近来编写出各式各样有趣的场景了。它就像是机器人的障碍物触觉,让机器人变的更加聪明智慧。