Mục lục:

Phát bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp quay ngược: 6 bước (có Hình ảnh)
Phát bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp quay ngược: 6 bước (có Hình ảnh)

Video: Phát bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp quay ngược: 6 bước (có Hình ảnh)

Video: Phát bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp quay ngược: 6 bước (có Hình ảnh)
Video: Arduino | Chi tiết cách sử dụng động cơ Servo 2024, Tháng mười một
Anonim
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback
Phát các bài hát (MP3) với Arduino bằng PWM trên Loa hoặc Biến áp Flyback

Xin chào các bạn, Đây là hướng dẫn đầu tiên của tôi, tôi hy vọng bạn sẽ thích nó !!

Về cơ bản, Trong Dự án này, tôi đã sử dụng Giao tiếp nối tiếp giữa Arduino và Máy tính xách tay của tôi, để truyền dữ liệu âm nhạc từ máy tính xách tay của tôi đến Arduino. Và sử dụng Arduino TIMERS để phát dữ liệu dưới dạng tín hiệu PWM.

Tôi muốn đề cập rằng, dự án này không dành cho người mới bắt đầu !!!.

Thực sự, dự án này là một trong những dự án dài nhất, vì chúng tôi phải làm nhiều thứ để nó hoạt động.

CHÚ Ý

Tôi đã thực hiện phần thứ hai của hướng dẫn này, cách này dễ dàng hơn và cần những rắc rối tối thiểu để làm việc

Liên kết đến Phần thứ hai (phần dễ nhất).

Bước 1: Những thứ chúng ta cần cho dự án này (Yêu cầu)

1. Bảng Arduino (chúng ta có thể sử dụng bất kỳ Bảng nào (328, 2560) tức là Mega, Uno, Mini, v.v. nhưng với các chân cụ thể khác nhau)

2. PC hoặc Máy tính xách tay với Linux (Tôi đã sử dụng Fedora 29) Hoặc Live USB với Linux

3. Breadboard hoặc Perfboard

4. Kết nối dây

5. TC4420 (Trình điều khiển Mosfet hoặc thứ tương tự)

6. Power Mosfet (kênh N hoặc P, vui lòng nối dây cho phù hợp) (Tôi đã sử dụng kênh N)

7. Loa hoặc Flyback Transformer (Có bạn đã đọc đúng !!)

8. Nguồn điện phù hợp (0-12V) (Tôi đã sử dụng Nguồn điện ATX của riêng mình)

9. Tản nhiệt (Tôi đã lấy từ PC cũ của mình)

10. PC với Windows và ổ đĩa bút.

Để biết chi tiết hoạt động của từng thành phần và dự án này, vui lòng đọc bước tiếp theo.

Tôi đã thực hiện phần thứ hai của hướng dẫn này, cách này dễ dàng hơn và cần ít rắc rối nhất để hoạt động. Liên kết đến Phần thứ hai (phần dễ nhất).

Bước 2: Tìm hiểu nguyên tắc làm việc

Ahhh !! phần dài nhất của một phần có thể hướng dẫn, đọc và viết phần này đều chán.

Trước hết, chúng ta cần có một cái nhìn Tổng quan, cách thức hoạt động của thứ này.

những gì chúng tôi đang làm ở đây là trước tiên, chúng tôi đang chuyển đổi bài hát MP3 của mình thành tệp WAV và tệp này thành tệp tiêu đề C bằng cách sử dụng phần mềm có trong liên kết. Mã C này thực sự chứa các mẫu dữ liệu 8 bit (tại sao lại là 8 bit ?? đọc thêm) mà chúng ta cần phát bằng Arduino của mình ở tốc độ hoặc tốc độ cố định, được chỉ định theo Tỷ lệ lấy mẫu của chúng tôi.

Lý thuyết về tín hiệu âm thanh.

Đối với những người không biết Tốc độ lấy mẫu hoặc Tốc độ bit là gì: -

Tốc độ lấy mẫu được định nghĩa là số lượng Mẫu, chúng tôi đang phát trong một giây (thường được đo bằng Hz hoặc KHz).

Để biết thêm chi tiết: -Nhấp vào đây

Tốc độ lấy mẫu tiêu chuẩn là 44100 Hz (chất lượng tốt nhất), 32000 Hz, 22050 Hz, v.v.

có nghĩa là 44100 Mẫu được sử dụng trong một giây để tạo ra một sóng tương ứng.

tức là Mỗi mẫu được yêu cầu phát ở một khoảng thời gian cố định là 1/44100 = 22,67 uS.

Sau đó đến Độ sâu bit của tín hiệu âm thanh, thường là thước đo mức độ chính xác của âm thanh trong âm thanh kỹ thuật số. Độ sâu bit càng cao, âm thanh kỹ thuật số càng chính xác.

Nhưng với Arduino hoặc bất kỳ bộ điều khiển Micro nào khác có xung nhịp 16Mhz cho phép chúng tôi chỉ sử dụng tối đa 8-bit. Tôi sẽ giải thích nó tại sao.

Có một công thức ở trang số 102 trong biểu dữ liệu của 328p: - Biểu dữ liệu

Tôi sẽ không đi vào chi tiết, tại sao tôi lại sử dụng công thức này.

tần số của Tín hiệu = Tín hiệu Đồng hồ / N x (1 + TOP)

Tín hiệu đồng hồ = 16Mhz (bảng Arduino)

N = prescaler (1 là giá trị cho dự án của chúng tôi)

TOP = giá trị 0 đến 2 ^ 16 (Đối với bộ đếm thời gian 16-bit) (255 = 2 ^ 8 (8-bit) cho dự án của chúng tôi)

chúng ta nhận được giá trị của tần số của Tín hiệu = 62,5 kHz

Điều này có nghĩa là tần số sóng mang phụ thuộc vào Độ sâu bit.

Giả sử, nếu chúng ta sử dụng giá trị TOP = 2 ^ 16 = 65536 (tức là độ sâu bit 16-bit)

thì chúng tôi nhận được giá trị của tần số Tín hiệu = 244 Hz (mà chúng tôi không thể sử dụng)

OKK… Vì vậy, quá nhiều lý thuyết về Cách thức hoạt động của Tín hiệu Âm thanh là đủ, Vì vậy, hãy quay lại Dự án.

Mã C được tạo cho một Bài hát có thể được sao chép vào Arduino và có thể phát, nhưng chúng tôi bị giới hạn phát lại âm thanh tối đa 3 giây với tốc độ lấy mẫu là 8000 Hz. Bởi vì mã C này là một tệp văn bản và do đó không được nén thay vì giải nén. Và nó chiếm quá nhiều không gian. (ví dụ: tệp mã C có âm thanh 43 giây với các mẫu 44, 1 KHz chiếm dung lượng lên đến 23 MB). Và Arduino Mega của chúng tôi cung cấp cho chúng tôi không gian khoảng 256 Kb.

Vậy chúng ta sẽ chơi các bài hát bằng Arduino như thế nào. Điều đó là không thể. Có thể hướng dẫn này là giả mạo. Đừng lo lắng cho độc giả, Đó là lý do tại sao chúng ta cần sử dụng một số loại giao tiếp giữa Arduino ở tốc độ quá cao (lên đến 1 Mb / s) để gửi dữ liệu Âm thanh đến Arduino.

Nhưng chính xác thì chúng ta cần tốc độ bao nhiêu để làm được điều này ??

Câu trả lời là 44000 byte / giây có nghĩa là tốc độ hơn 44000 * 8 = 325, 000 Bit / s.

Chúng tôi cần một thiết bị ngoại vi khác có bộ nhớ lớn để gửi dữ liệu này đến Arduino của chúng tôi. Và đó sẽ là PC của chúng tôi với Linux (tại sao PC với Linux ??? vui lòng đọc thêm để biết thêm về nó.)

Ahaa… Điều đó có nghĩa là chúng ta có thể sử dụng Giao tiếp nối tiếp… Nhưng chờ đã… nối tiếp có thể chỉ với tốc độ lên đến 115200 Bits / s, có nghĩa là (325000/115200 = 3), chậm hơn ba lần so với yêu cầu.

Không, các bạn của tôi, không phải vậy. Chúng tôi sẽ sử dụng tốc độ hoặc Tốc độ truyền tốc độ 500, 000 Bits / s với cáp tối đa 20-30 cm, nhanh hơn 1,5 lần so với yêu cầu.

Tại sao lại là Linux, không phải Windows ???

Vì vậy, chúng tôi cần gửi mẫu ở khoảng thời gian (cũng được chỉ định ở trên) là 1/44100 = 22,67 uS với PC của chúng tôi.

Vậy làm thế nào chúng ta có thể lập trình nó để làm như vậy ??

Chúng ta có thể sử dụng C ++ để gửi một byte dữ liệu qua Serial tại một khoảng thời gian bằng cách sử dụng một số loại hàm ngủ

như nanosleep, Chrono, v.v., v.v. ….

for (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

NHƯNG KHÔNG CÓ NÓ KHÔNG HOẠT ĐỘNG TRÊN WINDOWS cũng không hoạt động theo cách này trên Linux (nhưng tôi đã tìm thấy một cách khác mà bạn có thể thấy trong Mã đính kèm của tôi.)

Bởi vì chúng tôi không thể đạt được độ chi tiết như vậy bằng cách sử dụng cửa sổ. Bạn cần Linux để đạt được độ chi tiết như vậy.

Các vấn đề tôi đã tìm thấy ngay cả với Linux…

chúng ta có thể đạt được mức độ chi tiết như vậy bằng cách sử dụng Linux, nhưng tôi không tìm thấy chức năng nào như vậy để ngủ chương trình của tôi cho 22uS.

Các chức năng như nanosleep, Chrono nanosleep, v.v. cũng không hoạt động, vì chúng chỉ cung cấp giấc ngủ hơn 100 uS. Nhưng tôi cần chính xác, chính xác là 22 uS. Tôi đã nghiên cứu từng trang trên google và thử nghiệm với tất cả các chức năng có thể có trong C / C ++ nhưng không có gì hiệu quả với tôi. Sau đó, tôi nghĩ ra chức năng của riêng mình, nó hoạt động với tôi như một sự quyến rũ thực sự.

Và mã của tôi bây giờ cung cấp giấc ngủ chính xác, chính xác là 1uS trở lên !!!!

Vì vậy, chúng tôi đã giải quyết được phần khó và phần còn lại rất dễ…

Và chúng tôi muốn tạo ra một tín hiệu PWM bằng cách sử dụng Arduino với một tần số cụ thể cũng là tần số sóng mang. (62,5KHz (như đã tính ở trên) để có khả năng miễn nhiễm tốt cho Tín hiệu).

Vì vậy, chúng ta cần sử dụng cái gọi là TIMERS của Arduino để tạo PWM. Nhân tiện, tôi sẽ không đi quá chi tiết về điều đó, bởi vì bạn sẽ tìm thấy nhiều hướng dẫn về chủ đề TIMERS, nhưng nếu bạn không tìm thấy một số, hãy bình luận bên dưới tôi sẽ làm một.

Tôi đã sử dụng trình điều khiển TC4420 Mosfet để lưu các Ghim Arduino của chúng tôi, vì chúng không thể cung cấp quá nhiều dòng điện để điều khiển MOSFET đôi khi.

Vì vậy, đó gần như là lý thuyết của dự án này, bây giờ chúng ta có thể xem sơ đồ mạch.

CHÚ Ý CHÚ Ý CHÚ Ý

Trên thực tế, dự án này đã được thực hiện một cách cố ý rất khó (tôi sẽ nói tại sao), có một phương pháp khác yêu cầu noPC chỉ Arduino và loa trong nextinstructable của tôi. Liên kết ở đây.

* Mục đích chính của dự án này là sử dụng Giao tiếp nối tiếp và biết sức mạnh của nó cũng như tìm hiểu cách chúng ta có thể lập trình PC của mình để thực hiện các tác vụ một cách chính xác trong khoảng thời gian tốt như vậy. *

Bước 3: Sơ đồ

Sơ đồ
Sơ đồ

Kết nối tất cả các Thành phần như được hiển thị trong sơ đồ. Vì vậy, bạn có hai lựa chọn ở đây: -

1. Kết nối loa (Kết nối với 5V)

2. Kết nối Biến áp Flyback (Được kết nối với 12V)

Tôi đã thử cả hai. Và cả hai đều hoạt động khá tốt.

Khước từ trách nhiệm: -

* Tôi khuyên bạn nên sử dụng Flyback Transformer với Thận trọng vì nó có thể nguy hiểm vì nó tạo ra Điện áp cao. Và tôi sẽ không chịu trách nhiệm về bất kỳ thiệt hại nào. *

Bước 4: Chuyển đổi tệp MP3 sang WAV bằng Audacity

Chuyển đổi tệp MP3 sang WAV bằng Audacity
Chuyển đổi tệp MP3 sang WAV bằng Audacity
Chuyển đổi tệp MP3 sang WAV bằng Audacity
Chuyển đổi tệp MP3 sang WAV bằng Audacity
Chuyển đổi tệp MP3 sang WAV bằng Audacity
Chuyển đổi tệp MP3 sang WAV bằng Audacity

Vì vậy, trước hết, hãy tải xuống phần mềm

1. Audacity, tìm kiếm và tải xuống từ Google

2. Để chuyển đổi Tệp WAV sang C-Code, hãy tải xuống một ứng dụng cửa sổ, có tên là WAVToCode

Bạn có thể tìm hiểu cách sử dụng phần mềm WAVToCode từ liên kết này và tải xuống từ liên kết này.

Tôi cũng sẽ đưa ra các bước chi tiết về cách sử dụng cả hai phần mềm.

Vui lòng xem các bức ảnh được liên kết với hướng dẫn này.

Trong bước này, chúng tôi sẽ chuyển đổi MP3 sang Wav. (Theo các bức ảnh, tốc độ dự án phải là 44100Hz)

Trong bước tiếp theo, chúng tôi sẽ chuyển đổi tệp wav sang Mã C.

Bước 5: WAV sang C-Code

WAV sang C-Code
WAV sang C-Code
WAV sang C-Code
WAV sang C-Code
WAV sang C-Code
WAV sang C-Code

Theo dõi các bức ảnh.

Xem hai hình cuối cùng, các thay đổi phải hoàn toàn giống nhau, Chữ in hoa phải viết hoa và viết thường phải viết thường, Nếu không bạn sẽ gặp lỗi cú pháp trong quá trình biên dịch.

(Bạn có thể thấy rằng 1 phút 41 bài hát đã chiếm 23mb dung lượng.)

Thay đổi tên và độ dài bài hát tương ứng với tên và thời lượng bài hát của bạn.

Và Lưu tệp C Code.

Thực hiện việc này với tất cả các Bài hát bạn muốn phát bằng Arduino

Bước 6: Tạo tệp cuối cùng và kích hoạt Linux của bạn

Tạo tệp cuối cùng và kích hoạt Linux của bạn
Tạo tệp cuối cùng và kích hoạt Linux của bạn
Tạo tệp cuối cùng và kích hoạt Linux của bạn
Tạo tệp cuối cùng và kích hoạt Linux của bạn
Tạo tệp cuối cùng và kích hoạt Linux của bạn
Tạo tệp cuối cùng và kích hoạt Linux của bạn

Thêm tất cả các bài hát đã chuyển đổi của bạn vào Tệp được cung cấp trong liên kết này.

Và làm theo các hình ảnh.

Tải mã lên Arduino mà tôi đã đính kèm.

Hãy nhớ tên tệp Mã C. (Ví dụ: phong cách sống, đô la, quần áo), bởi vì chúng tôi phải đề cập đến các tên giống hệt nhau vào mã của chúng tôi với phân biệt chữ hoa chữ thường.

Cuối cùng, hãy kích hoạt Fedora Live USB của bạn hoặc thiết bị khác và cài đặt trình biên dịch gcc, sau đó sử dụng hướng dẫn biên dịch từ thư mục biên dịch chương trình và chạy nó.

Cuối cùng, bạn sẽ có thể nghe các bài hát từ Loa hoặc Flyback.

Cảm ơn bạn đã đọc hướng dẫn này và hãy bình luận nếu bạn thích nó.

CHÚ Ý Tôi đã làm cho phần thứ hai của cuốn sách hướng dẫn này dễ dàng hơn và cần ít rắc rối hơn để hoạt động. Liên kết đến Phần thứ hai (phần dễ nhất)

Đề xuất: