Bài viết hỗ trợ tài liệu cho chương trình đào tạo lập trình web front-end với Angular cho doanh nghiệp của STDIO Training.
Quý doanh nghiệp vui lòng liên hệ tại đây.
STDIO Tiếp theo trong phần hướng dẫn sử dụng bộ STDIO Starter Kit v2. Giúp cho các bạn đang tìm hiểu về mạch Arduino có kiến thức về nền tảng trước khi tạo ra những sản phẩm riêng. Ở bài viết này tôi sẽ hướng dẫn các bạn làm mã Morse trên đèn Led và Buzzer.
Nội dung bài viết

Giới thiệu

Tiếp theo trong phần hướng dẫn sử dụng bộ STDIO Starter Kit V3. Ở bài viết này tôi sẽ hướng dẫn các bạn dịch bảng chữ cái Alphabet sang mã Morse trên đèn Led và Buzzer.

Tiền đề bài viết

Trong quá trình thực hành với bộ STDIO Starter Kit V3, tôi chợt nghĩ tới việc ứng dụng đèn Led kết hợp Buzzer để phát mã Morse. Chỉ với đoạn mạch cơ bản và vài dòng code, bạn có thể chuyển đổi các thông điệp sang mã Morse. Với những kiến thức về mạch điện tử, ở bài viết này sẽ nâng cao hơn, tất nhiên đều trong khả năng của các bạn vì đây là 1 ứng dụng rất dễ dàng.

Đối tượng hướng đến

Chương trình này hướng đến các bạn ĐANG LÀM QUEN với việc lập trình Arduino và đã có trên tay bộ STDIO Starter Kit V3. Bạn đọc có thể tham khảo các bài viết khác về Arduino trong Chuyên Mục Arduino. Các linh kiện điện tử cần thiết các bạn có thể tự mua hoặc truy cập STDIO Electronics​​​ để ủng hộ sản phẩm của STDIO. 

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.

ss_2

Sử dụng hàm

Sau đây là những hàm tôi sử dụng trong bài viết 

- Serial : thư viện 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

  • 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

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

Lời kết

Qua bài viết này, chúng ta có thể thực hiện và hiểu thêm về một số hàm, thư viện cũng như cách giao tiếp giữa các board mạch.Mong rằng qua những bài viết này, các bạn có thể vận dụng và sáng tạo thêm, tiếp theo sẽ là những chuỗi bài hướng dẫn dành cho các bạn mới bắt đầu, tất cả đều có trong bộ STDIO Starter Kit v2. Hãy tham gia cùng Stdio để tìm kiếm những thử thách mới cùng Arduino.

THẢO LUẬN
ĐÓNG