Mục lục:

Số hóa một bài hát với Arduino: 6 bước
Số hóa một bài hát với Arduino: 6 bước

Video: Số hóa một bài hát với Arduino: 6 bước

Video: Số hóa một bài hát với Arduino: 6 bước
Video: Học lập trình Arduino KHÔNG HỀ KHÓ - Bộ KIT học tập Arduino Uno R3 BLK 2024, Tháng mười một
Anonim
Số hóa một bài hát với Arduino
Số hóa một bài hát với Arduino

Tôi muốn tạo một dự án kết hợp hai môn học yêu thích của tôi: khoa học và âm nhạc. Tôi đã nghĩ đến tất cả các cách để có thể kết hợp hai miền này và, tôi nghĩ rằng sẽ rất thú vị khi tạo một Arduino chơi Fur Elise trong khi hiển thị cao độ của nốt trong Hertz. Bây giờ, chúng ta hãy bắt đầu xây dựng!

Bạn sẽ cần một Arduino Uno hoặc Mega, rất nhiều cáp jumper, bộ rung Piezo, bảng mạch, màn hình LCD 16 * 2 với tất cả các chân gạt nước và một chiết áp 10k (bạn cũng có thể nghe chúng được gọi là áp kế). Tốt nhất là bạn nên kết hợp tất cả các nguồn cung cấp này lại với nhau trước khi chúng ta bắt đầu xây dựng.

Bước 1: Chuyển đổi điểm nhạc thành nốt nhạc kỹ thuật số: Giá trị độ trễ

Chuyển đổi điểm nhạc thành ghi chú kỹ thuật số: Giá trị độ trễ
Chuyển đổi điểm nhạc thành ghi chú kỹ thuật số: Giá trị độ trễ

Có hai bước để phiên âm kỹ thuật số một ghi chú từ bản nhạc thành số tương đương của nó. Đầu tiên, chúng ta sẽ cần viết thời gian ghi chú kéo dài bằng mili giây. Tôi đã sử dụng một biểu đồ được tìm thấy trực tuyến cho nhiệm vụ này. Dựa trên việc một nốt nhạc có phải là nốt nửa, nốt phần tư, nốt thứ tám, v.v. hay không, tôi đã phiên âm độ dài của nốt đó thành mili giây. Bạn có thể thấy những con số này trong mã của tôi là delay (); hàm và số bên trong dấu ngoặc đơn sẽ là giá trị độ trễ tính bằng mili giây mà chúng tôi đã xác định trong bước này.

Bước 2: Chuyển đổi Điểm nhạc thành Ghi chú kỹ thuật số: Giá trị Hertz

Chuyển đổi điểm âm nhạc thành ghi chú kỹ thuật số: Giá trị Hertz
Chuyển đổi điểm âm nhạc thành ghi chú kỹ thuật số: Giá trị Hertz

Trước khi bắt đầu bước này, hãy để tôi xác định một số thuật ngữ kỹ thuật. "Giá trị" của ghi chú có thể được sử dụng thay thế cho các từ "cao độ", "giá trị" và "ghi chú". Bây giờ, bạn phải đọc từng nốt của bài hát từ bản nhạc. Sau đó, bạn sẽ phải dịch từng nốt nhạc sang Hertz bằng cách sử dụng một bản nhạc sang bảng Hertz, bạn có thể dễ dàng tìm thấy trên mạng. Một điều cần nhớ là giữa C được liệt kê là C4 trên bảng và cao hơn một quãng tám là C5, v.v. Khi tất cả các nốt này được phiên âm thành Hertz, bạn sẽ đặt các giá trị vào âm hàm (x, y, z); trong đó X là số pin hoặc const int, một cách xác định các biến mà tôi sẽ giải thích sau. Y sẽ là giá trị Hertz mà bạn vừa phiên âm và Z sẽ là thời lượng của nốt nhạc tính bằng mili giây được làm tròn đến hàng trăm gần nhất. Sự trì hoãn(); giá trị sẽ là khoảng thời gian của ghi chú. Bây giờ, chúng ta hãy thiết kế mạch có thể phát nhạc.

Bước 3: Thiết kế mạch

Thiết kế mạch
Thiết kế mạch

Bây giờ chúng tôi đã dịch tất cả các ghi chú thành các giá trị kỹ thuật số mà máy tính có thể hiểu được, đã đến lúc xây dựng mạch. Bắt đầu bằng cách lấy một breadboard và đặt màn hình LCD với chốt đầu tiên (GND) ở hàng 14. Đặt bộ rung ở bất cứ đâu bạn thích và đặt một chiết áp bên cạnh nó. Mục đích là để sắp xếp mọi thứ thẳng hàng, để giảm thiểu sự lộn xộn của các dây. Đặt Arduino bên cạnh breadboard và kết nối chân 5v với thanh dương của bảng mạch, và chân nối đất với thanh âm. Bây giờ, chúng tôi đã sẵn sàng kết nối jumper giữa Arduino và các thành phần.

