了解更多,請(qǐng)關(guān)注我的微信公眾號(hào):mellong
<h1 id="1">寫(xiě)在前面</h1>
前幾年買(mǎi)了樹(shù)莓派,當(dāng)時(shí)主要是想用來(lái)做客廳多媒體盒,不過(guò)實(shí)際使用下來(lái)有點(diǎn)卡,速度不盡人意。雖然后來(lái)?yè)Q了class10的SD卡速度有點(diǎn)提升,但也很少拿去看電影了,多數(shù)時(shí)間是用來(lái)做下載機(jī)。
其實(shí)之前也有聽(tīng)說(shuō)可以做很多有趣的東西,我最感興趣就是做個(gè)遙控小車(chē),一直有這個(gè)想法,就是沒(méi)有實(shí)際行動(dòng)。最近在網(wǎng)上又看到類(lèi)似的遙控車(chē),突然間又來(lái)了興致,這次決心很大,立即就找了下資料,并且在淘寶上買(mǎi)了配件。趁著周末有時(shí)間,花了半天時(shí)間組裝好了,又花了半天改了程序支持自動(dòng)避障,還做了個(gè)iPad/iPhone的手機(jī)端遙控app。自己又是擺道具又是錄視頻的,忙得不亦樂(lè)乎。廢話少說(shuō),現(xiàn)在進(jìn)入正題!
<h2 id="1.1">視頻效果</h2>
這是后來(lái)做的加了三路尋軌功能的視頻,后面文章會(huì)繼續(xù)介紹:
http://player.youku.com/player.php/sid/XMTI4Nzk0NjMyOA==/v.swf
<h1 id="2">需要的材料</h1>
-
樹(shù)莓派小車(chē)底盤(pán),這個(gè)上淘寶一搜一大堆,我買(mǎi)的四驅(qū)的,有帶亞克力兩層車(chē)板。 -
三種杜邦線,每一種買(mǎi)十條就可以了,我當(dāng)時(shí)怕不夠用,每一種都買(mǎi)了20條。 -
移動(dòng)電源,這個(gè)家里之前有一個(gè)飛毛腿的,要買(mǎi)雙usb輸出的。 樹(shù)莓派L298N電機(jī)驅(qū)動(dòng)板模塊-
紅外避障模塊和超聲波測(cè)距模塊,如果想做避障功能就需要買(mǎi)這個(gè)傳感器,買(mǎi)兩個(gè)(開(kāi)始的時(shí)候不知道,我只買(mǎi)了一個(gè)紅外避障模塊...)。 USB無(wú)線網(wǎng)卡
上面的花費(fèi)下來(lái),不計(jì)樹(shù)莓派、USB無(wú)線網(wǎng)卡和移動(dòng)電源,大概花了90元左右。
<h1 id="3">材料組裝</h1>
<h2 id="3.1">小車(chē)底盤(pán)</h2>
材料到手之后,先組裝車(chē)底盤(pán),安裝說(shuō)明書(shū)把第一層組裝好,馬達(dá)連線見(jiàn)下圖,線我是用杜邦線一分為二去接的。

注意走線是上下交叉連接。
<h2 id="3.2">與L298N驅(qū)動(dòng)模塊連線</h2>
模塊兩邊有各有兩個(gè)out接口分布連接兩邊馬達(dá),四個(gè)IN接口連接樹(shù)莓派的四個(gè)GPIO接口,連上后記得自己連接的接口編號(hào)就可以,寫(xiě)代碼的時(shí)候需要。
<h2 id="3.3">供電</h2>
我使用之前買(mǎi)的移動(dòng)電源供電,自帶有兩個(gè)USB接口,一個(gè)接樹(shù)莓派,一個(gè)接L298N驅(qū)動(dòng)模塊。也可以自己買(mǎi)電池盒進(jìn)行串聯(lián)供電。
接模塊的電源我使用usb線剪的,其中黑線是接地,紅線接VCC。
<h1 id="4">遙控程序</h1>
遙控主要是通過(guò)樹(shù)莓派的GPIO設(shè)置高低電平信號(hào)來(lái)控制小車(chē)前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止,具體可以參考代碼和下面GPIO的接口說(shuō)明。值得注意的是,1對(duì)應(yīng)的樹(shù)莓派電路板背面焊錫為方形的針腳。

<h3 id="4.1">web版</h3>
web版可以直接使用王恒的版本:
https://github.com/wujiwh/piCar
主要修改自己接的GPIO接口和對(duì)應(yīng)的方向。
<h3 id="4.2">iOS版</h3>
簡(jiǎn)單寫(xiě)了iOS客戶端,服務(wù)端是用王恒的版本改的:
RaspiCar
<h3 id="4.3">自動(dòng)避障版</h3>
由于只買(mǎi)了一個(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>
完成效果圖:
