本週北科大 Android 系統設計課程來到了使用 App Inventor 完成一個語音辨識程式,並能藍牙控制 Arduino 機器人語音。使用 SpeechRecognizer元件搭配 BluetoothClient 元件即可完成。如下圖所示,當語音辨識的結果為"go",則透過luetoothClient 元件送出字元 f 。
Arduino 端程式自然是使用無窮迴圈來判斷接收到資料,如果等於某個字元,就執行對應指令。
例如:
if(Serial.available())
{ val = Serial.read();
switch(val){
case 'f': //前進
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, motorspeed);
break;
case 'l': //左轉
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, 0);
analogWrite( Motor_E2, motorspeed);
break;
//...以下以此類推
換言之,Arduino 機器人不在意手機端的指令是如何得到的,按鈕也好、觸碰也好,或是如本文中的語音辨識,總之就是一個口令一個動作。這樣大家是不是更清楚了呢?有興趣的朋友請由 App Inventor 中文學習網的檔案庫來下載 App Inventor 與 Arduino 端程式。
改為按鈕控制也是完全一樣的概念,差別在於按下按鈕發送對應的字元。完全不用修改 Arduino 端程式!
來看看同學們上課的照片啊,個個情緒高昂鬥志高呢!
課程中也介紹如何使用 Scratch for Arduino 進行快速的 Arduino 專案開發。歡迎延伸閱讀苗栗蟠桃國小范運平老師的 Youtube 頻道
補上范運平老師的 BB車藍牙控制影片
請問 analogWrite( Motor_E1, motorspeed);這段是甚麼意思??
[版主回覆05/20/2013 00:11:23]您好,analogWrite(pin, speed) 是指對 Arduino 上編號為 pin 的數位腳,透過 PWM 去模擬類比輸出的效果,參數為speed, 範圍0~255。
本範例中 Motor_E1 事實上是以 Motor_E1 來取代單純的數字來提高程式的可讀性。