สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: ทำความเข้าใจโฟลว์
- ขั้นตอนที่ 2: การตั้งค่าเซิร์ฟเวอร์ - Ngrok
- ขั้นตอนที่ 3: การตั้งค่าเซิร์ฟเวอร์ - Node-Red
- ขั้นตอนที่ 4: การตั้งค่าเซิร์ฟเวอร์ - MQTT (ยุง)
- ขั้นตอนที่ 5: รหัส
- ขั้นตอนที่ 6: พิมพ์โมเดล 3 มิติ
- ขั้นตอนที่ 7: การประกอบและการเชื่อม
- ขั้นตอนที่ 8: เล่นวนซ้ำกับเพื่อนของคุณ
วีดีโอ: ทำนอง: 8 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
นอกจากข้อดีและวิธีแก้ปัญหาทางเทคโนโลยีมากมายที่ช่วยให้ทำงานจากที่บ้านได้แล้ว ความยากลำบากในการกำหนดและสร้างการช่วยชีวิตในหมู่เพื่อนร่วมงานยังคงอยู่ MELODY เป็นอุปกรณ์ดิจิตอลกายภาพที่ช่วยให้สามารถสร้างแยมดนตรีสั้น ๆ ที่ทำงานร่วมกันได้ เพื่อนร่วมงานประสานเวลาและอุปกรณ์ตั้งค่าเซสชันติดขัดด้วยการเลี้ยวและเสียงสุ่มต่างๆ ผู้เข้าร่วมคนแรกกำหนดจังหวะเฉพาะ หลังจากนั้นผู้เข้าร่วมแต่ละคนจะเพิ่มส่วนดนตรีของตนเองที่สอดคล้องกับจังหวะที่ตั้งไว้ เพื่อให้ง่ายขึ้นสำหรับผู้ใช้ที่ไม่มีพื้นฐานทางดนตรี ซอฟต์แวร์ช่วยให้พวกเขาก้าวตามด้วยการสุ่มตัวอย่างการคลิกและปรับให้เข้ากับจังหวะที่เหมาะสม เซสชั่นจะสิ้นสุดลงหลังจากนั้นประมาณ 3 นาทีเมื่อผู้เข้าร่วมทั้งหมดบันทึกส่วนของตนเสร็จแล้ว
มันทำงานอย่างไร?
Melody ใช้ฮาร์ดแวร์ ESP2866 ซึ่งสื่อสารกับเซิร์ฟเวอร์ Node-Red ผ่านโปรโตคอล MQTT อุปกรณ์จะแปลบันทึกของผู้เล่นเป็นชุดอักขระที่ส่งไปยังเซิร์ฟเวอร์และจากเซิร์ฟเวอร์กลับไปยังผู้เล่นอื่น ซึ่งช่วยให้ทุกคนสามารถเล่นและฟังเพลงได้โดยไม่หยุดชะงักจากการเชื่อมต่อเครือข่าย
เมโลดี้มีตัวบ่งชี้ภาพหลักสองแบบ อย่างแรกคือแถบไฟ LED ที่ให้ผู้เล่นทราบเมื่อลูปเริ่มต้นและสิ้นสุดเมื่อไร และระบุว่าเป็นตาของผู้เล่นหรือไม่ ประการที่สองคือจอแสดงผล LED ที่กึ่งกลางของผลิตภัณฑ์ ซึ่งใช้เพื่อแสดงการปรับแต่งที่มีอยู่ การนับถอยหลังจาก 3 ถึง 1 หมายถึงเริ่มเล่นและการแสดงเวลาจะชี้นำผู้ใช้ว่าต้องการมีส่วนร่วมกับ Melody ของกลุ่มเมื่อใดและอย่างไร การบันทึกจะถูกบันทึกโดยอัตโนมัติไปยังระบบคลาวด์ของบริษัทเพื่อใช้ในอนาคต
โครงการนี้ออกแบบโดยนักศึกษาสี่คนที่ห้องปฏิบัติการนวัตกรรมสื่อ (MiLab) ที่ศูนย์สหวิทยาการ Herzliya (IDC): ชาฮาร์ อากัสซี, เอเดน บาร์-ทอฟ, กัล เอชชาร์ และกาด สเติร์น ด้วยความช่วยเหลือของ Zvika Markfeld, Netta Ofer และ Michal Leschinsky และคำแนะนำของ Noa Morag และ Oren Zuckerman
ขอบคุณ Tom Granot สำหรับการสร้างคำแนะนำที่ยอดเยี่ยมที่ช่วยให้ฉันเรียนรู้วิธีใช้งานบางสิ่งที่นี่ (บางขั้นตอนที่นี่จำลองตามคำแนะนำที่ยอดเยี่ยมนี้)
เสบียง
- เครื่องพิมพ์ 3 มิติ
- ESP8266
- 7 ปุ่ม
- 8X8 LED เมทริกซ์
- WS2812B แถบ LED
- แอมพลิฟายเออร์ I2S
- แจ็คเสียง 4 ขั้ว 1/8" (3.5 มม.) ตัวเมีย
- ตัวต้านทาน 4X 1K
- ตัวต้านทาน 1X3K
ขั้นตอนที่ 1: ทำความเข้าใจโฟลว์
ในโครงการนี้ เราพยายามแก้ไขปัญหาบางอย่าง:
- เราจะทำออนไลน์ได้อย่างไร ให้ผู้เล่นได้เล่นไปพร้อม ๆ กัน?
- เราจะหลีกเลี่ยงเวลาแฝงของอินเทอร์เน็ตและสร้างประสบการณ์ที่ราบรื่นได้อย่างไร
- เราจะทำให้เพลงฟังดูดีแม้กับคนที่ไม่มีพื้นฐานทางดนตรีได้อย่างไร
เวลาและลำดับของเพลง
เพื่อแก้ปัญหาแรก เราดูที่โปรโตคอล MIDI และพยายามใช้ แต่เราเห็นว่ามันแข็งแกร่งกว่าที่เราต้องการจริงๆ และเราต้องการทำให้มันง่ายจริงๆ เพื่อให้เราสามารถสร้างต้นแบบการทำงานชิ้นแรกได้ ดังนั้นเราจึงใช้แรงบันดาลใจจาก MIDI และทำให้วงดนตรีของเราแสดงด้วยสตริงตัวเลข (ตั้งแต่ 0-5) คูณด้วยขนาดของลูปเวลาที่ผู้เล่น (เราจะอธิบายคณิตศาสตร์ทางดนตรีทั้งหมดในภายหลัง)
ในดนตรี เราแบ่งจังหวะออกเป็นบาร์ดนตรี โดยพื้นฐานแล้วแต่ละแท่งจะเป็นช่วงสั้นๆ เราเลือกใช้ 4/4 (หมายถึง 4 จังหวะในแถบดนตรี) ซึ่งเป็นส่วนที่ใช้บ่อยที่สุด
จากนั้นแต่ละจังหวะจะแบ่งออกเป็น 4 หน้าต่างสุ่มตัวอย่าง ดังนั้นทุกโน้ตที่เล่นจะถูกจัดตำแหน่งอัตโนมัติให้อยู่ในตำแหน่งที่ดีและยังช่วยให้เราแสดงเพลงเป็นสตริงตัวเลขเพื่อส่งไปยังเซิร์ฟเวอร์ได้
เพื่อให้เป็นมิตรกับผู้เล่นที่ไม่มีพื้นฐานทางดนตรี เราได้ทำสามสิ่ง:
- จำกัดจำนวนปุ่มเพื่อให้ผู้เล่นสนใจตัวเลือกน้อยลง
- เราเลือกโน้ตในระดับเดียวกับที่เล่นด้วยกันได้ดี ดังนั้นจึงไม่มีเสียงที่ไม่สอดคล้องกัน
- การกดแต่ละครั้งถูกตั้งค่าเป็น "หน้าต่าง" ของจังหวะทำให้เพลงของผู้เล่นเปลี่ยนไปตามจังหวะ
โปรโตคอลการสื่อสาร
หลังจากที่เราเข้าใจตรรกะเบื้องหลังดนตรีแล้ว เราจะสื่อสารระหว่างผู้เล่นของเราได้อย่างไร?
สำหรับสิ่งนั้น เราใช้ MQTT ซึ่งเป็นโปรโตคอลเครือข่ายแบบสมัครรับข้อมูลซึ่งขนส่งข้อความระหว่างอุปกรณ์ต่างๆ
ผู้เล่นแต่ละคนสมัครรับข้อมูลในสองหัวข้อ: ลูป (รับลูปล่าสุด) และเทิร์น (รับ id ของผู้เล่นปัจจุบันเพื่อการซิงค์)
ในทางกลับกันเมื่อผู้เล่นเล่นเพลงเสร็จแล้ว เขา/เธอจะกดปุ่ม UP และลูป (อันที่อัปเดตแล้ว) จะถูกส่งไปยังโบรกเกอร์ MQTT ซึ่งจะส่งกลับไปยังผู้เล่นทุกคนในลูปแชนเนล
ลูปนี้จะยังคง "อยู่เฉยๆ" จนกว่าลูปปัจจุบันจะเล่นเสร็จและจะแทนที่ จึงจะโปร่งใสสำหรับผู้เล่น นอกจากนี้ เนื่องจากปัจจุบันลูปใหม่ถูกบันทึกไว้ในอุปกรณ์ของเครื่องเล่น จึงไม่มีความหน่วงแฝงทางอินเทอร์เน็ตสำหรับเพลง ดังนั้นเราจึงแก้ไขปัญหาที่สอง
ขั้นตอนที่ 2: การตั้งค่าเซิร์ฟเวอร์ - Ngrok
งรกเป็นบริการขุดอุโมงค์ ช่วยให้เราสามารถเปิดเผยบริการที่ทำงานอยู่ในเครื่อง (ในกรณีของเราคือ Node-RED) สู่โลกภายนอก โดยไม่ต้องยุ่งยากกับการตั้งค่าเซิร์ฟเวอร์หรือจัดการกับระเบียน DNS คุณเพียงแค่เรียกใช้ Node-RED บนคอมพิวเตอร์ของคุณ จากนั้นเรียกใช้ ngrok บนพอร์ตเดียวกันที่ Node-RED ทำงานอยู่
เพียงเท่านี้ คุณจะได้รับ URL ที่คุณสามารถใช้เข้าถึง Node-RED ได้จากทุกที่ในโลก ไม่ว่าจะเชื่อมต่อกับเครือข่ายใด
การติดตั้งและการกำหนดค่า
- ดาวน์โหลด ngrok สำหรับระบบปฏิบัติการของคุณจากที่นี่
- ทำตามขั้นตอนในหน้าดาวน์โหลด จนถึงขั้นตอน "เปิดเครื่อง"
- ใน "Fire it up step" ให้สลับ 80 สำหรับ 1883 - และ http เป็น tcp เช่นเดียวกับใน./ngrok tcp 1883 ขึ้นอยู่กับคุณ
- บันทึก URL และหมายเลขพอร์ต (ที่เห็นในภาพ) เราต้องการในภายหลัง
ขั้นตอนที่ 3: การตั้งค่าเซิร์ฟเวอร์ - Node-Red
ลอจิกเซิร์ฟเวอร์ของโปรเจ็กต์ Node-RED เป็นสภาพแวดล้อมการเขียนโปรแกรมแบบเห็นภาพที่ให้คุณเชื่อมต่อซอฟต์แวร์ต่างๆ (และฮาร์ดแวร์!)
ที่นี่เราทำตรรกะของการสื่อสารระหว่างผู้เล่นทั้งหมด (แบ่งปันและรับลูปและประสานงานผลัดกัน)
ติดตั้ง Node-Red
ทำตามขั้นตอนต่อไปนี้เพื่อโหลดโฟลว์ Node-RED ของเราบนคอมพิวเตอร์ในพื้นที่ของคุณ:
- Node-RED ต้องการ Node.js ติดตั้งจากที่นี่
- ติดตั้ง Node-RED เองโดยใช้คำแนะนำที่นี่
เมื่อคุณได้ติดตั้ง Node-RED แล้ว ให้เรียกใช้โดยใช้คำแนะนำในขั้นตอนด้านบนและตรวจสอบว่าคุณสามารถดูหน้าผ้าใบที่ว่างเปล่าได้ ควรอยู่ใน
ตอนนี้ คุณจะต้องนำเข้าโฟลว์ที่เราใช้สำหรับโปรเจ็กต์นี้ คุณสามารถค้นหาได้ที่นี่ และเพียงกดนำเข้า เพิ่มไฟล์ JSON แล้วกด Deploy
ติดตั้ง Node-Red:
หากคุณดูภาพที่แนบมากับขั้นตอนนี้ คุณจะเห็นว่าเรามี "การกระทำ" หลัก 2 อย่าง เราได้รับลูปปัจจุบันจากผู้เล่นรายหนึ่งของเรา จากนั้นเราจะส่งไปยังผู้เล่นคนอื่นๆ ทั้งหมด นอกจากนี้เรายังถ่ายทอดเทิร์นใหม่ให้กับผู้เล่นทุกคน ดังนั้นเกมจะซิงค์กัน
ขั้นตอนที่ 4: การตั้งค่าเซิร์ฟเวอร์ - MQTT (ยุง)
เนื่องจาก Node-RED ไม่มีโบรกเกอร์ MQTT ของตัวเอง และเราจะต้องสื่อสารกับเซ็นเซอร์และตัวกระตุ้นของเราผ่าน MQTT เราจะใช้โบรกเกอร์ MQTT โดยเฉพาะ เนื่องจาก Node-RED แนะนำ Mosquitto นี่คือสิ่งที่เราจะใช้ ดูข้อมูลบางอย่างเกี่ยวกับ MQTT ที่นี่ และเหตุใดจึงมักใช้ในโครงการ IoT
การติดตั้งและการกำหนดค่า
- ดาวน์โหลด Mosquitto จากที่นี่และติดตั้ง ทั้งหมดนี้เป็นไปตามระบบปฏิบัติการของคุณ
- โดยปกติ คุณจะต้องทำตามคำแนะนำที่นี่เพื่อเชื่อมต่อ Node-RED กับ Mosquitto อย่างไรก็ตาม หากคุณใช้โฟลว์ของเรา โฟลว์ของเราก็ได้รับการกำหนดค่าไว้ล่วงหน้าสำหรับคุณแล้ว ตราบใดที่คุณติดตั้งโฟลว์และ Mosquitrro อย่างถูกต้อง และ Mosquitto ทำงานบนพอร์ต 1883 (ซึ่งทำงานโดยค่าเริ่มต้น) มันก็จะใช้งานได้ทันที
- โปรดทราบว่านี่หมายความว่าโบรกเกอร์ MQTT และเซิร์ฟเวอร์ Node-RED ของคุณทำงานบนเครื่องเดียวกัน สิ่งนี้มีประโยชน์ในการทำให้การสื่อสารภายในระบบง่ายขึ้น ดูหมายเหตุด้านล่างสำหรับข้อมูลเพิ่มเติม
การตรวจสอบการรับส่งข้อมูล MQTT
ฉันใช้ MQTTfx เพื่อตรวจสอบทราฟฟิก มันเป็นเครื่องมือที่ยอดเยี่ยมพร้อม GUI ที่ง่ายมาก
ขั้นตอนที่ 5: รหัส
คุณสามารถค้นหารหัสใน GitHub (พร้อมไฟล์ข้อมูลทั้งหมดและ config.h)
การพึ่งพา:
ก่อนโหลดโค้ดไปที่ esp2866 คุณจะต้องติดตั้งไลบรารี่สองสามตัว:
- libmad-8266 (ถอดรหัสเพลงจาก SPIFF และลงใน I2S)
- EspMQTTClient
- ESP8266WiFi
- Adafruit_NeoPixel
อัปโหลดเสียงไปยัง ESP โดยใช้ SPIFF:
- ปฏิบัติตามคำแนะนำที่ดีนี้
- เพิ่มโฟลเดอร์ข้อมูลลงในไดเร็กทอรีซอร์สโค้ด
- ใน Arduino IDE ภายใต้เครื่องมือเปลี่ยนขนาดแฟลชเป็น "4MB (FS:3MB TOA:~512KB)"
- ภายใต้เครื่องมือ กด ESP2866 Sketch Data Upload
การตั้งค่าพารามิเตอร์:
หลังจากนั้นไปที่ไฟล์ config.h และเพิ่มข้อมูลที่จำเป็น เช่น ข้อมูลรับรอง WIFI และ ngrok URL และพอร์ตจากขั้นตอนก่อนหน้า (ตรวจสอบรูปภาพที่แนบมาเพื่อใช้อ้างอิง)
ป.ล. ฉันได้เพิ่มคุณสมบัติการเชื่อมต่ออัตโนมัติเพื่อช่วยคุณตั้งค่าข้อมูล WIFI และ ngrok จากสมาร์ทโฟนของคุณ เนื่องจากมันเป็นเพียงการพิสูจน์แนวคิดแรก ฉันจึงอยากจะเพิ่มมันสักวันหนึ่ง
กำหนดจำนวนผู้เล่นที่คุณต้องการ (เกมนี้ทำงานได้ดีที่สุดสำหรับผู้เล่น 2-3 คนและจะเต็มไปด้วยอาร์เรย์ของเสียงสำหรับผู้เล่น 2 คน) แต่สามารถปรับเพิ่มเติมได้อย่างง่ายดาย:
สำหรับผู้เล่นแต่ละคนเพิ่มโฟลว์อื่นในโหนดสีแดงเพื่อเผยแพร่ลูปในหัวข้อเฉพาะผู้ใช้
นอกจากนี้ คุณยังสามารถแก้ไขเสียงดนตรีได้โดยการจัดอาร์เรย์นี้เป็นเสียงที่คุณกำหนดเอง:
ที่นี่คุณสามารถดูเครื่องดนตรีได้ 3 ประเภท (Chrods สำหรับผู้เล่น 0, Lead สำหรับผู้เล่น 1 และ Bass สำหรับผู้เล่น 2)
เส้นทาง const char* [NUMofNotes] = {"/blank1.wav", "/Chords_Am.wav", "/Chords_F.wav", "/Chords_C.wav", "/Chords_G.wav", "/Chords_Dm.wav", "/blank2.wav", "/Lead_C.wav", "/Lead_D.wav", "/Lead_E.wav", "/Lead_G.wav", "/Lead_A.wav", "/blank0.wav", "/Bass_C3.wav", "/Bass_D3.wav", "/Bass_F3.wav", "/Bass_G3.wav", "/Bass_A3.wav"};
ขั้นตอนที่ 6: พิมพ์โมเดล 3 มิติ
สำหรับขั้นตอนแรก ให้ดาวน์โหลด STL และพิมพ์ออกมา
หลังจากถอดตัวรองรับออกแล้วและอาจจะขัดเล็กน้อย (ขึ้นอยู่กับความละเอียดของเครื่องพิมพ์)
ทาสีให้เป็นสีที่ต้องการ
ขั้นตอนที่ 7: การประกอบและการเชื่อม
โดยพื้นฐานแล้วนี่คือที่ที่เวทมนตร์ที่แท้จริงเกิดขึ้น
คุณสามารถทำตามแผนผังเหล่านี้และเชื่อมทุกอย่างเข้าด้วยกัน
โปรดทราบว่าคุณสามารถเปลี่ยนตำแหน่งของ PIN ได้ แต่อย่าลืมเปลี่ยนในรหัสด้วย
A0 และ I2S ได้รับการแก้ไขแล้ว:
เนื่องจาก A0 ใช้สำหรับสะพานตัวต้านทาน (เราใช้ความแตกต่างของกระแสเพื่อทราบว่ามีการกดปุ่มใดจาก 5 ปุ่ม - คล้ายกับคำแนะนำนี้
I2S มีรหัสเฉพาะที่คุณสามารถหาได้ที่นี่
ขั้นตอนที่ 8: เล่นวนซ้ำกับเพื่อนของคุณ
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-