正文之前
由于最近忙于复习赶考, 所以暂时没有拿起树莓派小车, 直到昨天, 终于空出时间来把代码整理一下来和大家分享
正文
在树莓派小车系列之二中, 讲到了树莓派的引脚定义方式有两种:
- 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 左右), 以及传感器的安装位置在车的底部, 所以在车辆运动时, 如果遇到凹凸不平的物体, 有可能造成避障的延迟
运行视频
树莓派小车
遇到凹凸不平的物体有些许碰撞 (环境简陋)
关于树莓派信息的内容就先告一段落, 等我做出遥控器再来介绍, 谢谢大家的关注
来源: https://www.cnblogs.com/lihanxiang/p/8451818.html