树莓派小车(三)Python控制小车

正文之前
由于最近忙于复习赶考,所以暂时没有拿起树莓派小车,直到昨天,终于空出时间来把代码整理一下来和大家分享。
正文
在树莓派小车系列之二中,讲到了树莓派的引脚定义方式有两种:
- 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控制小车的更多相关文章
- 在树莓派上用Python控制LED
所需材料 一个已经安装配置好了的树莓派 连接控制树莓派所用的其他必须设备 200Ω电阻 x 8 led x 8 面包板及连接线若干 电路连接 电路图 按照电路图所示,在面包板上进行连接. 编写程序 安 ...
- 制作Kinect体感控制小车教程 <一>
转载请注明出处:http://blog.csdn.net/lxk7280 Kinect体感控制小车 Kine ...
- 【OpenCV-ANN神经网络自动驾驶】树莓派OpenCV神经网络自动驾驶小车【源码+实物】
没错!这个是我的毕业设计!!! 整个电子信息学院唯一一个优秀毕业设计 拿到这里炫耀了 实物如下: 电脑端显示效果: 自动驾驶实现过程: 1. 收集图像数据.建立局域网,让主机和Raspberry Pi ...
- [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动
原文出处: https://blog.csdn.net/Forrest_Z/article/details/55002484 准备工作 1.下载串口通信的ROS包 (1)cd ~/catkin_ws/ ...
- Qt on android 蓝牙开发(控制小车)
因为要做一个用蓝牙控制小车的app,就用着QT搞了下,网上关于QT蓝牙开发的资料比较少,我在这里记录下过程希望对看到了人有所帮助 首先在项目文件里添加 QT += bluetooth 这样就可以用QT ...
- Arduino开发版学习计划--蓝牙控制小车行走
蓝牙模块一共6个引脚,我们一般只需要接4个线就可以了,分别是VCC.GND.TXD.RXD这四个引脚,我们分别接到arduino板子上,VCC接3.3V,GND接板子的GND,蓝牙TXD接板子的RXD ...
- 树莓派Zero W GPIO控制
作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0. 概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...
- 使用Python控制1602液晶屏实时显示时间(附PyCharm远程调试)
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文介绍一下UP板的GPIO资源使用,以及一个使用Python演示一个简单的demo. 本文使用Markdown写成,为获得更好的 ...
- stm32智能小车之路之小车启动
首先.安装完小车后最激动的还是想让他跑动,那么就開始吧.写个简单的程序測试下电机是否正常.打开keil软件新建一个project,详细简历keilproject不会的请百度.或者call ...
随机推荐
- OpenStack Horizon创建虚拟机时增加虚拟机OS用户
背景 通过OpenStack的Horizon使用镜像创建虚拟机(以Ubuntu为例),如果不知道镜像的用户名和密码,在创建好虚拟机之后,无法登录虚拟机的OS.因此,我们需要一种方法,创建虚拟机时增加用 ...
- virtualbox虚拟机NAT模式下不能连接外网
背景 给VirtualBox虚拟机(装载了Ubuntu16.04系统)配置了两张网卡,网络模式分别为"网络地址转换(NAT)"和"仅主机(Host-Only)适配器&qu ...
- [国嵌攻略][106][Linux内存管理子系统]
内存管理子系统 1.虚拟地址与物理地址的映射 2.物理内存的分配 Linux虚拟地址空间分布 设备最后访问的一定是物理地址,但Linux系统中使用的都是虚拟地址.虚拟地址简单的来说就是程序中使用的地址 ...
- Runtime之NSCoding的自动归档、接档
为什么要有Runtime的NSCoding的自动归档.接档 大家所熟知的方法 //归档方法 - (void)encodeWithCoder:(NSCoder *)aCoder { //当学生被归档,学 ...
- Hive_UDF函数中集合对象初始化的注意事项
UDF函数中定义的集合对象何时初始化 udf函数放在sql中对某个字段进行处理,那么在底层会创建一个该类的对象,这个对象不断的去调用这个evaluate(...)方法,截图如下: 1.1 如果说对 ...
- MLlib--决策树
转载请标明出处http://www.cnblogs.com/haozhengfei/p/d65ab6ccff684db729f44a947ac9e7da.html 决策树 1.什么是决策树 决策 ...
- SSL证书安装指引
https://cloud.tencent.com/document/product/400/4143 下载得到的 www.domain.com.zip 文件,解压获得3个文件夹,分别是Apache. ...
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
我们最初学习计算机的时候,都学过ASCII编码. 但是为了表示各种各样的语言,在计算机技术的发展过程中,逐渐出现了很多不同标准的编码格式, 重要的有Unicode.UTF.ISO-8859-1和中国人 ...
- java实现定时任务
Java中实现定时任务执行某一业务.具体操作如下: 1.定义初始化任务 2.任务业务操作 3.定义初始化方法 4.在web.xml中注册启动 5.定义具体执行时间
- 20170505 PHP实践中知识点
1.json_encode 不转义 2.empty() 与 isset() 区别 在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯 ...