กลับไปหน้ารวมไฟล์
use-morse-code-on-an-led-f0ef0d.md

title: การเปลี่ยนแสงไฟให้เป็นภาษา: เรียนรู้การสร้างเครื่องส่งรหัสมอร์สด้วย Arduino และ LED

เปลี่ยน LED ธรรมดาให้เป็นเครื่องสื่อสารรหัสมอร์ส (Morse Code)

รหัสมอร์ส (Morse Code) คือหนึ่งในวิธีการสื่อสารที่เก่าแก่และทรงพลังที่สุดในประวัติศาสตร์วิศวกรรมโทรคมนาคม โดยการใช้เพียงสัญญาณ "จุด" (Dot) และ "ขีด" (Dash) เพื่อแทนตัวอักษรและตัวเลข ในโปรเจคนี้ เราจะสวมบทบาทเป็นวิศวกรระบบฝังตัวเพื่อสร้างอุปกรณ์ส่งสัญญาณแสงผ่าน LED โดยใช้บอร์ด Arduino เป็นตัวประมวลผลหลัก

นี่คือพื้นฐานที่ดีเยี่ยมสำหรับการเรียนรู้เรื่อง Timing Control (การควบคุมจังหวะเวลา) และ Logic Implementation (การนำตรรกะมาปรับใช้ในโค้ด) ในงานด้าน Embedded Systems

Learn how to display Morse code on an average LED.


ส่วนประกอบที่สำคัญในเชิงวิศวกรรม

การจะสร้างวงจรส่งสัญญาณที่มีเสถียรภาพ เราจำเป็นต้องเข้าใจบทบาทของอุปกรณ์แต่ละชิ้นดังนี้:

  1. Arduino Board (Uno/Nano/Mega): ทำหน้าที่เป็นหน่วยประมวลผลกลาง (MCU) ซึ่งจะเก็บ Logic ของรหัสมอร์สและควบคุมสถานะ Logic High/Low ที่พิน Output
  2. LED (Light Emitting Diode): อุปกรณ์กึ่งตัวนำที่ทำหน้าที่เปลี่ยนพลังงานไฟฟ้าเป็นพลังงานแสง (Photons) ในโปรเจคนี้มันคือตัวกลางในการส่งสาร
  3. Resistor (220Ω - 330Ω): มีความสำคัญอย่างยิ่งในการจำกัดกระแสไฟฟ้า (Current Limiting) ตามกฎของโอห์ม ($V = IR$) เพื่อป้องกันไม่ให้ LED เสียหายจากการได้รับกระแสเกิน
  4. Breadboard และสายจัมเปอร์: สำหรับการสร้างต้นแบบวงจรที่รวดเร็วและไม่ต้องบัดกรี

พื้นฐานรหัสมอร์สและตรรกะการหน่วงเวลา

หัวใจสำคัญของรหัสมอร์สคือ "จังหวะเวลา" (Timing) ซึ่งมีมาตรฐานสากลดังนี้:

  • Dot (จุด): หน่วยเวลาพื้นฐาน (เช่น 200ms)
  • Dash (ขีด): มีความยาวเป็น 3 เท่าของ Dot (เช่น 600ms)
  • ช่องว่างระหว่างสัญลักษณ์ (Inter-element gap): เท่ากับ 1 Dot
  • ช่องว่างระหว่างตัวอักษร (Short gap): เท่ากับ 3 Dots
  • ช่องว่างระหว่างคำ (Medium gap): เท่ากับ 7 Dots

การต่อวงจร (Circuit Diagram)

การเชื่อมต่อทำได้ง่ายและตรงไปตรงมา:

  1. ต่อขา Anode (ขอยาว) ของ LED เข้ากับพินดิจิทัล (เช่น Pin 13) ของ Arduino
  2. ต่อขา Cathode (ขาสั้น) ของ LED เข้ากับตัวต้านทาน 220 โอห์ม
  3. ต่อปลายอีกด้านของตัวต้านทานลงไปยังพิน GND ของ Arduino

(โปรดคงภาพไดอะแกรมเดิมไว้ที่นี่)


การวิเคราะห์ลอจิกของซอฟต์แวร์ (Code Analysis)

ในการเขียนโปรแกรม เราจะสร้างฟังก์ชันแยกส่วน (Modular Functions) เพื่อให้โค้ดอ่านง่ายและนำไปใช้งานซ้ำได้ โดยมีการใช้พารามิเตอร์ของเวลาเป็นตัวกำหนดความหมายของแสง

