Mục lục:

Bộ tổng hợp Laser Harp trên Zybo Board: 10 bước (có hình ảnh)
Bộ tổng hợp Laser Harp trên Zybo Board: 10 bước (có hình ảnh)

Video: Bộ tổng hợp Laser Harp trên Zybo Board: 10 bước (có hình ảnh)

Video: Bộ tổng hợp Laser Harp trên Zybo Board: 10 bước (có hình ảnh)
Video: Laser Harp 2024, Tháng bảy
Anonim
Bộ tổng hợp Laser Harp trên Zybo Board
Bộ tổng hợp Laser Harp trên Zybo Board

Trong hướng dẫn này, chúng tôi sẽ tạo một cây đàn hạc laser đầy đủ chức năng bằng cách sử dụng cảm biến IR với giao diện nối tiếp cho phép người dùng thay đổi cách điều chỉnh và giai điệu của nhạc cụ. Đàn hạc này sẽ là phiên bản làm lại của thế kỷ 21 cho nhạc cụ cũ. Hệ thống được tạo ra bằng cách sử dụng bảng phát triển Xilinx Zybo cùng với Vivado Design Suites. Những gì bạn sẽ cần để hoàn thành dự án:

  • 12 cảm biến và bộ phát hồng ngoại (có thể sử dụng nhiều hơn hoặc ít hơn tùy thuộc vào số lượng dây)
  • Bảng phát triển Zybo Zynq-7000
  • RTOS miễn phí
  • Vivado Design Suite
  • Dây (để kết nối các cảm biến với bo mạch)
  • 3 đoạn ống PVC ((2) 18 inch và (1) 8 inch)
  • 2 khuỷu tay PVC

Bước 1: Nhận bản demo âm thanh Zybo DMA của Digilent

Phía FPGA của dự án này phần lớn dựa trên dự án demo được tìm thấy ở đây. Nó sử dụng quyền truy cập bộ nhớ trực tiếp để gửi dữ liệu trực tiếp từ bộ nhớ mà bộ xử lý có thể ghi qua AXI Stream tới khối âm thanh I2S. Các bước sau sẽ giúp bạn bắt đầu và chạy dự án demo âm thanh DMA:

  1. Có thể cần một phiên bản mới của tệp bảng cho bảng Zybo. Làm theo các hướng dẫn sau để lấy các tệp bảng mới cho Vivado.
  2. Làm theo các bước 1 và 2 trong hướng dẫn trên trang này để mở dự án demo trong Vivado. Sử dụng phương pháp Vivado, không sử dụng phần cứng SDK.
  3. Bạn có thể nhận được thông báo cho biết một số khối ip của bạn nên được cập nhật. Nếu vậy, hãy chọn "Hiển thị trạng thái IP" và sau đó trong tab trạng thái IP, chọn tất cả IP đã lỗi thời và nhấp vào "Đã nâng cấp đã chọn". Khi quá trình kết thúc và một cửa sổ bật lên hỏi bạn có muốn tạo sản phẩm đầu ra hay không, hãy tiếp tục và nhấp vào "Tạo". Nếu bạn nhận được một thông báo cảnh báo quan trọng, hãy bỏ qua nó.
  4. Chuyển từ thiết kế sang tab nguồn trong Vivado để xem các tệp nguồn. Nhấp chuột phải vào thiết kế khối "design_1" và chọn "Tạo HDL Wrapper". Khi được nhắc, hãy chọn "sao chép trình bao bọc được tạo để cho phép người dùng chỉnh sửa". Một tệp trình bao bọc cho dự án sẽ được tạo.
  5. Bây giờ các bước quan trọng bị bỏ sót trong hướng dẫn khác đã hoàn thành, bạn có thể quay lại hướng dẫn được liên kết trước đó và tiếp tục từ bước 4 đến cuối và đảm bảo rằng dự án demo chạy chính xác. Nếu bạn không có cách nhập âm thanh để ghi âm thì chỉ cần ghi âm bằng tai nghe của bạn và nghe âm thanh mờ trong 5-10 giây khi bạn nhấn nút phát lại. Miễn là có thứ gì đó thoát ra khỏi giắc cắm tai nghe khi bạn nhấn nút phát lại, nó có thể hoạt động chính xác.

Bước 2: Thực hiện một số thay đổi trong Vivado

Thực hiện một số thay đổi trong Vivado
Thực hiện một số thay đổi trong Vivado

Vì vậy, bây giờ bạn đã có bản demo âm thanh DMA của Digilent đang hoạt động, nhưng đó không phải là mục tiêu cuối cùng ở đây. Vì vậy, chúng tôi phải quay lại Vivado và thực hiện một số thay đổi để các cảm biến của chúng tôi có thể được cắm vào các tiêu đề PMOD và chúng tôi có thể sử dụng giá trị của chúng trên mặt phần mềm.

  1. Mở sơ đồ khối trong Vivado
  2. Tạo khối GPIO bằng cách nhấp chuột phải vào không gian trống trong sơ đồ khối và chọn "Thêm IP" từ menu. Tìm và chọn "AXI GPIO".
  3. Nhấp đúp vào khối IP mới và trong cửa sổ IP tùy chỉnh lại, hãy chuyển đến tab cấu hình IP. Chọn tất cả các đầu vào và đặt chiều rộng thành mười hai, vì chúng ta sẽ có 12 "dây" trên cây đàn hạc của mình và do đó cần 12 cảm biến. Nếu bạn muốn sử dụng ít hoặc nhiều cảm biến thì hãy điều chỉnh con số này một cách thích hợp. Đồng thời đặt cho phép ngắt.
  4. Nhấp chuột phải vào khối IP GPIO mới và chọn "chạy tự động hóa kết nối". Đánh dấu vào ô AXI và nhấn OK. Điều này sẽ kết nối giao diện AXI tự động, nhưng không kết nối các đầu ra của khối.
  5. Để nhường chỗ cho ngắt bổ sung, hãy nhấp đúp vào khối IP xlconcat_0 và thay đổi số lượng cổng từ 4 thành 5. Sau đó, bạn có thể kết nối chân ip2intc_irpt từ khối GPIO mới với cổng không sử dụng mới trên khối xlconcat.
  6. Nhấp chuột phải vào đầu ra "GPIO" của khối IP GPIO mới và chọn "tạo bên ngoài". Tìm nơi đường đi đến và nhấp vào hình ngũ giác nhỏ sang một bên và ở bên trái một cửa sổ sẽ mở ra để bạn có thể thay đổi tên. Đổi tên thành "SENSORS". Điều quan trọng là sử dụng cùng một tên nếu bạn muốn tệp ràng buộc mà chúng tôi cung cấp hoạt động, nếu không bạn sẽ phải thay đổi tên trong tệp ràng buộc.
  7. Quay lại tab nguồn, tìm tệp ràng buộc và thay thế bằng tệp chúng tôi cung cấp. Bạn có thể chọn thay thế tệp hoặc chỉ sao chép nội dung của tệp ràng buộc của chúng tôi và dán nó lên nội dung của tệp cũ. Một trong những điều quan trọng mà tệp ràng buộc của chúng tôi làm là kích hoạt các điện trở kéo lên trên các tiêu đề PMOD. Điều này là cần thiết cho các cảm biến cụ thể mà chúng tôi đã sử dụng, tuy nhiên không phải tất cả các cảm biến đều giống nhau. Nếu cảm biến của bạn yêu cầu điện trở kéo xuống, bạn có thể thay đổi mọi trường hợp của "set_property PULLUP true" bằng "set_property PULLDOWN true". Nếu họ yêu cầu một giá trị điện trở khác với giá trị trên bảng, thì bạn có thể loại bỏ các đường này và sử dụng điện trở bên ngoài. trang có thể được tìm thấy ở đây. Nếu bạn muốn sử dụng các chân pmod khác nhau, chỉ cần khớp các tên trong tệp ràng buộc với các nhãn trong sơ đồ. Chúng tôi sử dụng tiêu đề PMOD JE và JD, đồng thời sử dụng sáu chân dữ liệu trên mỗi chân, bỏ qua chân 1 và 7. Thông tin này rất quan trọng khi kết nối cảm biến của bạn. Như được hiển thị trong sơ đồ, chân 6 và 12 trên PMODS là VCC và chân 5 và 11 là nối đất.
  8. Tạo lại trình bao bọc HDL như trước, đồng thời sao chép và ghi đè lên trình bao bọc cũ. Khi hoàn tất, hãy tạo dòng bit và xuất phần cứng như trước đây và khởi chạy lại SDK. Nếu bạn được hỏi liệu bạn có muốn thay thế tệp phần cứng cũ hay không, câu trả lời là có. Tốt nhất bạn nên đóng SDK khi xuất phần cứng để nó được thay thế đúng cách.
  9. Khởi chạy SDK.

