title: Arduino Morse Code Translator description: เปลี่ยนข้อความจาก Serial Monitor ให้กลายเป็นรหัส Morse ผ่านแสงไฟและเสียง
เคยมั้ย? ในวันที่คุณรู้สึกว่างจนอยากจะลองทำโปรเจคอะไรสนุกๆ ขึ้นมาสักอย่าง ผมเองก็เป็นแบบนั้นครับ! เมื่อไม่กี่วันที่ผ่านมาผมเหลือบไปเห็น Piezo Buzzer และหลอด LED วางอยู่บนโต๊ะ ไอเดียหนึ่งจึงปิ๊งขึ้นมาว่า "ทำไมเราไม่สร้างเครื่องแปลรหัส Morse (Morse Code Translator) ที่สามารถรับข้อความจาก Serial Monitor แล้วแปลงออกมาเป็นสัญญาณเสียงและแสงแบบ Real-time ล่ะ?"
ในโปรเจคนี้ ผมได้พัฒนาโปรแกรมบนบอร์ด Croduino (ซึ่งเป็นบอร์ดสัญชาติโครเอเชียที่มีพื้นฐานเดียวกับ Arduino Nano ดังนั้นเพื่อนๆ สามารถใช้ Arduino รุ่นไหนก็ได้ที่มีอยู่ ไม่ว่าจะเป็น Uno, Nano หรือ Mega) โดยเน้นไปที่การประมวลผลสตริง (String) และการควบคุมจังหวะเวลา (Timing) ของอุปกรณ์เอาต์พุต
ส่วนประกอบสำคัญในเชิงวิศวกรรม
- Piezo Buzzer: อุปกรณ์ชิ้นนี้ทำงานโดยใช้ปรากฏการณ์ Piezoelectric เมื่อเราจ่ายแรงดันไฟฟ้าเข้าไป แผ่นเซรามิกภายในจะสั่นสะเทือนจนเกิดเป็นคลื่นเสียง ในโปรเจคนี้เราใช้มันเพื่อสร้างสัญญาณเสียง "สั้น" (Dot) และ "ยาว" (Dash)
- LED (Light Emitting Diode): เพื่อให้การสื่อสารรหัส Morse สมบูรณ์แบบ ผมจึงเพิ่ม LED เข้ามาทำงานควบคู่ไปกับเสียง เพื่อให้เราเห็นสัญญาณทางสายตา (Visual Signal) ไปพร้อมๆ กัน
- Arduino/Croduino Controller: หัวใจหลักที่ทำหน้าที่รับข้อความจากคอมพิวเตอร์ผ่านโปรโตคอล Serial UART แล้วนำมาประมวลผลผ่าน Algorithm ที่เราเขียนขึ้น
โครงสร้างและลอจิกของโปรแกรม (Code Logic)
หัวใจสำคัญของโปรเจคนี้คือการจัดการกับข้อมูล "ตัวอักษร" และแปลงให้เป็น "จังหวะ" โดยผมได้กำหนดโครงสร้างฟังก์ชันพื้นฐาน (Base Functions) เพื่อให้โค้ดอ่านง่ายและเป็นระเบียบ ดังนี้:
- tocka (Dot): สัญญาณจุด (สั้น) จะสั่งให้ Buzzer และ LED ทำงานในระยะเวลาสั้นๆ
- crta (Dash): สัญญาณขีด (ยาว) จะมีระยะเวลาทำงานนานกว่าสัญญาณจุดประมาณ 3 เท่าตามมาตรฐานรหัส Morse
- pauza (Pause): การเว้นจังหวะระหว่างตัวอักษรและคำ เพื่อให้รหัสที่ส่งออกมาไม่ติดกันจนเกินไป
ขั้นตอนการทำงานของ Algorithm:
- Input Reading: โปรแกรมจะคอยตรวจสอบว่ามีการพิมพ์ข้อความเข้ามาใน Serial Monitor หรือไม่
- Character Splitting: เมื่อได้รับข้อความ โปรแกรมจะใช้
For Loopเพื่อดึงตัวอักษรออกมาทีละตัว (Iteration) ตั้งแต่ตัวแรกจนถึงตัวสุดท้ายของข้อความ (i < message_length) - Morse Mapping: นำตัวอักษรที่ดึงออกมาไปเทียบกับฐานข้อมูลตัวอักษรภาษาอังกฤษ (A-Z) ที่เรานิยามไว้ในส่วนของ
abeceda(Alphabet) - Signal Output: หากตัวอักษรตรงกับเงื่อนไขที่กำหนด บอร์ดจะสั่งการให้ Buzzer และ LED แสดงรหัส Morse ประจำตัวอักษรนั้นๆ ทันที พร้อมแสดงสัญลักษณ์
.และ-บนหน้าจอ Monitor เพื่อให้เราตรวจสอบความถูกต้องได้
รายละเอียดฟังก์ชันและคำศัพท์ในโปรเจค
เพื่อให้เข้าใจโค้ดได้ง่ายขึ้น ผมได้ใช้คำศัพท์ที่สอดคล้องกับฟังก์ชันการทำงานจริง (ภาษาโครเอเชีย) ซึ่งมีความหมายดังนี้ครับ:
- slovo: หมายถึง ตัวอักษร (Letter)
- ton: หมายถึง เสียงโทนที่ส่งออกมา
- tocka / crta: สัญญาณจุด (Dot) และ ขีด (Dash)
- pauza: การหยุดพักจังหวะ
- abeceda: ชุดตัวอักษร (Alphabet)
- poruka_u_morse: ข้อความที่ถูกแปลงเป็นรหัส Morse แล้ว
- spiker: ลำโพงหรือ Buzzer ที่ใช้ส่งเสียง
- poruka: ข้อความต้นฉบับ (Message)
วิดีโอสาธิตการทำงานและผลลัพธ์
(คงตำแหน่งวิดีโอเดิมไว้ที่นี่)
บทสรุป
โปรเจคนี้ไม่เพียงแต่เป็นโปรเจคแก้เบื่อที่สนุกสนาน แต่ยังเป็นแบบฝึกหัดที่ดีมากสำหรับการเรียนรู้เรื่อง String Manipulation และการควบคุม Time-sensitive Output ในระบบฝังตัว หากใครสนใจสามารถนำ Logic นี้ไปต่อยอดเป็นอุปกรณ์สื่อสารระยะไกล หรือเครื่องช่วยสอนรหัส Morse ก็เป็นไอเดียที่ยอดเยี่ยมครับ!
ดาวน์โหลด Source Code และคู่มือได้ที่นี่: (คงตำแหน่งลิงก์ดาวน์โหลดเดิมไว้ที่นี่)