覆盆子Pİ的多个超声波传感器

时间:2019-11-17 23:40:22

标签: python raspberry-pi sensor arduino-ultra-sonic

在这里和编程领域我都是新手。我在树莓派上使用多个超声波传感器时遇到问题。我正在制造自动驾驶汽车(种类:)。我在前部之前有一个传感器,我想再将两个传感器放在角落,我正在尝试使这两个传感器一起工作。

我在编码方面有问题(我不能说我对python非常了解,我是新手),有些是如何工作鳕鱼的,但是传感器无法正常工作,它们测量错误,并且其中之一在全部

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()

0 个答案:

没有答案