怎样用键盘控制树莓派RC汽车

电子说

1.2w人已加入

描述

步骤1:组件

在继续本教程之前,请确保您具有以下组件:

•Raspberry Pi Model B(http://www.adafruit.com/products/998)

•MicroSD卡(http://www.adafruit.com/products/102)

•Pi补鞋匠的分线和电缆(http://www.adafruit.com/products/914)

•任意尺寸的面包板(http://www.adafruit.com/products/239)

•M/M电线(http://www.adafruit.com/products/153) Wires(http://www.adafruit.com/products/266)

•原型Pi板(http://www.adafruit.com/produ cts/801)

•L293D芯片(http://www.adafruit.com/products/807)

•带直流电动机的中型RC汽车

•蓝牙键盘

•烙铁和电线

步骤2:先决条件

在继续本教程之前,请确保满足以下先决条件:

•带有GPIO电缆和面包板的组装式补鞋匠

•烙铁体验

•升级的操作系统。您可以通过进入终端来实现此目的:

sudo apt-get upgrade

•最新的GPIO库。您可以通过进入终端来实现此目的:

sudo apt-get update

sudo apt-get install python-dev

sudo apt-get install python-rpi.gpio

步骤3:L293D芯片

硬件设置中最重要的部分是L293D芯片。使用适当的代码,该芯片可让您控制两个独立的直流电动机的速度和方向。了解该芯片的工作方式及其每个引脚的功能对您至关重要。 “ + V”引脚(8)为电动机供电,而“ + V”引脚(16)为芯片逻辑供电。每个“ IN”引脚(2、7、10、15)都需要连接到GPIO引脚,而“ OUT”引脚(3、6、11、14)则为两个直流电动机提供输出。

第4步:硬件

遥控车

了解了L293D芯片的原理之后,就该将其与其他组件一起组装了,放在面包板上。已为您提供了原理图。请注意L293D芯片的方向。

您可能会注意到图中的LED。这些代表遥控车上的前灯或霓虹灯底灯。如果您的汽车缺少这些功能,请忽略原理图的这一部分。

第5步:软件

下面是您需要的python代码这个程序工作。完成后将程序另存为rc_car.py。

将RPi.GPIO导入为io

io.setmode(io.BCM)

import sys,tty,termios,time

#这两个代码块为RC车上的两个直流电动机配置PWM设置。它定义用于输入的两个GPIO

#引脚,启动PWM并将

#电动机的速度设置为0

motor1_in1_pin = 4

motor1_in2_pin = 17 setup(motor1_in1_pin ,io.OUT)

io.setup(motor1_in2_pin,io.OUT)

motor1 = io.PWM(4,100)

motor1.start(0)

motor1.ChangeDutyCycle(0)

motor2_in1_pin = 24

motor2_in2_pin = 25

io.setup(motor2_in1_pin,io.OUT)

io.setup(motor2_in2_pin,io.OUT)

motor2 = io.PWM(4,100)

motor2 .start(0)

motor2.ChangeDutyCycle(0)

#定义将用于RC车上LED的GPIO引脚,并将输出设置为false .setup( 18,io.OUT)

io.output(18,False)

io.setup(23,io.OUT)

io.output(23,False)

#getch方法可以确定用户通过访问系统文件在键盘上按下了哪个键

#然后它将作为变量返回按下的键

def getch():

fd = sys.stdin .fileno()

old_settings = termios.tcgetattr(fd)

试试:

tty.setraw(sys.stdin.filen o())

ch = sys.stdin.read(1)

最后:

termios.tcsetattr(fd,termios.TCSADRAIN,old_settings)

return ch

#此部分代码定义用于确定电动机是否需要正转或反转的方法。通过将

#GPIO引脚之一设置为true,将另一个设置为false,可以实现不同的方向。如果

#两个引脚的状态都匹配,则电动机将不会旋转。

def motor1_forward():

io.output(电动机1_in1_pin,True)

io.output(电动机1_in2_pin,False)

def motor1_reverse():

io.output(motor1_in1_pin,False)

io.output(motor1_in2_pin,True)

def motor2_forward():

io.output(motor2_in1_pin,True)

io.output(motor2_in2_pin,False)

def io.output(motor2_in1_pin,False)

io.output(motor2_in2_pin,True)

#此方法将打开/关闭灯用户

#按下特定键时关闭。然后它将更改灯的状态

#,以便在下次调用时知道是打开还是关闭灯。

def toggleLights():

全局lightStatus

if(lightStatus == False):

io.output(18,True)

io.output(23,True)

lightStatus = True

else:

io.output(18, False)

io.output(23,False)

lightStatus = False

#此方法将切换转向

#电机的方向。该方法将根据用户按下的键确定用户是否要

#向左或向右转,然后

#然后进行适当的调整。它可以用作toggle

#,因为程序无法同时读取

#上的多个按键。车轮的可能位置是#“右”,“中心”和“左”。然后它将更新轮子的

#状态以在下次调用它时进行访问。

def toggleSteering(direction):

global wheelStatus

if(direction ==“ right”):

if(wheelStatus ==“ centre”):

motor1_forward()

motor1.ChangeDutyCycle(99)

wheelStatus =“ right”

elif(wheelStatus ==“ left”):

motor1.ChangeDutyCycle(0)

wheelStatus =“中心”

if(方向==“左”):

if(wheelStatus ==“中心”):

motor1_reverse()

motor1 .ChangeDutyCycle(99)

wheelStatus =“左”

elif(wheelStatus ==“右”):

motor1.ChangeDutyCycle(0)

wheelStatus =“ centre”

#设置PWM固定为false,以便电动机在用户按下第一个键之前不会移动

#。io.output(电动机1_in1_pin,False)

io.output(电动机1_in2_pin,False)

io.output(电动机2_in1_pin ,False)

io.output(motor2_in2_pin,False)

#灯光和转向状态的全局变量

lightStatus = False

wheelStatus =“ centre” 《#》用户h作为界面

print(“ w/s:加速”)

print(“ a/d:转向”)

print(“ l:灯”)

print(“ x:退出” )

#无限循环直到用户按下

#退出键

而True时才结束:

#调用键盘字符检索方法并将其保存

#放入变量

= getch()

#按下“ w”键时汽车将向前行驶

if(char ==“ w”):

motor2_forward()

motor2.ChangeDutyCycle(99)

#按下“ s”键时汽车将倒车

if(char ==“ s”):

motor2_reverse()

motor2.ChangeDutyCycle(99)

#“ a “键将向左转向

if(char ==” a“):

toggleSteering(”左“)

#” d“键将向右转向

if(char = =“ d”):

toggleSteering(“ right”)

##“ l”键将打开/关闭LED灯

if(char ==“ l”):

toggleLights()

#“ x”键将中断循环并退出程序

if(char ==“ x”):

print(“ Program Ended”)

break

#在每个循环的结尾加速电机将停止

#等待其下一个命令

motor2.ChangeDutyCycle(0)

#键盘字符变量将设置为空白,准备好

#保存下一个按下的键

char =“”

#程序将在终止

io.cleanup()

之前停止所有GPIO活动,步骤6:测试和配置

要测试代码,您必须以超级用户身份运行它才能访问引脚。键入以下内容:

sudo python rc_car.py

按W和S键向前和向后移动汽车

按A和D键向左和向右切换转向

按L

在准备退出程序时按X键。

步骤7:焊接

现在是时候将零件焊接到原型板上以增加其耐用性,然后在过程中将板焊接到连接电池组和电机的汽车上。切记不要将任何引脚与焊料连接在一起,因为会交叉信号。最好对电线进行颜色编码以方便参考。

最终产品应与以下内容相似:

第8步:尽情享受您的新骇客RC汽车

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分