了解更多,請關(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>
-
樹莓派小車底盤
,這個(gè)上淘寶一搜一大堆,我買的四驅(qū)的,有帶亞克力兩層車板。 -
三種杜邦線
,每一種買十條就可以了,我當(dāng)時(shí)怕不夠用,每一種都買了20條。 -
移動電源
,這個(gè)家里之前有一個(gè)飛毛腿的,要買雙usb輸出的。 樹莓派
L298N電機(jī)驅(qū)動板模塊
-
紅外避障模塊和超聲波測距模塊
,如果想做避障功能就需要買這個(gè)傳感器,買兩個(gè)(開始的時(shí)候不知道,我只買了一個(gè)紅外避障模塊...)。 USB無線網(wǎng)卡
上面的花費(fèi)下來,不計(jì)樹莓派、USB無線網(wǎng)卡和移動電源,大概花了90元左右。
<h1 id="3">材料組裝</h1>
<h2 id="3.1">小車底盤</h2>
材料到手之后,先組裝車底盤,安裝說明書把第一層組裝好,馬達(dá)連線見下圖,線我是用杜邦線一分為二去接的。
注意走線是上下交叉連接。
<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)的樹莓派電路板背面焊錫為方形的針腳。
<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>
完成效果圖: