2015.09.05 14:00

fayaduino Uno開發板實作:如何使用語音聲控控制燈號程式

ADVERTISEMENT

許多五、六年級生是否還記得五燈獎的節目,如果我們可以透過語音直接控制亮燈,那就太完美的設計了。所以這次是利用App Inventor 2如何建立透過語音直接控制亮燈程式,來完成我們的心願。

首先,我們在App Inventor 2程式模塊編輯畫面之中,開立一個新專案: 『BT_Talk_Speech_Light』。

▲開新專案-BT_Talk_Speech_Light

ADVERTISEMENT

 

拉出左邊紅框的『ListPictker』(選藍芽裝置用) =>即拉出選擇藍芽通訊模組的元件。

ADVERTISEMENT

▲拉出選擇藍芽通訊模組的元件

 

拉出左邊紅框顯示用的『Label』物件。

ADVERTISEMENT

▲語音顯示文字

拉出左邊紅框顯示啟動語音辨視鈕『Button』物件。

ADVERTISEMENT

▲啟動語音辨視鈕

拉出左邊紅框顯示的語音辨視元件『Speech Reconizer』。

▲拉出語音辨視元件

拉出左邊紅框顯示的藍芽傳輸元件『BlueTooth Client』。

▲拉出藍芽傳輸元件

編修程式,請點選右邊的紅框區『Blocks』按鈕。

▲切換程式設計模式

在App Inventor 2的程式編輯區,建立初始化變數,點選左圖紅框的『Variables』。

▲初始化變數

為了建全的系統,並進行系統初始化,在紅框的『Screen1.initialize』建立敘述。

▲系統初始化

在『ListPicker1.BeforePicking』建立敘述。

▲設定選取藍芽之系統已配對知藍芽內容

在點選藍芽裝置『ListPicker1』下,撰寫『判斷選到藍芽裝置後連接選取藍芽裝置』在『ListPicker1.AfterPicking』建立敘述。

▲選取藍芽後-啟動藍芽傳輸功能

在按下『Button1』下,撰寫『啟動語音辨視按紐程式』,在『Button1.Click』建立敘述。


▲啟動語音辨視按鈕程式

先行建立『Work0程序』、『Work9程序』,主要傳輸給Arduino開發板端所有燈全滅與全亮的命令碼。


▲全燈熄滅與亮起程式

另先行建立『Work1程序~Work8』程序,主要傳輸給Arduino開發板端亮一個燈到八個燈的命令碼。


▲點1_8燈亮起來程式

在語音辨識完成後,根據回傳的字句,判斷其含那一個亮燈的資訊,則傳送那一個命令碼。


根據語音辨識傳送命令碼程式

如表所示,我們在語音辨識完成後,根據回傳的字句,判斷其含那一個亮燈的資訊,則傳送那一個命令碼。

表格 1 燈號命令與相應程序對照表

呼叫程序

命令碼

工作內容

Work0

0

所有的燈全滅

Work9

9

所有的燈全亮

Work1

1

亮第一個燈

Work2

2

亮第二個燈

Work3

3

亮第三個燈

Work4

4

亮第四個燈

Work5

5

亮第五個燈

Work6

6

亮第六個燈

Work7

7

亮第七個燈

Work8

8

亮第八個燈

Arduino亮燈

