Вращение сервопривода с python - PullRequest
0 голосов
/ 24 апреля 2020

Привет, я только что написал сценарий, вдохновленный учебником YouTube.

Дело в том, что я не могу заставить сервопривод вращаться. Я думаю, что переменная «x-medium» и «position» не go внизу.

тогда угол поворота не изменяется. то, что я хочу сделать, это следить за цветом с помощью веб-камеры, установленной на сервоприводе. когда мы перемещаем объект, камера вращается

с кем-то helpme?

вот мой сценарий

    import sys

sys.path.append('/usr/local/lib/python3.7/site-packages')
import cv2
import numpy as np
import RPi.GPIO as GPIO
import time


GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

pmw_gpio = 11
frequence = 50
position = 2.5
GPIO.setup(pmw_gpio, GPIO.OUT)
pmw = GPIO.PWM(pmw_gpio, frequence)

pmw.start(angle_to_percent(90))
time.sleep(1)

cap = cv2.VideoCapture(0)

cap.set(3, 480)
cap.set(4, 320)
_, frame = cap.read()
rows, cols, _ = frame.shape

x_medium = int(cols / 2)
center = int(cols / 2)




position = 90 #degrees




while True:
    _, frame = cap.read()
    hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # red color
    low_red = np.array([161, 155, 84])
    high_red = np.array([179, 255, 255])
    red_mask = cv2.inRange(hsv_frame, low_red, high_red)
    contours, _ = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    contours = sorted(contours, key=lambda x:cv2.contourArea(x), reverse=True)

    for cnt in contours:
        (x, y, w, h) = cv2.boundingRect(cnt)

        x_medium = int((x + x + w) / 2)

        print(x_medium)
        break


    cv2.line(frame, (x_medium, 0), (x_medium, 480), (0, 255, 0), 2)
    cv2.imshow("Frame", frame)

     #servo

        if x_medium < center -40:
            position += 0.1
        elif x_medium > center + 40:
            position -= 0.1
        pmw.ChangeDutyCycle(angle_as_percent(position))


    key = cv2.waitKey(1)

    if key == 27:
        break






cap.release()
cv2.destroyAllWindows()
...