ไอเดียคร่าวๆ
ปกติเราคุยกันด้วยเซ็นเซอร์ธรรมชาติของร่างกาย (ลิ้น ท่าทาง อะไรพวกนั้น) ใช่ปะ? แต่พี่ว่ามันจะตื่นเต้นขึ้นอีกเยอะเลยถ้าเราอยากส่งข้อมูลลับให้กัน! คำถามคือ...จะทำยังไงดีล่ะ?
คำตอบก็คือ เราต้องส่งข้อมูลในรูปแบบที่แม้จะมีคนแอบดูอยู่ เขาก็ต้องงงไปตามๆกัน จนกว่าจะหา "กุญแจ" มาถอดรหัสได้นั่นเอง สำหรับโปรเจคนี้พี่เลือกใช้การสื่อสารด้วยรหัสมอร์ส (Morse Code) น้องๆ จะใช้วิธีอื่นก็ได้นะ ตามสบายเลย
รหัสมอร์สคืออะไรวะ?
รหัสมอร์สคือวิธีการสื่อสารแบบนึง ที่แปลงตัวอักษรให้เป็นชุดของจุด (.) และขีด (-) ตัวอย่างเช่น A -> .- ส่วน B -> -... เป็นต้น ง่ายๆ แค่นั้นเอง
ถ้าอยากรู้ลึกกว่านี้ ลองเสิร์ชหาเพิ่มเติมดูได้เลยวัยรุ่น มีในเน็ตเต็มไปหมด

ทำไมพี่ถึงเลือกรหัสมอร์ส?
เหตุผลง่ายมาก! ตอนนั้นพี่ดูหนังสายลับ แล้วเห็นเขาส่งข้อมูลลับกันแค่กดปุ่มติ๊กต็อกๆ คนรับก็ถอดรหัสออกมาได้ พี่เลยคิดว่า "เฮ้ย! ทำด้วย Arduino กับอุปกรณ์พื้นฐานนี่ก็ได้นี่นา" ก็เลยจัดโปรเจคนี้ขึ้นมาสำหรับน้องๆ ครับ
โปรเจคนี้ทำงานยังไง?
ง่ายมากเลย! พอน้องต่อวงจรบนเบรดบอร์ดเสร็จ และอัพโหลดสเก็ตช์ (Sketch) เรียบร้อยแล้ว ให้เปิด Serial Monitor ขึ้นมา จะเห็นหน้าตาประมาณนี้
ทำตามคำแนะนำในนั้น แล้วก็พร้อมลุยได้เลยจ้า สู้งานนะน้อง!
ถ้างงหรือไม่เข้าใจ ลองดูวิดีโอสาธิตด้านล่างนี้ได้เลย
รายละเอียดเทคนิคเพิ่มเติม (แบบจัดเต็ม)
โปรเจค Morse Code Generator นี้เป็นแบบฝึกหัดที่เจ๋งมากสำหรับการจัดการสตริง (String) และการแมปอาร์เรย์ (Array Mapping) ใน C++ มันทำให้ Arduino ต้องวิ่งไล่ตัวอักษรในประโยคทีละตัว แล้วไปหาค่าที่แปลงไว้ในดัชนี เพื่อสั่งให้ LED กะพริบตามรหัส
กำหนดมาตรฐานเวลาของรหัสมอร์ส
รหัสมอร์สไม่ได้สุ่มมั่วๆ นะ มันมีกฎเวลาที่ชัดเจน โดยอ้างอิงจาก "หน่วยเวลา" (Unit) หนึ่งหน่วย:
- 1 Unit = ความยาวของ "จุด" (Dot) หนึ่งจุด
- "ขีด" (Dash) หนึ่งขีด = 3 Units
- ช่องว่างระหว่างส่วนต่างๆ ของตัวอักษร = 1 Unit
- ช่องว่างระหว่างตัวอักษร = 3 Units
- ในโค้ด Arduino เราจะกำหนดตัวแปร
unitDelay = 250;(มิลลิวินาที) ทุกการกระทำในโปรแกรมจะคูณด้วยค่านี้ ทำให้จังหวะการส่งรหัสเป๊ะเวอร์ ไม่มีหลุด!
อาร์เรย์ของตัวอักษร (สำหรับค้นหา)
แล้ว Arduino รู้ได้ไงว่า 'A' คือ "จุด-ขีด"?
- เราสร้างอาร์เรย์ที่เก็บสตริง 26 ชุดแทนตัวอักษร A-Z:
String morseAlphabet[] = {".-", "-...", "-.-.", ...} - ผู้ใช้ป้อนคำ เช่น
"SOS"ลงใน Serial Monitor (ตามภาพด้านบน) - Arduino แยกสตริงออกเป็นอาร์เรย์ของตัวอักษร
['S', 'O', 'S'] - มันแปลง 'S' เป็นค่า ASCII integer แล้วคำนวณหาดัชนี (index) (เช่น S คือตัวอักษรตัวที่ 18) จากนั้นก็ไปดูที่ช่องที่ 18 ในอาร์เรย์
morseAlphabetแล้วเจอค่า... - มันรันลูป
forเพื่อส่งพัลส์ไฟฟ้า 5V ความยาว 250ms ไปที่ขา LED สามครั้ง! (ติ๊ก ติ๊ก ติ๊ก)
รายการอุปกรณ์
- Arduino Uno/Nano: ตัวแปลภาษา (Translator) หลักของเรา
- LED กับ ตัวต้านทาน (Resistor): ไว้ให้แสงสัญญาณ
- ออดแบบแอคทีฟ (Active Piezo Buzzer): จะได้ได้ยินเสียงการส่งรหัสด้วย ห้ามช็อตนะตัวนี้!