基于树莓派python的超声波测距报警(树莓派超声波避障代码)

http://www.itjxue.com  2023-04-04 17:53  来源:未知  点击次数: 

超声波测距的代码

连接5V和GND,超声波模块的Trig和Echo引脚可以连接至树莓派的任意GPIO引脚,连线方式和我们的不一样也没关系,记住Trig和Echo引脚对应的BCM引脚编码

编译命令:

gcc -Wall -o disMeasure chao.c -lwiringPi

python sleep(0.00001) 显示AttributeError:'float' object has no attribute 'sleep' 但程序可以使用

sleep是睡眠的意思,睡眠多长时间,默认是按秒算,最小单位也是1秒,不能为小数也就是float

我想用超声波模块来制作一个测距装置 想设置一个固定的测距范围,超过范围报警 怎样实现

这个问题放了好几天居然没人回答。。。难道大家和我的感觉一样?

的确不太好回答,就如同问“我想用电饭煲做一份烤肉,怎样实现?”

首先,你说的这个‘测距范围’是直线距离还是一定的角度?

如果是直线距离,这个问题也就太简单了,随便找个测距模块都能实现,只是软件判别的程序稍微改动一下即可。

如果是一定的角度范围,那么就太难了,因为目前的超声波传感器,大多在轴线方向敏感,大角度范围的检测,只有在很近的范围内有效。这时,你恐怕就要考虑其它检测技术了。

所以,你的问题能否叙述的再详细一些?

求助树莓派避障小车,遇到 python 了

小白第一次上手 python ,用树莓派,红外和超声波传感器做智障小车。 编译错误:

RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.

GPIO.setup(trip,GPIO.OUT)

Traceback (most recent call last):

File "xiaochetest.py", line 82, in module

fwd()

TypeError: fwd() takes exactly 1 argument (0 given)

下面是小车的代码:

import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BOARD)

m1_fwd = 12

m1_rev = 11

m2_fwd = 13

m2_rev = 15

red_left = 07

red_right = 16

trip = 38

echo = 37

def init():

GPIO.setup(m1_fwd,GPIO.OUT)

GPIO.setup(m1_rev,GPIO.OUT)

GPIO.setup(m2_fwd,GPIO.OUT)

GPIO.setup(m2_rev,GPIO.OUT)

def stop(sleep_time):

GPIO.output(m1_fwd,False)

GPIO.output(m1_rev,False)

GPIO.output(m2_fwd,False)

GPIO.output(m2_rev,False)

time.sleep(sleep_time)

GPIO.cleanup()

def fwd(sleep_time):

GPIO.output(m1_fwd,GPIO.HIGH)

GPIO.output(m1_rev,GPIO.LOW)

GPIO.output(m2_fwd,GPIO.HIGH)

GPIO.output(m2_rev,GPIO.LOW)

time.sleep(sleep_time)

GPIO.cleanup()

def rev(sleep_time):

GPIO.output(m1_fwd,GPIO.LOW)

GPIO.output(m1_rev,GPIO.HIGH)

GPIO.output(m2_fwd,GPIO.LOW)

GPIO.output(m2_rev,GPIO.HIGH)

time.sleep(sleep_time)

GPIO.cleanup()

def right(sleep_time):

GPIO.output(m1_fwd,GPIO.HIGH)

GPIO.output(m1_rev,GPIO.LOW)

GPIO.output(m2_fwd,False)

GPIO.output(m2_rev,False)

time.sleep(sleep_time)

GPIO.cleanup()

def left(sleep_time):

GPIO.output(m1_fwd,False)

GPIO.output(m1_rev,False)

GPIO.output(m2_fwd,GPIO.HIGH)

GPIO.output(m2_rev,GPIO.LOW)

time.sleep(sleep_time)

GPIO.cleanup()

def get_distance():

GPIO.setup(trip,GPIO.OUT)

GPIO.setup(echo,GPIO.IN)

GPIO.output(trip,GPIO.HIGH)

time.sleep(0.000015)

GPIO.output(trip,GPIO.LOW)

while not GPIO.input(echo):

pass

t1 = time.time()

while GPIO.input(echo):

pass

t2 = time.time()

return (t2-t1)*34300/2

def turnaround():

GPIO.setup(red_left,GPIO.IN)

GPIO.setup(red_right,GPIO.IN)

while GPIO.input(red_left) and GPIO.input(red_right)==0:

rev()

if GPIO.input(red_left)==1:

left(1)

else:

right(1)

GPIO.cleanup()

while True:

distance = get_distance()

time.sleep(0.5)

if distance 20:

fwd()

elif distance == 20:

stop()

else:

stop()

turnaround()

def fwd(sleep_time)

if distance 20:

fwd()

调用 fwd 的时候要传参数啊,错误提示说的比较清楚了。

树莓派通过C语言和python操作超声波测距模块

? ? 树莓派利用两个gpio来操作超声波测距模块,一个gpio操作发送超声波,另一个超声波接受返回的超声波,时间差与声音传播速度的积即为距离数值。模块可以测量 3cm – 4m 的距离,模块包括 超声波发射器、超声波接收器和控制电路三部分。 4 个引脚,由 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)组成。Trig 引脚用来接收来自树莓派的控制信号,Echo 引脚用来发送测距结果给树莓派。

? ? V端口是5V供电,G是负极,T为板卡端口38(gpio28),E为板卡端口40(gpio29)。

? ? 原理为时间差乘以速率来计算距离。

gcc? distance_sensor.c -o? distance_sensor? -lwiringPi? #编译C语言

./distance_sensor? #运行程序

运行程序? python distance_sensor.py

最后试了试将程序改为labview通过LINX嵌入式部署到树莓派,最后测试有问题。感觉是时间控制方面有问题,夜深了,留待下次解决吧。

(责任编辑:IT教学网)

更多

推荐PHP+MySQL视频文章