2014年3月20日 星期四

Arduino : S4A 藍芽無線遙控科學魔法車

去年玩過 Scratch 透過無線網路傳送資料給放在樂高積木車子上的 Raspberry Pi,經由它的 GPIO 來遠端遙控兩顆樂高馬達。如果將 Raspberry Pi 換成 Arduino 要如何進行呢?

查了一下,有個「S4A」(Scratch for Arduino),只要先將網站中提供的 S4A 靭體 upload 到 Arduino 中,就可以利用這個改過的 Scratch 來寫程式,並透過電腦中有和 Arduino 連線的 Serial Port 進行通訊,達到控制接在 Arduino 上硬體的目的。
和 Arduino 通訊的部份,S4A 除了可以使用有線的方式,也可以透過無線網路或是藍芽的方式來傳遞資料。上網找了一下可用的零件,藍芽的 Serial port 模組似乎比較經濟,於是在網路買了一片 HC-05 Bluetooth RS-232 Module。加上之前買的「L293D」及給小孩玩的「科學魔法車」,就可以組一臺以 Scratch 無線遙控的魔法車。除了可以享受 DIY 動手做的樂趣,和樂高比起來,算是經濟實惠。

給小孩子玩,每個人都是愛不釋手。



下面是我家小小孩用電腦鍵盤操作車子的情形:





硬體部份

上面的車子使用的硬體如下:
  • Arduino:使用前要先到 S4A 網站中下載 S4A 的 Arduino 靭體程式碼,並安裝到 Arduino 中。
  • L293D:這一顆 IC 可以控制兩個馬達。
  • 科學魔法車:只會使用到科學魔法車的車體和麵包板(此部份當然也可以換成樂高組裝的車子)。
  • HC-05 Bluetooth Module:可能需要將連線速率設為 38400 (S4A內定的連線速率)。
  • 行動電源:主要供電給 Arduino 。車子馬達的電源可使用魔法車的電池盒來獨立供電,或是像我將行動電源的電力分給馬達用(需改 USB 線,詳見後面的電路圖)。

市面上有一款名為「Motoduino」的板子,它等於是 Arduino + L293D,花的錢多一點,好處是不用在麵包板上插一堆線。不過,哈~我比較喜歡省錢,並享受被那一堆線玩的感覺!

如果 Arduino 和馬達的電源分開接,可以參考下面的接線方式:
Arduino 和馬達電源分開

如果 Arduino 和馬達共用 5V USB 行動電源,可以參考下圖:
Arduino 和馬達共用一個電源

前述兩種接法只差在電源的接法,其餘都一樣,主要分為兩大部份:

HC-05 藍芽模組與 Arduino
  • HC-05 VCC ---- Arduino 5V
  • HC-05 GND ---- Arduino GND
  • HC-05 TXD ---- Arduino RXD
  • HC-05 RXD ---- Arduino TXD

L293D 的部份

L293D 可以控制兩個馬達,而接腳的排列很對稱哦~

我打算利用:
  • Arduino pin 5 , pin 6 分別控制車子右側馬達和左側馬達輸出的馬力,它們可以設定值範圍由 0 至 255,數值愈大,馬力愈大。
  • Arduino pin 10, pin 11 用來控制車子右側馬達的轉向,當 pin 10 Off、pin 11 On 時順時鐘轉動(前進),而 pin 10 On、pin 11 Off 時逆時鐘轉動(後退)。
  • Arduino pin 12, pin 13 用來控制車子右側馬達的轉向,當 pin 12 Off、pin 13 On 時順時鐘轉動(前進),而 pin 12 On、pin 13 Off 時逆時鐘轉動(後退)。
底下是 L293D 這顆 IC 的接法:
  • L293D pin 0 ---- Arduino pin 5
  • L293D pin 1 ---- Arduino pin 10
  • L293D pin 2 ---- 右側馬達接腳 1
  • L293D pin 3 ---- GND
  • L293D pin 4 ---- GND
  • L293D pin 5 ---- 右側馬達接腳 2
  • L293D pin 6 ---- Arduino pin 11
  • L293D pin 7 ---- 供給馬達的電源正極
  • L293D pin 8 ---- Arduino pin 6
  • L293D pin 9 ---- Arduino pin 12
  • L293D pin 10 ---- 左側馬達接腳 1
  • L293D pin 11 ---- GND
  • L293D pin 12 ---- GND
  • L293D pin 13 ---- 左側馬達接腳 2
  • L293D pin 14 ---- Arduino pin 13
  • L293D pin 15 ---- Arduino 5V


