สารบัญ:

Wii Nunchuck Synthesizer: 4 ขั้นตอน
Wii Nunchuck Synthesizer: 4 ขั้นตอน

วีดีโอ: Wii Nunchuck Synthesizer: 4 ขั้นตอน

วีดีโอ: Wii Nunchuck Synthesizer: 4 ขั้นตอน
วีดีโอ: How to use a Wii remote & Kinect Sensor together to DJ & Control Synthesizers. 2024, พฤศจิกายน
Anonim
Wii Nunchuck Synthesizer
Wii Nunchuck Synthesizer

โลกแห่งดนตรี 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 ของคุณ

เสียบ NunChuck ของคุณ
เสียบ NunChuck ของคุณ
เสียบ NunChuck ของคุณ
เสียบ NunChuck ของคุณ
เสียบ NunChuck ของคุณ
เสียบ 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
ทำความรู้จักกับ Mozzi

ขั้นแรก คุณจะต้องดาวน์โหลด Mozzi เวอร์ชันล่าสุด พวกเขาได้รับแรงหนุนจากการบริจาค ดังนั้นบริจาคหากคุณรู้สึกอยากและดาวน์โหลดห้องสมุด คุณสามารถเพิ่มลงในไลบรารีของคุณได้อย่างง่ายดายโดยเลือก Sketch > Libraries > Add. ZIP Library… จาก Arduino IDE

ตอนนี้เราจะเชื่อมต่อแจ็คหูฟัง 3.5 มม. เข้ากับเขียงหั่นขนมและ Arduino เพื่อให้เราสามารถเชื่อมต่อในภายหลังได้อย่างง่ายดาย (คุณสามารถถอดปลั๊ก Nunchuck และอะแดปเตอร์ได้ในตอนนี้)

  1. เสียบแจ็คของคุณที่มุมล่างขวาของกระดานเพื่อให้มีที่ว่างสำหรับส่วนที่เหลือ แจ็คควรมีความกว้าง 5 พิน
  2. เชื่อมต่อแถวกลางกับกราวด์ด้วยสายจัมเปอร์
  3. เชื่อมต่อแถวบนสุดของแจ็คกับแถวว่างด้านบน (แถวที่ 10 ในภาพ) นี่คือสายที่นำสัญญาณเสียง
  4. เชื่อมต่อ Digital Pin ~9 กับแถวที่ 10 ด้วย
  5. เชื่อมต่อกราวด์บน Arduino ของคุณกับรางกราวด์บนเขียงหั่นขนม
  6. คุณไม่จำเป็นต้องใช้ตัวต้านทานและตัวเก็บประจุ แต่คุณอาจสังเกตเห็นเสียงแหลมสูงหากไม่ทำ ทำหน้าที่เป็นตัวกรองความถี่ต่ำเพื่อขจัดความถี่ที่สูงกว่า ~ 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++

แนะนำ: