- Yêu cầu phần cứng:
- Tìm hiểu hàm Tone () của Arduino:
- Các pitches.h tập tin tiêu đề:
- Chơi các nốt nhạc trên Arduino:
- Sơ đồ và phần cứng:
- Giải thích chương trình Arduino:
- Hoạt động của Mạch Arduino Trình phát Giai điệu này:
Arduino là một cách tuyệt vời để đơn giản hóa và tăng tốc các dự án vi điều khiển của bạn, nhờ vào cộng đồng các nhà phát triển đã làm cho hầu hết mọi thứ trở nên đơn giản. Có rất nhiều Dự án Arduino ở đây để bạn thử và vui chơi. Một số dự án của bạn có thể cần một số hành động âm thanh để thông báo về điều gì đó hoặc chỉ để gây ấn tượng với người xem. Điều gì sẽ xảy ra nếu tôi nói với bạn rằng hầu hết mọi bài hát chủ đề có thể chơi trên đàn piano đều có thể được bắt chước trên Arduino của bạn với sự trợ giúp của một chương trình đơn giản và một loa Piezo rẻ tiền?
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách phát Melody trên Piezo Buzzer hoặc Speaker đơn giản và dễ dàng bằng cách sử dụng chức năng Arduino tone (). Vào cuối hướng dẫn này, bạn sẽ có thể chơi một số giai điệu nổi tiếng của Pirates of Caribbean, Crazy Frog, Super Mario và Titanic. Bạn cũng sẽ học cách chơi bất kỳ bản nhạc piano nào với Arduino. Kiểm tra Video ở cuối.
Yêu cầu phần cứng:
- Arduino (bất kỳ phiên bản nào - UNO được sử dụng tại đây)
- Loa Piezo / Buzzer hoặc bất kỳ loa 8ohm nào khác.
- Breadboard
- Kết nối dây
- Nút ấn
- Điện trở 1k (tùy chọn)
Tìm hiểu hàm Tone () của Arduino:
Trước khi chúng ta có thể hiểu cách hoạt động của âm báo (), chúng ta nên biết cách hoạt động của bộ rung Piezo. Chúng ta có thể đã học về tinh thể Piezo trong trường học của chúng ta, nó không là gì ngoài một tinh thể chuyển đổi dao động cơ học thành điện năng hoặc ngược lại. Ở đây chúng tôi áp dụng một dòng điện (tần số) thay đổi mà tinh thể dao động để tạo ra âm thanh. Do đó, để làm cho chuông Piezo tạo ra một số tiếng ồn, chúng ta phải làm cho tinh thể điện Piezo rung động, cao độ và âm sắc của tiếng ồn phụ thuộc vào tốc độ rung của tinh thể. Do đó, âm và cao độ có thể được kiểm soát bằng cách thay đổi tần số của dòng điện.
Được rồi, vậy làm cách nào để lấy một tần số thay đổi từ Arduino ? Đây là nơi xuất hiện của hàm tone (). Âm báo () có thể tạo ra một tần số cụ thể trên một chân cụ thể. Khoảng thời gian cũng có thể được đề cập nếu cần thiết. Cú pháp cho tone () là
Giai điệu cú pháp (pin, tần số) giai điệu (pin, tần số, thời lượng) Pin tham số: pin để tạo tần số âm: tần số của âm trong hertz - thời lượng int không dấu: thời lượng của âm tính bằng mili giây (tùy chọn) - dài không dấu
Các giá trị của mã pin có thể là bất kỳ mã pin kỹ thuật số nào của bạn. Tôi đã sử dụng pin số 8 ở đây. Tần số có thể được tạo ra phụ thuộc vào kích thước của bộ đếm thời gian trong bảng Arduino của bạn. Đối với UNO và hầu hết các bo mạch thông thường khác, tần số tối thiểu có thể được tạo ra là 31Hz và tần số tối đa có thể được tạo ra là 65535Hz. Tuy nhiên, con người chúng ta chỉ có thể nghe được tần số từ 2000Hz đến 5000 Hz.
Các pitches.h tập tin tiêu đề:
Bây giờ, chúng ta biết cách tạo ra một số tiếng ồn bằng cách sử dụng hàm arduino tone () . Nhưng, làm thế nào để chúng ta biết loại giai điệu sẽ được tạo ra cho mỗi tần số?
Arduino đã cung cấp cho chúng ta một bảng ghi chú tương ứng với mỗi tần số với một loại nốt nhạc cụ thể. Bảng ghi chú này ban đầu được viết bởi Brett Hagman, dựa trên công việc của nó, lệnh tone () . Chúng tôi sẽ sử dụng bảng ghi chú này để chơi các chủ đề của chúng tôi. Nếu bạn là người quen thuộc với bản nhạc, bạn sẽ có thể hiểu được bảng này, đối với những người khác như tôi, đây chỉ là một khối mã khác.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 NOTE_B2 104 #define NOTE_A2 110 #define NOTE 117 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_B3 247 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE5 65fine # 6defdefine NOTE5 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_fine NOTE_97978096 NOTE 1380 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_fine NOTE_E7 2937 NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Mã trên được cung cấp trong tệp tiêu đề pitchhes.h trong tệp zip này , bạn chỉ cần tải xuống và đưa tệp này vào mã Arduino của chúng tôi như được cung cấp ở cuối hướng dẫn này hoặc sử dụng mã được cung cấp trong tệp zip.
Chơi các nốt nhạc trên Arduino:
Để chơi một giai điệu hay bằng Arduino, chúng ta nên biết những gì tạo nên những giai điệu này. Ba yếu tố chính cần có để chơi một chủ đề là
- Giá trị ghi chú
- Thời lượng ghi chú
- Tempo
Chúng tôi có tệp tiêu đề pitchhes.h để phát bất kỳ giá trị nốt nào, bây giờ chúng ta nên tìm hiểu thời lượng nốt cụ thể của nó để phát nó. Tempo không là gì ngoài việc giai điệu phải được chơi nhanh như thế nào. Khi bạn biết giá trị Ghi chú và thời lượng Ghi chú, bạn có thể sử dụng chúng với âm báo () như
tone (pinName, Note Value, Note Duration);
Đối với các âm được phát trong hướng dẫn này, tôi đã cung cấp cho bạn giá trị ghi chú và thời lượng ghi chú bên trong tệp tiêu đề “themes.h” mà bạn có thể phát chúng trong các dự án của mình. Nhưng nếu bạn có bất kỳ giai điệu cụ thể nào trong mỏ và bạn muốn chơi nó trong dự án của mình, hãy đọc tiếp…. Nếu không, hãy bỏ qua chủ đề này và chuyển sang phần tiếp theo.
Để chơi bất kỳ giai điệu cụ thể nào, bạn phải lấy bản nhạc của bản nhạc cụ thể đó và chuyển bản nhạc sang bản phác thảo Arduino bằng cách đọc giá trị nốt và thời lượng của nốt từ đó. Nếu bạn là một sinh viên âm nhạc thì đó sẽ là một miếng bánh cho bạn, nếu không thì hãy dành thời gian và khiến bạn gục ngã như tôi đã làm. Nhưng vào cuối ngày khi giai điệu của bạn phát trên bộ rung Piezo, bạn sẽ thấy nỗ lực của mình xứng đáng.
Khi bạn đã có giá trị ghi chú và thời lượng ghi chú, hãy tải chúng vào chương trình bên trong tệp tiêu đề “themes.h” như được hiển thị bên dưới
// ############### ** "HE IS A PIRATE" Bài hát chủ đề của Pirates of caribbean ** ############### // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_F4, NOTE_B4, NOTE_B3, NOTE_F4, NOTE_B4, NOTE_B3, NOTE_F4 mới chú ý NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4 NOTE 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8,4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8,8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4,4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############## //
Khối mã trên hiển thị giá trị ghi chú và thời lượng ghi chú của chủ đề “Anh ấy là cướp biển” trong bộ phim Cướp biển vùng Caribe. Bạn có thể thêm chủ đề của mình tương tự như thế này.
Sơ đồ và phần cứng:
Sơ đồ của dự án Arduino Tone Generator Project này được hiển thị trong hình bên dưới:
Kết nối khá đơn giản, chúng ta có một loa Piezo được kết nối với chân 8 và Ground của Arduino thông qua một điện trở 1K. Điện trở 1k này là điện trở hạn chế dòng điện, được sử dụng để giữ dòng điện trong giới hạn an toàn. Chúng tôi cũng có bốn công tắc để chọn giai điệu cần thiết. Một đầu của công tắc được nối với đất và đầu kia được kết nối với chân 2, 3, 4 và 5 tương ứng. Các công tắc sẽ được kích hoạt điện trở kéo lên bên trong bằng phần mềm. Vì mạch khá đơn giản nên có thể kết nối bằng bảng mạch như hình dưới đây:
Giải thích chương trình Arduino:
Khi bạn đã hiểu khái niệm, chương trình Arduino sẽ khá dễ dàng. Mã hoàn chỉnh được đưa ra ở cuối hướng dẫn. Nếu bạn không quen với việc thêm các tệp tiêu đề, bạn có thể tải xuống mã dưới dạng tệp ZIP từ đây và tải trực tiếp nó lên Arduino của bạn.
Hai ở trên là các tệp tiêu đề phải được thêm vào. “Pitch.h” được sử dụng để tương đương mỗi nốt nhạc với một tần số cụ thể và “themes.h” chứa giá trị nốt và thời lượng nốt của tất cả bốn âm.
#include "pitchhes.h" #include "themes.h"
Một chức năng được tạo ra để phát từng giai điệu khi được yêu cầu. Tại đây khi hàm Play_Pirates () được gọi, âm báo “He is a Pirate” sẽ được phát. Chức năng này bao gồm chức năng âm sắc tạo ra tần số tại chân số 8. Nút noTone (8) được gọi để dừng nhạc khi nó được phát. Nếu bạn muốn chơi giai điệu của riêng mình, hãy thay đổi Pirates_note và Pirates_duration thành các giá trị thời lượng và nốt nhạc mới mà bạn đã lưu trong giá trị “themes.h”
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // chuyển đổi thời lượng thành âm trễ thời gian (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Ở đây 1.05 là nhịp độ, hãy tăng lên để chơi nó chậm hơn (pauseBetweenNotes); noTone (8); }}
Chân 2, 3, 4 và 5 được sử dụng để chọn giai điệu cụ thể sẽ phát. Các chân này được giữ ở mức cao theo mặc định bằng cách sử dụng điện trở kéo lên bên trong bằng cách sử dụng dòng mã trên. Khi nhấn nút, nó sẽ được kéo xuống đất.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Khối mã bên dưới được sử dụng để phát bài hát khi nhấn một nút. Nó đọc giá trị kỹ thuật số của mỗi nút và khi nó xuống thấp (không), nó giả định rằng nút được nhấn và phát âm báo tương ứng bằng cách gọi chức năng cần thiết.
if (digitalRead (2) == 0) {Serial.println ("Được chọn -> 'Anh ta là một tên cướp biển'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Đã chọn -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Đã chọn -> 'Mario UnderWorld'"); Chơi_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Được chọn -> 'Anh ta là một tên cướp biển'"); Play_Pirates (); }
Hoạt động của Mạch Arduino Trình phát Giai điệu này:
Khi Mã và Phần cứng của bạn đã sẵn sàng, chỉ cần ghi chương trình vào Arduino của bạn và bạn sẽ có thể phát giai điệu bằng cách nhấn các nút. Nếu bạn có bất kỳ sự cố nào, hãy xem màn hình nối tiếp của bạn để gỡ lỗi hoặc sử dụng phần bình luận để báo cáo sự cố và tôi sẽ sẵn lòng giúp bạn.
Toàn bộ hoạt động của dự án được hiển thị trong video dưới đây. Hy vọng bạn thích dự án và sẽ sử dụng nó trong một số dự án của bạn hoặc tạo ra một giai điệu mới cho dự án của bạn. Nếu có, hãy chia sẻ công việc của bạn trong phần bình luận.