「Arduinoで作ったものを、スマホから無線で操作したい!」

そう思ったことはありませんか?ケーブルを引っ張りながら操作するのは不便ですよね。でも実は、HC-05というBluetoothモジュールを使えば、スマホからArduinoを無線でコントロールするのが意外とシンプルに実現できます。

今回は、HC-05の配線から、LEDのON/OFF制御、さらにモーターの速度制御まで、回路図・コードを使って丸ごと解説します。「Bluetoothって難しそう…」という印象が、「これなら自分でもできそう!」に変わるはずです。😊

この記事の対象読者はArduino初〜中級者の方です。はんだづけ不要のブレッドボード配線で完結しますので、安心して進めてください!

HC-05 Bluetoothモジュールとは?

Arduino Bluetooth module
Arduino Bluetooth module / Photo by Malte Luk via Pexels

HC-05は、Arduinoと組み合わせて使える定番のBluetoothモジュールです。スマホとArduinoの間でシリアル通信(UART)を無線でつなぐ役割を果たします。

イメージとしては、「USBケーブルで繋いでいたシリアル通信を、ワイヤレスに置き換えてくれる中継器」です。Arduinoのプログラム側からは、普通にSerial.read()Serial.write()を使うだけなので、コードの変更も最小限で済みます。

主な特徴はこんな感じです:

  • 📡 Bluetooth 2.0対応(Androidスマホと相性◎)
  • ⚡ 動作電圧:3.3V(信号線)/電源:5V対応モジュールが多い
  • 🔌 UARTで接続するため、Arduinoのソフトウェアシリアルで制御可能
  • 💰 価格が安い(数百円〜)

注意点として、HC-05の信号ピン(TXD・RXD)は3.3V動作です。ArduinoのTXはそのまま接続できますが、ArduinoのRXからHC-05のRXへは分圧回路が必要です。この点は後ほど回路図で確認しましょう。

必要なパーツをそろえよう

今回使うパーツはこちらです:

  • Arduino Uno(またはNano)× 1
  • HC-05 Bluetoothモジュール × 1
  • LED × 1(+ 220Ω抵抗)
  • DCモーター × 1(+ L298NモータードライバーまたはTB6612FNG)
  • 抵抗(1kΩ × 1、2kΩ × 1)※分圧用
  • ブレッドボード・ジャンパーワイヤー

モーター制御をまずスキップしてLEDだけで動作確認したい方は、LED・抵抗・HC-05・Arduinoの4点だけでOKです。一歩ずつ確認しながら進めていきましょう!

回路の配線方法

HC-05とArduinoの接続(分圧回路込み)

HC-05のピン接続をまとめるとこんな感じです:

HC-05ピン 接続先
VCC Arduino 5V
GND Arduino GND
TXD Arduino D10(SoftwareSerial RX)
RXD 分圧回路経由 → Arduino D11(SoftwareSerial TX)

⚠️ 重要ポイント:分圧回路について

ArduinoのTXは5V出力ですが、HC-05のRXは3.3V入力です。そのまま繋ぐとモジュールが壊れる可能性があります。1kΩと2kΩの抵抗で分圧して、5Vを約3.3Vに落として接続しましょう。

Arduino D11(TX) ──┬── 1kΩ ──┬── HC-05 RXD
                  │          │
                  │         2kΩ
                  │          │
                 GND        GND

LEDの配線

Arduino D7 ── 220Ω ── LED(+) ── LED(-) ── GND

DCモーターの配線(L298N使用時)

Arduino D5(PWM)── L298N ENA
Arduino D3         ── L298N IN1
Arduino D4         ── L298N IN2
L298N OUT1/OUT2    ── DCモーター
L298N 12V/GND      ── 外部電源

配線が完成したら、次はスケッチ(Arduinoコード)を見ていきましょう。

Arduinoスケッチ(コード解説)

Step1:LED制御スケッチ(まず動作確認)

最初はLEDのON/OFFだけに絞ってBluetoothの通信を確認します。スマホから「1」を送るとLED点灯、「0」で消灯するシンプルなコードです。

#include <SoftwareSerial.h>

// HC-05の接続ピン(RX=10, TX=11)
SoftwareSerial BTSerial(10, 11);

const int LED_PIN = 7; // LEDを接続したピン

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);     // シリアルモニター用
  BTSerial.begin(9600);   // HC-05との通信速度
  Serial.println("Bluetooth待機中...");
}

void loop() {
  if (BTSerial.available()) {        // データが届いたら
    char cmd = BTSerial.read();      // 1文字受け取る
    Serial.print("受信コマンド: ");
    Serial.println(cmd);

    if (cmd == '1') {
      digitalWrite(LED_PIN, HIGH);   // LED点灯
      BTSerial.println("LED ON");    // スマホへ返信
    } else if (cmd == '0') {
      digitalWrite(LED_PIN, LOW);    // LED消灯
      BTSerial.println("LED OFF");
    }
  }
}

