สารบัญ:

MIDI2LED - เอฟเฟกต์ไฟ LED Strip ที่ควบคุมโดย MIDI: 6 ขั้นตอน
MIDI2LED - เอฟเฟกต์ไฟ LED Strip ที่ควบคุมโดย MIDI: 6 ขั้นตอน

วีดีโอ: MIDI2LED - เอฟเฟกต์ไฟ LED Strip ที่ควบคุมโดย MIDI: 6 ขั้นตอน

วีดีโอ: MIDI2LED - เอฟเฟกต์ไฟ LED Strip ที่ควบคุมโดย MIDI: 6 ขั้นตอน
วีดีโอ: Convenience items needed in the family 2024, พฤศจิกายน
Anonim
MIDI2LED - เอฟเฟกต์ไฟแถบ LED ที่ควบคุมโดย MIDI
MIDI2LED - เอฟเฟกต์ไฟแถบ LED ที่ควบคุมโดย MIDI

นี่เป็นคำสั่งสอนครั้งแรกของฉัน ดังนั้นอดทนกับฉัน

ฉันชอบทำดนตรี และในสถานการณ์สด เช่น คอนเสิร์ตในห้องนั่งเล่น ฉันชอบเมื่อมีเอฟเฟกต์แสงที่สอดคล้องกับสิ่งที่ฉันเล่น ดังนั้นฉันจึงสร้างกล่องที่ใช้ Arduino ที่ทำให้แถบ LED สว่างขึ้นเป็นสีแบบสุ่มเมื่อฉันกดโน้ตบนแป้นพิมพ์ MIDI และที่ฉันกดโน้ต

เสบียง

  • Arduino Uno
  • Arduino โปรโตชิลด์
  • แจ็ค MIDI
  • 1N4148 ไดโอด
  • 6N138 opto coupler
  • ตัวต้านทาน: 2x 220 โอห์ม, 1x 10kOhm, 1x 470Ohm
  • WS2812B แถบ LED (60 LEDs)
  • สายไฟเหลือบ้าง
  • ท่อหดความร้อน
  • เคสที่เหมาะกับ Arduino (ผมใช้กล่องแยกพลาสติก)

คุณจะต้อง

  • หัวแร้งและหัวแร้ง
  • แป้นพิมพ์ MIDI และสาย MIDI

ขั้นตอนที่ 1: อุปกรณ์อิเล็กทรอนิกส์

เครื่องใช้ไฟฟ้า
เครื่องใช้ไฟฟ้า

วงจรค่อนข้างตรงไปตรงมา ประกอบด้วยอินพุต MIDI มาตรฐาน (ด้านซ้ายของ Arduino) และการเชื่อมต่อกับแถบ LED (ด้านขวาของ Arduino) วางชิ้นส่วนทั้งหมดบน protoshield มีพื้นที่ว่างมาก โดยทั่วไปแนะนำให้ใช้แหล่งจ่ายไฟภายนอกเพื่อจ่ายไฟให้กับแถบ LED แต่ฉันพบว่าเมื่อคุณเล่นไฟ LED เพียงไม่กี่ดวงเท่านั้นที่เปิดอยู่ในเวลาเดียวกันจึงมี ไม่มีปัญหาในการใช้ Arduino +5V / GND เป็นเอาต์พุต (พยายามหลีกเลี่ยงการกดปุ่มทั้งหมดพร้อมกันและด้วยความเร็วเต็มที่;-)) หากคุณตัดสินใจที่จะใช้แหล่งจ่ายไฟภายนอก เพียงแค่เชื่อมต่อกับพิน Arduino +5V และ GND บางคนแนะนำให้ใส่ตัวเก็บประจุ 100uF (ไม่แสดงในแผนผัง) ระหว่างสองบรรทัดนี้

ประสานชิ้นส่วนเข้ากับโปรโตชิลด์และเชื่อมต่อแถบ LED ตามที่แสดงในแผนผัง

ขั้นตอนที่ 2: เชื่อมต่อแถบ LED

การเชื่อมต่อแถบ LED
การเชื่อมต่อแถบ LED

