机器人是通过使工业,工厂,医院等中的任务自动化来减少繁重工作中的人力的机器。大多数机器人通过使用某些控制单元或组件(例如按钮,遥控器,操纵杆,PC,手势和通过使用控制器或处理器执行某些命令。但是,今天我们在这里有一个自动机器人自主移动,无需任何外部事件,避免其路径中的所有障碍,是的,我们谈论避障机器人。在这个项目中,我们使用Raspberry Pi和Motor驱动程序来驱动机器人和超声波传感器以检测机器人路径中的物体。
以前,我们介绍了许多有用的机器人,您可以在我们的机器人技术项目部分中找到它们。
所需组件:
- 树莓派
- 超声波传感器模块HC-SR04
- ROBOT底盘,带螺丝
- 直流电动机
- L293D集成电路
- 轮圈
- 面包板
- 电阻(1k)
- 电容(100nF)
- 连接线
- 电源或移动电源
超声波传感器模块:
一个障碍躲避机器人是一个自动化的机器人,它不需要使用任何远程控制。这些类型的自动化机器人具有一些“第六感”传感器,例如障碍物探测器,声音探测器,热探测器或金属探测器。在这里,我们已经完成了使用超声波信号的障碍物检测。为此,我们使用了超声波传感器模块。
超声波传感器通常用于检测物体并确定障碍物与传感器的距离。这是测量距离而无需任何物理接触的好工具,例如水箱中的水位测量,距离测量,避障机器人等。因此,在这里,我们已检测到物体并使用超声波传感器和Raspberry Pi测量了距离。
超声波传感器HC-SR04用于测量2cm -400cm范围内的距离,精度为3mm。传感器模块由超声波发射器,接收器和控制电路组成。超声波传感器由两个圆形的眼睛组成,其中一个用来发送超声波,另一个用来接收超声波。
我们可以根据超声波返回到传感器所花费的时间来计算物体的距离。由于声音的时间和速度是已知的,因此我们可以通过以下公式计算距离。
- 距离=(时间x空中声速(343 m / s))/ 2。
由于波向前和向后传播相同的距离,因此该值除以2,因此到达障碍物的时间仅为总时间的一半。
因此,我们计算了距障碍物的距离(以厘米为单位),如下所示:
当GPIO.input(ECHO)== 1时,pulse_start = time.time():#检查ECHO是否为高GPIO.output(led,False)距离=圆(距离,2)avgDistance = avgDistance +距离
其中 pulse_duration 是发送和接收超声信号之间的时间。
电路说明:
对于使用Raspberry Pi的避免障碍机器人,电路非常简单。用于检测物体的超声波传感器模块连接到Raspberry Pi的GPIO引脚17和27。甲电机驱动器IC L293D连接到树莓裨3用于驱动机器人的电动机。电机驱动器的输入引脚2、7、10和15分别连接到Raspberry Pi GPIO引脚号12、16、20和21。在这里,我们使用了两个直流电动机来驱动机器人,其中一个电动机连接到电动机驱动器IC的输出引脚3和6,另一电动机连接到电动机驱动器IC的引脚11和14。
这个怎么运作:
这个自主机器人的工作非常简单。当机器人通电并开始运行时,Raspberry Pi通过使用超声波传感器模块测量在它前面的物体的距离并将其存储在变量中。然后,RPi将该值与预定义值进行比较,并做出相应的决策以将机器人向左,向右,向前或向后移动。
在此项目中,我们选择了15cm的距离来做出Raspberry Pi的决定。现在,只要Raspberry Pi与任何物体之间的距离小于15厘米,Raspberry Pi就会停止机器人并将其移回,然后向左或向右旋转。现在,在再次向前移动之前,Raspberry Pi会再次检查15厘米距离范围内是否存在障碍物,如果是,则再次重复之前的过程,否则向前移动机器人,直到它将再次检测到任何障碍物或物体。
编程说明:
我们在 这里使用 Python语言编写程序。在编码之前,用户需要配置Raspberry Pi。您可以查看我们以前的教程,以了解《 Raspberry Pi入门》和《在Pi中安装和配置Raspbian Jessie OS》。
该项目的编程部分在执行所有操作中起着非常重要的作用。首先,我们包含必需的库,初始化变量并定义超声波传感器,电机和组件的引脚。
将RPi.GPIO导入为GPIO导入时间#导入时间库GPIO.setwarnings(False)GPIO.setmode(GPIO.BCM)TRIG = 17 ECHO = 27…………
之后,我们创建了一些函数 def forward(),def back(),def left(),def right() 分别使机器人向前,向后,向左或向右移动,以及 def stop() 来停止机器人,检查下面给出的代码中的功能。
然后,在主程序中,我们启动了超声波传感器,读取信号发送和接收之间的时间并计算了距离。在这里,我们将这个过程重复了5次以提高准确性。我们已经解释了使用超声波传感器计算距离的过程。
对于范围(5)中的i,i = 0 avgDistance = 0:GPIO.output(TRIG,False)time.sleep(0.1)GPIO.output(TRIG,True)time.sleep(0.00001)GPIO.output(TRIG,False) while GPIO.input(ECHO)== 0:GPIO.output(led,False)pulse_start = time.time()while GPIO.input(ECHO)== 1:#检查ECHO是否为HIGH GPIO.output(led, False)pulse_end = time.time()pulse_duration = pulse_end-pulse_start距离= pulse_duration * 17150距离= round(distance,2)avgDistance = avgDistance + distance
最终,如果机器人在其前面发现任何障碍物,则在与障碍物保持距离之后,我们对机器人进行了编程,使其采取不同的路线。
如果avgDistance <15:count = count + 1 stop()time.sleep(1)back()time.sleep(1.5)if(count%3 == 1)&(flag == 0):right()flag = 1个其他:left()标志= 0 time.sleep(1.5)stop()time.sleep(1)其他:forward()标志= 0
下面通过演示视频给出了此Raspberry Pi避障机器人的完整代码。