正文之前

由于最近忙于复习赶考,所以暂时没有拿起树莓派小车,直到昨天,终于空出时间来把代码整理一下来和大家分享。


正文

树莓派小车系列之二中,讲到了树莓派的引脚定义方式有两种:

  • PHYSICAL NUMBERING
  • GPIO NUMBERING

我采用的是第二种方式。

开始写

1. 导入库
import RPi.GPIO as GPIO
import time
2. 定义接口方式以及接口位置
GPIO.setmode(GPIO.BCM)
IN1 = 17
IN2 = 18
IN3 = 27
IN4 = 22
IN5 = 23
IN6 = 24

IN1 - IN4为L298N接入,IN5和IN6为红外线模块接入。

车轮驱动方式:

IN1和IN2负责驱动车轮转动(前进)。

IN3和IN4负责驱动车轮转动(后退)。

3. 初始化
def init():
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
GPIO.setup(IN3, GPIO.OUT)
GPIO.setup(IN4, GPIO.OUT)
GPIO.setup(IN5, GPIO.IN)
GPIO.setup(IN6, GPIO.IN)

连接L298N的接口设为输出,因为需要输出的信号来驱动电机。

连接红外线模块的接口为输入,因为需要输入的信号来做出判断。

4. 基础方向行为
def up():
GPIO.output(IN1, GPIO.HIGH) //右侧车轮前进
GPIO.output(IN2, GPIO.HIGH) //左侧车轮前进
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.LOW) def down():
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.HIGH) //右侧车轮后退
GPIO.output(IN4, GPIO.HIGH) //左侧车轮后退 def turn_left():
GPIO.output(IN1, GPIO.HIGH) //右侧车轮前进
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.LOW) def turn_right():
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.HIGH) //左侧车轮前进
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.LOW)

需要说明的是:由于不含舵机,转弯的操作是单边车轮驱动,带动车身转动

5. 红外控制
init()

n = 5

while (n > 0):                                  //总共转弯五次
in_left = GPIO.input(IN5) //左侧红外线接收器
in_right = GPIO.input(IN6) //右侧红外线接收器
up() //未遇到障碍时直行
if (in_left == GPIO.LOW):
down()
time.sleep(1)
turn_right()
time.sleep(1)
n = n - 1
continue if (in_right == GPIO.LOW):
down()
time.sleep(1)
turn_left()
time.sleep(1)
n = n - 1
continue if (in_right == GPIO.LOW & in_left == GPIO.LOW):
down()
time.sleep(1)
turn_right() //如果两侧都有障碍,就右转(个人喜好)
time.sleep(1)
n = n - 1
continue stop()
GPIO.cleanup() //清空GPIO接口配置信息

如果前方遇到障碍,就后退一秒,然后转弯,最后继续直行,直到遇到下一个障碍。

需要说明的是time.sleep()的用法:

time.sleep(time) 表示的是经过 time 秒后执行下一步操作,就是休眠一段时间的意思。

如果不使用time.sleep(),将会一直执行第一步操作。

关于运行:

  • 由于红外传感器的有效距离偏短(5cm左右),以及传感器的安装位置在车的底部,所以在车辆运动时,如果遇到凹凸不平的物体,有可能造成避障的延迟。

运行视频

树莓派小车

遇到凹凸不平的物体有些许碰撞(环境简陋)

关于树莓派信息的内容就先告一段落,等我做出遥控器再来介绍,谢谢大家的关注。

树莓派小车(三)Python控制小车的更多相关文章

  1. 在树莓派上用Python控制LED

    所需材料 一个已经安装配置好了的树莓派 连接控制树莓派所用的其他必须设备 200Ω电阻 x 8 led x 8 面包板及连接线若干 电路连接 电路图 按照电路图所示,在面包板上进行连接. 编写程序 安 ...

  2. 制作Kinect体感控制小车教程 <一>

    转载请注明出处:http://blog.csdn.net/lxk7280                                        Kinect体感控制小车        Kine ...

  3. 【OpenCV-ANN神经网络自动驾驶】树莓派OpenCV神经网络自动驾驶小车【源码+实物】

    没错!这个是我的毕业设计!!! 整个电子信息学院唯一一个优秀毕业设计 拿到这里炫耀了 实物如下: 电脑端显示效果: 自动驾驶实现过程: 1. 收集图像数据.建立局域网,让主机和Raspberry Pi ...

  4. [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动

    原文出处: https://blog.csdn.net/Forrest_Z/article/details/55002484 准备工作 1.下载串口通信的ROS包 (1)cd ~/catkin_ws/ ...

  5. Qt on android 蓝牙开发(控制小车)

    因为要做一个用蓝牙控制小车的app,就用着QT搞了下,网上关于QT蓝牙开发的资料比较少,我在这里记录下过程希望对看到了人有所帮助 首先在项目文件里添加 QT += bluetooth 这样就可以用QT ...

  6. Arduino开发版学习计划--蓝牙控制小车行走

    蓝牙模块一共6个引脚,我们一般只需要接4个线就可以了,分别是VCC.GND.TXD.RXD这四个引脚,我们分别接到arduino板子上,VCC接3.3V,GND接板子的GND,蓝牙TXD接板子的RXD ...

  7. 树莓派Zero W GPIO控制

    作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0.  概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...

  8. 使用Python控制1602液晶屏实时显示时间(附PyCharm远程调试)

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文介绍一下UP板的GPIO资源使用,以及一个使用Python演示一个简单的demo. 本文使用Markdown写成,为获得更好的 ...

  9. stm32智能小车之路之小车启动

           首先.安装完小车后最激动的还是想让他跑动,那么就開始吧.写个简单的程序測试下电机是否正常.打开keil软件新建一个project,详细简历keilproject不会的请百度.或者call ...

随机推荐

  1. 【C#附源码】数据库文档生成工具支持(Excel+Htm)

    数据库文档生成工具是用C#开发的基于NPOI组件的小工具.软件源码大小不到10MB.支持生成Excel 和Html 两种文档形式.了解更多,请访问:http://www.oschina.net/cod ...

  2. java常量池詳解

    一.相关概念 什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Class文件中的常量池在Clas ...

  3. SSL和SSH有什么区别

    SSL 是一种安全协议,它为网络(例如因特网)的通信提供私密性.SSL 使应用程序在通信时不用担心被窃听和篡改. SSL 实际上 是共同工作的两个协议:"SSL 记录协议"(SSL ...

  4. nginx版本如何选择?

    生产环境使用Stable version:最新稳定版,现在最新的版本是nginx-1.8.1 注意各版本的区别:Nginx官网提供了三个类型的版本 1.Mainline version:Mainlin ...

  5. CUDA与OpenGL互操作

    当处理较大数据量的时候,往往会用GPU进行运算,比如OpenGL或者CUDA.在实际的操作中,往往CUDA实现并行计算会比OpenGL更加方便,而OpenGL在进行后期渲染更具有优势.由于CUDA中的 ...

  6. 从(0,0)到(m,n),每次走一步,只能向上或者向右走,有多少种路径走到(m,n)

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  7. Redis进阶实践之七Redis和Lua初步整合使用

    一.引言        Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当 ...

  8. tone() 和 IRremote 冲突的解决办法

    tone()函数冲突 http://www.geek-workshop.com/thread-4037-1-1.html 可以自制函数newtone() void newtone(byte toneP ...

  9. Python使用requests模块访问HTTPS网站报错`certificate verify failed`

    使用requests模块访问HTTPS网站报错: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Nam ...

  10. java1.8--改进的接口

    关于接口,每天的编码都在写,就不多说了.这里对比下接口,抽象类,类3者的关系: 1),接口是一种规范,就是告诉外界这个东东可以做什么. 2),抽象类是一种模板,就是告诉外界这个东西的一部分公共功能. ...