Arduinoでモールス信号送信機を作る - 簡単DIYガイド
必要な部品と材料
| Arduino Uno | ×1 |
| タクトスイッチ (12mm、2ピンタイプ使用) | ×2 |
| LED (汎用) | ×1 |
| ブザー (圧電ブザー等) | ×1 |
| 抵抗 330Ω | ×4 |
| ブレッドボード | ×1 |
| ジャンパーワイヤー | ×10 |
アプリとオンラインサービス
- Arduino IDE
プロジェクト概要
アイデアの背景
私たちは言葉やジェスチャーでコミュニケーションを取りますが、秘密の情報を伝えたいとき、第三者に内容を悟られずに伝える方法が必要です。そこで モールス符号 を用いた通信装置をArduinoで作ることにしました。
モールス符号とは
アルファベットなどの文字を「・ (ドット/短点)」と「- (ダッシュ/長点)」の組み合わせで表す通信方式です。例: A → `.-`、B → `-...`。詳細: モールス符号の歴史

なぜモールス符号を選んだか
映画でエージェントがボタンを押して情報を伝え、受信側が解読するシーンを見て、Arduinoと基本部品で再現できると考えました。
動作の仕組み
ブレッドボードで回路を組み、スケッチを書き込んでシリアルモニタを開くと、以下のような指示が表示されます。

指示に従って操作すれば、モールス符号の送信/受信/変換が体験できます。
スケッチ (モールス符号 ソースコード)
/* MORSE CODE Communication Demo by Jalal Mansoori */
#define SIZE 26
const int ledPin = 8;
const int speakerPin = 12;
const int dotButton = 2;
const int dashButton = 7;
String morseCode = "";
String text = "";
int characterAscii = 0;
int startPos = 0, endPos = 0;
int startPos1 = 0, endPos1 = 0;
String characterCode = "";
int dashButtonState = 0;
int dotButtonState = 0;
// A-Z のモールス符号
String letters[SIZE] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", // A-I
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", // J-R
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." // S-Z
};
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(dotButton, INPUT);
pinMode(dashButton, INPUT);
Serial.begin(9600);
Serial.println("*************************************************************");
Serial.println(" Demonstration of Morse Code ");
Serial.println("*************************************************************");
Serial.println("\nInstructions");
Serial.println("1. First Write Your Morse code");
Serial.println("2. When done, enter '1' and press Enter/Send");
Serial.println("3. For space between letters, enter '2' and press Enter");
Serial.println("4. For space between words, enter '3' and press Enter");
Serial.println("5. Translation will be shown");
Serial.println("\n\nEnter Your Morse Code Here ");
}
void loop() {
while (Serial.available() > 0) {
int ascii = Serial.read();
switch (ascii) {
case 49: // '1' - 変換実行
Serial.print("\n");
morseCode.concat('#');
Serial.print("\nYour Morse code Translation: ");
endPos1 = morseCode.indexOf('#');
while (endPos1 < morseCode.length()) {
extractLetters(morseCode.substring(startPos1, endPos1));
startPos1 = endPos1 + 1;
if (startPos1 == morseCode.length()) break;
endPos1 = morseCode.indexOf('#', startPos1);
}
startPos1 = 0; endPos1 = 0;
text = ""; morseCode = "";
Serial.println("\n\nEnter Your Morse Code Here ");
break;
case 50: // '2' - 文字間スペース
morseCode.concat("@");
Serial.print("@");
delay(200);
break;
case 51: // '3' - 単語間スペース
morseCode.concat("#");
Serial.print("#");
delay(200);
break;
}
}
process();
}
void turnONLedSpeaker() {
digitalWrite(ledPin, HIGH);
tone(speakerPin, 4699, 300);
}
void process() {
dotButtonState = digitalRead(dotButton);
dashButtonState = digitalRead(dashButton);
if (dashButtonState == HIGH) {
turnONLedSpeaker();
morseCode.concat("-");
Serial.print("-");
delay(200);
} else if (dotButtonState == HIGH) {
turnONLedSpeaker();
morseCode.concat(".");
Serial.print(".");
delay(200);
} else {
digitalWrite(ledPin, LOW);
}
}
char convertIntoText(String characterCode) {
characterAscii = 65; // 'A'
for (int i = 0; i < SIZE; i++) {
if (characterCode == letters[i]) return characterAscii;
characterAscii++;
}
return '?';
}
void extractLetters(String words) {
words.concat('@');
endPos = words.indexOf('@');
while (endPos < words.length()) {
characterCode = words.substring(startPos, endPos);
text.concat(convertIntoText(characterCode));
startPos = endPos + 1;
characterCode = "";
if (startPos == words.length()) break;
endPos = words.indexOf('@', startPos);
}
Serial.print(text);
Serial.print(" ");
startPos = 0; endPos = 0; text = "";
}
回路図 / 配線説明
Arduinoデジタルピンとブレッドボードの接続:
- D2 → プッシュボタン1 (ドット用) の片足
- D7 → プッシュボタン2 (ダッシュ用) の片足
- D8 → 330Ω抵抗経由でLEDアノード (カソードはGND)
- D12 → 330Ω抵抗経由でブザー正極 (負極はGND)
- ボタンのもう片足はそれぞれGNDに接続 (内部プルアップ使用推奨:
pinMode(pin, INPUT_PULLUP)ならロジック反転に注意)

詳細は画像の回路図を参照してください。
製造プロセス
- Arduino MegaでPWM制御:プッシュボタン付きLEDフェード制御チュートリアル
- ArduinoだけでDTMFデコーダーを構築 – 外付けIC不要
- Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
- レーザーモジュールでモールス信号通信 – Arduino二台で送受信
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoで地球の質量を測定:ステップバイステップDIYガイド
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
- スマート駐車場カウンター:Arduino、Processing、PHPでリアルタイム車両管理