Mục lục:

Giai điệu: 8 bước (có hình ảnh)
Giai điệu: 8 bước (có hình ảnh)

Video: Giai điệu: 8 bước (có hình ảnh)

Video: Giai điệu: 8 bước (có hình ảnh)
Video: Nhảy Tập Thể - DISCO 8 BƯỚC !!! 2024, Tháng mười một
Anonim
Image
Image
Hiểu dòng chảy
Hiểu dòng chảy

Bên cạnh nhiều ưu điểm và giải pháp công nghệ cho phép làm việc tại nhà, khó khăn trong việc hình thành và tạo sự hỗ trợ cuộc sống giữa các đồng nghiệp vẫn còn. MELODY là một thiết bị vật lý kỹ thuật số cho phép tạo ra các đoạn nhạc ngắn cộng tác. Đồng nghiệp điều phối thời gian và thiết bị đặt phiên kẹt với các lượt và âm thanh ngẫu nhiên khác nhau. Người tham gia đầu tiên đặt một nhịp điệu cụ thể, sau đó mỗi người tham gia thêm phần âm nhạc của riêng họ tương ứng với nhịp điệu đã đặt. Để giúp người dùng không có nền tảng âm nhạc dễ dàng hơn, phần mềm giúp họ theo kịp tốc độ bằng cách lấy mẫu các lần nhấp và điều chỉnh theo nhịp điệu thích hợp. Buổi học kết thúc sau khoảng 3 phút khi tất cả học viên đã ghi xong phần của mình.

Làm thế nào nó hoạt động?

Melody dựa trên phần cứng ESP2866, giao tiếp với máy chủ Node-Red qua giao thức MQTT. Thiết bị chuyển các ghi chú của người chơi thành một chuỗi ký tự được gửi đến máy chủ và từ máy chủ trở lại những người chơi khác. Điều này cho phép mọi người chơi và nghe giai điệu mà không bị gián đoạn kết nối mạng của họ.

Melody có hai chỉ số hình ảnh chính. Đầu tiên là dải đèn LED cho phép người chơi biết khi nào Vòng lặp bắt đầu và khi nào kết thúc và cho biết đã đến lượt của người chơi hay chưa. Thứ hai là màn hình LED ở trung tâm của sản phẩm, được sử dụng để hiển thị trực quan giai điệu hiện có. Đếm ngược từ 3 đến 1 cho biết bắt đầu phát và màn hình hiển thị thời gian hướng dẫn người dùng về thời điểm và cách họ muốn đóng góp cho Giai điệu của nhóm. Bản ghi sẽ tự động được lưu vào đám mây của công ty để sử dụng trong tương lai.

Dự án này được thiết kế bởi bốn sinh viên tại phòng thí nghiệm đổi mới Truyền thông (MiLab) tại Trung tâm liên ngành Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar và Gad Stern. Với sự hỗ trợ của Zvika Markfeld, Netta Ofer và Michal Leschinsky và sự hướng dẫn của Noa Morag và Oren Zuckerman.

cảm ơn Tom Granot vì đã tạo một tài liệu hướng dẫn tuyệt vời giúp tôi học cách triển khai một số điều ở đây (một số bước ở đây được mô phỏng theo tài liệu hướng dẫn tuyệt vời này).

Quân nhu

  • máy in 3D
  • ESP8266
  • 7 nút
  • Ma trận LED 8X8
  • Dải đèn LED WS2812B
  • Bộ khuếch đại I2S
  • Giắc cắm âm thanh 4 cực 1/8 "(3,5 mm) nữ
  • Điện trở 4X 1K
  • Điện trở 1X3K

Bước 1: Hiểu quy trình

Hiểu dòng chảy
Hiểu dòng chảy
Hiểu dòng chảy
Hiểu dòng chảy

