ระบบสื่อสารรหัส Morse ผ่านแสงเลเซอร์ (Morse Code Optical Communication)
รหัส Morse (Morse Code) คือหนึ่งในวิธีการสื่อสารที่คลาสสิกและทรงพลังที่สุดในประวัติศาสตร์ โดยการเปลี่ยนอักขระอัลฟานิวเมริก (ตัวอักษรและตัวเลข) ให้กลายเป็นชุดของ "จุด" (Dots) และ "ขีด" (Dashes) ที่มีรูปแบบเฉพาะตัวในแต่ละสัญลักษณ์ ในอดีตรหัส Morse ถูกใช้เพื่อส่งข้อมูลลับหรือข้อมูลผ่านทางสายโทรเลข แต่ในโปรเจคนี้ เราจะยกระดับการสื่อสารนี้ไปสู่ยุคของ Optical Wireless Communication (OWC)
โปรเจคนี้ประกอบด้วยสองส่วนหลักคือ ภาคส่ง (Transmitter) และ ภาครับ (Receiver) ความโดดเด่นที่ทำให้โปรเจคนี้แตกต่างจากระบบ Morse Code อื่นๆ บนอินเทอร์เน็ตคือ "อัลกอริทึมภาครับ" ที่ได้รับการออกแบบมาให้เรียบง่ายแต่มีประสิทธิภาพสูง ลดความซับซ้อนในการคำนวณลงอย่างมาก
ภาพรวมการทำงานและวิดีโอสาธิต
ในโปรเจคนี้ เราใช้แสงเลเซอร์เป็นตัวนำสัญญาณ (Carrier) เนื่องจากแสงเลเซอร์มีความเข้มสูงและมีการกระจายตัวต่ำ ทำให้สามารถส่งสัญญาณไปได้ไกลในแนวเส้นตรง

ขั้นตอนที่ 1: ภาคส่งสัญญาณ (Transmitter Section)
ภาคส่งทำหน้าที่เป็น "Encoder" โดยรับข้อมูลตัวอักษรที่เราต้องการส่ง แล้วทำการแปลงเป็นสัญญาณ Digital (เปิด-ปิดแสงเลเซอร์) ตามจังหวะของรหัส Morse



รายการอุปกรณ์ (Hardware Required):
- Arduino Uno: บอร์ดประมวลผลหลักสำหรับควบคุมจังหวะการยิงแสง
- LASER Transmitter Module: แหล่งกำเนิดแสงเลเซอร์เพื่อส่งสัญญาณระยะไกล
- Breadboard & Jumper Wires: สำหรับเชื่อมต่อวงจร
การต่อวงจร (Connections):
การเชื่อมต่อภาคส่งนั้นเรียบง่ายมาก โดยใช้ขา Digital I/O ในการควบคุมกระแสไฟฟ้าที่ไปเลี้ยงเลเซอร์:
- ต่อขาบวก (Positive/Signal) ของโมดูล LASER เข้ากับ Digital Pin 13 ของ Arduino
- ต่อขา GND ของ LASER เข้ากับขา GND ของ Arduino
ตรรกะการทำงานของโปรแกรม (Program Logic):
อัลกอริทึมในฝั่งส่งสัญญาณมีการทำงานเป็นลำดับดังนี้:
- Input Storage: กำหนดอักขระที่ต้องการส่งไว้ในรูปแบบของ Array ของ Character
- Pin Definition: กำหนดขา Output (Pin 13) เพื่อส่งสัญญาณไฟฟ้าไปยังเลเซอร์
- Timing Control: กำหนดความเร็ว (Unit Time) ของรหัส Morse ซึ่งจะเป็นตัวกำหนดว่า "จุด" และ "ขีด" จะมีความยาวกี่มิลลิวินาที
- Symbol Mapping: ใช้โครงสร้าง
switch caseเพื่อตรวจสอบว่าตัวอักษรแต่ละตัวคืออะไร จากนั้นจึงสั่งให้เลเซอร์สถานะเป็นHIGH(เปิด) และLOW(ปิด) ตามรูปแบบ Dots และ Dashes ที่กำหนดไว้ในมาตรฐานสากล
ขั้นตอนที่ 2: ภาครับสัญญาณ (Receiver Section)
ภาครับทำหน้าที่เป็น "Decoder" โดยการตรวจจับแสงเลเซอร์ที่ถูกยิงมาจากภาคส่ง แปลงค่ากลับเป็นสัญญาณไฟฟ้า และใช้ซอฟต์แวร์ในการถอดรหัสออกมาเป็นตัวอักษรเดิมเพื่อแสดงผลบน Serial Monitor