ポイントをまとめるとこんな感じです:

  • SoftwareSerialを使うことで、D10/D11ピンをBluetoothのシリアル通信に利用できます
  • シリアルモニターとBTSerialを両方使うため、ボーレートを9600に合わせるのを忘れずに
  • BTSerial.println()でスマホ側にも返答できます(デバッグに便利)

Step2:LED+モーター制御スケッチ(応用版)

LEDが動いたら、次はモーターの速度制御も追加しましょう。スマホから「F」で前進、「S」で停止、「0」〜「9」でLED輝度調整という構成です。

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11);

const int LED_PIN  = 7;
const int ENA_PIN  = 5;  // PWM対応ピン(モーター速度)
const int IN1_PIN  = 3;
const int IN2_PIN  = 4;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(ENA_PIN, OUTPUT);
  pinMode(IN1_PIN, OUTPUT);
  pinMode(IN2_PIN, OUTPUT);
  Serial.begin(9600);
  BTSerial.begin(9600);
}

void loop() {
  if (BTSerial.available()) {
    char cmd = BTSerial.read();
    Serial.print("CMD: "); Serial.println(cmd);

    // --- LED輝度制御(0〜9で10段階) ---
    if (cmd >= '0' && cmd <= '9') {
      int brightness = map(cmd - '0', 0, 9, 0, 255); // 0〜9を0〜255に変換
      analogWrite(LED_PIN, brightness);
      BTSerial.print("輝度: ");
      BTSerial.println(brightness);
    }

    // --- モーター制御 ---
    if (cmd == 'F') {                  // 前進
      digitalWrite(IN1_PIN, HIGH);
      digitalWrite(IN2_PIN, LOW);
      analogWrite(ENA_PIN, 200);       // 速度(0〜255)
      BTSerial.println("モーター前進");
    } else if (cmd == 'S') {           // 停止
      digitalWrite(IN1_PIN, LOW);
      digitalWrite(IN2_PIN, LOW);
      analogWrite(ENA_PIN, 0);
      BTSerial.println("モーター停止");
    }
  }
}

ここが重要です

  • map()関数でスマホからの「0〜9」の数値文字をPWM値(0〜255)に変換しています
  • cmd - '0'で文字コードを数値に変換する書き方は、Arduinoでよく使うテクニックです
  • モータードライバーのENA端子にPWMを入れることで速度をなめらかに変化させられます

スマホアプリの設定方法


Bluetoothのシリアル通信をスマホから送るには、専用アプリを使います。おすすめは「Serial Bluetooth Terminal」(Android向け・無料)です。

手順はこんな感じです:

  1. Google PlayでSerial Bluetooth Terminalをインストール
  2. Arduinoに電源を入れ、HC-05の赤いLEDが点滅しているか確認
  3. Androidの設定 → Bluetooth → 「HC-05」とペアリング(パスワードは1234または0000
  4. アプリを開いて「CONNECT」→「HC-05」を選択
  5. テキスト入力欄に「1」と入力して送信 → LEDが点灯すればOK!✅

⚠️ iPhoneについて:HC-05はBluetooth Classic(2.0)のため、iOSでは標準でペアリングできません。iPhoneを使いたい場合は、BLE(Bluetooth Low Energy)対応のHC-08やHM-10に切り替えることを検討してください。

うまく動かないときのチェックリスト


「通信できない…」というときは、以下を順番に確認してみてください:

  • ☑️ HC-05のLEDが速く点滅している(ペアリング前)→ スマホとペアリングしてから接続
  • ☑️ HC-05のLEDがゆっくり点滅している(接続済み)→ 正常な状態です
  • ☑️ SoftwareSerialのピン番号がコードと回路で一致しているか
  • ☑️ ボーレートが9600になっているか(HC-05のデフォルトは9600)
  • ☑️ 分圧回路の抵抗値が正しいか(1kΩと2kΩ)
  • ☑️ スケッチのアップロード中はHC-05を外す(競合することがある)

特に「スケッチをアップロードするとき、HC-05を接続したままだとエラーになる」という問題はよく起きます。アップロード時だけ外す習慣をつけておきましょう。

まとめ

今回はArduinoとHC-05 Bluetoothモジュールを使って、スマホからLEDのON/OFFとモーターの速度制御を無線で行う方法を解説しました。

ポイントをおさらいすると:

  • HC-05はUART(シリアル通信)をBluetooth化するモジュール
  • ArduinoとHC-05の接続には分圧回路が必要
  • SoftwareSerialを使えばコードの変更は最小限でOK
  • スマホアプリは「Serial Bluetooth Terminal」が手軽

今回のコードをベースに、スマホから複数のLEDを制御したり、サーボモーターと組み合わせてロボットアームを操作したりと、いろんな拡張が楽しめます。ぜひ自分のプロジェクトに取り入れてみてください!💡

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。