Trong dự án này, chúng tôi đã cố gắng giải quyết một số vấn đề:

  1. Làm thế nào chúng tôi có thể tạo nó trực tuyến để người chơi có thể chơi cùng một lúc?
  2. Làm cách nào chúng ta có thể khắc phục độ trễ của internet và tạo ra trải nghiệm liền mạch?
  3. Làm thế nào chúng ta có thể tạo ra âm nhạc hay ngay cả đối với những người không có nền tảng âm nhạc?

Thời gian và tuần tự của âm nhạc

Để giải quyết vấn đề đầu tiên, chúng tôi đã xem xét giao thức MIDI và cố gắng sử dụng nó, nhưng chúng tôi thấy rằng nó mạnh mẽ hơn, sau đó những gì chúng tôi thực sự cần cũng là chúng tôi thực sự muốn làm cho nó đơn giản để chúng tôi có thể xây dựng nguyên mẫu hoạt động đầu tiên. Vì vậy, chúng tôi đã lấy cảm hứng từ MIDI và làm cho vòng lặp âm nhạc của chúng tôi được biểu diễn bằng một chuỗi số (từ 0-5) nhân với thời gian kích thước vòng lặp của người chơi (chúng tôi sẽ giải thích tất cả các phép toán âm nhạc sau).

Trong âm nhạc, chúng tôi chia các nhịp điệu thành các thanh nhạc. Mỗi ô nhịp về cơ bản là một phân đoạn thời gian nhỏ, chúng tôi chọn sử dụng 4/4 (có nghĩa là 4 nhịp trong một ô nhịp) - nhịp phổ biến nhất.

Mỗi nhịp sau đó được chia thành 4 cửa sổ lấy mẫu để mỗi nốt được phát sẽ được tự động căn chỉnh đến một vị trí tốt và cũng cho phép chúng tôi biểu diễn một bài hát dưới dạng một chuỗi số để gửi đến máy chủ.

Để thân thiện với những người chơi không có nền tảng âm nhạc, chúng tôi đã làm ba điều:

  1. Giới hạn số lượng phím để khiến người chơi tập trung vào ít lựa chọn hơn.
  2. Chúng tôi đã chọn các nốt trên cùng một âm giai chơi tốt với nhau để không có bất kỳ âm thanh bất hòa nào.
  3. Mỗi lần nhấn được đặt thành "cửa sổ" của nhịp điệu, do đó, nhạc của trình phát sẽ khác với nhịp điệu

Các giao thức giao tiếp

Vì vậy, sau khi chúng tôi hiểu logic đằng sau âm nhạc, làm thế nào chúng tôi có thể giao tiếp nó giữa những người chơi của chúng tôi?

vì vậy, chúng tôi sử dụng MQTT, một giao thức mạng đăng ký xuất bản để truyền tải thông điệp giữa các thiết bị.

mỗi người chơi được đăng ký vào hai chủ đề: vòng lặp (lấy vòng lặp mới nhất) và lượt (lấy id của người chơi hiện tại cho mục đích đồng bộ).

Đến lượt của họ khi người chơi chơi xong giai điệu, họ sẽ nhấn nút LÊN và vòng lặp (bản cập nhật) sẽ được gửi đến nhà môi giới MQTT, sẽ truyền lại cho tất cả người chơi trên kênh vòng lặp.

vòng lặp này sẽ ở trạng thái "không hoạt động" cho đến khi vòng lặp hiện tại được phát xong và sau đó sẽ thay thế nó. do đó nó sẽ được minh bạch với người chơi. cũng vì vòng lặp mới hiện được lưu cục bộ trên thiết bị trình phát nên không có độ trễ internet cho âm nhạc, vì vậy chúng tôi đã giải quyết vấn đề thứ hai.

Bước 2: Thiết lập máy chủ - Ngrok

Đặt máy chủ - Ngrok
Đặt máy chủ - Ngrok
Đặt máy chủ - Ngrok
Đặt máy chủ - Ngrok

ngrok là một dịch vụ đào đường hầm. Nó cho phép chúng tôi hiển thị một dịch vụ đang chạy cục bộ (trong trường hợp của chúng tôi là Node-RED) với thế giới bên ngoài - mà không gặp rắc rối khi thiết lập máy chủ hoặc xử lý các bản ghi DNS. Bạn chỉ cần chạy Node-RED trên máy tính của mình, sau đó chạy ngrok trên cùng một cổng mà Node-RED đang chạy.

