0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:网络整理 作者:网络整理 2019-11-15 16:50 次阅读

步骤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,termiostime

#这两个代码块为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

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

    关注

    4

    文章

    843

    浏览量

    39002
  • 遥控车
    +关注

    关注

    9

    文章

    81

    浏览量

    23441
  • 树莓派
    +关注

    关注

    113

    文章

    1639

    浏览量

    104731
收藏 人收藏

    评论

    相关推荐

    怎样用ADAU1761设计DRC的压缩/扩展?

    请问怎样用ADAU1761设计DRC的压缩/扩展。我在SigmaStudio 4.5的模块中只找到RMS。如果ADAU1761设计DRC要怎样
    发表于 11-28 06:41

    树莓都有哪些功能,是什么编程的?

    怎么学习树莓树莓和传统单片机的区别是哪些,如果有了树莓该学哪些知识
    发表于 11-09 07:51

    怎样用32单片机测电压?

    怎样用32单片机测电压
    发表于 10-31 07:09

    如何用树莓学习Linux内核源码?

    怎么树莓学习Linux内核源码?​
    发表于 10-20 07:09

    怎样用单片机IO口来控制三极管的开关特性使共阳极的LED点亮?

    怎样用单片机IO口来控制三极管的开关特性使共阳极的LED点亮
    发表于 10-15 06:02

    树莓Python编程指南分享

    树莓python编程指南
    发表于 10-07 08:43

    树莓传感器教程

    树莓传感器教程
    发表于 10-07 07:13

    树莓的15个应用

    树莓15个应用
    发表于 10-07 06:42

    Arduino的各种传感器树莓也可以吗?

    Arduino的各种传感器,树莓也可以么?
    发表于 09-28 08:13

    树莓3树莓4原理图分享

    提供了树莓3、树莓3B、树莓4版本的原理图
    发表于 09-27 07:58

    PLC中怎样用X和Y两个轴走出直线轨迹?

    PLC中怎样用X和Y两个轴走出直线轨迹呢?那么这两个轴需要配合成速度成线性比例,位置和速度应该如何云运算呢?
    发表于 09-12 09:58 371次阅读
    PLC中<b class='flag-5'>怎样用</b>X和Y两个轴走出直线轨迹?

    虹科新品 | 工业树莓RevPi Connect 4大揭秘!快来看看有什么亮点吧~#树莓 #工业控制

    工业控制树莓
    虹科工业物联网技术
    发布于 :2023年08月07日 14:57:49

    怎样用示波器测试lin总线的波特率呢?

    怎样用示波器测试lin总线的波特率呢?有什么方法吗?
    发表于 05-09 11:22

    怎样用FPGA实现FSK调制解调呢?

    最近想做这方面的,怎样用FPGA实现FSK调制解调?但是我一点头绪都没有,哪位高手帮帮忙,讲解一下什么的
    发表于 05-08 17:34

    树莓的故障分析检测

    各位大神,我的树莓B4,经常读不出卡数据,卡换个新的,故障依旧。请指点树莓的故障检查与维修。
    发表于 04-27 11:30