開發藍芽鋼琴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; } } }

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