ชื่อโปรเจกต์: 🎼🎹Mini Piano พกพา ฉบับรุ่นพี่จัดให้🎹🎼
โปรเจกต์ Mini Piano ที่ใช้ Arduino ตัวนี้จะทำให้น้องๆ เข้าใจว่าเจ้าบอร์ดตัวจิ๋วของเรามันเทพเรื่องการจัดการเสียงขนาดไหน โดยเราจะเน้นไปที่ความสามารถของ Arduino ในการสร้างความถี่เสียง (Tones) ที่แตกต่างกัน ปกติแล้วบอร์ด Arduino Uno มันรับรู้สภาพแวดล้อมได้ผ่าน Sensor ต่างๆ และสั่งงานพวกไฟ LED, Motor หรือ Actuator ได้อยู่แล้ว แต่งานนี้เราจะมาเล่นกับ "เสียง" กัน พี่จะพาน้องๆ ย่อส่วนเปียโนมาไว้ในมือ ให้มันบรรเลงโน้ตออกมาได้เหมือนเปียโนจริงๆ เลยล่ะวัยรุ่น!
มันทำงานยังไง?
หลังจากที่น้องๆ ต่อสายกันจนครบและทำการ Upload Code ลง Board เรียบร้อยแล้ว ก็จัดการต่อถ่าน 9V เพื่อจ่ายไฟให้ Arduino ได้เลย พอเรากด Push Button แต่ละปุ่ม เสียงตัวโน้ตที่คู่กับปุ่มนั้นๆ ก็จะดังออกมาที่ Piezo Buzzer ทันที น้องๆ สามารถเข้าไปปรับค่าความถี่ใน Source Code เพื่อลองเล่นกับ Pitch เสียงระดับต่างๆ ได้ตามใจชอบเลยนะ จัดไปอย่าให้เสีย!
อธิบาย Code กันหน่อย
int pb1 = 2;
int pb2 = 3;
int pb3 = 4;
int pb4 = 5;
int pb5 = 6;
int pb6 = 7;
int pb7 = 8;
int pb8 = 9;
int buzz = 13;
ตรงนี้พี่ประกาศตัวแปรให้ Push Button แต่ละตัวเป็น pb1, pb2, pb3 ไล่ไปเรื่อยๆ ตามลำดับ Pins ส่วนตัว Buzzer พี่ก็ตั้งชื่อให้จำง่ายๆ ว่า "buzz" อยู่ที่ขา 13 นะน้อง
pinMode(pb1,INPUT);
pinMode(pb2,INPUT);
pinMode(pb3,INPUT);
pinMode(pb4,INPUT);
pinMode(pb5,INPUT);
pinMode(pb6,INPUT);
pinMode(pb7,INPUT);
pinMode(pb8,INPUT);
pinMode(buzz,OUTPUT);
บรรทัดพวกนี้คือการตั้งค่าให้ Arduino Uno รู้ว่าขาไหนจะเป็น INPUT (รับแรงกดจากปุ่ม) และขาไหนจะเป็น OUTPUT (ส่งสัญญาณไปหา Buzzer) ห้ามต่อสลับนะ เดี๋ยวเสียงไม่มาจะหาว่าพี่ไม่เตือน
tone(buzz,262,100);
ฟังก์ชัน tone() พระเอกของเรา มันมีส่วนประกอบอยู่ 3 ส่วนคือ: Pin, Frequency และ Duration
- Pin: ใส่เลข Digital Pin ที่น้องเอา Buzzer ไปเสียบไว้นั่นแหละ
- Frequency: ใส่ค่าความถี่ (Hz) ที่น้องต้องการ ยิ่งเลขเยอะเสียงยิ่งสูง
- Duration: ใส่ค่าเวลาว่าอยากให้เสียงมันดังแช่นานแค่ไหน หน่วยเป็น Milliseconds นะ
อันนี้คลิปสอนทำ Mini Piano ในช่อง Youtube ของพี่เอง ไปดูซะ!
หวังว่าน้องๆ จะชอบโปรเจกต์เล็กๆ แต่หล่อเท่นี้นะ! ฝากกดไลก์กดติดตามโปรเจกต์นี้ไว้ด้วย จะได้ไม่พลาดโปรเจกต์ Arduino มันส์ๆ ในครั้งหน้า และอย่าลืมกด Subscribe ช่อง Youtube แล้วกดกระดิ่งแจ้งเตือนไว้ด้วยล่ะ เดี๋ยวคุยกับเขาไม่รู้เรื่อง!
ข้อมูลทางเทคนิคแบบเจาะลึก (เผื่อใครอยากหล่อ)
Tactile Polyphonic Sound Hub
มันคือโปรเจกต์เปียโนดิจิทัลสุดล้ำที่ใช้ปุ่ม Tactile และระบบ Sound Engine ที่เราคุมเองทั้งหมด
- Chromatic LUT Mapping: ตัว Arduino จะคอยเฝ้าดูแถวของปุ่มสวิตช์ โดยใน Firmware พี่ใช้สิ่งที่เรียกว่า Look-Up Table (LUT) เพื่อจับคู่แต่ละปุ่มเข้ากับค่าความถี่ที่แม่นยำ (เช่น โน้ต Middle C = 261.63Hz) เสียงไม่มีเพี้ยนแน่นอน
- Square-Wave Audio Pulse: เราใช้ฟังก์ชัน
tone()สร้างคลื่นสี่เหลี่ยม (Square Wave) ออกมา ถ้าอยากให้เสียงมันดู "แพง" หรือละมุนขึ้น (Warmer Tone) ลองใส่ Low-pass filter ง่ายๆ เข้าไปดู มันจะช่วยตัดความกระด้างแบบดิจิทัลออกไปได้เยอะเลย
การทำ Prototyping
- Web Editor validated: พี่ลองทดสอบ Logic ของเสียงผ่าน Arduino Web Editor มาให้แล้ว รับรองว่า Piano ตัวนี้ตอบสนองไวปรื๊ด (Zero Lag) กดปุ๊บเสียงมาปั๊บ ไม่มีการดีเลย์ให้เสียอารมณ์แน่นอน สู้งานนะน้อง!