日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

树莓派小车————循迹篇

發(fā)布時(shí)間:2024/3/26 编程问答 90 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派小车————循迹篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

所謂的循跡就是讓小車(chē)識(shí)別導(dǎo)引線,跟著導(dǎo)引線運(yùn)行,在導(dǎo)引線組成的賽道上運(yùn)行。循跡可以用紅外傳感器或者攝像頭完成。我選擇的是用紅外傳感器進(jìn)行黑線循跡。

  • 該部分主要涉及到的硬件:兩個(gè)紅外循跡傳感器(型號(hào)見(jiàn)準(zhǔn)備篇)、樹(shù)莓派。
  • 額外材料:準(zhǔn)備點(diǎn)黑色電工膠布,制作一個(gè)跑道。
  • 兩個(gè)紅外傳感器循跡缺點(diǎn):無(wú)法完成對(duì)十字路線的正確識(shí)別。(如果你想讓它可以識(shí)別十字路線,需要三個(gè)傳感器,具體實(shí)現(xiàn)可以搜索)。下面我講解兩路循跡如何實(shí)現(xiàn)。
  • 電路連接:
    如果你用的循跡傳感器和準(zhǔn)備篇的中的一樣,它共有四個(gè)引腳,分別是VCC、GND、A0、D0。其中A0和D0分別代碼模擬信號(hào)和數(shù)字信號(hào),這里我們選擇連接D0引腳,因?yàn)槲覀兘o的是數(shù)字信號(hào),0或1也就是False和True。傳感器不需要特別的供電電源,和樹(shù)莓派連接即可。電路連接圖如下:

    從上圖中可以看到,兩個(gè)傳感器的VCC分別接了樹(shù)莓派的2號(hào)和4號(hào)引腳,這兩個(gè)都是+5V引腳。兩個(gè)傳感器的GND都接了樹(shù)莓派的30號(hào)引腳(GND引腳),D0分別接了29和31號(hào)引腳(GPIO口)。當(dāng)然還是一樣,所有的引腳接線都不是固定的,你可以自己設(shè)計(jì)。
  • 循跡原理:
    紅外循跡傳感器有兩個(gè)指示燈,當(dāng)檢測(cè)到黑色時(shí),只有一個(gè)燈亮,此時(shí)為T(mén)rue。反之為False。所以我們可通過(guò)兩個(gè)傳感器的信號(hào)來(lái)處理小車(chē)如何轉(zhuǎn)向,進(jìn)而調(diào)整車(chē)身位置,保持跟著導(dǎo)引線行駛。循跡原理圖:
  • 設(shè)計(jì)重點(diǎn)
    在起初的設(shè)計(jì)中我有些“耿直”,看了資料后,直接開(kāi)始設(shè)計(jì)賽道,兩個(gè)傳感器也是直接安在了小車(chē)前方,間距差不多和黑色電工膠布一樣寬。當(dāng)我一切都準(zhǔn)備好了,代碼跑起來(lái)后人傻了,一到彎道怎么就沖出賽道了,肯定小車(chē)太快,我將速度設(shè)計(jì)到最低,還是一樣。就這樣兩天都沒(méi)想明白該怎么解決。最后我就開(kāi)始慢慢在賽道上試,我開(kāi)始加寬彎道處的賽道,結(jié)果還是一樣。
    最后我在不斷嘗試的過(guò)程中突然醒悟過(guò)來(lái),小車(chē)在賽道直線部分沖的太快了,根本就不能讓它做太久的前進(jìn)動(dòng)作,直接讓它一開(kāi)始就左轉(zhuǎn)或者右轉(zhuǎn)來(lái)調(diào)整自身,不就可以慢下來(lái)了,之后我便將兩個(gè)傳感器之間的距離調(diào)整到比黑色賽道略寬一點(diǎn),也就是保證兩個(gè)傳感器一個(gè)可以檢測(cè)到黑線,另一個(gè)檢測(cè)不到黑線。調(diào)整到合適的距離之后,小車(chē)便可以完成循跡功能了。(可能你光看是體會(huì)不到的,所以要?jiǎng)邮肿约簻y(cè)試,你就明白其中的“奧妙”了)
  • 代碼(程序中將之前基本運(yùn)動(dòng)的代碼省略了,你在運(yùn)行代碼時(shí)。需要將其補(bǔ)上,這里只展示循跡相關(guān)的代碼):
#coding=utf-8 import RPi.GPIO as GPIO import time #定義紅外循跡傳感器GPIO口 LSenso=29 RSenso=31 def init():#設(shè)置接觸警告GPIO.setwarnings(False)#設(shè)置引腳模式為物理模式GPIO.setmode(GPIO.BOARD)#紅外循跡傳感器引腳初始化,設(shè)置為輸入,接受紅外信號(hào)GPIO.setup(LSenso,GPIO.IN)GPIO.setup(RSenso,GPIO.IN)#紅外循跡函數(shù) def track():while True:#接收兩個(gè)紅外傳感器的信號(hào)LS=GPIO.input(LSenso)RS=GPIO.input(RSenso)#左右兩個(gè)傳感器都檢測(cè)到黑色,小車(chē)在賽道上,前進(jìn)if LS==True and RS==True:print "前進(jìn)"turn_up(16,0.1)#左邊的傳感器沒(méi)檢測(cè)到黑色,說(shuō)明小車(chē)車(chē)身偏離賽道靠左,右轉(zhuǎn)將小車(chē)車(chē)身向右調(diào)整elif LS==False and RS==True:print "右轉(zhuǎn)"turn_right(18,0.1)#右邊的傳感器沒(méi)檢測(cè)到黑色,說(shuō)明小車(chē)車(chē)身偏離賽道靠右,左轉(zhuǎn)將小車(chē)車(chē)身向左調(diào)整elif LS==True and RS==False:print "左轉(zhuǎn)"turn_left(18,0.1)#兩個(gè)傳感器都沒(méi)有檢測(cè)到黑色,說(shuō)明小車(chē)完全偏離賽道,停止else:print "停止"car_stop() #主函數(shù) if __name__=="__main__":init()L_Motor=GPIO.PWM(PWMA,100)L_Motor.start(0)R_Motor=GPIO.PWM(PWMB,100)R_Motor.start(0)try:track() #調(diào)用循跡函數(shù)except KeyboardInterrupt: #Ctrl+C 程序停止GPIO.cleanup() #清除GPIO占用

總結(jié)

以上是生活随笔為你收集整理的树莓派小车————循迹篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。