Vậy là xong - bạn sẽ nhận được một URL mà bạn có thể sử dụng để truy cập Node-RED từ mọi nơi trên thế giới, bất kể nó được kết nối với mạng nào.

Cài đặt & Cấu hình

  1. Tải xuống ngrok cho hệ điều hành của bạn từ đây.
  2. Làm theo bước trên trang tải xuống cho đến bước "Kích hoạt".
  3. Trong "Bước khởi động", hãy hoán đổi 80 cho 1883 - và http thành tcp như trong,./ngrok tcp 1883 tùy thuộc vào
  4. lưu URL và số cổng (đã thấy trong hình ảnh), chúng tôi sẽ cần, sau này.

Bước 3: Đặt máy chủ - Node-Red

Đặt máy chủ - Node-Red
Đặt máy chủ - Node-Red

Logic Máy chủ của dự án, Node-RED là một môi trường lập trình trực quan cho phép bạn kết nối nhiều phần mềm (và phần cứng!).

Ở đây, chúng tôi đã thực hiện logic của giao tiếp giữa tất cả người chơi (chia sẻ và nhận các vòng lặp và điều phối các lượt)

Cài đặt Node-Red

làm theo các bước sau để tải luồng Node-RED của chúng tôi trên máy tính cục bộ của bạn:

  1. Node-RED yêu cầu Node.js, hãy cài đặt nó từ đây
  2. tự cài đặt Node-RED bằng cách sử dụng các hướng dẫn tại đây.

Bây giờ bạn đã cài đặt Node-RED, hãy chạy nó theo hướng dẫn ở bước trên và xác thực, bạn có thể thấy một trang canvas trống. Nó phải được đặt tại

Bây giờ bạn sẽ cần nhập luồng mà chúng tôi đã sử dụng cho dự án này, bạn có thể tìm thấy nó ở đây và chỉ cần nhấn nhập thêm tệp JSON và nhấn Triển khai.

Cài đặt Node-Red:

Nếu bạn nhìn vào hình ảnh được đính kèm ở bước này, bạn có thể thấy chúng tôi có 2 "hành động" chính, chúng tôi nhận một vòng lặp hiện tại từ một trong những người chơi của chúng tôi và sau đó chúng tôi truyền nó cho tất cả những người chơi khác. Ngoài ra, chúng tôi phát sóng lượt mới cho tất cả người chơi. để trò chơi luôn đồng bộ.

Bước 4: Thiết lập Máy chủ - MQTT (Mosquitto)

Đặt máy chủ - MQTT (Mosquitto)
Đặt máy chủ - MQTT (Mosquitto)

Vì Node-RED không có nhà môi giới MQTT riêng và chúng tôi sẽ cần giao tiếp với các bộ cảm biến và bộ kích hoạt của chúng tôi qua MQTT, chúng tôi sẽ sử dụng một nhà môi giới MQTT chuyên dụng. Vì Node-RED đề xuất Mosquitto nên đây là cái mà chúng tôi sẽ sử dụng. Xem tại đây để biết một số thông tin về MQTT và lý do tại sao nó thường được sử dụng trong các dự án IoT.

Cài đặt & Cấu hình

  1. Tải xuống Mosquitto từ đây và cài đặt nó, tất cả tùy theo hệ điều hành của bạn.
  2. Thông thường, bạn cần làm theo hướng dẫn tại đây để kết nối Node-RED với Mosquitto. Tuy nhiên, nếu bạn đã sử dụng quy trình của chúng tôi, thì quy trình đó đã được định cấu hình sẵn cho bạn. Miễn là bạn cài đặt quy trình và Mosquitrro đúng cách, và Mosquitto chạy trên cổng 1883 (trên đó nó chạy theo mặc định), thì nó sẽ hoạt động tốt.
  3. Lưu ý rằng điều này có nghĩa là nhà môi giới MQTT và máy chủ Node-RED của bạn chạy trên cùng một máy. Điều này rất hữu ích để đơn giản hóa giao tiếp bên trong hệ thống. Xem ghi chú bên dưới để biết thêm thông tin.

Giám sát lưu lượng MQTT

Tôi đã sử dụng MQTTfx để theo dõi lưu lượng, đó là một công cụ tuyệt vời với GUI rất đơn giản.

Bước 5: Mã

Mật mã
Mật mã

bạn có thể tìm thấy mã trong GitHub (với tất cả các tệp dữ liệu và config.h)

Sự phụ thuộc:

trước khi tải mã vào esp2866, bạn sẽ cần cài đặt một số thư viện:

  1. libmad-8266 (giải mã nhạc từ SPIFF và sang I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Tải âm thanh lên ESP bằng SPIFF:

  1. làm theo hướng dẫn tuyệt vời này.
  2. thêm thư mục dữ liệu vào thư mục mã nguồn.
  3. Trong Arduino IDE dưới Công cụ thay đổi kích thước Flash thành "4MB (FS: 3MB TOA: ~ 512KB)"
  4. Cũng trong Công cụ, Nhấn ESP2866 Tải lên dữ liệu phác thảo

Cài đặt các thông số:

sau đó, truy cập tệp config.h và thêm dữ liệu cần thiết như thông tin đăng nhập WIFI, URL và cổng ngrok từ bước trước (kiểm tra ảnh đính kèm để tham khảo).

p.s - Tôi vẫn chưa thêm tính năng tự động kết nối để giúp bạn đặt dữ liệu WIFI và ngrok từ điện thoại thông minh của mình, vì nó chỉ là bằng chứng đầu tiên về khái niệm, tôi muốn bổ sung nó vào một ngày nào đó.

Đặt số lượng người chơi bạn muốn (trò chơi này hoạt động tốt nhất cho 2-3 người chơi và ngoài hộp, nó được tải với một loạt âm thanh cho 2 người chơi). nhưng có thể dễ dàng điều chỉnh để biết thêm:

đối với mỗi người chơi, hãy thêm một luồng khác trong nút màu đỏ để xuất bản một vòng lặp trong một chủ đề dành riêng cho người dùng.

Ngoài ra, bạn có thể chỉnh sửa âm thanh âm nhạc bằng cách sắp xếp mảng này thành âm thanh tùy chỉnh của bạn:

ở đây bạn có thể thấy 3 loại nhạc cụ (Chrods cho người chơi 0, Chì cho người chơi 1 và Bass cho người chơi 2)

const char * path [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"};

Bước 6: In Mô hình 3D

In mô hình 3D
In mô hình 3D
In mô hình 3D
In mô hình 3D
In mô hình 3D
In mô hình 3D
In mô hình 3D
In mô hình 3D

Đối với bước đầu tiên, hãy tải xuống STL và in chúng.

sau khi tháo giá đỡ và có thể chà nhám một chút (tùy thuộc vào độ phân giải của máy in)

sơn nó với màu sắc mong muốn

Bước 7: Lắp ráp và hàn

Lắp ráp và hàn
Lắp ráp và hàn

Vì vậy, về cơ bản đây là nơi điều kỳ diệu thực sự xảy ra.

bạn có thể làm theo những sơ đồ này và hàn mọi thứ lại với nhau.

lưu ý rằng bạn có thể thay đổi vị trí của các mã PIN chỉ cần nhớ thay đổi nó trong mã.

A0 và I2S được cố định khá chặt chẽ tại chỗ:

vì A0 dành cho cầu điện trở (chúng tôi sử dụng sự khác biệt trong dòng điện để biết nút nào trong số 5 đã được nhấn - tương tự như Bảng hướng dẫn này.

I2S có một mã hóa cụ thể, bạn có thể tìm thấy nó ở đây

Bước 8: Chơi một số vòng lặp với bạn bè của bạn

Đề xuất: