สารบัญ:
- ขั้นตอนที่ 1: เสียบ NunChuck ของคุณ
- ขั้นตอนที่ 2: ทำความรู้จัก Mozzi
- ขั้นตอนที่ 3: นำทุกอย่างมารวมกัน
- ขั้นตอนที่ 4: สัมผัสสุดท้าย
วีดีโอ: Wii Nunchuck Synthesizer: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
โลกแห่งดนตรี Wii:
ในที่สุดฉันก็ตัดสินใจผสมผสานความรักในดนตรีกับประสบการณ์การเขียนโปรแกรมเล็กน้อยที่ฉันได้รับในช่วงไม่กี่ปีที่ผ่านมา ฉันสนใจที่จะสร้างเครื่องดนตรีของตัวเองตั้งแต่เห็นท็อด มาโชเวอร์บรรยายที่โรงเรียน หากคุณไม่คุ้นเคยกับงานของเขา ให้ Google แก่เขา เนื่องจากเขาก้าวข้ามขีดจำกัดของดนตรี เทคโนโลยี รวมถึงการมาบรรจบกันของงานมาหลายปีแล้ว (MIT media labs, Rock Band, Guitar Hero ฯลฯ..).
ฉันได้เชื่อมต่อ Nunchuck ของฉันกับ Arduino Uno ที่ทำงานบนไลบรารีการสังเคราะห์เสียงของ Mozzi เนื่องจากมีการใช้งานออนไลน์ทั้งสองอย่างที่ได้รับการบันทึกไว้เป็นอย่างดี เพื่อความสะดวก ฉันใช้อะแดปเตอร์เขียงหั่นขนม WiiChuck ซึ่งเสียบเข้ากับ Arduino โปรเจ็กต์ที่ค่อนข้างเรียบง่ายนี้เล่นชุดของระดับเสียงขึ้นอยู่กับพิทช์ (YZ-Plane) ที่วัดจากมาตรความเร่งของ Nunchuck ค่า Y ของจอยสติ๊กจะจับคู่กับค่าเกนเพื่อทำให้ระดับเสียงดังขึ้นหรือเบาลง นอกจากนี้ยังเปลี่ยนคอร์ดโดยขึ้นอยู่กับปุ่ม Z และเปิดซองจดหมายการมอดูเลตเฟสเมื่อกดปุ่ม C ความถี่ของซองจดหมายจะถูกแก้ไขด้วยการหมุนที่วัดจาก Nunchuck (รูปภาพหมุนลูกบิด)
ทรัพยากร:
- 1 x Arduino Uno
- 1 x Wii Nunchuck
- 1 x อะแดปเตอร์ WiiChuck
- 1 x แจ็คสเตอริโอตัวเมีย 3.5 มม. ที่เข้ากันได้กับเขียงหั่นขนม
- สายสัญญาณเสียง 1 x 3.5 มม
- 1 x ลำโพงบางประเภท (คุณสามารถเสียบออดในตอนแรกเพื่อทดสอบ
- 4-5 สายสีต่างๆ
ไม่บังคับ แต่แนะนำ:
- ตัวต้านทาน 1 x 330 โอห์ม
- ตัวเก็บประจุ 1 x.1 ยูเอฟ
ขั้นตอนที่ 1: เสียบ NunChuck ของคุณ
คัดลอก/วางคลาส WiiChuck จาก Arduino Playground เราต้องการเวอร์ชันที่มีการประกาศพิน PWR และ GND บันทึกเป็น WiiChuck.h และเก็บไว้ในไดเรกทอรีเดียวกับโครงการของคุณ
ตอนนี้คัดลอก/วางสิ่งต่อไปนี้ลงใน Arduino IDE แล้วอัปโหลด
#include "Wire.h"//#include "WiiChuckClass.h" //น่าจะเป็น WiiChuck.h สำหรับพวกเราที่เหลือ #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();
การตั้งค่าเป็นโมฆะ () {
//nunchuck_init(); Serial.begin(115200); chuck.begin(); chuck.update(); //chuck.calibrateJoy(); }
วงเป็นโมฆะ () {
ล่าช้า (20); chuck.update();
Serial.print(chuck.readPitch());
Serial.print(", "); Serial.print(chuck.readRoll()); Serial.print(", ");
Serial.print(chuck.readJoyX());
Serial.print(", "); Serial.print(chuck.readJoyY()); Serial.print(", ");
ถ้า (chuck.buttonZ) {
Serial.print ("Z"); } อื่น ๆ { Serial.print ("-"); }
Serial.print(", ");
// ไม่ใช่ฟังก์ชัน // if (chuck.buttonC()) {
ถ้า (chuck.buttonC) { Serial.print ("C"); } อื่น ๆ { Serial.print ("-"); }
Serial.println();
}
ตัดการเชื่อมต่อ Arduino ของคุณจากแหล่งจ่ายไฟและเชื่อมต่ออะแดปเตอร์ WiiChuck ของคุณกับ Analog Pins 2-5 บน Arduino ของคุณ
เชื่อมต่อกับแหล่งจ่ายไฟอีกครั้งและตรวจสอบว่าค่าของ Nunchuck ถูกส่งไปยัง Arduino และพิมพ์ไปยัง Serial Monitor หากคุณไม่เห็นการเปลี่ยนแปลงใดๆ ของตัวเลข ให้ตรวจสอบว่าคุณมีสายสัมพันธ์ที่ดี และ Nunchuck ก็ทำงานได้ตามปกติ ฉันใช้เวลาสองสามวันเพื่อพยายามแก้ไขซอฟต์แวร์ก่อนที่จะรู้ว่าสาย Nunchuck ของฉันพังภายใน!
ต่อไป เราจะขอทุกอย่างเกี่ยวกับ Mozzi..
ขั้นตอนที่ 2: ทำความรู้จัก Mozzi
ขั้นแรก คุณจะต้องดาวน์โหลด Mozzi เวอร์ชันล่าสุด พวกเขาได้รับแรงหนุนจากการบริจาค ดังนั้นบริจาคหากคุณรู้สึกอยากและดาวน์โหลดห้องสมุด คุณสามารถเพิ่มลงในไลบรารีของคุณได้อย่างง่ายดายโดยเลือก Sketch > Libraries > Add. ZIP Library… จาก Arduino IDE
ตอนนี้เราจะเชื่อมต่อแจ็คหูฟัง 3.5 มม. เข้ากับเขียงหั่นขนมและ Arduino เพื่อให้เราสามารถเชื่อมต่อในภายหลังได้อย่างง่ายดาย (คุณสามารถถอดปลั๊ก Nunchuck และอะแดปเตอร์ได้ในตอนนี้)
- เสียบแจ็คของคุณที่มุมล่างขวาของกระดานเพื่อให้มีที่ว่างสำหรับส่วนที่เหลือ แจ็คควรมีความกว้าง 5 พิน
- เชื่อมต่อแถวกลางกับกราวด์ด้วยสายจัมเปอร์
- เชื่อมต่อแถวบนสุดของแจ็คกับแถวว่างด้านบน (แถวที่ 10 ในภาพ) นี่คือสายที่นำสัญญาณเสียง
- เชื่อมต่อ Digital Pin ~9 กับแถวที่ 10 ด้วย
- เชื่อมต่อกราวด์บน Arduino ของคุณกับรางกราวด์บนเขียงหั่นขนม
- คุณไม่จำเป็นต้องใช้ตัวต้านทานและตัวเก็บประจุ แต่คุณอาจสังเกตเห็นเสียงแหลมสูงหากไม่ทำ ทำหน้าที่เป็นตัวกรองความถี่ต่ำเพื่อขจัดความถี่ที่สูงกว่า ~ 15 kHz
เปิดภาพร่าง Sinewave ของ Mozzi ใน Arduino IDE โดยเลือกไฟล์ > ตัวอย่าง > Mozzi > พื้นฐาน > Sinewave นี้โดยพื้นฐานแล้ว Mozzi เทียบเท่ากับ "Hello World"
อัปโหลดภาพร่างและเสียบลำโพงเข้ากับเขียงหั่นขนม คุณสามารถใช้ออดได้เช่นกันหากคุณยังไม่ได้ต่อสายเขียงหั่นขนมเข้ากับแจ็คเสียง
หากคุณไม่ได้ยินเสียง A4 (440Hz) คงที่จากลำโพงของคุณ ตรวจสอบให้แน่ใจว่าการเชื่อมต่อทั้งหมดของคุณดีแล้วลองอีกครั้ง
ต่อไป เราจะเชื่อมต่อ Nunchuck กับ Arduino!
ขั้นตอนที่ 3: นำทุกอย่างมารวมกัน
ตอนนี้เราจะใช้ค่าม้วนจาก Nunchuck เพื่อเปลี่ยนความถี่ของ Sinewave
จาก Arduino IDE เลือกไฟล์ > ตัวอย่าง > Mozzi > เซ็นเซอร์ > Piezo Frequency
เราจะต้องเพิ่มสองสามบรรทัดในโค้ดนี้เพื่อให้ทำงานกับ Nunchuck ได้ เพิ่มการรวมในไลบรารี WiiChuck และสร้างอินสแตนซ์ของวัตถุ WiiChuck ที่เรียกว่า Chuck คุณยังสามารถแสดงความคิดเห็นเกี่ยวกับการประกาศ PIEZO_PIN หรือเพียงแค่ลบออกเพราะเราจะไม่ใช้งาน
#รวม "WiiChuck. H"
WiiChuck เชย = WiiChuck (); //const int PIEZO_PIN = 3; // ตั้งค่าพินอินพุตแบบอะนาล็อกสำหรับ piezo
ตอนนี้ในการตั้งค่า เราจะต้องเพิ่มสิ่งต่อไปนี้:
chuck.begin();chuck.update();
และสุดท้ายเราจะต้องเปลี่ยนแปลงบางสิ่งใน updateControl():
เป็นโมฆะ updateControl(){
chuck.update(); // รับข้อมูล nunchuck ล่าสุด // อ่าน piezo //int piezo_value = mozziAnalogRead (PIEZO_PIN); // ค่าคือ 0-1023 int piezo_value = แผนที่ (แสดงความคิดเห็นในบรรทัดที่กำหนด piezo_value และเพิ่มสิ่งต่อไปนี้ด้านล่าง:
เป็นโมฆะ updateControl(){ chuck.update(); // รับข้อมูล nunchuck ล่าสุด // อ่าน piezo //int piezo_value = mozziAnalogRead (PIEZO_PIN); // ค่าคือ 0-1023 // เราไม่ต้องการบรรทัดด้านบน แต่ทำไมไม่แมปม้วนกับช่วงเดียวกัน int piezo_value = แผนที่ (chuck.readRoll (), -180, 180, 0 1023);
อัปโหลดรหัสและความถี่ควรสอดคล้องกับ Nunchuck's Roll ของคุณ ลองจับคู่กับช่วงความถี่ต่างๆ หากคุณไม่ได้สังเกตเพิ่มเติมด้านล่างในภาพร่าง ค่าจากเซ็นเซอร์จะถูกคูณด้วย 3 ดังนั้นเราจึงกำลังเล่นเสียงจาก 0 Hz ถึงประมาณ 3000 Hz
ขั้นตอนที่ 4: สัมผัสสุดท้าย
ตอนนี้คุณพร้อมที่จะอัปโหลดโค้ดเวอร์ชันสุดท้ายซึ่งฉันได้รวมเข้าด้วยกันจากขั้นตอนที่แล้วและตัวอย่างของ Mozzi อีกสองสามตัวอย่าง (Phase_Mod_Envelope และ Control_Gain แบบละเอียด) เพื่อให้ชีวิตของฉันง่ายขึ้น ฉันยังรวมไฟล์ชื่อ pitches.h ซึ่งกำหนดค่าความถี่ด้วยชื่อโน้ตที่คุ้นเคย (เช่น NOTE_A4)
ฉันแนะนำให้อ่านเอกสารของ Mozzi เนื่องจากโค้ดส่วนใหญ่ตรงจากตัวอย่าง ยกเว้นโค้ดสำหรับ Nunchuck
นี่คือลิงค์ไปยังที่เก็บ Git ของฉัน ไฟล์สำคัญทั้งหมดรวมอยู่ด้วย ยกเว้นไลบรารี Mozzi ซึ่งคุณควรได้รับจากเว็บไซต์ของพวกเขา ดังนั้นจึงเป็นเวอร์ชันล่าสุด ดาวน์โหลด WiiMusic.ino และอัปโหลดไปยังอุปกรณ์ของคุณเพื่อฟังว่าเสียงเป็นอย่างไร ฉันแนะนำให้คุณลองเล่นกับพารามิเตอร์ที่ฉันกำลังเปลี่ยน (เปลี่ยนช่วงของแผนที่ หาร/คูณตัวเลข ฯลฯ..) เพราะนั่นคือวิธีที่ฉันพบเสียงเฉพาะที่ฉันต้องการ
การสะท้อนกลับ
ฉันไม่รู้สึกว่าฉันค่อนข้างเสร็จ ไม่ได้หมายความว่าฉันไม่พอใจกับโปรเจ็กต์หรือเสียงที่ทำ แต่ฉันรู้สึกว่าฉันเพิ่งจุ่มเท้าของฉันเข้าไปในโลกใหม่ที่ฉันต้องการสำรวจต่อไปดังนั้นฉันจะเพิ่มสาขาใหม่จากโครงการนี้ในขณะที่ทำต่อ ไปทำงาน.
ถึงกระนั้นก็ตามที่กล่าวว่านี่เป็นการเดินทางที่แท้จริงครั้งแรกของฉันสู่โลกของไมโครคอนโทรลเลอร์ ดังนั้นฉันจึงรู้สึกขอบคุณมากสำหรับประสบการณ์การเรียนรู้ ยี่สิบชั่วโมงหรือมากกว่านั้นที่ฉันใช้ไปกับมันทำให้ฉันได้ไอเดียคริสต์มาสสำหรับตัวฉันเองและทุกๆ คนในครอบครัวของฉัน ฉันค่อนข้างเสียใจที่ไม่ได้ทำงานในโครงการนี้กับคนอื่นเพราะฉันสามารถใช้คำแนะนำและคำแนะนำมากมายตลอดทาง อย่างไรก็ตาม ฉันได้เรียนรู้มากมายจากการทดลองเป็นการส่วนตัว รวมถึงสามวันในการดึงผมออกเพื่อพยายามแก้ปัญหาซอฟต์แวร์ที่ไม่เคยมีมาก่อน (สายภายในใน Nunchuck เสีย)
ยังมีความเป็นไปได้มากมายที่จะก้าวไปข้างหน้า ตัวอย่างเช่น ฉันชอบที่จะใช้ Arduino เป็นอินเทอร์เฟซ MIDI ชนิดหนึ่งระหว่างตัวควบคุม MIDI และหูฟังออกเพื่อเปลี่ยนพารามิเตอร์ของโน้ต MIDI เนื่องจากมีให้เลือกมากมาย (ระดับเสียง ค่าตัด ความถี่ซองจดหมาย ระยะพิทช์, การมอดูเลต, vibrato คุณชื่อมัน) ซึ่งจะทำให้มีความยืดหยุ่นมากขึ้น รวมถึงการสลับพารามิเตอร์ด้วยปุ่มต่างๆ และเพียงแค่เล่นคอร์ดที่ไม่ได้ฮาร์ดโค้ดลงในอาร์เรย์ C++
แนะนำ:
Arpeggiating Synthesizer (ยุง I): 6 ขั้นตอน
Arpeggiating Synthesizer (Mosquito I): Mosquito I เป็นซินธิไซเซอร์อาร์เพจจิเอติ้งขนาดเล็กที่ใช้ Arduino Nano และไลบรารีการสังเคราะห์เสียง Mozzi มันสามารถเล่นได้กว่า 20 ลำดับ 8 ขั้นตอน แต่คุณสามารถเพิ่มลำดับแบบกำหนดเองได้มากเท่าที่คุณต้องการ มันค่อนข้างง่ายในการตั้งค่าและไม่
แหล่งจ่ายไฟ Synthesizer แบบแยกส่วน: 10 ขั้นตอน (พร้อมรูปภาพ)
แหล่งจ่ายไฟ Synthesizer แบบแยกส่วน: หากคุณกำลังสร้างเครื่องสังเคราะห์เสียงแบบแยกส่วน สิ่งหนึ่งที่คุณต้องการอย่างแน่นอนคือแหล่งจ่ายไฟ เครื่องสังเคราะห์เสียงแบบแยกส่วนส่วนใหญ่ต้องการระบบรางคู่ (0V, +12V และ -12V ตามปกติ) และการมีราง 5V ก็มีประโยชน์เช่นกันหากคุณกำลังวางแผน
Keytar Hero (ใช้ Wii Guitar Controller เป็น Synthesizer): 7 ขั้นตอน (พร้อมรูปภาพ)
Keytar Hero (ใช้ Wii Guitar Controller เป็น Synthesizer): เกม Guitar Hero เป็นเกมที่คลั่งไคล้เมื่อหลายสิบปีก่อน ดังนั้นจึงต้องมีอุปกรณ์ควบคุมกีตาร์รุ่นเก่าจำนวนมากวางอยู่รอบๆ ฝุ่น พวกมันมีปุ่ม ลูกบิด และคันโยกมากมาย ทำไมไม่ลองใช้มันให้เป็นประโยชน์อีกล่ะ? คอนโทรลกีต้าร์
กล้องส่องทางไกลควบคุม Nunchuck: 6 ขั้นตอน (พร้อมรูปภาพ)
Nunchuck Controlled Telescope Focuser: หากคุณเคยลองใช้กล้องโทรทรรศน์ด้วยกำลังขยายที่ค่อนข้างสูง (>150x) คุณอาจสังเกตเห็นว่าการปรับโฟกัสของกล้องโทรทรรศน์ด้วยตนเองอาจทำให้ปวดคอได้อย่างแท้จริง ทั้งนี้เป็นเพราะการปรับเพียงเล็กน้อย
Wireless Wii Nunchuck ควบคุม Arduino: 7 ขั้นตอน
Wii Nunchuck ที่ควบคุมด้วย Wii แบบไร้สาย: ใช้ Wii ไร้สาย Nunchuck ที่ไม่มีการปรับเปลี่ยนอย่างสมบูรณ์เป็นระบบควบคุมสำหรับโครงการที่ใช้ Arduino ไม่มีคู่เครื่องส่ง / เครื่องรับวิทยุเพิ่ม ฯลฯ คำแนะนำนี้จะถือว่ามีประสบการณ์กับไมโครคอนโทรลเลอร์ Arduino รัศมี