Search…

Project 1 - Morse Code Translator

08/08/20207 min read
Hướng dẫn dịch bảng chữ cái Alphabet sang mã Morse trên đèn LED và Buzzer chỉ với đoạn mạch cơ bản và vài dòng code.

Kiến thức về mã morse

Mã Morse loại mã hóa ký tự dùng để truyền các thông điệp, mã Morse gồm các ký tự dài và ngắn để biểu diễn các chữ cái in hoa, chữ số, dấu chấm, và các kí tự đặc biệt. Kí hiệu tường được gọi là "chấm" và "gạch" hay "dot" và "dash" trong tiếng Anh.

A • − N − • 0 − − − − −
B − • • • O − − − 1 • − − − −
C − • − • P • − − • 2 • • − − −
D − • • Q − − • − 3 • • • − −
E R • − • 4 • • • • −
F • • − • S • • • 5 • • • • •
G − − • T 6 − • • • •
H • • • • U • • − 7 − − • • • 
I • • V • • • − 8 − − − • • 
J • − − − W • − − 9 − − − − • 
K − • − X − • • −    
L • − • • Y − • − −    
M − − Z − − • •    

Sử dụng hàm

Serial: đối tượng chứa các hàm giao tiếp giữa các mạch Arduino, có thể hiểu Serial được dùng trong việc giao tiếp giữa các board mạch với nhau (hoặc board mạch với máy tính hoặc với các thiết bị khác.

Lưu ý, nếu bạn đang sử dụng các hàm của thư viện Serial, không thể sử dụng chân digital 0 và digital 1, và tất nhiên chân digital 0 và digital 1 lúc này sẽ có dòng điện. Để mở bảng COM3 giao tiếp với máy tính, bạn ấn tổ hợp phím CTRL + SHIFT + M.

  • Serial.begin(9600): cổng giao tiếp với máy tính, có các tốc độ truyền sau: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, hoặc 115200
  • Serial.available(): kiểm tra giá trị đọc được từ cổng nối tiếp.
  • Serial.read(): nhận giá trị vừa đọc được từ cổng Serial.

Tone: hàm sẽ phát ra âm thanh liên tục cho đến khi gọi hàm noTone(), hàm Tone nhận 2 giá trị

  • Cổng phát.
  • Tần số đơn vị Hertz.

Chuẩn bị

  • Arduino Uno
  • Breadboard
  • Dây cắm breadboard
  • Đèn Led
  • Loa mini

Sơ đồ lắp đặt

sơ đồ lắp đặt
Sơ đồ lắp đặt

Cài đặt

Bước 1: Khai báo

  • Buzzer : buzzer chân số 7.
  • Led : đèn Led chân số 4.
  • ToneMusic : tần số của loa, đơn vị Hertz.
  • DotLength : độ vang của dấu chấm.
  • DashLength : độ vang của dấu gạch ngang.
  • Length : khoảng cách giữa độ vang của Dot và Dash 
  • LengthGap : khoảng cách giữa các từ trong 1 từ, ví dụ "STDIO" thời gian phát ra âm thanh của từng chữ sẽ là "S T D I O".
  • InterWordGap : khoảng cách giữa các cụm từ, ví dụ "STDIO ELECTRONICS". int LengthGap = DotLength * 2; int InterWordGap = DotLength * 4;

Bước 2: Xây dựng hàm Dot và Dash 

Bước 3: Xây dựng hàm SoundLetter dựa trên mã Morse, sau khi nhận giá trị Text, sẽ phát ra âm thanh tương ứng.

Bước 4: khai báo giá trị của biến trong hàm setup(), mở cổng 9600.

Bước 5: Gồm các bước

  • Khai báo biến "text".
  • Kiểm tra giá trị đọc được từ cổng nối tiếp.
  • Nếu có, gán giá trị vừa nhận được vào text.
  • Nếu ký tự là chữ thường, chuyển sang chữ hoa. Khoảng cách của chữ thường và chữ hoa trong bảng mã ASCII là 32.
  • Ký tự không phải Alphabet thì gán rỗng.
  • Gọi hàm SoundLetter.
  • Thời gian phát ra từng từ.
int Buzzer = 7;
int Led = 4;
int ToneMusic = 400;
int DotLength = 100;
int DashLength = DotLength * 3;
int Length = 100;
int LengthGap = DotLength * 2; 
int InterWordGap = DotLength * 4;

void dot()
{  
  tone(Buzzer, ToneMusic ); 
  digitalWrite(Led, HIGH);
  delay(DotLength);
  noTone(Buzzer);  
  digitalWrite(Led, LOW);
  delay(Length);
}

void dash()
{  
  tone(Buzzer, ToneMusic );  
  digitalWrite(Led, HIGH);
  delay(DashLength);
  noTone(Buzzer);  
  digitalWrite(Led, LOW);
  delay(Length);
}

void SoundLetter(char text)
{
  switch(text)
  {
    case 'E':
      dot();
      return; 
    case 'T':
      dash();
      return; 
    case 'A':
      dot();
      dash();
      return;
    case 'O':
      dash();
      dash();
      dash();
      return; 
    case 'I':
      dot();
      dot();
      return;
    case 'N':
      dash();
      dot();
      return;
    case 'S':
      dot();
      dot();
      dot();
      return;
    case 'H':
      dot();
      dot();
      dot();
      dot();
      return;
    case 'R':
      dot();
      dash();
      dot();
      return;
    case 'D':
      dash();
      dot();
      dot();
      return;
    case 'L':
      dot();
      dash();
      dot();
      dot();
      return;
    case 'C':
      dash();
      dot();
      dash();
      dot();
      return;
    case 'U':
      dot();
      dot();
      dash();
      return;
    case 'M':
      dash();
      dash();
      return;
    case 'W':
      dot();
      dash();
      dash();
      return;
    case 'F':
      dot();
      dot();
      dash();
      dot();
      return;
    case 'G':
      dash();
      dash();
      dot();
      return;
    case 'Y':
      dash();
      dot();
      dash();
      dash();
      return;
    case 'P':
      dot();
      dash();
      dash();
      dot();
      return;
    case 'B':
      dash();
      dot();
      dot();
      dot();
      return;
    case 'V':
      dot();
      dot();
      dot();
      dash();
      return;
    case 'K':
      dash();
      dot();
      dash();
      return;
    case 'J':
      dot();
      dash();
      dash();
      dash();
      return;
    case 'X':
      dash();
      dot();
      dot();
      dash();
      return;
    case 'Q':
      dash();
      dash();
      dot();
      dash();
      return;
    case 'Z':
      dash();
      dash();
      dot();
      dot();
      return;
    case ' ':
      delay(InterWordGap);
      return; 
  }
}

void setup()
{  
  pinMode(Buzzer,OUTPUT);
  pinMode(Led,OUTPUT);  
  Serial.begin(9600);
}

void loop()
{
  char text;
  if( Serial.available ())
  {
    text = Serial.read();
    if(text >= 'a' && text <='z')
    {      
      text = text - 32;
    }
    if(text < 65 || text > 90)
    {
      text = ' ';
    }
    SoundLetter(text);
    delay(LengthGap);
  }
}

Kết quả

Sau khi nối mạch và nạp code như trên, ta thực hiện bước cuối cùng, chuyển ký tự sang mã Morse bằng cách ấn tổ hợp phím CTRL + SHIFT + M, điền từ cần dịch và ấn nút "Send".

STDIO ELECTRONICS
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024