Arduinemin: ตัวนี้มันก็เหมือนเทอรีมิน แต่เล่นคนละแบบนะจ๊ะ
Arduinemin นี่เป็นเครื่องดนตรีที่ได้แรงบันดาลใจมาจาก เทอรีมิน (Theremin) แต่วิธีเล่นมันคนละเรื่องเลย! เทอรีมินตัวจริงเนี่ย เป็นเครื่องดนตรีที่เล่นได้โดยไม่ต้องสัมผัสตัวเครื่องเลยแม้แต่น้อย มันจะสร้างระดับเสียง (pitch) และความดัง (volume) จากการที่มือเราเข้าไปรบกวนสนามแม่เหล็กไฟฟ้ารอบๆ เสาอากาศสองเสา
แต่เจ้า Arduinemin ของเราจะทำงานต่างออกไป มันใช้ เซ็นเซอร์อัลตราโซนิก (Ultrasonic sensor) ในการตรวจจับตำแหน่งมือของเราแทน แถมยังมีฟีเจอร์เสริมให้เล่นง่ายขึ้นอีกด้วย เช่น ใช้ โพเทนชิโอมิเตอร์ (Potentiometer) ปรับช่วงเสียง และใช้ เซ็นเซอร์ตรวจจับวัตถุอินฟราเรด (IR Object Detector) สองตัวสำหรับปรับเสียงครึ่งขั้น (semitone) ถึงแม้จะไม่เหมือนเทอรีมินตัวจริงเป๊ะๆ แต่มันก็ยังคงความเท่ห์ของการเล่นแบบไม่ต้องสัมผัสได้อยู่ดีล่ะ
ชิ้นส่วนที่ต้องมี:
Piezo: เอาไว้สร้างเสียงตามระดับความถี่ที่เหมาะสม
เซ็นเซอร์อัลตราโซนิก (Ultrasonic sensor): เจ้านี่แหละจะคอยวัดระยะห่างของมือขวาเราจากเซ็นเซอร์ แล้วแปลงเป็นระดับเสียง มีช่วงหนึ่งที่เล่นได้นะ (ประมาณ 16 นิ้วจากเซ็นเซอร์) ถ้ามืออยู่นอกช่วงนี้จะไม่มีเสียง ถ้ามืออยู่ในช่วง มันจะคำนวณตำแหน่งมือเป๊ะๆ แล้วจับคู่กับโน้ตในสเกล C เมเจอร์ (0-2 นิ้ว = C, 2-4 นิ้ว = D, 4-6 นิ้ว = E … 14-16 นิ้ว = C’)
เซ็นเซอร์ตรวจจับวัตถุอินฟราเรด (IR Object Detectors): ใช้สองตัวนี้กับมือซ้าย มันไม่ต้องวัดตำแหน่งมือหรอก แค่ตรวจจับว่ามีมืออยู่ตรงนั้นหรือเปล่า เมื่อตรวจจับมือได้ เสียงจากมือขวาจะถูกปรับขึ้นหรือลงครึ่งขั้น (semitone) ขึ้นอยู่กับว่าเราเอามือไปบังเซ็นเซอร์ตัวไหน ทำให้เสียงแฟลตหรือชาร์ปได้
โพเทนชิโอมิเตอร์ (Potentiometer): หมุนเจ้านี่ได้ 3 ตำแหน่ง (ซ้าย, กลาง, ขวา) ซึ่งแต่ละตำแหน่งจะ对应กับช่วงเสียงต่ำ, กลาง, สูง พอหมุน ความถี่ของ Piezo ก็จะปรับตาม แต่ละช่วงคือหนึ่งอ็อกเทฟเต็มๆ และแต่ละช่วงก็ห่างกันหนึ่งอ็อกเทฟ ตำแหน่งซ้ายจะให้เสียง C3 ถึง C4, กลางให้ C4 ถึง C5, ขวาให้ C5 ถึง C6
รายละเอียดเทคนิคเพิ่มเติม (จัดเต็ม!)
Arduinemin เป็นเครื่องดนตรีอิเล็กทรอนิกส์สุดสร้างสรรค์ที่ดัดแปลงมาจาก เทอรีมิน (Theremin) ซึ่งเป็นเครื่องดนตรีในตำนานที่เล่นยากและมีเอกลักษณ์คือผู้เล่นไม่ต้องสัมผัสตัวเครื่องเลย เทอรีมินตัวจริงทำงานโดยประมวลผลการรบกวนของสนามแม่เหล็กไฟฟ้ารอบเสาอากาศสองเสาเพื่อควบคุมระดับเสียงและความดัง
แต่ Arduinemin ถูกออกแบบใหม่โดยใช้หลักการทางวิศวกรรมที่ต่างออกไป เพื่อให้สร้างและควบคุมด้วยระบบไมโครคอนโทรลเลอร์ Arduino ได้ง่ายขึ้น แทนที่จะใช้สนามแม่เหล็กไฟฟ้า มันใช้ เซ็นเซอร์อัลตราโซนิก ในการตรวจจับระยะมือมาแทนที่การควบคุมความถี่ แถมยังเพิ่มฟังก์ชันเสริมเพื่อช่วยให้ผู้เล่นควบคุมเสียงได้ง่ายขึ้น เช่น ใช้ โพเทนชิโอมิเตอร์ ในการเปลี่ยนอ็อกเทฟ และใช้ เซ็นเซอร์ตรวจจับวัตถุอินฟราเรด สองตัวสำหรับปรับเสียงครึ่งขั้น สิ่งนี้ทำให้ Arduinemin กลายเป็นเครื่องดนตรีดิจิทัลที่ผสมผสานระหว่างความล้ำค่าของการเล่นแบบไม่สัมผัสกับความแม่นยำของระบบคอมพิวเตอร์เข้าไว้ด้วยกัน
สู้งานนะน้อง! อย่าลืมใส่ใจรายละเอียด ห้ามช็อตวงจรนะตัวนี้ ไม่งั้นรุ่นพี่ต้องมานั่งแกะให้อีก 😎🔧
ฮาร์ดแวร์และหลักการทำงาน
สำหรับเจ้า Arduinemin ตัวนี้ พี่เลือกใช้อุปกรณ์ที่ตอบโจทย์การควบคุมแบบเรียลไทม์ตามนี้เลย:
- Piezo Buzzer: อุปกรณ์เอาท์พุตหลัก หน้าที่คือแปลงความถี่ไฟฟ้าต่างๆ ให้เป็นคลื่นเสียง โดยสั่นแผ่นเซรามิกข้างในตามความถี่ที่ส่งมาจากขา PWM ของ Arduino เพื่อผลิตโน้ตดนตรีที่เราต้องการ
- Ultrasonic Sensor (HC-SR04): ตัวหลักสำหรับควบคุมระดับเสียง (Pitch) หลักการคือมันจะปล่อยคลื่นเสียงความถี่สูง (40kHz) ออกไป แล้ววัดเวลาที่คลื่นสะท้อนกลับมา (Time of Flight) เพื่อคำนวณระยะห่างระหว่างมือขวาของผู้เล่นกับเครื่องดนตรี เราเซ็ตให้มันทำงานในระยะ 16 นิ้ว แล้วแบ่งช่วงตามสเกล C Major ตัวอย่างเช่น 0-2 นิ้ว คือโน้ต C, 2-4 นิ้ว คือโน้ต D, ไปเรื่อยๆ จนถึง 14-16 นิ้ว คือโน้ต C' (อ็อกเทฟถัดไป) ถ้ามืออยู่นอกช่วงนี้ ระบบจะ Mute เสียงอัตโนมัติ
- IR Object Detectors: เราใช้เซ็นเซอร์อินฟราเรดสองชุดสำหรับมือซ้าย ทำหน้าที่เหมือน "สวิตช์ไร้สัมผัส" หลักการคือมันจะปล่อยแสงอินฟราเรดออกไปและตรวจจับการสะท้อนกลับ เมื่อระบบตรวจจับวัตถุ (มือ) ในระยะใกล้ได้ มันจะคำนวณความถี่ใหม่ทันที โดยตัวนึงจะปรับโน้ตให้ต่ำลงหนึ่งเซมิโทน (Flat) และอีกตัวจะปรับให้สูงขึ้นหนึ่งเซมิโทน (Sharp) ทำให้ผู้เล่นสามารถเล่นโน้ตในสเกลโครมาติกได้อย่างอิสระ
- Potentiometer: ตัวต้านทานปรับค่าได้ ทำหน้าที่เป็น Octave Selector โดยแบ่งช่วงแรงดันจากการหมุนออกเป็นสามส่วน (Low, Middle, High) ซึ่งจะกำหนดความถี่พื้นฐานของสเกล ตั้งแต่ C3-C4, C4-C5, ไปจนถึง C5-C6 ทำให้เครื่องดนตรีเล็กๆ ตัวนี้มีช่วงเสียงกว้างถึง 3 อ็อกเทฟเลยทีเดียว
โค้ด:
โปรเจคนี้จะหาระยะห่างของมือคุณเหนือเซ็นเซอร์อัลตราโซนิก แล้วแปลงเป็นโน้ต จากนั้นก็หาความถี่ที่แน่นอนของโน้ตนั้นโดยตรวจสอบสถานะของ IR object detectors และโพเทนชิโอมิเตอร์ สุดท้ายก็เล่นโน้ตนั้นด้วยเพียโซ
ตรรกะของซอฟต์แวร์ (Code Logic)
หัวใจของโค้ดในโปรเจคนี้คือการประมวลผลข้อมูลจากเซ็นเซอร์หลายตัวพร้อมกัน เพื่อหาความถี่สุดท้ายที่จะส่งไปให้ Piezo Buzzer กระบวนการเริ่มต้นด้วยการอ่านค่าความห่างจาก Ultrasonic Sensor แล้วแมปมันเข้ากับอาร์เรย์ของความถี่โน้ต (Frequency Table)
จุดที่น่าสนใจคือวิธีที่เราแก้ปัญหา "Note Flickering" หรือเสียงที่สั่นไหวเมื่อมืออยู่ตรงรอยต่อระหว่างสองโน้ต พี่ใช้หลักการของ Hysteresis (Overlap Logic) นั่นหมายความว่าถ้าคุณกำลังเล่นโน้ต D แล้วขยับมือลงมานิดนึง เกือบจะเข้าช่วงของโน้ต C แล้ว ระบบจะยังคงเล่นเสียง D อยู่ จนกว่าระยะห่างจะเข้าไปอยู่ในโซนของ C จริงๆ วิธีนี้ช่วยให้การเล่นมีความเสถียรและลื่นไหลมากขึ้น ป้องกันไม่ให้เสียงกระโดดเปลี่ยนไปมาอย่างรวดเร็ว (Jitter)
หลังจากได้โน้ตหลักมาแล้ว โปรแกรมจะตรวจสอบสถานะของ IR Detectors เพื่อดูว่าต้องบวกหรือลบความถี่สำหรับค่าเซมิโทนหรือไม่ พร้อมทั้งตรวจสอบค่าจาก Potentiometer เพื่อคูณความถี่ตามอ็อกเทฟที่เลือก ก่อนจะส่งสัญญาณไปที่ Piezo ในที่สุดด้วยฟังก์ชัน tone()
มีช่วงที่ทับซ้อนกันระหว่างช่วงโน้ตต่างๆ อยู่ พูดง่ายๆ คือ ถ้าคุณกำลังเล่น D อยู่ และมือคุณลดลงมาเล็กน้อยจนเข้าในช่วง C แล้ว Arduienemin ก็ยังจะเล่น D อยู่ วิธีนี้ป้องกันไม่ให้เครื่องดนตรีสลับไปมาระหว่างสองโน้ตที่ต่างกัน ถ้ามือคุณอยู่ตรงขอบของสองโน้ต
การต่อวงจร:
การเชื่อมต่ออุปกรณ์ทั้งหมดเข้ากับ Arduino สามารถดูได้จากแผนภาพด้านล่างนี้ ซึ่งแยกส่วนสัญญาณอินพุต (เซ็นเซอร์) และส่วนสัญญาณเอาท์พุต (เพียโซ) ไว้ชัดเจน

สำหรับการไล่วงจรเพื่อตรวจสอบความถูกต้องของระบบลอจิกโดยไม่มีเสียง สามารถดูแผนภาพที่เอา Piezo ออกแล้วได้ตามนี้:

กล่อง (The Box):
หลังจากประกอบโปรเจคเสร็จ พี่ก็เอามาใส่เคสในกล่องกระดาษลูกฟูกนี่แหละ ต้องเจาะรูด้านบนสำหรับเซนเซอร์อัลตราโซนิค, เซนเซอร์อินฟราเรด 2 ตัว, และโพเทนชิโอมิเตอร์ แล้วก็เจาะรูด้านข้างสำหรับพอร์ตจ่ายไฟ ใช้สายจัมเปอร์เดินสายภายในกล่องให้เรียบร้อย
การทำเคส (The Enclosure)
เพื่อให้ Arduinemin พร้อมใช้งานจริงและดูดีมีสไตล์ พี่ก็เลยทำเคสจากกล่องกระดาษขึ้นมา เจาะรูบนผิวด้านบนอย่างแม่นยำเพื่อวางตำแหน่ง Ultrasonic Sensor, IR Detectors และ Potentiometer ให้ตรงกับตำแหน่งที่มือผู้เล่นจะมาเล่นพอดี ส่วนด้านข้างก็เจาะช่องสำหรับเดินสายและพอร์ตเชื่อมต่อต่างๆ

ภายในกล่อง ใช้สายจัมเปอร์เดินระบบให้เป็นระเบียบเรียบร้อย การใช้กล่องกระดาษนอกจากจะช่วยลดต้นทุนแล้ว ยังทำให้ปรับตำแหน่งเซนเซอร์ได้ง่ายในช่วงทดลองแรกๆ อีกด้วย ก่อนที่ในอนาคตอาจจะพัฒนามาเป็นเคสที่แข็งแรงทนทานขึ้น เช่น เคสพิมพ์ 3D
