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