Bây giờ, chúng ta hãy nói về các chân trên màn hình LCD và cách đấu dây chúng.

GND là viết tắt của từ nối đất, đây là dây âm trong dòng điện một chiều. Nối dây GND vào thanh ray âm của bảng mạch.

VCC là viết tắt của Voltage at the Common Collector, và đây là nơi bạn kết nối nguồn điện 5 volt (đường ray điện tích cực).

VO là viết tắt của Contrast, đấu dây này vào chân giữa của chiết áp. Kết nối chân trái của chiết áp với thanh nguồn dương và chân phải với thanh nguồn nối đất.

RS là viết tắt của Register Select, và điều này được Arduino sử dụng để cho màn hình biết nơi lưu trữ dữ liệu. Kết nối chân này với chân 12 trên Arduino.

RW là viết tắt của chân Đọc / Ghi, Arduino sử dụng để kiểm tra xem màn hình có hiển thị những gì bạn đã lập trình để hiển thị hay không. Kết nối chốt này với thanh ray âm trên breadboard.

E là viết tắt của Enable, cho màn hình LCD biết những pixel nào cần bật (bật) hoặc tắt (tắt). Kết nối chân này với chân 11 của Arduino.

D4, D5, D6 và D7 là các chân Display điều khiển các ký tự và chữ cái được hiển thị. Kết nối chúng với các chân 5, 4, 3 và 2 của Arduino tương ứng.

Chân A, đôi khi được gắn nhãn LED, là cực dương của đèn nền LED. Kết nối thiết bị này với đường sắt nguồn dương bằng dây hoặc với điện trở 220-ohm. Điện trở tốt hơn để sử dụng lâu hơn vì nó phụ thuộc vào màn hình LCD, nhưng nếu thiết bị không được sử dụng cả ngày lẫn đêm, bạn không cần điện trở.

Chân K, đôi khi cũng được gắn nhãn LED (gây nhầm lẫn), là chân nối đất của LED. Kết nối thiết bị này với đường ray điện mặt đất.

Bước 4: Tải lên mã: Cách thực hiện

Cắm Arduino của bạn vào USB của máy tính. Tải lên mã sau bằng trình lập trình Arduino IDE.

#bao gồm

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

