산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노로 모스 부호 송신기 만들기 – 쉬운 DIY 가이드

부품 및 소모품

부품수량비고
아두이노 우노1
SparkFun 푸시버튼 스위치 12mm22핀 푸시 버튼 사용
LED (일반)1
부저1
저항 330Ω4
브레드보드 (일반)1
점퍼 와이어 (일반)10아두이노 보드에서 브레드보드로 연결용

앱 및 온라인 서비스

프로젝트 소개

아이디어 설명

우리는 자연스러운 센서(혀, 제스처 등)를 통해 서로 소통합니다. 흥미로운 부분은 비밀 정보를 누군가와 공유하고 싶을 때 시작됩니다. 어떻게 하면 제3자가 메시지를 보아도 열쇠를 찾기 전까지는 이해할 수 없게 할 수 있을까요?

이를 위해 모스 부호 통신을 사용했습니다. 다른 방식도 가능하지만 모스 부호를 선택했습니다.

모스 부호란?

모스 부호는 원래 문자를 점(.)과 대시(-)의 조합으로 표현하여 정보를 전달하는 통신 방식입니다. 예: A → .- , B → -...

모스 부호에 대한 더 많은 정보는 여기를 클릭하세요.

아두이노로 모스 부호 송신기 만들기 – 쉬운 DIY 가이드

왜 모스 부호를 선택했나?

이유는 간단합니다. 최근에 요원이 버튼을 클릭하여 정보를 전달하고, 수신 측에서 이를 해독하는 영화를 보았습니다. 그래서 아두이노와 간단한 기본 부품으로 이것을 만들어보기로 했습니다.

이 프로젝트의 작동 원리

브레드보드에 회로를 만들고 스케치를 업로드하면 매우 간단합니다. 시리얼 모니터를 클릭하면 아래 이미지처럼 표시됩니다.

아두이노로 모스 부호 송신기 만들기 – 쉬운 DIY 가이드

지시를 따라하면 바로 사용할 수 있습니다.

혼란스러운 점이 있다면 시연 영상을 시청하세요.

코드

모스 부호 소스 코드

이제 스케치를 업로드할 준비가 되었습니다.
아두이노 IDE를 열고 툴바 File → Open → MorseCode.ino를 클릭하고 업로드 버튼을 누르세요.

/* This Program is for demonstration of MORSE CODE Communication which was use to send information secretly using codes of combinations dots . and dashes - Thanks to open source community 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 to I
  ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
  // J to R
  ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
  // S to 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 you are done Write 1 on above input box and Press Enter or click Send Button ");
  Serial.println("3. For Space between letters write 2 and Press Enter ");
  Serial.println("4. For Space between words write 3 and Press Enter ");
  Serial.println("5. Thats all Translation of Morse Code will then be Shown ");
  Serial.println("\n\nEnter Your Morse Code Here ");
}

void loop() {
  while (Serial.available() > 0) {
    int ascii = Serial.read();
    switch (ascii) {
      case 49: // 49는 '1'의 ASCII 값
        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: // 50은 '2'의 ASCII 값
        morseCode.concat("@");
        Serial.print("@");
        delay(200);
        break;
      case 51: // 51은 '3'의 ASCII 값
        morseCode.concat("#");
        Serial.print("#");
        delay(200);
        break;
    }
  }
  process();
}

void turnONLedSpeaker() {
  // LED 켜기
  digitalWrite(ledPin, HIGH);
  tone(speakerPin, 4699, 300); // tone(핀, 주파수, 지속시간 ms)
}

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 {
    // LED 끄기
    digitalWrite(ledPin, LOW);
  }
}

char convertIntoText(String characterCode) {
  characterAscii = 65; // 'A'
  for (int index = 0; index < SIZE; index++) {
    if (characterCode == letters[index]) {
      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 = "";
}

회로도

아두이노 디지털 핀에서 브레드보드로의 연결 지침:

나머지 연결은 회로도 그림을 참조하세요. 완료!

아두이노로 모스 부호 송신기 만들기 – 쉬운 DIY 가이드

제조공정

  1. 아두이노 메가에서 푸시 버튼으로 PWM을 이용해 LED 밝기 제어하기
  2. 아두이노만으로 DTMF 디코더 구축하기 – 추가 IC 불필요
  3. 아두이노로 초음파 부양 장치 만들기: 단계별 가이드
  4. 레이저 모듈로 구현하는 모스 부호 통신 – 아두이노 양방향 프로젝트
  5. 스마트 IoT 자 제작: ESP8266, 아두이노 & 초음파 센서로 실시간 모니터링
  6. 아두이노 아이언맨 제작: 부품, 센서, 단계별 가이드
  7. 아두이노와 블루투스로 만드는 스마트 물건 찾기 'Find Me'
  8. 아두이노로 지구 질량 측정하기: 단계별 DIY 가이드
  9. 아두이노 릴레이 제어 가습기 자동화 – 고전압 안전 설계
  10. 아두이노 소나 & 프로세싱으로 실시간 거리 측정 및 시각화