工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoでモールス信号送信機を作る - 簡単DIYガイド

必要な部品と材料

Arduino Uno ×1
タクトスイッチ (12mm、2ピンタイプ使用) ×2
LED (汎用) ×1
ブザー (圧電ブザー等) ×1
抵抗 330Ω ×4
ブレッドボード ×1
ジャンパーワイヤー ×10

アプリとオンラインサービス

プロジェクト概要

アイデアの背景

私たちは言葉やジェスチャーでコミュニケーションを取りますが、秘密の情報を伝えたいとき、第三者に内容を悟られずに伝える方法が必要です。そこで モールス符号 を用いた通信装置をArduinoで作ることにしました。

モールス符号とは

アルファベットなどの文字を「・ (ドット/短点)」と「- (ダッシュ/長点)」の組み合わせで表す通信方式です。例: A → `.-`、B → `-...`。詳細: モールス符号の歴史

Arduinoでモールス信号送信機を作る - 簡単DIYガイド

なぜモールス符号を選んだか

映画でエージェントがボタンを押して情報を伝え、受信側が解読するシーンを見て、Arduinoと基本部品で再現できると考えました。

動作の仕組み

ブレッドボードで回路を組み、スケッチを書き込んでシリアルモニタを開くと、以下のような指示が表示されます。

Arduinoでモールス信号送信機を作る - 簡単DIYガイド

指示に従って操作すれば、モールス符号の送信/受信/変換が体験できます。

スケッチ (モールス符号 ソースコード)

/* 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デジタルピンとブレッドボードの接続:

Arduinoでモールス信号送信機を作る - 簡単DIYガイド

詳細は画像の回路図を参照してください。

製造プロセス

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