รายการอุปกรณ์ (Hardware Required):
- Arduino Uno: ประมวลผลสัญญาณ Analog จากเซนเซอร์
- LDR (Light Dependent Resistor): ตัวต้านทานปรับค่าตามแสง ทำหน้าที่เป็นตัวรับสัญญาณแสง
- Resistor 10K ohm: ใช้ในการทำวงจรแบ่งแรงดัน (Voltage Divider)
- อุปกรณ์เสริม: กระดาษสีดำสำหรับทำโดมครอบเพื่อกันแสงรบกวน (Ambient Light)
การต่อวงจร (Connections):
เราใช้หลักการ Voltage Divider เพื่ออ่านค่าการเปลี่ยนแปลงความต้านทานของ LDR เมื่อได้รับแสงเลเซอร์:
- ต่อขาด้านหนึ่งของ LDR เข้ากับแรงดัน 5V
- ต่อขาอีกด้านของ LDR เข้ากับขา Analog Input A0 และเชื่อมต่อผ่าน Resistor 10K ohm ลงไปที่ GND
- เมื่อแสงเลเซอร์ตกกระทบ LDR ความต้านทานจะลดลง ทำให้แรงดันที่ขา A0 สูงขึ้น
อัลกอริทึมการประมวลผลสัญญาณ (Simplified Algorithm):
หัวใจของโปรเจคนี้คือการวิเคราะห์สัญญาณที่รับมาอย่างชาญฉลาดโดยอาศัยการสังเกต (Observation-based logic):
- Threshold Setting: ในสภาวะปกติที่ไม่มีเลเซอร์ ค่าที่อ่านได้จาก LDR จะต่ำกว่า 1000 (จากการทำเป็น Digital Threshold) หากสภาพแวดล้อมสว่างเกินไป เราจำเป็นต้องใช้ "โดมสีดำ" ครอบ LDR ไว้เพื่อเพิ่มค่า Signal-to-Noise Ratio
- Quantization: เมื่อเลเซอร์ยิงมาโดน LDR ค่า Analog จะพุ่งสูงขึ้น (มากกว่า 1000) ระบบจะตีความเป็นสถานะ logic '1' และหากต่ำกว่านั้นจะเป็น logic '0'
- Pulse Counting: อัลกอริทึมจะทำงานใน Loop เพื่อเก็บสถิติ:
- ตัวแปร 'a': ใช้สำหรับนับจำนวนครั้งที่พบสถานะ '1' (ความยาวของช่วงที่มีแสง)
- ตัวแปร 'f': ใช้สำหรับนับจำนวนครั้งที่พบสถานะ '0' (ความยาวของช่วงที่ไม่มีแสง)
- Pattern Recognition: แทนที่จะใช้สูตรคำนวณที่ซับซ้อน อัลกอริทึมจะตรวจสอบค่าของ 'a' และ 'f' ที่สัมพันธ์กัน ตัวอักษรแต่ละตัวจะมี "ลายเซ็น" ของค่าความถี่และช่วงเวลาที่ต่างกัน เมื่อค่าที่นับได้ตรงกับเงื่อนไขที่ตั้งไว้ โปรแกรมจะสั่งพิมพ์ตัวอักษรนั้นออกทาง Serial Monitor ทันที
ข้อจำกัดและแนวทางการพัฒนาต่อ (Limitations & Future Enhancements)
โปรแกรมต้นแบบที่ให้มานี้ถูกออกแบบมาเพื่อสาธิตการทำงานกับตัวอักษรบางชุดเพื่อความเข้าใจในเชิงวิศวกรรม (Proof of Concept) อย่างไรก็ตาม คุณสามารถพัฒนาต่อยอดได้ดังนี้:
- Expansion: เพิ่มชุด Combination ของค่า 'a' และ 'f' ให้ครบทุกตัวอักษร (A-Z) และตัวเลข (0-9)
- Auto-Calibration: เขียน Code ให้ปรับค่า Threshold อัตโนมัติโดยวัดค่าแสงพื้นหลัง (Ambient Light) ก่อนเริ่มรับสัญญาณ
- Error Correction: เพิ่มระบบตรวจสอบความผิดพลาดของข้อมูลเพื่อให้การสื่อสารแม่นยำยิ่งขึ้น แม้จะมีแสงรบกวนเพียงเล็กน้อย
โปรเจคนี้ไม่เพียงแต่ให้ความรู้เรื่องการเขียนโปรแกรม Arduino แต่ยังสอนให้เข้าใจถึงหลักการพื้นฐานของ Signal Processing และการประยุกต์ใช้เซนเซอร์ในงานสื่อสารไร้สายจริง