Как использовать серводвигатель с датчиком расстояния TFMini в скрипте Python? - PullRequest
0 голосов
/ 03 декабря 2018

Я использую датчик расстояния Adafruit TFmini с серводвигателем.Я хочу, чтобы серводвигатель двигался, когда датчик расстояния определяет определенное расстояние.Мой код заставляет серводвигатель непрерывно двигаться, как сумасшедший.

Кредиты: Код датчика расстояния TfMini взят из tfmini GitHub, а код серводвигателя - из учебных пособий raspberry pi.

# -*- coding: utf-8 -*
import serial
import math
import time
import RPi.GPIO as GPIO





servoPIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)


fire_gun = GPIO.PWM(servoPIN, 50)   #GPIO 5 for PWM with 50Hz
fire_gun.start(2.5) #Initialization



"""
def gunRight():
    #fire_gun = GPIO.PWM(servoPIN, 50)  #GPIO 5 for PWM with 50Hz
    #fire_gun.start(2.5)    #Initialization

    print "Shot Fire The First Net Gun"
    fire_gun.ChangeDutyCycle(4.9)
    time.sleep(0.4)
    fire_gun.ChangeDutyCycle(7.2)
    time.sleep(0.4)
    print "Servo Motor Back To Rest Position"
    fire_gun.stop()
"""




ser = serial.Serial("/dev/ttyUSB0", 115200)

def getTFminiData():
    while True:
        count = ser.in_waiting
        if count > 8:
            recv = ser.read(9)
            ser.reset_input_buffer()
            if recv[0] == 'Y' and recv[1] == 'Y': # 0x59 is 'Y'
                low = int(recv[2].encode('hex'), 16)
                high = int(recv[3].encode('hex'), 16)
                distance = low + high * 256
                #My unit conversion starts here
                dist = float(distance) /100 
                print(distance)
                print "Distance to object is:",dist,"Meters"
                #GPIO.setup(TRIG, GPIO.OUT)
                #GPIO.setup(ECHO, GPIO.IN)

                #if dist <= 0.70:
                    #GPIO.output(5, True)   





try:
    if ser.is_open == False:
       ser.open()
       for i in range(500):
           getTFminiData()
           if dist <= 0.70:
          fire_gun.ChangeDutyCycle(4.9)
              time.sleep(0.4)
              GPIO.cleanup()


except KeyboardInterrupt:   # Ctrl+C
    if ser != None:
        #GPIO.cleanup()
    ser.close()
...