軟體部份

這臺遙控車使用到的軟體只有 S4A 。不過,在啟動 S4A 之前,記得要先插入藍芽傳輸器或是開啟電腦端的藍芽功能,並先和 HC-05 進行配對(配對密碼預設為「1234」),這樣子 S4A 才能和 HC-05 連線。

找到連接埠後,我們在 S4A 中,要進行的程序是去設定 Arduino 的 pin 5、pin 6 的值,以控制兩顆馬達的馬力輸出多少。另外則是設定 pin 10、pin11 和 pin 12、pin 13 兩組的 On、Off 的配對來控制馬達的正反轉。


圖中的做法是利用空白鍵檔煞車,上、下、左、右四個方向鍵則是用來控制前進、後退和左轉、右轉。

煞車
  • pin 5, pin 6 值設為 0
  • pin 10, 11, 12, 13 設為 Off
前進
  • pin 5, pin 6 值設為 255 (自行看要多少,進階版可使用變數)
  • pin 10 Off, pin 11 On (右輪正轉)
  • pin 12 Off, pin 13 On (左輪正轉)

後退
  • pin 5, pin 6 值設為 255 (自行看要多少,進階版可使用變數)
  • pin 10 On, pin 11 Off (右輪反轉)
  • pin 12 On, pin 13 Off (左輪反轉)
左轉和右轉的部份運用的原理是左、右兩個馬達輸出的馬力不同即可達到轉彎的目的,範例中用的方法是其中一個輪子不動,另一個轉動;也可以使用一個輪子正轉,一個輪子反轉,這樣子轉彎的力量更大,可能要視需求自己搭配。


以 Android 來遙控車子

除了用電腦中的 Scratch 來控制車子以外,如果有具藍芽功能的 Android 手機或是平板,另外一種玩法是先進行藍芽的連線,再用 Android Apps 來遙控。下面這個由台中教網開發的 App  還滿好玩的:

我自己也用 MIT App Inventor 2 寫了一個,請參考:





相關文章




