Raspberry Pi HAT 是 Raspberry Pi 的附加板,尺寸與 Pi 相同。它可以直接安裝在 Raspberry Pi 的頂部,不需要任何進一步的連接。市場上有許多 Raspberry Pi HAT。在本教程中,我們將構(gòu)建一個Raspberry Pi 電機驅(qū)動器 HAT來驅(qū)動直流和步進電機。此電機驅(qū)動器 HAT 包含一個 L293D 電機驅(qū)動器 IC、16*2 LCD 顯示模塊、四個按鈕和用于 SIM800 模塊的額外引腳和一個 3.3V 穩(wěn)壓器。這個 Raspberry Pi HAT 將在構(gòu)建機器人項目時派上用場。
Raspberry Pi 電機驅(qū)動器 HAT 所需的組件
L293D集成電路
4 個按鈕
貼片電阻(1×10K、12×1K)
1×10K電位器
4× SMD LED
LM317 穩(wěn)壓器
2×螺絲端子
16*2液晶模組
L293D電機驅(qū)動IC
L293D 是一種流行的 16 引腳電機驅(qū)動器 IC。顧名思義,它用于控制單極、雙極步進電機、直流電機,甚至伺服電機。單個 L293D IC 可以同時驅(qū)動兩個直流電機。此外,這兩個電機的速度和方向可以獨立控制。該 IC 帶有兩個電源輸入引腳,即“Vcc1”和“Vcc2”。Vcc1 用于為內(nèi)部邏輯電路供電,應(yīng)為 5V,Vcc2 引腳用于為電機供電,可為 4.5V 至 36V。
L293D 規(guī)格:
電機電壓 Vcc2 (Vs):4.5V 至 36V
最大峰值電機電流:1.2A
最大持續(xù)電機電流:600mA
Vcc1(VSS) 的電源電壓:4.5V 至 7V
轉(zhuǎn)換時間:300ns(在 5V 和 24V 時)
自動熱關(guān)斷可用
Raspberry Pi 電機驅(qū)動器 HAT 的電路圖
下圖顯示了帶有 Raspberry Pi 的 L293D 電機驅(qū)動器的完整原理圖。原理圖是使用 EasyEDA 繪制的。
該 HAT 由 L293D 電機驅(qū)動 IC、16*2 LCD 顯示模塊和四個按鈕組成。我們還為帶有 3.3V 穩(wěn)壓器的 SIM800 模塊提供了引腳,該穩(wěn)壓器使用 LM317 可變穩(wěn)壓器設(shè)計用于未來的項目。Raspberry Pi 電機驅(qū)動器 HAT 將直接安裝在 Raspberry Pi 頂部,從而更容易使用 Raspberry Pi 控制機器人。
為 Raspberry Pi 電機驅(qū)動器 HAT 制造 PCB
原理圖完成后,我們可以繼續(xù)布置 PCB。您可以使用您選擇的任何 PCB 軟件來設(shè)計 PCB。我們已經(jīng)使用 EasyEDA 為這個項目制造 PCB。您可以通過從“層”窗口中選擇層來查看 PCB 的任何層(Top、Bottom、Topsilk、bottomsilk 等)。除此之外,還提供了 PCB 的 3D 模型視圖,了解它在制造后的外觀。下面是 Pi Motor Driver HAT PCB 頂層和底層的 3D 模型視圖。
組裝Raspberry Pi 電機驅(qū)動器 HAT PCB
幾天后,我們收到了整齊包裝的 PCB,PCB 質(zhì)量一如既往地好。板子的頂層和底層如下圖所示:
在確保軌道和腳印是正確的之后。我繼續(xù)組裝PCB。此處的圖像顯示了完全焊接的電路板的外觀。
樹莓派設(shè)置
在對 Raspberry Pi 進行編程之前,我們必須安裝所需的庫。為此,首先,使用以下命令更新 Raspberry Pi OS:
?
sudo apt-get 更新 sudo apt-get 升級
?
現(xiàn)在為 LCD 模塊安裝Adafruit_CharLCD 庫。該庫適用于 Adafruit LCD 板,但也適用于其他品牌的 LCD 板。
?
sudo pip3 安裝 Adafruit-CharLCD
?
樹莓派電機驅(qū)動代碼說明
在這個項目中,我們正在對 Raspberry Pi 進行編程,以在兩秒的時間間隔內(nèi)同時驅(qū)動正向、反向、向左和向右方向的兩個直流電機。電機的方向?qū)@示在 LCD 上。完整的代碼在文檔末尾給出。在這里,我們將解釋代碼的一些重要部分。
像往常一樣,通過導(dǎo)入所有必需的庫來啟動代碼。RPi.GPIO 模塊用于使用 Python 訪問 GPIO 引腳。模塊時間用于將程序暫停一段預(yù)定義的時間。
?
導(dǎo)入 RPi.GPIO 作為 GPIO 進口時間 進口板 導(dǎo)入 Adafruit_CharLCD 作為 LCD
?
之后,為 L293D 電機驅(qū)動器 IC 和 LCD 顯示器分配 GPIO 引腳。
?
液晶顯示器 = 0 液晶顯示器 = 5 lcd_d4 = 6 電機 1A = 4 電機 1B = 17 電機 1E = 12
?
現(xiàn)在,將 6 個電機引腳設(shè)置為輸出引腳。接下來的四個是輸出引腳,其中前兩個用于控制右側(cè)電機,接下來的兩個用于控制左側(cè)電機。接下來的兩個引腳是左右電機的啟用引腳。
?
GPIO.setup(Motor1A,GPIO.OUT) GPIO.setup(Motor1B,GPIO.OUT) GPIO.setup(Motor1E,GPIO.OUT) GPIO.setup(Motor2A,GPIO.OUT) GPIO.setup(Motor2B,GPIO.OUT) GPIO.setup(Motor2E,GPIO.OUT)
?
在 while 循環(huán)內(nèi),以兩秒的間隔同時向前、向后、向左和向右移動兩個直流電機。
?
GPIO.輸出(電機 1A,0) GPIO.輸出(電機 1B,0) GPIO.輸出(電機 2A,1) GPIO.輸出(Motor2B,0) lcd.message ('左') 打印(“左”) 睡覺(2) #向前 GPIO.輸出(電機 1A,1) GPIO.輸出(電機 1B,0) GPIO.輸出(電機 2A,1) GPIO.輸出(Motor2B,0) lcd.message ('轉(zhuǎn)發(fā)') 打?。ā稗D(zhuǎn)發(fā)”) …………………………………………
?
測試 Raspberry Pi 電機驅(qū)動器 HAT
完成 PCB 組裝后,將電機驅(qū)動器 HAT 安裝在 Raspberry Pi 上,然后啟動代碼。如果一切正常,連接到 Raspberry Pi 的直流電機將每兩秒同時向左、前、右和反向移動,電機方向?qū)@示在 LCD 顯示屏上。
導(dǎo)入 RPi.GPIO 作為 GPIO
從時間導(dǎo)入睡眠
進口板
導(dǎo)入 Adafruit_CharLCD 作為 LCD
# 樹莓派引腳設(shè)置
液晶顯示器 = 0
液晶顯示器 = 5
lcd_d4 = 6
lcd_d5 = 19
lcd_d6 = 26
液晶顯示器 = 21
液晶背光 = 2
#定義 16x2 LCD 的 LCD 列和行大小。
lcd_columns = 16
lcd_rows = 2
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)
# 電機驅(qū)動器輸入引腳
電機 1A = 4
電機 1B = 17
電機 1E = 12
電機 2A = 27
電機 2B = 22
電機 2E = 13
GPIO.setwarnings(假)
GPIO.setmode(GPIO.BCM)
GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)
GPIO.setup(Motor2A,GPIO.OUT)
GPIO.setup(Motor2B,GPIO.OUT)
GPIO.setup(Motor2E,GPIO.OUT)
GPIO.setup(14, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.輸出(電機 1E,1)
GPIO.輸出(Motor2E,1)
而真:
input_state = GPIO.input(14)
打?。ㄝ斎霠顟B(tài))
如果 input_state == False:
#剩下
GPIO.輸出(電機 1A,0)
GPIO.輸出(電機 1B,0)
GPIO.輸出(電機 2A,1)
GPIO.輸出(Motor2B,0)
lcd.clear()
lcd.set_cursor(6,0)
lcd.message ('左')
打印(“左”)
睡覺(2)
#向前
GPIO.輸出(電機 1A,1)
GPIO.輸出(電機 1B,0)
GPIO.輸出(電機 2A,1)
GPIO.輸出(Motor2B,0)
lcd.clear()
lcd.set_cursor(4,0)
lcd.message ('轉(zhuǎn)發(fā)')
打?。ā稗D(zhuǎn)發(fā)”)
睡覺(2)
#正確的
GPIO.輸出(電機 1A,1)
GPIO.輸出(電機 1B,0)
GPIO.輸出(Motor2A,0)
GPIO.輸出(Motor2B,0)
lcd.clear()
lcd.set_cursor(5,0)
lcd.message ('對')
打印(“右”)
睡覺(2)
#撤銷
GPIO.輸出(電機 1A,0)
GPIO.輸出(電機 1B,1)
GPIO.輸出(Motor2A,0)
GPIO.輸出(Motor2B,1)
lcd.clear()
lcd.set_cursor(4,0)
lcd.message ('反向')
打?。ā胺聪颉保?br />
睡覺 (2)
#停止
GPIO.輸出(電機 1A,0)
GPIO.輸出(電機 1B,0)
GPIO.輸出(Motor2A,0)
GPIO.輸出(Motor2B,0)
lcd.clear()
評論
查看更多