在學習Arduino的時候,一直想要組一部智能小車,可以透過藍牙或紅外線遙控,可是礙於車體壓克力版、車輪等問題,想要自己製作,又沒有工具及材料,一直遲遲無法完成。一個多月前在逛光華商場時,看到智能小車的車體套件,包括四個馬達含輪子及一個壓克力版車體,價格有貴一點點,還是買了,想說之前購買的L298N電機馬達驅動模組及電池盒,應該就可以組合起來讓小車行走。在組合之前還是要改裝一下,主要是我買的L298N只能控制兩組馬達,因此將前面兩個輪子改裝成可360度旋轉的單輪,這個材料是在Homebox買的。
過程中為了讓車子的能離開電源插座,特別外接一個小的行動電源,增加車輛的移動性。同時也使用USB無線網路,才能透過遠端登入的方式,使用鍵盤控制車輛的前進、倒退與左右方向。以下就來看看我是怎麼做的:
基礎知識:L298N機電馬達驅動模組
L298N採用15腳封裝。主要特點是:工作電壓高,最高工作電壓可達46V;輸出電流大,瞬間峰值電流可達3A,持續工作電流為2A;額定功率25W。內含兩個H橋的高電壓大電流全橋式驅動器,可以用來驅動直流電動機和步進電動機、繼電器線圈等感性負載。
使用L298N驅動電機,可以驅動一台兩相馬達或四相馬達,也可以驅動兩台直流馬達。
這個L298N模組提供5V供電。當+12V輸入電壓為7V-35V時,可以提供供電給 Raspberry Pi的主機板使用。如果+12V電壓輸入7V以下,僅適合用作推動馬達的電壓,Pi主機板的電源,建議另外提供電源使用。
這個模組有2路H橋驅動,可同時驅動兩個馬達,接法如下圖:
Enable A短路連接器連接時可控制IN1、IN2,Enable B可控制IN3、IN4,其意義代表控制馬達轉動的方向。舉例來說,當IN1為高電位,IN2低電位時,通知馬達正轉,如果要反轉時,則讓IN2為高電位,IN1低電位,馬達則會向反方向轉動。如下表:
• 智能車壓克力板 x1
• 差速馬達 x2
• 360度迴轉軸輪 x1
• L298N電機馬達驅動模組 x 1
• 6V(1.5V x 4)電池盒 x 1個
• 連接線 x 6條
• 行動電源 x 1
• 電池盒的負極(黑色)接 L298N 接地GND,正極(紅色)接 L298N +12V電源輸入
• Raspberry Pi pin2(+5V)接到L298N +5V電源輸入,pin6(GND)接到L298N GND接地
• Raspberry Pi pin11(GPIO 17)、pin12(GPIO18)、pin15(GPIO 22)、pin16(GPIO23)分別接到IN1~IN4
程式中有個比較特別的地方是我用迴圈並偵測是否按了鍵盤按鍵(不需按Enter)的一個函數getkey(),需要 import curses,也必須設定 stdscr = curses.initscr(),才能透過getey取得鍵盤按鍵。鍵盤控制方式如下:
• q 結束程式
• w 前進
• x 後退
• d 向右轉
• a 向左轉
接下來還有些控制智能小車的想法,例如加裝避免碰撞的感應器讓小車自動轉彎、使用網頁操控小車、透過藍牙控制等方法,等有空時,再慢慢來實驗。
過程中為了讓車子的能離開電源插座,特別外接一個小的行動電源,增加車輛的移動性。同時也使用USB無線網路,才能透過遠端登入的方式,使用鍵盤控制車輛的前進、倒退與左右方向。以下就來看看我是怎麼做的:
基礎知識:L298N機電馬達驅動模組
L298N採用15腳封裝。主要特點是:工作電壓高,最高工作電壓可達46V;輸出電流大,瞬間峰值電流可達3A,持續工作電流為2A;額定功率25W。內含兩個H橋的高電壓大電流全橋式驅動器,可以用來驅動直流電動機和步進電動機、繼電器線圈等感性負載。
使用L298N驅動電機,可以驅動一台兩相馬達或四相馬達,也可以驅動兩台直流馬達。
這個L298N模組提供5V供電。當+12V輸入電壓為7V-35V時,可以提供供電給 Raspberry Pi的主機板使用。如果+12V電壓輸入7V以下,僅適合用作推動馬達的電壓,Pi主機板的電源,建議另外提供電源使用。
這個模組有2路H橋驅動,可同時驅動兩個馬達,接法如下圖:
[材料]
• Raspberry Pi 主板 x 1• 智能車壓克力板 x1
• 差速馬達 x2
• 360度迴轉軸輪 x1
• L298N電機馬達驅動模組 x 1
• 6V(1.5V x 4)電池盒 x 1個
• 連接線 x 6條
• 行動電源 x 1
[線路連接與電路圖]
• L298N 兩側兩條線路分別接到左右兩邊的馬達• 電池盒的負極(黑色)接 L298N 接地GND,正極(紅色)接 L298N +12V電源輸入
• Raspberry Pi pin2(+5V)接到L298N +5V電源輸入,pin6(GND)接到L298N GND接地
• Raspberry Pi pin11(GPIO 17)、pin12(GPIO18)、pin15(GPIO 22)、pin16(GPIO23)分別接到IN1~IN4
程式中有個比較特別的地方是我用迴圈並偵測是否按了鍵盤按鍵(不需按Enter)的一個函數getkey(),需要 import curses,也必須設定 stdscr = curses.initscr(),才能透過getey取得鍵盤按鍵。鍵盤控制方式如下:
• q 結束程式
• w 前進
• x 後退
• d 向右轉
• a 向左轉
[程式碼]
import RPi.GPIO as GPIO
import curses
import time
from curses import wrapper
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
stdscr = curses.initscr()
stdscr.clear()
while True:
ch = stdscr.getkey()
# Quit
if ch == 'q':
curses.endwin()
GPIO.output(17, False)
GPIO.output(18, False)
GPIO.output(22, False)
GPIO.output(23, False)
break
# Forward
if ch == 'w':
GPIO.output(17, False)
GPIO.output(18, True)
GPIO.output(22, False)
GPIO.output(23, True)
# Backward
if ch == 'x':
GPIO.output(17, True)
GPIO.output(18, False)
GPIO.output(22, True)
GPIO.output(23, False)
# Turn Right
if ch == 'd':
GPIO.output(17, False)
GPIO.output(18, True)
GPIO.output(22, False)
GPIO.output(23, False)
# Turn Left
if ch == 'a':
GPIO.output(17, False)
GPIO.output(18, False)
GPIO.output(22, False)
GPIO.output(23, True)
[執行結果]
接下來還有些控制智能小車的想法,例如加裝避免碰撞的感應器讓小車自動轉彎、使用網頁操控小車、透過藍牙控制等方法,等有空時,再慢慢來實驗。
你好請教您一下 抱歉我問題比較多 因為很感興趣 ARDUINO 能做出這樣東西嗎 這程式開發環境是ARDUION嗎 程式RUN出來有介面操控 還是直接按鍵盤即可~ 麻煩大大了
回覆刪除Arduino如果要用無線網路有些困難, 主要是Arduino要能支援USB無線網卡, 目前常見的Arduino R3是沒有支援USB介面, 如果外接擴展版, 還有看有沒有支援網卡驅動程式. 不過, 有一個新的Arduino 主機板, 名字叫做YUN(雲), 是一塊在台灣設計的Arduino, 內建WIFI功能, 應該就可以做到類似這篇文章的馬達控制, 只是要改成C語言。如想瞭解YUN相關資訊,可參考:http://arduino.cc/en/Main/ArduinoBoardYun#.UynIciYVHIU
刪除上述程式我沒有寫介面, 透過SSH連進去後, 執行程式, 畫面只剩下游標閃爍, 直接按鍵盤進行控制.
如有相關問題, 歡迎一起討論. 謝謝您的提問!!
您好,請教,我依您所提供的程式碼,執行到ch = stdscr.getkey(),
回覆刪除結果顯示error: no input,請問我的問題出錯在那,謝謝
可能出在行數的對齊,程式內有一個While迴圈,出現的錯誤好像是getkey()執行一次就結束了,您可以將程式對齊縮排,再看看執行是否有問題。
刪除謝謝問題我解決了,,謝謝
刪除請問一下後來怎麼解決的,調了好久還是顯示no input
刪除Ceiling老師您好
回覆刪除我想請教一些問題
L298N電機馬達驅動模組
三個接腳(+12V GND +5V)
+12V是供應給兩個直流馬達的嗎??
而+5V是驅動模組上的晶片嗎?
另外是馬達速度的問題
請問是不是電壓越大馬達轉速越快呢??
我是使用一顆9V的電池供應給L298N電機馬達驅動模組
但是運轉時轉的非常緩慢..
不好意思問題有點多,很想要了解這些問題
麻煩老師能撥控回答一下
感恩!
作者已經移除這則留言。
回覆刪除您好 我想請問一下Enable A 上 兩個腳位 是做甚麼用的 該怎麼連接 raspberry?
回覆刪除請問一下,是打完這個程式就能用鍵盤操控了嗎?我的都沒反應 = =
回覆刪除老師:
回覆刪除您好!冒昧請教如何在樹莓派3中安裝curses?
raspbian內的python已經有curses模組在內,印象中我沒有特別安裝。如果要安裝,可以執行以下指令:
刪除sudo apt-get install libncurses5-dev libncursesw5-dev
張貼留言