49 則留言:

  1. 想請問一下;可以只用電池盒供電嗎?可以的話要如何接呢?

    回覆刪除
    回覆
    1. 您好:
      用電池盒當然可以, 有人會買 6 顆 3 號電池的電池盒來當 Arduino 的電源, 個人因為沒有, 所以直接利用多餘的小型行動電源, 較輕也方便。接法在本篇文章中都有參考圖了。

      刪除
  2. 不好意思 我想請問一下 您電路圖 是什麼程式 設計的? 我用的是 fritzing 不過找不到修改 或是去哪新增元件 無法 有HC-05的藍芽模組

    回覆刪除
    回覆
    1. 您好:
      我也是用 fritzing 拉的圖, 那個 HC-05 是找 SparkFun 裡的 Bluetooth Mate Silver 亂改的, 只是樣子像而已, 如果輸出成電路圖, 應該會出亂子!

      刪除
  3. 好的 謝謝 才剛摸索Arduino 會有很多 基本問題 不好意思喔

    回覆刪除
  4. 馬達部分
    想問是用什麼規格的

    回覆刪除
    回覆
    1. 請參考科學魔法車的網站
      http://www.letry.com.tw

      刪除
  5. 我想問S4A裡digtal只有pin13、11、10沒有pin12請問要怎麼加?

    回覆刪除
    回覆
    1. 咦~ 我的 S4A (1.5) Digital 有 10,11,12,13 可用吔~
      如果想增加其它腳位, 除了 S4A 的程式需要改, Arduino 的 firmware 也得配合修改才行, 改法應該類似幫 S4A 加上超音波傳感器的步驟, 有興趣可以參考底下的文章(我沒改過, 您自己試試):
      http://www.tr3sdland.com/2013/02/ultrasonidos-s4a-arduino/

      刪除
  6. 請問有辦法讓手機控制車子的前進速度分為快中慢三種?

    回覆刪除
    回覆
    1. 基本上可以的,硬體的部份,L293D 的 L293D pin 0 和 L293D pin 8 如果是接在 Arduino 有 PWM 的接腳(有標示「~」的),可以送 0~255 來控制電力,也就是您要的速度。當然囉~手機的程式操作界面要加速度控制的部份,而程式要送出相關的指令給 Arduino,Arduino 再做出對應的處理即可。
      玩這種東西有趣的地方正是這裡,有什麼想法,試試看便知道可不可以了。

      刪除
  7. dear all,
    請問一下,
    可以用手機來控制長距離的無人飛機嗎?
    可以的話, 需要什麼硬體和方法呢?
    請各位指教!

    回覆刪除
  8. 請問一下,馬達是選用伺服馬達還是一般直流馬達

    回覆刪除
    回覆
    1. L293D 是用來控制一般直流馬達的

      刪除
  9. Se puede hacer eso con linux?.. . que firmware lleva el hc-05?

    回覆刪除
  10. 請問在"Arduino 和馬達的電源分開接"部分,從圖看L293D是使用2顆AA電池供電?

    回覆刪除
    回覆
    1. 您好:
      那只是代表圖而已,魔法車的電池盒用的是四顆電池。

      刪除
  11. 謝謝您的回覆!
    所以可以理解成
    (1)魔法車電池盒(用4顆電池,1.5Vx4=6V)提供L293D+馬達電源
    (2)行動電源(5V)提供 Arduino+HC-05 Bluetooth Module

    回覆刪除
    回覆
    1. 您好:
      依那個架構的話,魔法車電池盒只供電姶兩顆馬達而已。
      其它的部份 Arduino , Bluetooth Module , L293D ...... 通通用 5V 的行動電源供電。

      刪除
  12. 請問我用的是L293D模組
    直接插在UNO板上
    還能使用S4A嗎

    回覆刪除
    回覆
    1. 您好:
      我沒有使用L293D模組, 您可能要查一下您的「L293D模組」用到 UNO 哪些腳位, 而 S4A 是使用哪些腳位, 才能知道會不會衝突。

      刪除
  13. 請問改用HC-06接法相同嗎

    回覆刪除
  14. 你好,我最近嘗試了您上述的部分設備進行測試,在使用s4a時,連接USB到arduino是沒問題的,可以順利使用,但是當我把usb拔掉,改用藍芽時,s4a都search不到arduino。我是用電腦本身的藍芽連接,有找到HC-05,也確實連接,但是s4a都連不到,想請問有可能是什麼問題?

    回覆刪除
    回覆
    1. 您好:
      S4A 連線時的 baud rate 用 38400, 您要先將 Arduino 端的藍牙模組設定為 38400, 不然會無法連線。

      刪除
    2. 好的,感謝
      我會試試看

      刪除
  15. 您好,我想請教一下
    我在用S4A無線控制伺服馬達時
    按下其中一個執行鈕(空白鍵)後
    伺服馬達轉動一些些,然後S4A就當掉了
    都不能用任何功能,只能關掉
    請問有可能是什麼原因呢?

    回覆刪除
    回覆
    1. 您好:
      因為所給的資料不足, 讓我猜的話, 建議您可能要檢查一下所寫 S4A 的程式是否有邏輯上的錯誤, 例如: 掉入不會再做任何動作的迴圈了。給您一個小建議, 問程式的問題, 沒有程式的畫面, 很難知道您的問題所在的; 哈~不過, 抱歉, 也有可能是個人的功力不足。

      刪除
    2. 因為我是測試,所以程式部分只有一個"當按下空白鍵"接"motor 8 angle 50",不知道這樣會不會有問題,然後我在想有沒有可能是電腦的藍芽訊號的問題?

      刪除
  16. 請問如果腳7 用USB的話要接到哪裡

    回覆刪除
  17. 我的HC-06無法和電腦連線 請問原因可能是甚麼

    回覆刪除
  18. 雄哥,您寫的文章真的太棒了,但我遇到一個小小問題,那就是我單純接線(USB電腦-arduino)時車子可以藉由S4A的軟體做移動控制,但線一拔掉時我發現TX,RX的信號燈都滅了,導致連S4A軟體都搜尋不到arduino板子,敝人是使用筆電,藍芽的部分也做開啟配對好了,那可以請問雄哥關於這點怎麼做解決呢?

    回覆刪除
    回覆
    1. 您好:
      TX/RX 如果不亮,表示您的藍牙被斷電了,可能要先查一下您的藍牙 Vcc 和 GND 接在哪裡? 我是接在 Arduino 的 Vcc 5V 和 GND,如果您和我一樣的接法,TX/RX 沒電了, Arduino 應該也沒電了,這種情形,您就得查一下是怎麼供電給 Arduino 的。
      由於不知道您是如何接線的,只能胡亂把脈,希望對您有所幫助。

      刪除
    2. 雄哥,感謝您撥出時間做回覆,但關於Vcc與GND我按照雄哥您供應的配線圖一樣接線並再次檢查確認無誤,然而TX/RX無亮燈,我在此必須補充一下我的板子是LEONARDO的(不知是否有相容問題),至於雄哥您說的若TX/RX沒電,arduinou也同樣沒電,可是我arduino板子是接上行動5V,在電源指示燈部分有亮,baud rate也已設為38400,還有一點,就是我家筆電不管藍芽是否與HC-05做配對TX/RX皆不亮,唯一的差別在於HC-05指示燈亮的速率(配對前一直閃,配對後間隔2秒閃一次),小弟也剛摸索,孤陋寡聞,有勞雄哥再次為我解決疑難雜症,感謝!

      刪除
    3. 家權您好:
      我沒用過 LEONARDO , 查了一下, 它的確和我用的 UNO 有不同之處, 它的 TX/RX 應該使用 Serial1 物件來操作(和透過 USB 控制不同), 而不是我用 UNO 程式中的 Serial, 您可能要改一下 Arduino 的程式。

      刪除
  19. 雄哥:我是初心者,看了一下文章,跟科學魔法車官方那,我的車子接在左邊一個電池或兩個電池沒有反應,接三個那邊才有動作,請問是左邊那邊壞掉了嗎? 請問一下如果我用SSR(固態繼電器)能否一樣控制前後作動呢~官方用的繼電器我看不懂是哪種,方便給個意見嗎?

    回覆刪除
    回覆
    1. 您好:
      所謂的有沒有反應要看您接什麼東西, 如果您是要接 Arduino ,因為它標準是使用 5V, 所以至少要接三顆 1.5 x 3 = 4.5 才行。我的示意圖因為當時找不到三顆電池的電池盒圖片才用兩顆的代替, 實際應用一定要自己算一下電壓, 小則不動, 過大則會燒了零件的。

      刪除
    2. 謝謝雄哥,那如果馬達用一顆電池1.5V+大螺釘或者兩顆1.5V電池沒動的話是否就是兩顆那邊電池盒線路的問題呢?

      刪除
    3. 您好:
      科學魔法車兩顆電池的電池盒有個開關, 您有扳過去嗎? 開關如果沒開, 就會變成斷路。另外, 如果您有電表, 可以量一下電壓電池接出來的電壓有多少。

      刪除
  20. 您好雄哥"
    如果要改接ESP8266 只是把HT-05換掉就好了嗎?

    回覆刪除
    回覆
    1. 您好:
      我沒有實作過, 不過應該是可以用 ESP8266 代替 HC-05 的通訊角色。

      刪除
  21. 你好,我想請問一下
    這是我上傳到板子時跑出的訊息
    這是什麼意思?
    avrdude: ser_open(): can't open device "\\.\COM1": 系統找不到指定的檔案。

    回覆刪除
    回覆
    1. 您好:
      看起來應該是在 upload 前忘了設定板子在哪一個 srial port, 建議您請先確認一下 Arduino upload 的程序, 是否哪個步驟沒完成?

      刪除
  22. 您好我想請問一下假如我是用esp8266的wifi模組但怎麼試都無法在s4a上找到我的arduino板子,請問是用編輯裡的join mesh嗎?

    回覆刪除
    回覆
    1. 我玩過的S4A 只會去搜尋序列埠來進行通訊,不知您的 ESP8266 是以 serial port 和電腦通訊嗎? 還是現在的 S4A 已支援 wifi 通訊的方式了?

      刪除
    2. 非常感謝老師回答問題
      那應該是我自己搞錯了我以為可以直接連
      看來是還沒支援WIFI不然就是需要別的東西我是單純將ESP8266連到ARDUINO

      刪除
    3. 不好意思那我想在請問一下
      假如HC05換成是GROVE BLE V1.0的低功號藍芽模組可以嗎?

      刪除
    4. 您好:
      雖然我用過的 BLE 模組和您說的型號不同 , 不過, 只要把握一個原則:
      電腦能和模組連線,並在電腦上建立一個 serial port ,讓 S4A可以抓得到。
      這樣應該都可以。
      使用 serial port ,而且必須用 38400 的 baud rate 連線是 S4A 的基本限制, 如果想突破限制,使用別的連線方式或連線速度,只能考慮用別的軟體。

      刪除

 
© 2009. Design by Pocket