Bước 3: Chạy FreeRTOS

Bước tiếp theo là để FreeRTOS chạy trên bảng Zybo.

  1. Nếu bạn chưa có bản sao, hãy tải xuống FreeRTOS tại đây và giải nén các tệp.
  2. Nhập bản demo FreeRTOS Zynq tại FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo. Quá trình nhập tương tự như đối với dự án demo khác, tuy nhiên vì bản demo FreeRTOS Zynq dựa trên các tệp khác trong thư mục FreeRTOS, bạn không nên sao chép tệp vào không gian làm việc của mình. Thay vào đó, bạn nên đặt toàn bộ thư mục FreeRTOS bên trong thư mục dự án của mình.
  3. Tạo gói hỗ trợ hội đồng quản trị mới bằng cách đi tới "tệp" -> "mới" -> "gói hỗ trợ hội đồng quản trị". Đảm bảo rằng độc lập được chọn và nhấp vào kết thúc. Sau một lúc, một cửa sổ sẽ bật lên, chọn hộp bên cạnh lwip141 (điều này ngăn một trong các bản trình diễn FreeRTOS không biên dịch được) và nhấn OK. Sau khi hoàn tất, nhấp chuột phải vào dự án RTOSdemo và đi tới "thuộc tính", chuyển đến tab "tham chiếu dự án" và chọn hộp bên cạnh bsp mới mà bạn đã tạo. Hy vọng rằng nó sẽ được công nhận nhưng đôi khi Xilinx SDK có thể kỳ lạ về loại điều này. Nếu bạn vẫn gặp lỗi sau bước này mà xparameters.h bị thiếu hoặc tương tự như vậy thì hãy thử lặp lại bước này và có thể thoát và khởi chạy lại SDK.

Bước 4: Thêm mã Harp Laser

Bây giờ FreeRTOS đã được nhập, bạn có thể đưa các tệp từ dự án đàn hạc laser vào bản demo FreeRTOS

  1. Tạo một thư mục mới trong thư mục src trong bản demo FreeRTOS và sao chép và dán tất cả các tệp c được cung cấp ngoại trừ main.c vào thư mục này.
  2. Thay thế main.c RTOSDemo bằng main.c được cung cấp.
  3. Nếu mọi thứ được thực hiện chính xác, bạn sẽ có thể chạy mã đàn hạc laser tại thời điểm này. Đối với mục đích thử nghiệm, đầu vào nút được sử dụng trong dự án demo DMA hiện được sử dụng để phát âm thanh mà không cần gắn cảm biến (bất kỳ nút nào trong bốn nút chính sẽ hoạt động). Nó sẽ phát một chuỗi mỗi khi bạn nhấn nó và xoay vòng qua tất cả các chuỗi trong hệ thống qua nhiều lần nhấn. Cắm một số tai nghe hoặc loa vào giắc cắm tai nghe trên bo mạch Zybo và đảm bảo rằng bạn có thể nghe thấy âm thanh của dây phát ra khi bạn nhấn một nút.

Bước 5: Giới thiệu về mã

Nhiều người trong số các bạn đọc hướng dẫn này có thể ở đây để tìm hiểu cách thiết lập âm thanh hoặc sử dụng DMA để làm điều gì đó khác biệt hoặc để tạo ra một nhạc cụ khác. Vì lý do đó, một số phần tiếp theo sẽ dành để mô tả cách mã được cung cấp hoạt động cùng với phần cứng được mô tả trước đó để có được đầu ra âm thanh hoạt động bằng DMA. Nếu bạn hiểu lý do tại sao các đoạn mã ở đó thì bạn có thể điều chỉnh chúng cho bất kỳ thứ gì bạn muốn tạo.

Ngắt

Đầu tiên, tôi sẽ đề cập đến cách các ngắt được tạo ra trong dự án này. Cách chúng tôi đã làm là trước tiên tạo một cấu trúc bảng vectơ ngắt để theo dõi ID, trình xử lý ngắt và tham chiếu đến thiết bị cho mỗi ngắt. Các ID ngắt đến từ xparameters.h. Trình xử lý ngắt là một hàm chúng tôi đã viết cho DMA và GPIO, và ngắt I2C đến từ trình điều khiển Xlic I2C. Tham chiếu thiết bị trỏ đến các phiên bản của từng thiết bị mà chúng tôi khởi tạo ở nơi khác. Gần cuối của hàm _init_audio, một vòng lặp đi qua từng mục trong bảng vectơ ngắt và gọi hai hàm, XScuGic_Connect () và XScuGic_Enable () để kết nối và cho phép ngắt. Họ tham chiếu xInterruptController, là một bộ điều khiển ngắt được tạo trong FreeRTOS main.c theo mặc định. Vì vậy, về cơ bản chúng tôi đính kèm từng ngắt của chúng tôi vào bộ điều khiển ngắt này đã được tạo cho chúng tôi bởi FreeRTOS.

DMA

Mã khởi tạo DMA bắt đầu bằng lh_main.c. Đầu tiên, một phiên bản tĩnh của cấu trúc XAxiDma được khai báo. Sau đó, trong hàm _init_audio (), nó được cấu hình. Đầu tiên, hàm cấu hình từ dự án demo được gọi, trong dma.c. Nó được ghi lại khá đầy đủ và xuất phát ngay từ bản demo. Sau đó, ngắt được kết nối và kích hoạt. Đối với dự án này, chỉ cần ngắt từ master-to-slave, vì tất cả dữ liệu đang được gửi bởi DMA đến bộ điều khiển I2S. Nếu bạn muốn ghi lại âm thanh, bạn cũng sẽ cần ngắt từ phụ đến chủ. Ngắt master-to-slave được gọi khi DMA kết thúc việc gửi bất kỳ dữ liệu nào bạn đã yêu cầu nó gửi. Sự gián đoạn này cực kỳ quan trọng đối với dự án của chúng tôi bởi vì mỗi khi DMA kết thúc việc gửi một bộ đệm của các mẫu âm thanh, nó phải ngay lập tức bắt đầu gửi bộ đệm tiếp theo, nếu không sẽ xảy ra độ trễ âm thanh giữa các lần gửi. Bên trong hàm dma_mm2s_ISR (), bạn có thể thấy cách chúng tôi xử lý ngắt. Phần quan trọng ở gần cuối nơi chúng tôi sử dụng xSemaphoreGiveFromISR () và portYIELD_FROM_ISR () để thông báo cho _audio_task () rằng nó có thể bắt đầu chuyển DMA tiếp theo. Cách chúng tôi gửi dữ liệu âm thanh liên tục là xen kẽ giữa hai bộ đệm. Khi một bộ đệm đang được truyền tới khối I2C, bộ đệm kia sẽ được tính toán và lưu trữ các giá trị của nó. Sau đó, khi ngắt đến từ DMA, bộ đệm hoạt động sẽ chuyển và bộ đệm được ghi gần đây hơn bắt đầu được chuyển trong khi bộ đệm được chuyển trước đó bắt đầu bị ghi đè bằng dữ liệu mới. Phần quan trọng của hàm _audio_task là nơi fnAudioPlay () được gọi. fnAudioPlay () nhận trong cá thể DMA, độ dài của bộ đệm và một con trỏ tới bộ đệm mà từ đó dữ liệu sẽ được chuyển. Một vài giá trị được gửi đến các thanh ghi I2S để cho nó biết sắp có thêm mẫu. Sau đó XAxiDma_SimpleTransfer () được gọi để bắt đầu chuyển.

Âm thanh I2S

audio.c và audio.h là nơi diễn ra quá trình khởi tạo I2S. Mã khởi tạo I2S là một đoạn mã khá phổ biến trôi nổi ở một số nơi, bạn có thể tìm thấy các biến thể nhỏ từ các nguồn khác nhưng cái này sẽ hoạt động. Nó được ghi lại khá tốt và không cần phải thay đổi nhiều cho dự án đàn hạc. Bản demo âm thanh DMA mà nó xuất phát có các chức năng chuyển sang đầu vào micrô hoặc đường truyền, do đó bạn có thể sử dụng chúng nếu bạn cần chức năng đó.

Tổng hợp âm thanh

Để mô tả cách tổng hợp âm thanh hoạt động, tôi sẽ liệt kê từng mô hình âm thanh được sử dụng trong quá trình phát triển dẫn đến phương pháp cuối cùng, vì nó sẽ cho bạn hiểu tại sao nó được thực hiện theo cách nó được thực hiện.

Phương pháp 1: Một chu kỳ của các giá trị sin được tính cho mỗi chuỗi ở tần số tương ứng cho nốt nhạc của chuỗi đó và được lưu trữ trong một mảng. Ví dụ: độ dài của mảng sẽ là chu kỳ của sóng sin trong các mẫu, bằng # mẫu / chu kỳ. Nếu tốc độ lấy mẫu là 48kHz và tần số nốt là 100Hz, thì có 48.000 mẫu / giây và 100 chu kỳ / giây dẫn đến 4800 mẫu mỗi chu kỳ và độ dài mảng sẽ là 4800 mẫu và sẽ chứa các giá trị của một chu kỳ hoàn chỉnh. chu kỳ sóng sin. Khi chuỗi được phát, bộ đệm mẫu âm thanh được lấp đầy bằng cách lấy một giá trị từ mảng sóng hình sin và đặt nó vào bộ đệm âm thanh làm mẫu, sau đó tăng chỉ số vào mảng sóng hình sin để sử dụng ví dụ trước của chúng tôi trong suốt quá trình trong số 4800 mẫu, một chu kỳ sóng sin được đưa vào bộ đệm âm thanh. Một hoạt động mô-đun được sử dụng trên chỉ số mảng để nó luôn nằm trong khoảng từ 0 đến độ dài và khi chỉ số mảng vượt qua một ngưỡng nhất định (chẳng hạn như có thể có giá trị 2 giây đối với các mẫu) thì chuỗi sẽ bị tắt. Để phát nhiều chuỗi cùng một lúc, hãy theo dõi riêng chỉ số mảng của từng chuỗi và cộng giá trị từ sóng hình sin của mỗi chuỗi lại với nhau để lấy từng mẫu.

Phương pháp 2: Để tạo ra một giai điệu âm nhạc hơn, chúng tôi bắt đầu với mô hình trước đó và thêm các hài vào từng tần số cơ bản. Tần số hài là tần số là bội số nguyên của tần số cơ bản. Không giống như khi hai tần số không liên quan được tổng hợp lại với nhau, dẫn đến hai âm thanh riêng biệt được phát đồng thời, khi các hài âm được cộng lại với nhau, nó tiếp tục phát ra âm thanh giống như một âm thanh nhưng với một giai điệu khác. Để thực hiện điều này, mỗi khi chúng tôi thêm giá trị của sóng sin tại vị trí (chỉ số mảng% độ dài mảng) vào mẫu âm thanh, chúng tôi cũng thêm (2 * chỉ số mảng% độ dài mảng) và (3 * chỉ số mảng% độ dài mảng), và tiếp tục như vậy đối với tuy nhiên mong muốn có nhiều sóng hài. Các chỉ số được nhân này sẽ truyền qua sóng sin ở các tần số là bội số nguyên của tần số ban đầu. Để cho phép kiểm soát nhiều hơn âm sắc, các giá trị của mỗi hài được nhân với một biến đại diện cho số lượng của hài đó trong âm thanh tổng thể. Ví dụ: sóng sin cơ bản có thể có tất cả các giá trị của nó nhân với 6 để làm cho nó trở thành một nhân tố trong âm thanh tổng thể, trong khi sóng hài thứ 5 có thể có hệ số nhân là 1, có nghĩa là các giá trị của nó đóng góp ít hơn nhiều vào âm thanh tổng thể.

Phương pháp 3: Được rồi, vì vậy bây giờ chúng ta đã có giai điệu rất đẹp trên các nốt, nhưng vẫn còn một vấn đề khá quan trọng: chúng chơi ở mức âm lượng cố định trong một khoảng thời gian cố định. Để có âm thanh giống như một nhạc cụ thực sự, âm lượng của một dây được chơi phải giảm dần theo thời gian. Để thực hiện điều này, một mảng được lấp đầy bởi các giá trị của một hàm giảm dần theo cấp số nhân. Bây giờ khi các mẫu âm thanh đang được tạo, âm thanh phát ra từ mỗi chuỗi được tính như trong phương pháp trước nhưng trước khi được thêm vào mẫu âm thanh, nó sẽ được nhân với giá trị tại chỉ số mảng của chuỗi đó trong mảng hàm phân rã theo cấp số nhân. Điều này làm cho âm thanh tan biến một cách mượt mà theo thời gian. Khi chỉ số mảng đến cuối mảng phân rã, chuỗi bị dừng.

