ArduinoとBluetoothモジュール(HC-05)でスマホからLEDやモーターを無線制御する方法【回路図・コード完全解説】
「Arduinoで作ったものを、スマホから無線で操作したい!」
そう思ったことはありませんか?ケーブルを引っ張りながら操作するのは不便ですよね。でも実は、HC-05というBluetoothモジュールを使えば、スマホからArduinoを無線でコントロールするのが意外とシンプルに実現できます。
今回は、HC-05の配線から、LEDのON/OFF制御、さらにモーターの速度制御まで、回路図・コードを使って丸ごと解説します。「Bluetoothって難しそう…」という印象が、「これなら自分でもできそう!」に変わるはずです。😊
この記事の対象読者はArduino初〜中級者の方です。はんだづけ不要のブレッドボード配線で完結しますので、安心して進めてください!
HC-05 Bluetoothモジュールとは?

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向け・無料)です。
手順はこんな感じです:
- Google PlayでSerial Bluetooth Terminalをインストール
- Arduinoに電源を入れ、HC-05の赤いLEDが点滅しているか確認
- Androidの設定 → Bluetooth → 「HC-05」とペアリング(パスワードは1234または0000)
- アプリを開いて「CONNECT」→「HC-05」を選択
- テキスト入力欄に「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コースや電子部品もまとめています。
📚 関連商品・おすすめ書籍
※本記事にはアフィリエイトリンクが含まれます。





