Eason's blog

開發藍芽鋼琴APP!使用AppInventor結合Arduino、HC05、與蜂鳴器

Published on

今天我們要實作簡易藍芽鋼琴 APP!

  • 用 AppInventor 2 開發 Android APP 作為控制介面
  • Arduino UNO 作硬體控制
  • HC-05 藍芽模組接收手機指令
  • 一個無源蜂鳴器作為發音設備

DEMO 影片:

先備知識

  • 基礎 AppInventor 操作
  • 基礎 Arduino 程式撰寫
  • HC-05 藍芽模組使用
  • 蜂鳴器使用

Android App 撰寫(使用 AppInventor)

APP 是當作藍芽鋼琴的控制介面,會透過藍芽告訴 Arduino 應該發出哪個聲音。

下載.aia 檔:keyboard.aia

外觀編排

  • 最上方有一個清單選擇器,用來連接藍芽
  • 中央八個按鈕是琴鍵,從 DO,RE,...到 DO5
  • 下方是一個按鈕,用來取消藍芽連接
  • 還有一個不可見的藍芽客戶端元件

程式設計

  • 連接藍芽清單選擇器被按下時,列出所有已配對藍芽
  • 連接藍芽清單選擇器已選擇後,連接藍芽,
  • 取消連接按鈕被按下時,取消連線
  • DO~DO5琴鍵按鈕被按下時,藍芽送出訊號'1'~'8',告訴 Arduino 該發聲了
  • DO~DO5琴鍵按鈕被鬆開時,藍芽送出訊號'S',告訴 Arduino 停止發聲


硬體接線

需求材料:

  • Arduino UNO x1(或其他類 UNO 開發版都可)
  • 無源蜂鳴器 x1
  • HC-05 藍牙模組 x1(HC-06 也可)

接線:

  • HC-05 的 RX 接 pin11、TX 接 pin10
  • 蜂鳴器正極端接 pin6(須具有 PWM 功能)


Arduino 程式

  • 不斷從藍芽收資料
  • 收到'1'~'8'的話,發出對應的音
  • 收到'S'的話,停止發音
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // 藍芽Serial使用的pin腳(Arduino的RX,TX,對應到HC05的TX,RX)

#define DO  262 // 音階頻率table
#define RE  294
#define MI  330
#define FA  349
#define SOL 392
#define LA  440
#define SI  494
#define DO5 523

#define BUZZER 6 // 蜂鳴器pin腳

void setup() {
  BTSerial.begin(9600);
}

void loop() {
  if (BTSerial.available()){
    char note = BTSerial.read();
    switch(note){
      case '1': // 若接收到字元'1'(從手機App傳來的)
        tone(BUZZER, DO); // 就開始發出DO的音
        break;
      case '2': // 以此類推
        tone(BUZZER, RE);
        break;
      case '3':
        tone(BUZZER, MI);
        break;
      case '4':
        tone(BUZZER, FA);
        break;
      case '5':
        tone(BUZZER, SOL);
        break;
      case '6':
        tone(BUZZER, LA);
        break;
      case '7':
        tone(BUZZER, SI);
        break;
      case '8':
        tone(BUZZER, DO5);
        break;
      case 'S': // 若接收到'S'
        noTone(BUZZER); // 停止發音
        break;
    }
  }
}

完成!現在你可以用手機彈奏美妙的音樂了!