如何使用编码器测量直流电机来控制Python的机器人运动?

时间:2019-01-26 18:26:45

标签: python

我有一辆带2直流电动机的机器人车 连接到RPi 3 b和直流电动机的直流编码器 我想让机器人根据编码器测量的转数移动。以便 机器人移动和编码器开始测量 当旋转5圈时,机器人将停止, 现在我的问题是我不能右转或左转,该怎么做 我用python和RPi

import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

GPIO.setup(31,GPIO.IN)


GPIO.setup(29,GPIO.IN)

GPIO.setup(12,GPIO.OUT)

GPIO.setup(16,GPIO.OUT)

GPIO.setup(35,GPIO.OUT)

GPIO.setup(33,GPIO.OUT)


pwm=20

frequency=70000

right=GPIO.PWM(12,frequency)

left=GPIO.PWM(33,frequency)

left.start(0)

right.start(0)

def on():

    right.ChangeDutyCycle(pwm)

    left.ChangeDutyCycle(pwm)

def off():

    right.ChangeDutyCycle(0)

    left.ChangeDutyCycle(0)

prv=0

i=0

while True:

          on()  

          if(GPIO.input(31)==(1) and GPIO.input(29)==(1)):

             print"something"

             if prv==0:

                  prv=1

                  i=i+1

                  print"hole"+ str(i)+"times"

                  if i==50

                     off()

                     break     


          else:

                   print"button not pushed"

                   prv=0

1 个答案:

答案 0 :(得分:0)

向左或向右转动是打开一个电动机而不是两个电动机的问题(或者一侧比另一侧更快)。您可以尝试编写函数 if (flipY) { float temp = vertices[V1]; vertices[V1] = vertices[V3]; vertices[V3] = temp; temp = vertices[V2]; vertices[V2] = vertices[V4]; vertices[V4] = temp; } turnleft()并在循环中运行它们(将它们挂接到按钮或其他东西上)。

用于左转的功能如下所示:

turnright()