void setup () {

// thiết lập số cột và số hàng của màn hình LCD: lcd.begin (16, 2); // In thông báo ra màn hình LCD. lcd.print ("Hertz Pitch:!"); chậm trễ (1000); void loop () {// phát e4 delay (600); // tạm dừng âm trong 0,6 giây (10, 329,63, 300); // phát e đến bộ rung ở chân 10, kéo dài.3 giây lcd.print (" 329.63 "); // hiển thị thông báo trên màn hình LCD" 329.63"

delay (350); // delay trong.35 giây

lcd.clear (); // xóa màn hình LCD và đặt lại cho thông báo tiếp theo // phát âm báo d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (350); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (350); lcd.clear (); // phát âm điệu d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (350); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (350); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.66, 300); lcd.print ("293.66"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm a3 (10, 220, 900); lcd.print ("220.0"); chậm trễ (1000); lcd.clear (); // line60 // helpave // avrdude.failure.eeprom // phát giai điệu d3 (10, 146.83, 300); lcd.print ("146,63"); chậm trễ (350); lcd.clear (); // phát âm báo f3 (10, 174.61, 300); lcd.print ("174,61"); chậm trễ (400); lcd.clear (); // phát âm a3 (10, 220, 300); lcd.print ("220"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 900); lcd.print ("246,94"); chậm trễ (1000); lcd.clear ();

// chơi e3

giai điệu (10, 164,81, 300); lcd.print ("164,81"); chậm trễ (400); lcd.clear (); // phát g3 # tone (10, 207.65, 300); lcd.print ("207,65"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 900); lcd.print ("261,63"); chậm trễ (1000); lcd.clear (); // phát âm e (10, 164.81, 300); lcd.print ("164,81"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.66, 300); lcd.print ("293.66"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm báo a3 (10, 220, 900); lcd.print ("220.0"); chậm trễ (1000); lcd.clear (); // phát âm điệu d3 (10, 146.83, 300); lcd.print ("146,83"); chậm trễ (400); lcd.clear (); // phát âm điệu f3 (10, 174.61, 300); // eeprom 20--6 yesno, flash 65--0 noyes lcd.print ("174,61"); chậm trễ (400); lcd.clear (); // phát âm a3 (10, 220, 300); lcd.print ("220.0"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 900); lcd.print ("246,94"); chậm trễ (1000); lcd.clear (); // phát âm báo f3 (10, 174.61, 300); lcd.print ("174,61"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm a3 (10, 220, 900); lcd.print ("220.0"); chậm trễ (1000); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.66, 300); lcd.print ("293.66"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 900); lcd.print ("329,63"); chậm trễ (1000); lcd.clear (); // phát âm báo g3 (10, 196, 300); lcd.print ("196.0"); chậm trễ (400); lcd.clear (); // phát âm báo f4 (10, 349.23, 300); lcd.print ("349.23"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.23, 300); lcd.print ("329.23"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.63, 900); lcd.print ("293,63"); chậm trễ (1000); lcd.clear (); // phát âm e3 (10, 164.81, 300); lcd.print ("164,81"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.63, 300); lcd.print ("293,63"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 900); lcd.print ("261,63"); chậm trễ (1000); lcd.clear (); // phát âm điệu d3 (10, 146.83, 300); lcd.print ("146,83"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.63, 300); lcd.print ("293,63"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 900); lcd.print ("246,94"); chậm trễ (1000); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (350); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (350); lcd.clear (); // phát âm điệu d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (350); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (350); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.66, 300); lcd.print ("293.66"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm a3 (10, 220, 900); lcd.print ("220.0"); chậm trễ (1000); lcd.clear (); // phát âm điệu d3 (10, 146.83, 300); lcd.print ("146,83"); chậm trễ (350); lcd.clear (); // phát âm báo f3 (10, 174.61, 300); lcd.print ("174,61"); chậm trễ (400); lcd.clear (); // phát âm a3 (10, 220, 300); lcd.print ("220.0"); chậm trễ (400); // phát b3 lcd.clear (); giai điệu (10, 246,94, 900); lcd.print ("246,94"); chậm trễ (1000); lcd.clear (); // phát âm e3 (10, 164.81, 300); lcd.print ("164,81"); chậm trễ (400); lcd.clear (); // phát âm g # 3 (10, 207.65, 300); lcd.print ("207,65"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 900); lcd.print ("261,63"); chậm trễ (1000); chậm trễ (300); lcd.clear (); // phát âm e3 (10, 164.81, 300); lcd.print ("164,81"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 # (10, 311.13, 300); lcd.print ("311.13"); chậm trễ (400); lcd.clear (); // phát âm e4 (10, 329.63, 300); lcd.print ("329,63"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm điệu d4 (10, 293.66, 300); lcd.print ("293.66"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm báo a3 (10, 220, 900); lcd.print ("220.0"); chậm trễ (1000); lcd.clear (); // phát âm điệu d3 (10, 146.83, 300); lcd.print ("146,83"); chậm trễ (400); lcd.clear (); // phát âm báo f3 (10, 174.61, 300); lcd.print ("174,61"); chậm trễ (400); lcd.clear (); // phát âm a3 (10, 220, 300); lcd.print ("220.0"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 900); lcd.print ("246,94"); chậm trễ (1000); lcd.clear (); // phát âm báo f3 (10, 174.61, 300); lcd.print ("174,61"); chậm trễ (400); lcd.clear (); // phát âm c4 (10, 261.63, 300); lcd.print ("261,63"); chậm trễ (400); lcd.clear (); // phát âm b3 (10, 246.94, 300); lcd.print ("246,94"); chậm trễ (400); lcd.clear (); // phát âm báo a3 (10, 220, 900); lcd.print ("220.0"); chậm trễ (1000); lcd.clear (); }

Bước 5: Tải lên mã: Tất cả điều đó có nghĩa là gì?

Hãy định nghĩa một số hàm bằng tiếng Anh, để bạn có thể hiểu được mã.

tone (x, y, z); = phát một giai điệu có cao độ là y Hertz, tới bộ rung ở chốt x, trong z mili giây.

lcd.print ("XYZ"); = in một tin nhắn với các ký tự XYZ ra màn hình LCD. (ví dụ: hiển thị cao độ Hertz)

trễ (x); = tạm dừng trong x mili giây.

const int X = Y = đặt một biến hằng số X thành chân Y và sử dụng X hoặc Y để gán nhiệm vụ cho thiết bị.

lcd.clear (); = xóa màn hình LCD và đặt lại cho một màn hình mới

pinMode (X, OUTPUT); = đặt chân X cho chế độ đầu ra

Khi bạn hiểu tất cả các hàm này, bạn có thể dễ dàng thay thế các biến bằng dữ liệu mà bạn thu thập khi dịch một bài hát và sau đó bạn có thể viết mã bài hát của riêng mình!

Bước 6: Đã hoàn thành !!

Hoàn thành!!!
Hoàn thành!!!
Hoàn thành!!!
Hoàn thành!!!

Bạn có một Arduino chơi Fur Elise và hiển thị các giá trị nốt trong Hertz, hoặc bạn đã tạo một Arduino phát giai điệu của bài hát bạn đã chọn và hiển thị văn bản mà bạn muốn hiển thị. Cảm ơn bạn đã xem hướng dẫn này và tôi hy vọng bạn sẽ có dự án này trên Arduino.

Đề xuất: