本文是關(guān)于如何構(gòu)建我的 Pi Car 的指南!
當(dāng)我第一次發(fā)現(xiàn) Raspberry Pi 時(shí),我渴望學(xué)習(xí)電子學(xué)和編碼,以便創(chuàng)造出很酷的小工具。但是,由于沒(méi)有事先編碼或電子知識(shí),我真的不知道從哪里開(kāi)始。
所以這作為我的第一個(gè)項(xiàng)目,我決定建造一輛 Raspberry Pi Car。同時(shí),在嘗試學(xué)習(xí) Raspberry Pi、Linux、電子和 Python 的基礎(chǔ)知識(shí)的過(guò)程中!
閱讀本文可以幫助你了解在構(gòu)建自己的 Pi Car 時(shí)的一些具體細(xì)則。
最終目標(biāo):
構(gòu)建具有以下內(nèi)容的 Pi Car:
-4WD
- 半自主能力
-Camera Stream(可通過(guò) Internet 訪問(wèn))
實(shí)物:
建造 Pi 車:
1. 構(gòu)建機(jī)箱:
組裝底盤(pán)套件。這是相當(dāng)直截了當(dāng)?shù)模?qǐng)參閱下面的構(gòu)建前和構(gòu)建后圖片以獲取幫助。
重要提示:在將電機(jī)擰入到位之前(如下圖所示),將紅線和黑線連接到每個(gè)電機(jī)。紅線需要連接到每個(gè)電機(jī)的頂部,黑線也需要連接到底部。用絕緣膠帶將這些連接牢牢固定。 如果您想要永久連接,您可以焊接這些。最后, 記得取下每張塑料片上的棕色蓋子。
在我的 構(gòu)建中,我 將電池組移向底盤(pán)末端以創(chuàng)造更多空間(由下圖中的箭頭指示)。
2. 將電機(jī)連接到 L298N 電機(jī)驅(qū)動(dòng)器:
接下來(lái),我們將 4 個(gè)電機(jī)連接到電機(jī)驅(qū)動(dòng)器。
2.1 連接電線:
請(qǐng)參閱下面的圖片以識(shí)別哪個(gè)電機(jī)是哪個(gè)電機(jī),以及電機(jī)驅(qū)動(dòng)器的圖片以清楚地識(shí)別如何連接 4 個(gè)電機(jī)中的每一個(gè)。下面的列表還說(shuō)明了如何為每個(gè)電機(jī)接線。
左上電機(jī): 右上電機(jī):
紅色:輸出 2 紅色:輸出 4
黑色:輸出 1 黑色:輸出 3
左下電機(jī): 右下電機(jī):
紅色:輸出 1 紅色:輸出 3
黑色:輸出 2 黑色:輸出 4
重要提示:對(duì)于這個(gè)項(xiàng)目,我們將兩根電線連接到電機(jī)驅(qū)動(dòng)器上可用的每個(gè)“OUT”孔中。擰緊每個(gè)連接以確保電線不會(huì)移動(dòng)。這可能是一個(gè)相當(dāng)麻煩的過(guò)程,但請(qǐng)注意不要損壞電線。對(duì)于電纜管理,您可以將電線穿過(guò)機(jī)箱中內(nèi)置的許多小孔。
2.2 連接電池組:
要將電池組(已安裝在底盤(pán)上)連接到電機(jī)驅(qū)動(dòng)器,請(qǐng)按如下方式連接電線:
將紅線連接到 VCC 孔, 黑線連接到 GND 孔。
現(xiàn)在所有 4 個(gè)電機(jī)都連接到電機(jī)驅(qū)動(dòng)器,我們可以添加 Raspberry Pi 并將其連接到電機(jī)驅(qū)動(dòng)器。
3. 將樹(shù)莓派連接到 L298N 電機(jī)驅(qū)動(dòng)器
在添加我們的 Raspberry Pi 之前,我們需要按照以下步驟進(jìn)行準(zhǔn)備:
3.1 準(zhǔn)備樹(shù)莓派:
下載 Raspbian Jessie 操作系統(tǒng) (OS)
將 Raspbian 格式化并安裝到 SD 卡
將無(wú)線互聯(lián)網(wǎng)和無(wú)線鍵盤(pán) USB 適配器插入 Pi 的 USB 插槽
3.2 連接 L298N 電機(jī)驅(qū)動(dòng)器:
完成后,我們需要將其放置在 Pi-Car 的前面。(我可以用 Pi 外殼上的一些螺絲固定我的)接下來(lái)使用跳線將 Pi 的 GPIO 引腳連接到電機(jī)驅(qū)動(dòng)器。
如下所示連接引腳:
GPIO 引腳 2 至 5V(使用母對(duì)公跳線)
GPIO 引腳 6 到 GND(使用母對(duì)公跳線)
GPIO 引腳 7 到 INI4 (EVA)
GPIO 引腳 11 至 INI3 (5V)
GPIO 引腳 13 至 INI2 (5V)
GPIO 引腳 15 到 INI1 (EVB)
如需識(shí)別 Pi 的引腳,請(qǐng)參見(jiàn)下圖。
現(xiàn)在 Pi 已定位,我們需要添加超聲波傳感器。
4.添加HC-SR04超聲波測(cè)距傳感器模塊
如下圖所示,將傳感器模塊和電線連接到面包板上。確保包括 1ohm 電阻,因?yàn)檫@將保護(hù)您的 Pi。(請(qǐng)參閱下面的其他圖片,了解使用哪個(gè)電阻)
完成后,將面包板放置在汽車前部的底層。
4.1 將傳感器連接到 Pi:
將面包板上的電線連接到 Pi 和電機(jī)驅(qū)動(dòng)器,如下所示:
回聲電纜(上圖中的黃色電纜)到 Pi 上的引腳 16(使用母對(duì)公跳線)
觸發(fā)電纜(上圖中的橙色電纜)到 Pi 上的引腳 12 (使用母對(duì)公跳線)
接地電纜(上圖中的黑色電纜)到 電機(jī)驅(qū)動(dòng)器上的 GND(使用母對(duì)公跳線)
電源線(上圖中的紅色電纜)到電機(jī)驅(qū)動(dòng)器上的 5V(使用母對(duì)公跳線)
到這一步,你現(xiàn)在應(yīng)該已將所有必要的電纜插入電機(jī)驅(qū)動(dòng)器!1 條電纜進(jìn)入 VCC(來(lái)自電池組), 3 條電纜進(jìn)入 GND(1 條來(lái)自電池組、Raspberry Pi 和超聲波傳感器。)和 2 條進(jìn)入 5V 的電纜(1 條來(lái)自 Pi,1 條來(lái)自超聲波傳感器)
5. 將相機(jī)添加到 Pi:
- 相機(jī)本身的概述
-如何將相機(jī)模塊連接到樹(shù)莓派
-如何在 Pi 本身上啟用相機(jī)模塊
- 使用相機(jī)的基本命令(即如何拍照和錄像)
在我的構(gòu)建中,我使用了“ Scorpi / Flexible Mount” 電纜來(lái)幫助將相機(jī)固定到位。
6. 放置電源組:
將便攜式充電器放在機(jī)箱背面的底層。我使用松緊帶幫助在使用時(shí)將充電器臨時(shí)固定到位。
設(shè)置 Pi 車:
現(xiàn)在汽車已經(jīng)建成,我們現(xiàn)在可以為汽車開(kāi)發(fā)軟件。
1. 準(zhǔn)備樹(shù)莓派:
在打開(kāi) Pi 之前,請(qǐng)確保以下內(nèi)容已連接到 Pi :
- 無(wú)線鍵盤(pán) USB 適配器
- 無(wú)線互聯(lián)網(wǎng) USB 適配器
- 連接顯示器/電視的 HDMI 電纜。
- 相機(jī)也應(yīng)該連接。
2. 開(kāi)啟樹(shù)莓派:
要打開(kāi) Pi 電源,請(qǐng)將 micro-USB 電纜從電源連接到 Pi。 Pi 第一次啟動(dòng)需要幾分鐘時(shí)間。完成后,圖形用戶界面 (GUI) 將自動(dòng)加載。
3. 配置樹(shù)莓派:
我們需要做的第一件事是配置 Pi。為此,請(qǐng)單擊:
菜單(屏幕左上角)》首選項(xiàng)》Raspberry Pi 配置
將打開(kāi)以下窗口:
單擊“擴(kuò)展文件系統(tǒng)”以確保我們使用 SD 卡上的所有可用內(nèi)存。(隨時(shí)更改您的密碼等)
接下來(lái),單擊“接口”選項(xiàng)卡并啟用相機(jī)(確保 SHH 也已啟用。)
然后,單擊“本地化”選項(xiàng)卡并將語(yǔ)言和國(guó)家/地區(qū)設(shè)置為您的偏好。
單擊“確定”并重新啟動(dòng) Pi。
4. 連接互聯(lián)網(wǎng):
Pi重新啟動(dòng)后,單擊屏幕右上角的“網(wǎng)絡(luò)”圖標(biāo)。
從下拉菜單中選擇您的路由器并輸入其密碼。
5. 更新 Raspbian 操作系統(tǒng):
現(xiàn)在我們已連接到互聯(lián)網(wǎng),我們可以將我們的操作系統(tǒng)更新到最新版本。為此,請(qǐng)打開(kāi)“終端”并分別輸入以下代碼:
sudo apt-get update
sudo apt-get upgrade
(對(duì)于第二個(gè)命令,在提示時(shí)輸入 Y)
兩者都可能需要幾分鐘才能完成,完成后重新啟動(dòng)您的 Pi。
6.安裝VLC:
VLC 是我們將用于將 Raspberry Pi 相機(jī)流式傳輸?shù)?Internet 的應(yīng)用程序。我們需要將它安裝在您想要從中查看攝像頭流的 Pi 和計(jì)算機(jī)/智能手機(jī)上。
在 Pi 上:
在終端中輸入以下代碼:
sudo apt-get install vlc
(出現(xiàn)提示時(shí)輸入 Y)
訪問(wèn):http ://www.videolan.org/vlc/index.en_GB.html 并下載適合您操作系統(tǒng)的版本。(Windows/Mac/安卓)
7. 創(chuàng)建文件:
現(xiàn)在我們的 Pi 是最新的,我們擁有所有必需的應(yīng)用程序,可以創(chuàng)建實(shí)際駕駛汽車的代碼。
首先,我們將創(chuàng)建一個(gè)文件夾來(lái)存放我們的文件。為此,我們?cè)诮K端中輸入以下命令:
mkdir PiCar
這將創(chuàng)建一個(gè)名為“PiCar”的文件夾 - 您可以隨意命名。
現(xiàn)在文件夾已經(jīng)創(chuàng)建,我們需要通過(guò)輸入以下命令進(jìn)入它;
cd PiCar
現(xiàn)在我們需要?jiǎng)?chuàng)建實(shí)際駕駛汽車的 python 文件:
7.1 main.py - 這將是我們?yōu)轳{駛汽車而運(yùn)行的主文件
要?jiǎng)?chuàng)建一個(gè)空文件 ,請(qǐng)?jiān)诮K端中鍵入以下命令:
sudo nano main.py
這將在 Raspberry Pi 的文本編輯器中打開(kāi)一個(gè)新文件。(稱為納米)
現(xiàn)在將附加的main.py文件中的代碼復(fù)制或鍵入 到這個(gè)空文件中。
7.2 sensor.py - 該文件將初始化超聲波傳感器。
為 sensor.py 文件再次完成上述過(guò)程。請(qǐng)記住首先使用以下命令創(chuàng)建文件;
sudo nano sensor.py
(確保在我們創(chuàng)建的 PiCar 文件夾中創(chuàng)建它)
7.3 camera.sh - 此文件將通過(guò)互聯(lián)網(wǎng)傳輸我們的相機(jī)。
首先使用以下命令創(chuàng)建文件;
sudo nano camera.sh
現(xiàn)在將附加的 camera.sh 文件中的代碼復(fù)制或鍵入到這個(gè)空文件中。
運(yùn)行代碼:
1.給樹(shù)莓派上電(用HDMI線連接顯示器)
2.啟動(dòng)后,打開(kāi)終端
3. 將目錄更改為 PiCar(鍵入 cd PiCar)
4.運(yùn)行汽車文件(輸入‘sudo python main.py’)
5. PiCar現(xiàn)在可以通過(guò)無(wú)線鍵盤(pán)運(yùn)行和控制(開(kāi)車前記得拔掉HDMI線!)
以下鑰匙將駕駛汽車:
W = 前進(jìn)
S = 反向
A = 左轉(zhuǎn)
D = 右轉(zhuǎn)
P = 停止
Pi 也將是半自動(dòng)的,如果有任何東西進(jìn)入前傳感器的 15 厘米范圍內(nèi),那么 PiCar 將自動(dòng)倒車一秒鐘。
流式傳輸相機(jī)(可選):
在 Pi 上:
1.打開(kāi)終端
2. 將目錄更改為 PiCar(鍵入 cd PiCar)
3.運(yùn)行camera.sh(輸入。/camera.sh)
在客戶端計(jì)算機(jī)/智能手機(jī)上:
啟動(dòng) VLC
單擊“文件”,然后單擊“打開(kāi)網(wǎng)絡(luò)流”
輸入 http://《YourIPAddressHere》 :8554/
單擊“打開(kāi)”,幾秒鐘后,將打開(kāi)一個(gè)帶有流的新窗口。(可能會(huì)有幾秒鐘的延遲)
重要提示:要查找您的 IP 地址,請(qǐng)?jiān)诮K端中輸入以下命令:
hostname -I
未來(lái)可能的拓展:
讓main.py文件在啟動(dòng)時(shí)自動(dòng)運(yùn)行(所以我不需要將Pi插入顯示器超時(shí))
創(chuàng)建一個(gè) python 文件,它將執(zhí)行與我們的 camera.sh bash 腳本(使用 Picamera)相同的操作,并將其 合并到我們的main.py文件中。
添加額外的超聲波傳感器
python main文件:
import RPi.GPIO as gpio
import time
import sys
import Tkinter as tk
from sensor import distance
def init():
? ? gpio.setmode(gpio.BOARD)
? ? gpio.setup(7, gpio.OUT)
? ? gpio.setup(11, gpio.OUT)
? ? gpio.setup(13, gpio.OUT)
? ? gpio.setup(15, gpio.OUT)
def reverse(tf):
? ? gpio.output(7, False)
? ? gpio.output(11, True)
? ? gpio.output(13, False)
? ? gpio.output(15, True)
? ? time.sleep(tf)
? ??
def forward(tf):
? ? gpio.output(7, True)
? ? gpio.output(11, False)
? ? gpio.output(13, True)
? ? gpio.output(15, False)
? ? time.sleep(tf)
? ??
def turn_right(tf):
? ? gpio.output(7, True)
? ? gpio.output(11, False)
? ? gpio.output(13, False)
? ? gpio.output(15, True)
? ? time.sleep(tf)
? ??
def turn_left(tf):
? ? gpio.output(7, False)
? ? gpio.output(11, True)
? ? gpio.output(13, True)
? ? gpio.output(15, False)
? ? time.sleep(tf)
def stop(tf):
? ? gpio.output(7, False)
? ? gpio.output(11, False)
? ? gpio.output(13, False)
? ? gpio.output(15, False)
? ? time.sleep(tf)
? ? gpio.cleanup()
def key_input(event):
? ? init()
? ? print "Key:", event.char
? ? key_press = event.char
? ? sleep_time = 0.060
? ??
? ? if key_press.lower() == "w":
? ? ? ? forward(sleep_time)
? ? elif key_press.lower() == "s":
? ? ? ? reverse(sleep_time)
? ? elif key_press.lower() == "a":
? ? ? ? turn_left(sleep_time)
? ? elif key_press.lower() == "d":
? ? ? ? turn_right(sleep_time)
? ? elif key_press.lower() == "p":
? ? ? ? stop(sleep_time)?
? ? else:
? ? ? ? pass
? ? curDis = distance("cm")
? ? print("Distance:", curDis)
? ??
? ? if curDis <15:
? ? ? ? init()
? ? ? ? reverse(0.5)
command = tk.TK()
command.bind('
command.mainloop()
評(píng)論
查看更多