由於此次使用多個Leds,所以我們使用『fayalab nugget 8 LED module』,仍只需要一塊fayaduino Uno開發板、USB下載線、8 LED module (產品網址:http://www.fayalab.com/kit/801-nu0004nu )。

如圖所示,這個實驗我們需要用到的實驗硬體1.fayalab UNO、 2.USB 下載線、3.fayalab nugget 8 LED module:


▲ fayaduino Uno


▲USB 下載線


▲fayalab nugget 8 LED module

如何連接『fayalab nugget 8 LED module』,請參考接腳表,進行電路組立。

表 用手機語音辨視驅動燈號接腳表

fayalab nugget 8 LED module

Aruino 開發板接腳

D0

Arduino Uno digital Pin 2

D1

Arduino Uno digital Pin 3

D2

Arduino Uno digital Pin 4

D3

Arduino Uno digital Pin 5

D4

Arduino Uno digital Pin 6

D5

Arduino Uno digital Pin 7

D6

Arduino Uno digital Pin 8

D7

Arduino Uno digital Pin 9

藍芽模組(HC-05)

Arduino 開發板

VCC

Arduino Uno +5V

GND

Arduino Uno GND

TX

Arduino Uno digitalPin 11

RX

Arduino Uno digitalPin 12

我們遵照前面所述,將fayaduino Uno開發板的驅動程式安裝好之後,並完成電路的連接,完成後如圖所示之用手機語音辨視驅動燈號接腳實際組裝圖。

▲用手機語音辨視驅動燈號接腳實際組裝圖

我們遵照上述,將fayaduino Uno開發板的驅動程式安裝好之後,我們打開Arduino 開發板的開發工具:Sketch IDE整合開發軟體,撰寫一段程式,如表所示之8 LED module測試程式一,並將之編譯後上傳到Arduino開發板。

表 用手機語音辨視驅動燈號測試程式一

用手機語音辨視驅動燈號測試程式一(BT_Talk_Speech_Light) 

#include <SoftwareSerial.h>   // 引用程式庫

#define LedPinD0 2

#define LedPinD1 3

#define LedPinD2 4

#define LedPinD3 5

#define LedPinD4 6

#define LedPinD5 7

#define LedPinD6 8

#define LedPinD7 9

#define ascStart 48

char getdata ;  // 儲存接收資料的變數

 

// 定義連接藍牙模組的序列埠

SoftwareSerial BT(11, 12); // 接收腳, 傳送腳

 

void setup() {

 

  pinMode(LedPinD0 , OUTPUT) ;    // set Button pin as input data

  pinMode(LedPinD1 , OUTPUT) ;    // set Button pin as input data

  pinMode(LedPinD2 , OUTPUT) ;    // set Button pin as input data

  pinMode(LedPinD3 , OUTPUT) ;    // set Button pin as input data

  pinMode(LedPinD4 , OUTPUT) ;    // set Button pin as input data

  pinMode(LedPinD5 , OUTPUT) ;    // set Button pin as input data

  pinMode(LedPinD6 , OUTPUT) ;    // set Button pin as input data

  pinMode(LedPinD7 , OUTPUT) ;    // set Button pin as input data

 

  Serial.begin(9600);   // 與電腦序列埠連線

  Serial.println("BT is ready!");

 

  // 設定藍牙模組的連線速率

  // 如果是HC-05,請改成38400

  BT.begin(9600);

   allLightOn() ;

   delay(1000);

   allLightOff() ;

}

 

void loop() {

 

    getdata = '@';

  // 若收到藍牙模組的資料,則送到「序列埠監控視窗」

  if (BT.available()) {

    getdata = BT.read();

    Serial.print(getdata, HEX);

  }

 

    if (getdata == '0')

        {

          allLightOff() ;

        }

 

    if (getdata == '9')

        {

          allLightOn() ;

        }

 

    if (getdata == '1')

        {

          digitalWrite(LedPinD0, HIGH) ;

        }

 

    if (getdata == '2')

        {

          digitalWrite(LedPinD1, HIGH) ;

        }

 

    if (getdata == '3')

        {

          digitalWrite(LedPinD2, HIGH) ;

        }

 

    if (getdata == '4')

        {

          digitalWrite(LedPinD3, HIGH) ;

        }

 

    if (getdata == '5')

        {

          digitalWrite(LedPinD4, HIGH) ;

        }

 

    if (getdata == '6')

        {

          digitalWrite(LedPinD5, HIGH) ;

        }

 

    if (getdata == '7')

        {

          digitalWrite(LedPinD6, HIGH) ;

        }

 

    if (getdata == '8')

        {

          digitalWrite(LedPinD7, HIGH) ;

        }

 

    if (getdata == 'T')

        {

          delay(1000);

        }

 

}

 

void allLightOn()

{

            digitalWrite(LedPinD0, HIGH) ;

          digitalWrite(LedPinD1, HIGH) ;

          digitalWrite(LedPinD2, HIGH) ;

          digitalWrite(LedPinD3, HIGH) ;

          digitalWrite(LedPinD4, HIGH) ;

          digitalWrite(LedPinD5, HIGH) ;

          digitalWrite(LedPinD6, HIGH) ;

          digitalWrite(LedPinD7, HIGH) ;

}

 

void allLightOff()

{

         digitalWrite(LedPinD0, LOW) ;

          digitalWrite(LedPinD1, LOW) ;

          digitalWrite(LedPinD2, LOW) ;

          digitalWrite(LedPinD3, LOW) ;

          digitalWrite(LedPinD4, LOW) ;

          digitalWrite(LedPinD5, LOW) ;

          digitalWrite(LedPinD6, LOW) ;

          digitalWrite(LedPinD7, LOW) ;

}

 

範例原始碼網址:https://github.com/brucetsao/Arduino_FayaNUGGET

網友可以看到本次實驗- 用手機語音辨視驅動燈號測試程式一結果畫面,如圖所示,我們可以使用手機、平板,用語音辨視來驅動燈號。


▲用手機語音辨視驅動燈號測試程式一結果畫面

整合手機測試

如何在手機或平板上執行App Inventor 2程式,如圖所示,我們直接顯示測試程式的主畫面。


▲使用手機進行點燈主畫面

先選擇『SelectBT』來選擇藍芽裝置。


▲點選選取藍芽鈕

會出現手機、平板中已經配對好的藍芽裝置,我們可以選擇手機、平板中已經配對好

的藍芽裝置。

▲選取藍芽裝置

如果藍芽配對成功,正確連接您選擇的藍芽裝置後,則會進入通訊模式的主畫面,這時後我們參考圖示紅框處,按下『Speak』按紐,驅動語音辨視鈕。

 

▲按下語音輸入鈕

如圖所示,系統會驅動手機、平板的語音辨視功能,使用者此時就可以輸入『100』的語音。


▲輸入語音畫面

如圖所示,如果語音輸入正確,系統會從手機、平板的語音辨視功能回傳語音轉文字的內容到系統的Label物件顯示出『100』的文字,並將『100』的文字透過藍芽傳輸到Arduino開發板設計的一端。

▲取得語音

如圖所示,我們可以另外輸入『345』的語音,如果語音輸入正確,系統會從手機、平板的語音辨視功能回傳語音轉文字的內容到系統的Label物件顯示出『100』的文字,並將『100』的文字透過藍芽傳輸到Arduino開發板設計的一端,網友可以參考用手機語音辨視驅動燈號測試程式一結果畫面的圖示,我們就驅動第3、4、5的燈號。


▲取得語音二

作者介紹

曹永忠 (Yung-Chung Tsao):目前為自由作家、台灣資訊傳播學會秘書長,專研於軟體工程、軟體開發與設計、物件導向程式設計,商品攝影及人像攝影。長期投入資訊系統設計與開發、企業應用系統開發、軟體工程、新產品開發管理、商品及人像攝影等領域,並持續發表作品及相關專業著作。

Email: ,Line ID:dr.brucetsao 

Arduino部落格:

範例原始碼網址:https://github.com/brucetsao/Arduino_FayaNUGGET

臉書社群(Arduino.Taiwan):https://www.facebook.com/groups/Arduino.Taiwan/

Arduino活動官網:

Youtube:https://www.youtube.com/channel/UCcYG2yY_u0m1aotcA4hrRgQ


ADVERTISEMENT