Python 带有覆盆子P和x130的多个超声波传感器;
我对这里和编程都是新手。我有关于多个超声波传感器在树莓pi上使用的问题。我正在制造一辆自动驾驶汽车(有点像:)。我以前有一个传感器,只是在前面,我想在角落里再放两个,我正在尝试这两个传感器一起工作 我在编码方面有问题(我不能说我对python很了解,我是新手),我是如何处理cod的,但传感器工作不正常,测量错误,其中一个根本不工作Python 带有覆盆子P和x130的多个超声波传感器;,python,raspberry-pi,sensors,arduino-ultra-sonic,Python,Raspberry Pi,Sensors,Arduino Ultra Sonic,我对这里和编程都是新手。我有关于多个超声波传感器在树莓pi上使用的问题。我正在制造一辆自动驾驶汽车(有点像:)。我以前有一个传感器,只是在前面,我想在角落里再放两个,我正在尝试这两个传感器一起工作 我在编码方面有问题(我不能说我对python很了解,我是新手),我是如何处理cod的,但传感器工作不正常,测量错误,其中一个根本不工作 from picamera.array import PiRGBArray from picamera import PiCamera import numpy as
from picamera.array import PiRGBArray
from picamera import PiCamera
import numpy as np
import time
import cv2
import RPi.GPIO as GPIO
from time import sleep
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
TRIG = 40
ECHO = 38
TRIG1 = 31
ECHO1 = 29
Motor1A = 16
Motor1B = 18
Motor1E = 22
Motor2A = 13
Motor2B = 11
Motor2E = 15
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(TRIG1, GPIO.OUT)
GPIO.setup(ECHO1, GPIO.IN)
GPIO.setup(Motor1A, GPIO.OUT)
GPIO.setup(Motor1B, GPIO.OUT)
GPIO.setup(Motor1E, GPIO.OUT)
GPIO.setup(Motor2A, GPIO.OUT)
GPIO.setup(Motor2B, GPIO.OUT)
GPIO.setup(Motor2E, GPIO.OUT)
camera = PiCamera()
camera.resolution =(640, 480)
camera.framerate =32
rawCapture=PiRGBArray(camera,size=(640,480))
time.sleep(0.1)
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
GPIO.output(TRIG, False)
time.sleep(0.05)
GPIO.output(TRIG1, False)
time.sleep(0.05)
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG1, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
GPIO.output(TRIG1, False)
while GPIO.input(ECHO, ECHO1) == 1:
pulse_start = time.time()
while GPIO.input(ECHO, ECHO1) == 1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance, 2)
print("Mesafe:", distance - 0.5, "cm")
if distance < 20:
print ("Mesafe:", distance - 0.5, "cm Engel algilandi")
GPIO.output(Motor1A, GPIO.LOW)
GPIO.output(Motor1B, GPIO.HIGH)
GPIO.output(Motor1E, GPIO.HIGH)
GPIO.output(Motor2A, GPIO.HIGH)
GPIO.output(Motor2B, GPIO.LOW)
GPIO.output(Motor2E, GPIO.HIGH)
else:
print("Mesafe:", distance - 0.5, "cm")
GPIO.output(Motor1A, GPIO.LOW)
GPIO.output(Motor1B, GPIO.HIGH)
GPIO.output(Motor1E, GPIO.HIGH)
GPIO.output(Motor2A, GPIO.LOW)
GPIO.output(Motor2B, GPIO.HIGH)
GPIO.output(Motor2E, GPIO.HIGH)
imgOriginal = frame.array
imgHSV = cv2.cvtColor(imgOriginal, cv2.COLOR_BGR2HSV)
imgThreshLow = cv2.inRange(imgHSV, np.array([0, 70, 50]), np.array([10, 255, 255]))
imgThreshHigh = cv2.inRange(imgHSV, np.array([170, 70, 50]), np.array([180, 255, 255]))
imgThresh = cv2.add(imgThreshLow, imgThreshHigh)
imgThresh = cv2.GaussianBlur(imgThresh, (3, 3), 2)
imgThresh = cv2.dilate(imgThresh, np.ones((5, 5), np.uint8))
imgThresh = cv2.erode(imgThresh, np.ones((5, 5), np.uint8))
intRows, intColums = imgThresh.shape
circles = cv2.HoughCircles(imgThresh,cv2.cv.CV_HOUGH_GRADIENT,5,intRows/4)
if circles is not None:
print("kirmizi tabela algilandi.Dikkat !")
for circle in circles[0]:
x, y, radius = circle
print("pozisyon x = " + str(x) + ", y = " + str(y) + ", radius = " + str(radius))
cv2.circle(imgOriginal, (x, y), 3, (0, 255, 0), -1)
cv2.circle(imgOriginal, (x, y), radius, (0, 0, 255), 3)
#end for
#end if
else:
print("yol serbest")
cv2.imshow("Frame", imgOriginal)
cv2.imshow("imgThresh",imgThresh)
key = cv2.waitKey(1) & 0xFF
rawCapture.truncate(0)
if key == ord("q"):
return
if __name__ == "__main__":
main()
从picamera.array导入PiRGBArray
从picamera进口picamera
将numpy作为np导入
导入时间
进口cv2
将RPi.GPIO导入为GPIO
从时间上导入睡眠
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
TRIG=40
回声=38
TRIG1=31
ECHO1=29
电机1A=16
电机1B=18
电机1E=22
电机2A=13
电机2B=11
电机2e=15
GPIO.setup(触发,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.setup(TRIG1,GPIO.OUT)
GPIO.setup(ECHO1,GPIO.IN)
GPIO.setup(马达1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(电机1E、GPIO.OUT)
GPIO.setup(Motor2A,GPIO.OUT)
GPIO.setup(马达2B,GPIO.OUT)
GPIO.setup(电机2E、GPIO.OUT)
照相机=皮卡梅拉()
相机分辨率=(640480)
camera.framerate=32
rawCapture=PiRGBArray(摄像机,尺寸=(640480))
睡眠时间(0.1)
对于照相机中的帧。连续捕获(rawCapture,format=“bgr”,使用\u video\u port=True):
GPIO.output(触发,错误)
睡眠时间(0.05)
GPIO.output(TRIG1,False)
睡眠时间(0.05)
GPIO.output(触发,真)
睡眠时间(0.00001)
GPIO.output(TRIG1,True)
睡眠时间(0.00001)
GPIO.output(触发,错误)
GPIO.output(TRIG1,False)
而GPIO.input(ECHO,ECHO1)==1:
脉冲启动=时间。时间()
而GPIO.input(ECHO,ECHO1)==1:
脉冲结束=时间。时间()
脉冲持续时间=脉冲结束-脉冲开始
距离=脉冲持续时间*17150
距离=圆形(距离,2)
打印(“台面:”,距离-0.5,“厘米”)
如果距离小于20:
打印(“Mesafe:,距离-0.5,“厘米Engel algilandi”)
GPIO.输出(马达1A,GPIO.低)
GPIO.输出(马达1b,GPIO.高)
GPIO.输出(电机1E、GPIO.高)
GPIO.输出(马达2A,GPIO.高)
GPIO.输出(马达2B,GPIO.低)
GPIO.输出(电机2E,GPIO.高)
其他:
打印(“台面:”,距离-0.5,“厘米”)
GPIO.输出(马达1A,GPIO.低)
GPIO.输出(马达1b,GPIO.高)
GPIO.输出(电机1E、GPIO.高)
GPIO.输出(马达2A,GPIO.低)
GPIO.输出(马达2B,GPIO.高)
GPIO.输出(电机2E,GPIO.高)
imgOriginal=frame.array
imgHSV=cv2.CVT颜色(IMG原始,cv2.COLOR_BGR2HSV)
imgThreshLow=cv2.inRange(imgHSV,np.array([0,70,50]),np.array([10,255,255]))
imgThreshHigh=cv2.inRange(imgHSV,np.数组([170,70,50]),np.数组([180,255,255]))
imgThresh=cv2.add(imgThreshLow,imgThreshLow)
imgThresh=cv2.GaussianBlur(imgThresh,(3,3,2)
imgThresh=cv2.扩张
imgThresh=cv2.侵蚀(imgThresh,np.侵蚀((5,5,np.uint8))
intRows,intColums=imgThresh.shape
圆=cv2.HoughCircles(imgThresh,cv2.cv.cv_-HOUGH_梯度,5,intRows/4)
如果圆不是无:
印刷品(“kirmizi tabela algilandi.Dikkat!”)
对于圆中的圆[0]:
x、 y,半径=圆
打印(“pozisyon x=“+str(x)+”,y=“+str(y)+”,radius=“+str(radius))
cv2.圆(imgOriginal,(x,y),3,(0,255,0),-1)
cv2.圆(imgOriginal,(x,y),半径,(0,0,255),3)
#结束
#如果结束
其他:
打印(“yol serbest”)
cv2.imshow(“帧”,imgOriginal)
cv2.imshow(“imgThresh”,imgThresh)
key=cv2.waitKey(1)和0xFF
rawCapture.truncate(0)
如果键==ord(“q”):
返回
如果名称=“\uuuuu main\uuuuuuuu”:
main()
有些代码是关于pi摄像头的,不必管它们,但我可以说,当我只使用一个传感器时,代码工作正常。你能用一个传感器发布工作代码吗?此外,您是否检查了每个传感器是否单独使用工作代码工作?你不应该像现在这样组合超声波传感器的回波信号(每个传感器的回波时间不同,因此读取的距离也不同)。您应该单独测量每个传感器的距离,然后根据读取的所有距离做出最终决定。还有一件事,您还需要注意超声波传感器不会相互干扰。音速为340米/秒或大约34.300厘米/秒。因此,每1毫秒的误差将导致读数出现34.300厘米的误差。我不确定python上的计时精度,但最好减少由于来自不同超声波传感器的反射而产生错误的机会,因此理想情况下,您应该隔离它们,或者物理隔离,或者一次对一个进行采样。我检查了每个传感器的工作情况,并使用工作代码,但无法将它们组合起来。我明白你的意思,但我也想到了这个解决方案,但我不能像你说的那样包装一个代码。你能帮我吗?顺便说一句,我验证了传感器测量,有一些重要的代码,使它正确。我不确定隔离,我说我是非常新的和搜索现在。我会考虑的。