正文之前
由于最近忙于復(fù)習(xí)趕考报嵌,所以暫時沒有拿起樹莓派小車,直到昨天否彩,終于空出時間來把代碼整理一下來和大家分享宏多。
正文
在樹莓派小車系列之二中儿惫,講到了樹莓派的引腳定義方式有兩種:
- PHYSICAL NUMBERING
- GPIO NUMBERING
我采用的是第二種方式。
開始寫
1. 導(dǎo)入庫
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為紅外線模塊接入肾请。
車輪驅(qū)動方式:
IN1和IN2負(fù)責(zé)驅(qū)動車輪轉(zhuǎn)動(前進(jìn))。
IN3和IN4負(fù)責(zé)驅(qū)動車輪轉(zhuǎn)動(后退)更胖。
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的接口設(shè)為輸出铛铁,因?yàn)樾枰敵龅男盘杹眚?qū)動電機(jī)。
連接紅外線模塊的接口為輸入却妨,因?yàn)樾枰斎氲男盘杹碜龀雠袛唷?/p>
4. 基礎(chǔ)方向行為
def up():
GPIO.output(IN1, GPIO.HIGH) //右側(cè)車輪前進(jìn)
GPIO.output(IN2, GPIO.HIGH) //左側(cè)車輪前進(jìn)
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) //右側(cè)車輪后退
GPIO.output(IN4, GPIO.HIGH) //左側(cè)車輪后退
def turn_left():
GPIO.output(IN1, GPIO.HIGH) //右側(cè)車輪前進(jìn)
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) //左側(cè)車輪前進(jìn)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.LOW)
需要說明的是:由于不含舵機(jī)饵逐,轉(zhuǎn)彎的操作是單邊車輪驅(qū)動,帶動車身轉(zhuǎn)動
5. 紅外控制
init()
n = 5
while (n > 0): //總共轉(zhuǎn)彎五次
in_left = GPIO.input(IN5) //左側(cè)紅外線接收器
in_right = GPIO.input(IN6) //右側(cè)紅外線接收器
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() //如果兩側(cè)都有障礙彪标,就右轉(zhuǎn)(個人喜好)
time.sleep(1)
n = n - 1
continue
stop()
GPIO.cleanup() //清空GPIO接口配置信息
如果前方遇到障礙倍权,就后退一秒,然后轉(zhuǎn)彎捐下,最后繼續(xù)直行账锹,直到遇到下一個障礙萌业。
需要說明的是time.sleep()的用法:
time.sleep(time) 表示的是經(jīng)過 time 秒后執(zhí)行下一步操作坷襟,就是休眠一段時間的意思。
如果不使用time.sleep()生年,將會一直執(zhí)行第一步操作婴程。
關(guān)于運(yùn)行:
- 由于紅外傳感器的有效距離偏短(5cm左右),以及傳感器的安裝位置在車的底部抱婉,所以在車輛運(yùn)動時档叔,如果遇到凹凸不平的物體,有可能造成避障的延遲蒸绩。
運(yùn)行視頻
遇到凹凸不平的物體有些許碰撞(環(huán)境簡陋)
關(guān)于樹莓派信息的內(nèi)容就先告一段落衙四,等我做出安卓遙控app再來介紹,謝謝大家的關(guān)注患亿。