制作樹莓派wifi遙控和自動避障小車

了解更多,請關(guān)注我的微信公眾號:mellong

<h1 id="1">寫在前面</h1>

前幾年買了樹莓派,當(dāng)時(shí)主要是想用來做客廳多媒體盒,不過實(shí)際使用下來有點(diǎn)卡,速度不盡人意。雖然后來換了class10的SD卡速度有點(diǎn)提升,但也很少拿去看電影了,多數(shù)時(shí)間是用來做下載機(jī)。

其實(shí)之前也有聽說可以做很多有趣的東西,我最感興趣就是做個(gè)遙控小車,一直有這個(gè)想法,就是沒有實(shí)際行動。最近在網(wǎng)上又看到類似的遙控車,突然間又來了興致,這次決心很大,立即就找了下資料,并且在淘寶上買了配件。趁著周末有時(shí)間,花了半天時(shí)間組裝好了,又花了半天改了程序支持自動避障,還做了個(gè)iPad/iPhone的手機(jī)端遙控app。自己又是擺道具又是錄視頻的,忙得不亦樂乎。廢話少說,現(xiàn)在進(jìn)入正題!

<h2 id="1.1">視頻效果</h2>

這是后來做的加了三路尋軌功能的視頻,后面文章會繼續(xù)介紹:

http://player.youku.com/player.php/sid/XMTI4Nzk0NjMyOA==/v.swf

<h1 id="2">需要的材料</h1>

  1. 樹莓派小車底盤,這個(gè)上淘寶一搜一大堆,我買的四驅(qū)的,有帶亞克力兩層車板。
  2. 三種杜邦線,每一種買十條就可以了,我當(dāng)時(shí)怕不夠用,每一種都買了20條。
  3. 移動電源,這個(gè)家里之前有一個(gè)飛毛腿的,要買雙usb輸出的。
  4. 樹莓派
  5. L298N電機(jī)驅(qū)動板模塊
  6. 紅外避障模塊和超聲波測距模塊,如果想做避障功能就需要買這個(gè)傳感器,買兩個(gè)(開始的時(shí)候不知道,我只買了一個(gè)紅外避障模塊...)。
  7. USB無線網(wǎng)卡

上面的花費(fèi)下來,不計(jì)樹莓派、USB無線網(wǎng)卡和移動電源,大概花了90元左右。

<h1 id="3">材料組裝</h1>

<h2 id="3.1">小車底盤</h2>
材料到手之后,先組裝車底盤,安裝說明書把第一層組裝好,馬達(dá)連線見下圖,線我是用杜邦線一分為二去接的。

image

注意走線是上下交叉連接。

<h2 id="3.2">與L298N驅(qū)動模塊連線</h2>

模塊兩邊有各有兩個(gè)out接口分布連接兩邊馬達(dá),四個(gè)IN接口連接樹莓派的四個(gè)GPIO接口,連上后記得自己連接的接口編號就可以,寫代碼的時(shí)候需要。

<h2 id="3.3">供電</h2>

我使用之前買的移動電源供電,自帶有兩個(gè)USB接口,一個(gè)接樹莓派,一個(gè)接L298N驅(qū)動模塊。也可以自己買電池盒進(jìn)行串聯(lián)供電。
接模塊的電源我使用usb線剪的,其中黑線是接地,紅線接VCC。

<h1 id="4">遙控程序</h1>

遙控主要是通過樹莓派的GPIO設(shè)置高低電平信號來控制小車前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止,具體可以參考代碼和下面GPIO的接口說明。值得注意的是,1對應(yīng)的樹莓派電路板背面焊錫為方形的針腳。

image

<h3 id="4.1">web版</h3>
web版可以直接使用王恒的版本:
https://github.com/wujiwh/piCar

主要修改自己接的GPIO接口和對應(yīng)的方向。

<h3 id="4.2">iOS版</h3>
簡單寫了iOS客戶端,服務(wù)端是用王恒的版本改的:
RaspiCar

<h3 id="4.3">自動避障版</h3>
由于只買了一個(gè)紅外避障模塊,于是只能單邊避障,這里是代碼:

#!/user/bin/env python
 
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(15,GPIO.OUT)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(7,GPIO.IN)

def t_stop():
    GPIO.output(11, False)
    GPIO.output(12, False)
    GPIO.output(15, False)
    GPIO.output(16, False)

def t_down():
    GPIO.output(11, True)
    GPIO.output(12, False)
    GPIO.output(15, True)
    GPIO.output(16, False)

def t_up():
    GPIO.output(11, False)
    GPIO.output(12, True)
    GPIO.output(15, False)
    GPIO.output(16, True)

def t_right():
    GPIO.output(11, False)
    GPIO.output(12, True)
    GPIO.output(15, True)
    GPIO.output(16, False)

def t_left():
    GPIO.output(11, True)
    GPIO.output(12, False)
    GPIO.output(15, False)
    GPIO.output(16, True)


while True:
    in_right= GPIO.input(7)
    if in_right == False:
        t_left()
    else:
        t_up()

<h1 id="5">最后</h1>

完成效果圖:

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容