Phương pháp 4: Bước cuối cùng này là những gì thực sự mang lại cho chuỗi âm thanh âm thanh chuỗi thực tế của chúng. Trước khi chúng nghe có vẻ dễ chịu nhưng được tổng hợp rõ ràng. Để cố gắng mô phỏng tốt hơn một chuỗi đàn hạc trong thế giới thực, một tốc độ phân rã khác nhau được chỉ định cho mỗi hài. Trong dây thực, khi dây được đánh lần đầu tiên, có hàm lượng hài tần số cao tạo ra loại âm thanh gảy mà chúng ta mong đợi từ một dây. Các sóng hài tần số cao này rất ngắn gọn là phần chính của âm thanh, âm thanh của dây được đánh, nhưng chúng phân rã rất nhanh khi các sóng hài chậm hơn tiếp quản. Một mảng phân rã được tạo ra cho mỗi số hài được sử dụng trong tổng hợp âm thanh, mỗi số có tốc độ phân rã riêng. Bây giờ mỗi hài có thể được nhân một cách độc lập với giá trị mảng phân rã tương ứng của nó tại chỉ số mảng của chuỗi và được thêm vào âm thanh.

Nhìn chung, tổng hợp âm thanh là trực quan nhưng tính toán nặng. Lưu trữ toàn bộ âm thanh chuỗi trong bộ nhớ cùng một lúc sẽ chiếm quá nhiều bộ nhớ, nhưng việc tính toán sóng sin và hàm số mũ giữa mỗi khung hình sẽ mất quá nhiều thời gian để theo kịp tốc độ phát lại âm thanh. Một số thủ thuật được sử dụng trong mã để tăng tốc độ tính toán. Tất cả các phép toán ngoại trừ việc tạo ban đầu của bảng phân rã sin và hàm mũ đều được thực hiện ở định dạng số nguyên, yêu cầu trải rộng không gian số khả dụng trong đầu ra âm thanh 24 bit. Ví dụ, bảng sin có biên độ 150 sao cho nó mịn nhưng không lớn đến mức nhiều chuỗi được chơi cùng nhau có thể cộng lại để vượt quá 24 bit. Tương tự như vậy, các giá trị của bảng theo cấp số nhân được nhân với 80 trước khi được làm tròn thành số nguyên và được lưu trữ. Trọng số hài có thể nhận các giá trị rời rạc từ 0 đến 10. Ngoài ra, tất cả các mẫu thực sự được nhân đôi và các sóng sin được lập chỉ mục bằng 2, giảm một nửa tốc độ lấy mẫu. Điều này giới hạn tần số tối đa có thể phát, nhưng cần thiết để số lượng dây và hài hiện tại được tính đủ nhanh.

Việc tạo ra mô hình âm thanh này và làm cho nó hoạt động tốn rất nhiều công sức từ phía bộ xử lý và sẽ vô cùng khó khăn để làm cho nó hoạt động ở phía fpga từ đầu trong khung thời gian của dự án này (hãy tưởng tượng bạn phải tạo lại dòng bit mỗi thời gian một phần của Verilog đã được thay đổi để kiểm tra âm thanh). Tuy nhiên, làm điều đó trên fpga có thể là một cách tốt hơn để làm điều đó, có thể loại bỏ vấn đề không thể tính toán các mẫu đủ nhanh và cho phép nhiều chuỗi, sóng hài và thậm chí cả hiệu ứng âm thanh hoặc các tác vụ khác được chạy trên bên xử lý.

Bước 6: Nối dây các cảm biến

Nối dây các cảm biến
Nối dây các cảm biến

