python - 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
解决方案
向左或向右转是打开其中一个电机而不是同时打开两个电机(或一侧比另一侧运行得更快)的问题。您可以尝试编写函数turnleft()
并turnright()
在循环中运行它们(将它们连接到按钮或其他东西)。
左转函数如下所示:
def turnleft():
right.ChangeDutyCycle(pwm)
left.ChangeDutyCycle(0)
推荐阅读
- java - 运行 jasmin assembler 以获取 .class 文件并将其转换为 java
- c# - 基于列表视图项(xamarin 表单)隐藏视图单元格上下文操作菜单项
- python - 如何通过python电报机器人库在固定时间或间隔时间从机器人向用户发送消息?
- c++ - 字符串数组中的二分查找
- powerbi - 前一周测量 - 2019 年第 52 周和 2020 年第 1 周
- windows - 退出命令而不等待完成
- android - 当后退按钮按下销毁应用程序时,Flutter Android Platform EventChannel 不会停止
- laravel - Laravel (hasManyThrough eloquent 关系) - WhereHas 与 OrderBy 在本地主机上工作,而不是在服务器上工作
- reactjs - 删除了“transitionConfig”以支持新的动画 API
- angular - 查看子组件未定义