2012年7月22日 星期日

SpeakToArduino

這篇是寫給 amarino 初學者看的,目的是教導你如何執行 Amarino 的 SpeakToArduino 範例程式。SpeakToArduino 這個範例示範如何用 Android 手機聲控 Arduino。

所需材料
  • Android 手機一支
  • Arduino x1
  • bluetooth module x 1
  • 紅色 LED, 綠色 LED 及藍色 LED 各一顆(若無特定顏色 LED,可用其它顏色的 LED 取代),或一顆 RGB Led
  • 220 歐姆電阻 x 3
Step 1:安裝 Amarino

http://www.amarino-toolkit.net/ 下載下列 App 並安裝到 Android 手機上:

1) Amarino

2) Amarino Plug-in Bundle

3) SpeakToArduino

Step 2: 安裝 Arduino IDE 與 MeetAndroid Library

如果你電腦上還沒有 Arduino IDE,請先到 http://arduino.cc/en/Main/Software 下載軟體,下載後解壓縮即可。

接著下載 MeetAndroid Library,把 MeetAndroid 解到 Arduino IDE 安裝目錄下的 libraries 資料夾。

重新啟動 Arduino IDE,在 Sketch > Import Library 底下應該會看到 MeetAndroid,如下圖:

image_thumb422

Step 3:連接 LED

參考下圖,把紅、綠、藍三顆 LED 分別接到 pin 9, 10, 11,LED 的接法為: 長腳(陽極)接到 pin 腳,而短腳(陰極)串接一顆 220 ohm 電阻接到 GND:

image_thumb6

Step 4: 上傳 SpeakToArduino 程式

這裏下載,並使用 Arduino IDE 打開 SpeakToArduino 程式。

程式所用的 baud rate 預設是 57600 bps,如果你的藍芽模組不是 57600 bps,請做適當的調整:

image

然後把程式上傳到 Arduino 板子上。

Step 5:連接藍芽模組

我用的是廣州匯承信息科技的 HC-0x 系列藍芽模組,下圖是 HC-0x 藍芽模組的外觀:

image_thumb352222 image_thumb642222
▲ HC-0x 藍芽模組 (圖左:正面圖,圖右:背面圖)

連接方法很簡單,照下表把 Arduino 和藍芽模組連接起來就好:

Arduino 藍芽模組 備註
5V VCC 注意電源不可接錯
GND GND 注意電源不可接錯
RXD TXD  
TXD RXD  

image_thumb13222

有兩點要注意:第一是電源千萬不可接錯,不然可能會燒壞藍芽模組,第二是 Arduino 的 RXD 要接藍芽模組的 TXD,而 Arduino 的 TXD 要接藍芽模組的 RXD。

通電之後,藍芽模組上的 LED 會一直閃爍:

image_thumb1332222

Step 6:執行 SpeakToArduino App

首先,先利用 Amarino 搜尋藍芽設備,找到設備後,將藍芽設備的 MAC Address 抄起來(記得不要在 Amarino 設定任何 Event!):

image_thumb1432

打開 Android 手機上的 SpeakToArduino App,你會看到這樣的畫面:

image

選手機 Menu 鍵 Set BT Device Address,手機會跳出這個畫面,此時請輸入剛剛抄下來的 MAC Address,然後按下【Save】鈕:

image

按一下手機 Back 鍵退出 SpeakToArduino App,然後重新啟動 SpeakToArduino,這樣 App 才會用新的 Mac Adress 跟藍芽模組連線。

如果一切順利,Android 手機就會跟 Arduino 建立連線,並且呈現如下圖的畫面(注意手機上方的 Status bar,若有成功與 Arduino 連線,status bar 上會顯示 Active connection: … 的訊息):

image

按下【Click and order your color】鈕,手機會跳出語音辨識的畫面:

image

這時便可以說出想要的顏色,例如 red, green, blue, white, pink, orange, yellow, dark 或 off,這時候 Arduino 上三顆 LED 便會同步改變亮度。比如當我說 red,這時 Android 手機就會叫 Arduino 把紅色 LED 打開:

image

如果你有 RGB Led,可以用一顆 RGB Led 取代三顆 Led,這樣更可以呈現 LED 顏色變化的效果。

參考資料

22 意見:

Ancle 提到...

您好:

想請問一下除了apk檔以外,是否有原始碼可以參考?謝謝!

B/R
Ancle

Cooper Maa 提到...

您好:

有的,App 跟 Arduino 的 source code 都放在 Google code 上面:

http://code.google.com/p/amarino-examples/downloads/list

Ancle 提到...

您好:

1.謝謝!我有進去downloads看,原來少按了search
2.我是java新手,我使用Eclipse的Juno版本開啟出現Unable to resolve target 'android-10'的錯誤訊息,有google了一下也有修改project.properties的內容,情況還是一樣,另外layout的部份也是沒有辦法正常顯示,想請問如何才能正常開啟?謝謝!

Cooper Maa 提到...

Android-10 這個是 Android 2.3.3,也就是 API level 10
Unable to resolve target 'android-10' 這個訊息是說你系統上沒有裝 Android 2.3.3 的 SDK Platform

參考這張圖:
http://goo.gl/7ARjs

看你的系統裏裝了哪些 Android API,勾選一個你有的就行了
或者利用 Window > Android SDK Manager 裝個 Android 2.3.3 以上的 SDK 也可以

Ancle 提到...

您好:

1.謝謝!我安裝Android 2.3.3的SDK Platfrom,大部份都正常,程式碼的部份還是有錯誤,這方面我再自行研究
2.另外,我不懂的是,我本身已經有安裝Android 2.2和4.1的SDK Platfrom,如果要選擇使用4.1的SDK(在沒有安裝2.3.3時)該如何設定?因為當我安裝2.3.3的SDK後在layout的頁面才會出現2.2,2.3.3,4.1的選項可以選,選擇4.1時是OK的,因為可以向下相容,重點還是在為什麼沒有安裝2.3.3時不會出現2.2和4.1讓我選擇?

Ancle 提到...

您好:

第二個問題我自己找到答案了,是我自己搞烏龍,之前有說更改project.properties,我將4.1的SDK記成android-15,應該是android-16才對(雖說有註記不能修改此檔案),在不安裝2.3.3的SDK的情況下改了之後,就會有已安裝的2.2和4.1的SDK可選擇

Ancle 提到...

話說回來,之前是安裝後再移除2.3.3的SDK,在試我說的情況,我後來還是重新安裝2.3.3的SDK以免有什麼未知的情況產生

Cooper Maa 提到...

你說著說著,自己把問題解決了~ :)
加油~ 歡迎常來交流

Wiser 提到...

您好 小弟近兩年開始使用Arduino幫公司開發工業控制的設備,大多都是用GPIO功能搭配電晶體開關放大到24V-12V的訊號開關之類的,最近使用PWM analogWrite的功能透過H橋電路控制一顆24V直流馬達的正反轉煞車停止,再搭配編碼盤與光電開關,訊號回授至中斷腳位,用attachInterrupt去回授馬達的實際轉動量,旦發現在上述的使用條件下,我用analogWrite啟動馬達後,似乎中斷功能的ISR副程式的累加值會異常執行累加很多次,我用digitalWrite就不會,不知道是不是Arduino的Inteerupt與PWM功能有衝突 或是電路的問題 大哥不知道有沒有類似的經驗??? 如果可以幫忙的話 可以在跟您討論相關的電路與程式碼

Wiser 提到...

http://arduino.cc/forum/index.php/topic,116490.0.html

Cooper Maa 提到...

哇塞! 有高手光臨寒舍! 幸會,幸會。
照你的描述看來,感覺像是電路的問題
Sorry, 我電路方面的程度還不夠,沒辦法給你什麼意見...

BTW, 早上有位叫 MarkT 回覆你的問題了,在arduino forum 上

chen 提到...

我想請問:
click and order your colorc後
並沒有出現語音辨識的畫面
而是顯示連線問題 及驚嘆號符號
這是什麼原因????
PS:APP已確定安裝 藍芽已確定連線

Cooper Maa 提到...

@chen
你可以抓畫面截圖給我看嗎?

chen 提到...

請問app有限制要android 多少以上的嗎?(例如2.3)

Cooper Maa 提到...

網路上這個版本是用 Android SDK API Level 10,也就是 Android 2.3.3:
http://code.google.com/p/amarino-examples/downloads/list

不過,如果你想支援更早之前的 Android 版本,例如 Android 2.2,只要把 source code 下載回來改一下 API level 並重新編譯即可

Cooper Maa 提到...

@chen,
先前遇到的語音辨識出現「連線問題」,後來有沒解決? 是不是 WiFi 連線或 3G 訊號收不到的關係?

chen 提到...

恩 連線問題已解決!! 的確是網路問題
但目前還是有以下2個問題
(1)
我在android 4.0 系統的手機 有出現語音辨識的畫面了,可是led卻沒有亮,
arduino 已經有燒speak程式了
(2)
在android 2.2系統上 按下click and order your color後
出現 應用程式 speaktoarduino
(程序:edu.mit.media.
hlt.speaktoarduino)
未正常終止請在試一次

Cooper Maa 提到...

@chen,

(1) led 沒亮可能是語音辨識沒有正確辨識,或是 Arduino 端的程式不正確的關係

(2) 這個 speaktoarduino.apk 是用 Android 2.3 的 API,如果要在 anrdoid 2.2 上跑,source code 可能要重新編譯才行喔。

你可以到這裏下載 source code:

http://code.google.com/p/amarino-examples/downloads/list

把 SpeakToArduino.zip 下載回來後,把底下這行:



改成這樣,然後重新編譯應該就可以跑了:





chen 提到...

底下哪行 改成怎樣?

Cooper Maa 提到...

Sorry, 留言板會把 HTML tag 吃掉。我是說把這行:

uses-sdk android:minSdkVersion="10"

改成這樣應該就可以了:

uses-sdk android:minSdkVersion="8"

chen 提到...

恩 這我試過了!!!
一樣會出現那個問題
我的手機型號是htc wildfire

Cooper Maa 提到...

可能得把 Logcat 請出來看 debug output 了