Để tạo các chuỗi, chúng tôi đã sử dụng cảm biến tia đứt IR sẽ phát hiện khi nào chuỗi đang được phát. Chúng tôi đã đặt hàng các cảm biến của mình từ liên kết sau. Các cảm biến có nguồn, đất và dây dữ liệu trong khi các bộ phát chỉ có nguồn và dây nối đất. Chúng tôi đã sử dụng chân 3,3 V và chân nối đất từ các tiêu đề PMOD để cấp nguồn cho cả bộ phát và cảm biến. Để cấp nguồn cho tất cả các cảm biến và bộ phát, cần phải kết nối song song tất cả các cảm biến và bộ phát. Mỗi dây dữ liệu từ các cảm biến sẽ cần đi đến chân pmod của riêng chúng.

Bước 7: Xây dựng bộ xương

Cấu tạo bộ xương
Cấu tạo bộ xương

Để tạo ra hình dạng của cây đàn hạc, ba mảnh được sử dụng làm khung để đặt các cảm biến và bộ phát. Trên một trong hai đoạn ống PVC 18 inch, sắp xếp các cảm biến và bộ phát theo thứ tự xen kẽ cách nhau 1,5 inch và sau đó dán chúng xuống đường ống. Trên ống PVC 18 inch khác, sắp xếp các cảm biến và bộ phát theo thứ tự xen kẽ nhưng đảm bảo bù lệch thứ tự (tức là nếu ống đầu tiên có cảm biến thì trước tiên ống thứ hai phải có bộ phát và ngược lại). Cần phải hàn các dây dài hơn trên dây dữ liệu, nguồn và dây nối đất để đảm bảo chúng có thể tiếp cận bo mạch.

Bước 8: Xây dựng ngoại thất bằng gỗ

Xây dựng ngoại thất bằng gỗ
Xây dựng ngoại thất bằng gỗ

Bước này là tùy chọn nhưng rất khuyến khích. Lớp gỗ bên ngoài không chỉ làm cho đàn hạc trông đẹp mà còn bảo vệ các cảm biến và dây dẫn khỏi bị hư hại. Khung gỗ có thể được tạo ra bởi một vòng hình chữ nhật linh thiêng từ gỗ. Bên trong hình chữ nhật cần có độ hở ít nhất 1-1 / 2 inch để lắp ống và khung cảm biến. Khi khung được xây dựng, hãy khoan hai lỗ cho phép các dây từ cảm biến và bộ phát ra để kết nối chúng với bảng.

* Lưu ý: Nên bổ sung các điểm tiếp cận để có thể tháo và lắp khung xương ống trong trường hợp cần sửa chữa hoặc cần điều chỉnh nhẹ.

Bước 9: Đặt tất cả các mảnh lại với nhau

Đặt tất cả các mảnh lại với nhau
Đặt tất cả các mảnh lại với nhau

Khi tất cả các bước trước đó đã hoàn thành, đã đến lúc tạo đàn hạc. Đầu tiên đặt khung xương ống bên trong mặt ngoài bằng gỗ. Sau đó cắm dây cho các cảm biến và bộ phát vào đúng vị trí trên bo mạch. Sau đó, mở SDK và nhấp vào nút gỡ lỗi để lập trình bảng. Sau khi bo mạch được lập trình, hãy cắm một cặp tai nghe hoặc loa. Tùy thuộc vào cảm biến nào kết thúc ở cổng pmod mà dây đàn hạc của bạn có thể sẽ không theo thứ tự bắt đầu. Vì có thể khó phân biệt dây nào đi tới cảm biến nào khi có quá nhiều dây tham gia, chúng tôi đã đưa vào phần mềm một cách ánh xạ số chuỗi để ngắt vị trí bit. Tìm "static int sensor_map [NUM_STRINGS]" và điều chỉnh các giá trị trong mảng cho đến khi các chuỗi phát theo thứ tự từ thấp nhất đến cao nhất.

Có thể sử dụng menu bằng cách mở một thiết bị đầu cuối nối tiếp (ví dụ: RealTerm) và đặt tốc độ truyền thành 115200 và màn hình hiển thị thành ANSI. Menu có thể được điều hướng bằng cách sử dụng các phím w và s để di chuyển lên và xuống và các phím a và d để thay đổi các giá trị.

Bước 10: ROCK OUT

Khi đàn hạc hoạt động đầy đủ. Làm chủ đàn hạc và lắng nghe âm thanh ngọt ngào của âm nhạc của riêng bạn!

Đề xuất: