操纵树莓皮C

2024-05-19 08:57:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用覆盆子皮做一个皮卡。我正在使用L293D芯片组连接两个直流电机,并且我的一切都按照本指南工作:

https://business.tutsplus.com/tutorials/controlling-dc-motors-using-python-with-a-raspberry-pi--cms-20051

目前我已经写了一个基本的脚本来驾驶汽车前进,后退,左,右。但也有一些问题。我怎样才能在不先向前或向后移动的情况下左右转向。另外,我如何使汽车转向只需一个键的wasd和也许加速使用控制键?有多困难,有点像汽车游戏,你按下油门移动,但如果你释放,然后它减速?这是我目前使用的代码,但是每次都需要按enter键。在

在皮卡.py在

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)

#left motor
in2 = 10    
in1 = 9     
en1 = 11    

#right motor
in3 = 24    
in4 = 23    
en2 = 25    

#setup motors 
GPIO.setup(in2,GPIO.OUT)
GPIO.setup(in1,GPIO.OUT)
GPIO.setup(en1,GPIO.OUT)

GPIO.setup(in3,GPIO.OUT)
GPIO.setup(in4,GPIO.OUT)
GPIO.setup(en2,GPIO.OUT)

def forwards():
    GPIO.output(in2,GPIO.HIGH)
    GPIO.output(in1,GPIO.LOW)
    GPIO.output(en1,GPIO.HIGH)

    GPIO.output(in3,GPIO.HIGH)
    GPIO.output(in4,GPIO.LOW)
    GPIO.output(en2,GPIO.HIGH)

def backwards():
    GPIO.output(in2,GPIO.LOW)
    GPIO.output(in1,GPIO.HIGH)
    GPIO.output(en1,GPIO.HIGH)

    GPIO.output(in3,GPIO.LOW)
    GPIO.output(in4,GPIO.HIGH)
    GPIO.output(en2,GPIO.HIGH)

def left():
    GPIO.output(in2, GPIO.LOW)
    GPIO.output(in1, GPIO.LOW)
    GPIO.output(en1, GPIO.LOW)

def right():
    GPIO.output(in3, GPIO.LOW)
    GPIO.output(in4, GPIO.LOW)
    GPIO.output(en2, GPIO.LOW)

def stop():
    GPIO.output(en1,GPIO.LOW)
    GPIO.output(en2,GPIO.LOW)

#setup pwm
pwm_right = GPIO.PWM(en2, 100)
pwm_left = GPIO.PWM(en1, 100)

while True:
    cmd = raw_input("Command, w = forward / s = backward / x = stop (add a number between 0..9 for speed eg f6):")
    if len(cmd) > 0:
        direction = cmd[0]
    if direction == "w":
        forwards()
    elif direction == "s":
        backwards()
    elif direction == "a":
        left()
    elif direction == "d":
        right()
    elif direction == "x":
        stop()
    else:
        stop();

    speed = int(cmd[1]) * 11
    pwm_left.start(speed)
    pwm_right.start(speed)

GPIO.cleanup()

Tags: rightoutputgpiosetupoutleftlowhigh
3条回答
  1. 为了让应用程序继续运行,即使不按任何键,也可以使用Pygame。它读取低级键值,get_pressed()函数返回此时按下的键数组。在
  2. get_mods()函数将返回如下CTRL键状态:

    如果mods&KMOD\u CTRL:

  3. 为了考虑加速度,你可以保留一个速度变量,并每隔几毫秒增加一个加速值,只要按下前进键。当没有压力时,降低速度直到速度为0。

  4. 要向前移动并同时转向,可以向左轮发送pwm值100,向右车轮发送50。你可以做同样的加速技巧,使方向盘增加,只要你按住A或D键。在

对于汽车的左移,可以使用以下代码

汽车左右移动的机理取决于左电机和右电机的输出。如果左电机处于高位,则车辆将向右移动;如果右电机处于高位,则车辆将向左移动。在

def left():

GPIO.output(in2, GPIO.HIGH)
GPIO.output(in1, GPIO.HIGH)
GPIO.output(en1, GPIO.HIGH)
GPIO.output(in3, GPIO.LOW)
GPIO.output(in4, GPIO.LOW)
GPIO.output(en2, GPIO.LOW)

def right():

^{pr2}$

好吧,在网上搜索之后,我在机器人汽车Python程序下找到了一个很好的解决方案。也可以用l29进行测试。在

http://custom-build-robots.com/ebook-download

相关问题 更多 >

    热门问题