การเชื่อมต่อปลายด้านขวา - ปลายอินพุต - ของแถบ LED เข้ากับวงจรเป็นสิ่งสำคัญ แถบของฉันมีขั้วต่อตัวเมียเป็นอินพุต และมีรูปสามเหลี่ยมเล็กๆ ที่ชี้ออกจากอินพุตตลอด ที่เอาต์พุตมีขั้วต่อตัวผู้ (เพื่อให้สามารถเชื่อมต่อกับแถบอื่นซึ่งเราไม่ต้องการ) ดังนั้นฉันจึงตัดมันออกและบัดกรีเข้ากับสายเคเบิลสามเส้นที่มาจาก Arduino ใช้ท่อหดแบบใช้ความร้อนเพื่อผูกสายเคเบิลทั้งสามเข้ากับแถบ LED เข้าด้วยกัน และทำให้มองเห็นได้น้อยลง

แถบ LED ที่ฉันใช้มาพร้อมกับเทปกาวที่ด้านหลัง จึงสามารถติดกาวที่ด้านหลังของแป้นพิมพ์ MIDI ได้อย่างง่ายดาย

ขั้นตอนที่ 3: ปรับโปรเจ็กต์ให้เข้ากับคีย์บอร์ดของคุณ

ปรับโปรเจ็กต์ให้เข้ากับคีย์บอร์ดของคุณ
ปรับโปรเจ็กต์ให้เข้ากับคีย์บอร์ดของคุณ
ปรับโปรเจ็กต์ให้เข้ากับคีย์บอร์ดของคุณ
ปรับโปรเจ็กต์ให้เข้ากับคีย์บอร์ดของคุณ

คุณอาจต้องปรับแถบ LED และรหัส Arduino ให้เข้ากับแป้นพิมพ์ของคุณ ของฉันมี 76 คีย์ และความยาวของแถบนั้นเกือบจะเท่ากับความกว้างของแป้นพิมพ์เลย หากคุณมีเช่น 61 คีย์ คุณอาจต้องการแถบที่สั้นกว่านี้ แถบ LED สามารถตัดระหว่าง LED สองดวงใดก็ได้ ตรวจสอบให้แน่ใจว่าคุณได้ตัดส่วนที่ถูกต้องออก มันมีปลายอินพุต (พร้อมขั้วต่อตัวเมีย) และปลายเอาต์พุต (พร้อมขั้วต่อตัวผู้) คุณต้องเก็บปลายอินพุตไว้ ในโค้ด ให้เปลี่ยน #defines สำหรับ

  • NUMBER_OF_LEDS ถึงจำนวน LED ที่เหลืออยู่ในแถบของคุณหลังจากตัดปลาย
  • NUMBER_OF_KEYS ถึงจำนวนปุ่มบนแป้นพิมพ์ของคุณและ
  • MIN_KEY เป็นเลขพิทช์ MIDI ของคีย์ต่ำสุดของคุณ คุณอาจพบสิ่งนี้ในคู่มือผู้ใช้ของแป้นพิมพ์ หรือใช้เครื่องมือที่แสดงหมายเลขบันทึกย่อ MIDI เช่น KMidiMon สำหรับ Linux หรือ Pocket MIDI สำหรับ windows หรือ Mac หรือลองใช้ค่าต่างๆ กันจนกว่าอุปกรณ์จะตอบสนองต่อปุ่มทั้งหมดบนแป้นพิมพ์ของคุณ

ขั้นตอนที่ 4: รหัส Arduino

รหัส Arduino ใช้ไลบรารี MIDI (v4.3.1) โดย Forty Seven Effects และไลบรารี Adafruit NeoPixel (v1.3.4) โดย Adafruit ติดตั้งไลบรารีเหล่านี้โดยใช้ Arduino IDE จากนั้นคอมไพล์โค้ดและอัปโหลดไปยัง Arduino โดยไม่ต้องต่อชิลด์ (ออปโตคัปเปลอร์เชื่อมต่อกับพิน RX ซึ่งขัดขวางการอัพโหลด) จ่ายไฟ Arduino ผ่านสาย USB (ฉันใช้หูดที่ผนัง USB)

หากคุณต้องการแก้ไขโค้ดตามที่คุณต้องการ นี่คือภาพรวมโดยย่อว่ามันทำงานอย่างไร: อินพุต MIDI จะถูกอ่านออกในทุกลูป ถ้าได้รับเหตุการณ์ Note On หรือ Note Off ฟังก์ชัน MyHandleNoteOn หรือ MyHandleNoteOff จะถูกเรียก ทั้งคู่เรียกฟังก์ชัน updateVelocityArray ซึ่งเก็บความเร็ว (เช่น ที่คุณกดคีย์) ของหมายเลขคีย์ หากความเร็วสูงกว่าที่เคยเก็บไว้ สีของ LED ที่สอดคล้องกันจะถูกตั้งค่าเป็น "สีปัจจุบัน" หลังจากจัดการเหตุการณ์ MIDI แล้ว ฟังก์ชัน updateLedArray จะถูกเรียก สิ่งนี้จะอัปเดต "สีปัจจุบัน" (ค่าสีแดง สีเขียว และสีน้ำเงินที่เปลี่ยนแปลงอย่างอิสระในลักษณะเชิงเส้น จนกว่าจะถึงปลายล่างหรือบน ซึ่งความเร็วสำหรับการเปลี่ยนแปลงเชิงเส้นถูกตั้งค่าเป็นตัวเลขสุ่ม) ลดความเร็วของโน้ตที่กดลงอย่างช้าๆ และอัปเดตค่าสีของ LED แต่ละดวงที่ต้องเปลี่ยนสี (เนื่องจากมีการกดโน้ตใหม่ หรือความเร็วลดลง) ฟังก์ชัน showLedArray ถ่ายโอนสีไปยังโครงสร้าง Adafruit_NeoPixel ที่เรียกว่า "พิกเซล" และทำให้ LED จริงแสดงสีในโครงสร้างพิกเซล

ขั้นตอนที่ 5: การปรับปรุงที่เป็นไปได้ …

โครงการไม่เคยเสร็จสิ้น มีบางสิ่งที่สามารถทำได้เพื่อปรับปรุงอยู่เสมอ:

  • โปรโตชิลด์มีชิ้นส่วนเพียงไม่กี่ชิ้นเท่านั้นที่เสียจริง เราสามารถบรรลุผลเช่นเดียวกันได้อย่างง่ายดายด้วย Arduino Nano และ PCB ขนาด 15x7 รูรวมถึงส่วนหัวของพินตัวเมีย
  • สัญญาณ MIDI บางส่วนหายไป หากเป็น NoteOn ไฟ LED ที่เกี่ยวข้องจะไม่สว่างขึ้น หากเป็น NoteOff มันจะไม่ดับ (นั่นคือสาเหตุที่ฉันแนะนำการลดความเร็ว ซึ่งทำให้แน่ใจได้ว่าไฟ LED จะไม่ติดตลอด) ฉันยังคงพยายามหาเหตุผล อาจเป็นปัญหาเรื่องเวลา และควรเรียก MIDI.read() บ่อยขึ้น
  • สัญญาณ MIDI บางตัวอ่านผิด กล่าวคือ ไฟ LED ผิดจะสว่างขึ้น สามารถเชื่อมต่อกับจุดด้านบน จำเป็นต้องมีการสอบสวน
  • วงจรได้รับการออกแบบมาเพื่อให้เอฟเฟกต์ภาพที่น่าพึงพอใจโดยไม่ต้องมีการโต้ตอบกับผู้ใช้มากนัก (นอกเหนือจากการเล่นคีย์บอร์ด) อย่างไรก็ตาม ฉันสามารถจินตนาการถึงการเพิ่มโพเทนชิออมิเตอร์ที่อ่านได้ (โดยใช้อินพุตแบบอะนาล็อกของ Arduino) ซึ่งคุณสามารถเปลี่ยนความเร็วสูงสุดที่สีจะเปลี่ยนไป (ปัจจุบัน #define'd เป็น MAX_COLOR_CHANGE_SPEED = 20) หรือวัดเวลาเฉลี่ยระหว่างสองเหตุการณ์ NoteOn และเปลี่ยน MAX_COLOR_CHANGE_SPEED ตามนั้น - ในเพลงช้า สีควรเปลี่ยนช้ากว่า

ขั้นตอนที่ 6: เสร็จแล้ว

จ่ายไฟ Arduino ผ่านสาย USB (ฉันใช้หูดที่ผนัง USB) เชื่อมต่อคีย์บอร์ด MIDI ของคุณเข้ากับแจ็ค MIDI แล้วเริ่มร็อกกิ้ง ดูฉันเปิดเพลงเบาๆหน่อย

แนะนำ: