Bluetooth信号機

このプロジェクトは、Bluetooth通信を用いて交通信号機(赤、黄、緑のLED)を制御するように設計されています。ユーザーはBluetoothデバイスから文字('R'、'Y'、'G')を送信可能です。Arduinoがこれらの文字のいずれかを受信すると、対応するLEDが点灯し、他の2つのLEDは消灯状態に保たれます。

1. 回路を組む

../_images/16-Wiring_Bluetooth_traffic_light.png

2. コードをアップロード

  1. ultimate-sensor-kit\iot_project\bluetooth\02-Bluetooth_traffic_light のパスの下にある 02-Bluetooth_traffic_light.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

  2. 正しいボードとポートを選択した後、 書き込み ボタンをクリックします。

  3. シリアルモニターを開き(ボーレートを 9600 に設定)、デバッグメッセージを確認します。

3. アプリとBluetoothモジュールの接続

"Serial Bluetooth Terminal" というアプリを使用して、BluetoothモジュールからArduinoにメッセージを送ることができます。

  1. Serial Bluetooth Terminalをインストール

    Google Playから Serial Bluetooth Terminal をダウンロードしてインストールします。

  2. Bluetooth接続

    まず、スマートフォンの Bluetooth をオンにします。

    ../_images/09-app_1_shadow.png

    スマートフォンの Bluetooth設定 に移動し、 JDY-31-SPP のような名前を探します。

    ../_images/09-app_2_shadow.png

    クリックした後、ポップアップウィンドウで ペアリング のリクエストに同意します。ペアリングコードが求められた場合は、"1234"と入力します。

    ../_images/09-app_3_shadow.png
  3. Bluetoothモジュールと通信

    Serial Bluetooth Terminalを開き、"JDY-31-SPP"に接続します。

    ../_images/00-bluetooth_serial_4_shadow.png
  4. コマンド送信

    Serial Bluetooth Terminalアプリを使用して、Bluetooth経由でArduinoにコマンドを送信します。Rで赤色のライトを点灯、Yで黄色、Gで緑色です。

    ../_images/16-R_shadow.png ../_images/16-Y_shadow.png ../_images/16-G_shadow.png

4. コードの説明

  1. 初期化とBluetoothの設定

    // Bluetoothモジュール通信の設定
    #include <SoftwareSerial.h>
    const int bluetoothTx = 3;
    const int bluetoothRx = 4;
    SoftwareSerial bleSerial(bluetoothTx, bluetoothRx);
    

    SoftwareSerialライブラリをインクルードして、Bluetooth通信を助けます。続いて、BluetoothモジュールのTXとRXピンをArduinoの3ピンと4ピンに関連付けます。最後に、Bluetooth通信用の bleSerial オブジェクトを初期化します。

  2. LEDのピン定義

    // 各LEDのピン番号
    const int rledPin = 10;  // 赤
    const int yledPin = 11;  // 黄
    const int gledPin = 12;  // 緑
    

    ここでは、LEDが接続されているArduinoのピンを定義しています。赤いLEDは10ピン、黄色は11ピン、緑色は12ピンに接続されています。

  3. setup()関数

    void setup() {
       pinMode(rledPin, OUTPUT);
       pinMode(yledPin, OUTPUT);
       pinMode(gledPin, OUTPUT);
    
       Serial.begin(9600);
       bleSerial.begin(9600);
    }
    

    setup() 関数内で、LEDのピンを OUTPUT として設定します。また、Bluetoothモジュールとデフォルトのシリアル(コンピュータに接続)の両方で9600のボーレートでシリアル通信を開始します。

  4. Bluetooth通信のための主要なloop()関数

    void loop() {
       while (bleSerial.available() > 0) {
          character = bleSerial.read();
          Serial.println(character);
    
          if (character == 'R') {
             toggleLights(rledPin);
          } else if (character == 'Y') {
             toggleLights(yledPin);
          } else if (character == 'G') {
             toggleLights(gledPin);
          }
       }
    }
    

    主要な loop() 関数内で、Bluetoothモジュールからデータが利用可能かどうかを継続的にチェックします。データを受信した場合、その文字を読み取り、シリアルモニターに表示します。受信した文字(R、Y、またはG)に応じて、 toggleLights() 関数を使用して該当するLEDを切り替えます。

  5. トグルライト関数

    void toggleLights(int targetLight) {
       digitalWrite(rledPin, LOW);
       digitalWrite(yledPin, LOW);
       digitalWrite(gledPin, LOW);
    
       digitalWrite(targetLight, HIGH);
    }
    

    この関数、toggleLights() は、最初にすべてのLEDを消灯します。その後、指定されたターゲットのLEDのみを点灯させます。これにより、一度に一つのLEDだけが点灯するように保証されます。