// กำหนดพินและหน่วยเวลาพื้นฐาน
const int ledPin = 13;
const int unitDelay = 200; // 1 Unit = 200ms

void setup() {
  pinMode(ledPin, OUTPUT);
}

// ฟังก์ชันสำหรับสร้างสัญญาณ Dot
void dot() {
  digitalWrite(ledPin, HIGH);
  delay(unitDelay);
  digitalWrite(ledPin, LOW);
  delay(unitDelay); // เว้นระยะระหว่างสัญลักษณ์
}

// ฟังก์ชันสำหรับสร้างสัญญาณ Dash
void dash() {
  digitalWrite(ledPin, HIGH);
  delay(unitDelay * 3); // Dash ยาวกว่า Dot 3 เท่า
  digitalWrite(ledPin, LOW);
  delay(unitDelay);
}

// ตัวอย่างการส่งคำว่า "SOS"
void loop() {
  // S: . . .
  dot(); dot(); dot();
  delay(unitDelay * 2); // เว้นระหว่างตัวอักษร (รวมของเดิมเป็น 3 units)

  // O: - - -
  dash(); dash(); dash();
  delay(unitDelay * 2);

  // S: . . .
  dot(); dot(); dot();

  delay(unitDelay * 6); // เว้นระหว่างรอบใหม่ (รวมของเดิมเป็น 7 units)
}

คำอธิบายการทำงานของโค้ด:

  1. Abstraction: เราแยกการทำงานของ dot() และ dash() ออกมา เพื่อให้ใน loop() เราสามารถเขียนโค้ดตามลำดับอักษรได้ทันที
  2. State Management: การใช้ digitalWrite(ledPin, HIGH) คือการปล่อยแรงดันไฟ 5V เพื่อให้ LED สว่าง และ LOW คือการตัดไฟ
  3. Timing Ratio: สังเกตว่าในฟังก์ชัน dash() เราใช้ unitDelay * 3 ซึ่งเป็นไปตามมาตรฐานสากล ทำให้ผู้รับสารสามารถแยกแยะความแตกต่างระหว่างจุดและขีดได้อย่างแม่นยำ

บทสรุปและการนำไปต่อยอด

โปรเจคนี้ไม่เพียงแต่สอนให้คุณเปิด-ปิดไฟ LED เท่านั้น แต่ยังปูพื้นฐานเรื่อง Serial Communication แบบใช้แสง และการจัดการ Time Management ในระบบสมองกลฝังตัว

หากคุณต้องการยกระดับโปรเจคนี้ คุณสามารถ:

  • เพิ่ม Piezo Buzzer เพื่อให้มีเสียงควบคู่ไปกับแสง
  • สร้างฟังก์ชันรับค่าจาก Serial Monitor แล้วแปลงข้อความ (String) ให้เป็นรหัสมอร์สโดยอัตโนมัติโดยใช้ Arrays หรือ Switch-Case
  • ใช้ปุ่มกด (Push Button) เพื่อฝึกการเคาะรหัสมอร์สด้วยตัวเองและแสดงผลออกหน้าจอ LCD

การสื่อสารด้วยแสงอาจดูเรียบง่าย แต่ในสถานการณ์ฉุกเฉินหรือในงานวิศวกรรมที่ต้องการความประหยัดพลังงานสูงสุด หลักการเหล่านี้ยังคงถูกนำมาใช้งานจนถึงปัจจุบัน

ข้อมูล Frontmatter ดั้งเดิม

title: "Use Morse Code on an LED!!"
description: "This example shows S.O.S in Morse code!"
author: "stannano"
category: ""
tags:
  - "lights"
  - "led"
  - "simple"
  - "quick"
  - "fun"
views: 7899
likes: 0
price: 299
difficulty: "Easy"
components:
  - "1x Arduino UNO"
  - "1x LED (generic)"
  - "1x 10 Pc. Jumper Wire Kit, 5 cm Long"
  - "1x Breadboard, 170 Pin"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "0b323b389d21b8974745efb8ce2f7b2f2e9ea427ec9c38ecceeb0ee2078090ea"
encryptedPayload: "U2FsdGVkX19g0lD4btJffKNc1gkSEd6/XXwfBbASYw0Uf1VFidJRNXNKdsYXa76uQTuASh2GUW0AKpq4JseuAGUd9qnPYHC6kZi3i/RFuuE="
seoDescription: "Learn how to send S.O.S signals using Morse Code on an LED in this simple Arduino tutorial."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/use-morse-code-on-an-led-f0ef0d_cover.jpg"
lang: "en"