Bài 10. Tạo âm Thanh - OpenBuilds Vietnam

Trong bài này, bạn sẽ học cách tạo ra âm thanh với Arduino. Đầu tiên, chúng ta sẽ làm Arduino trở thành một nhạc cụ với các nốt nhạc và sau đó kết nối với một quang trở, để tạo nên hiệu ứng thú vị khi bạn vẫy tay trên quang trở này.

Linh kiện cần thiết

STTTên linh kiệnSLHình ảnh
1Board Arduino Uno R31
2Dây nguồn USB1
3Breadboard mini1
4Điện trở 1 kΩ (nâu, đen, đỏ)1
5Dây căm breadboard1
6Quang trở1
7Loa chíp1

Chơi các nốt nhạc

Trong bài này, chỉ có loa chip là linh kiện mới xuất hiện. Một chân của loa chip được nối vào GND, chân còn lại nối vào chân 12 của Arduino.

Lập trình Arduino với đoạn code sau:

/* Lesson 10. Simple Sounds */ int speakerPin = 12; int numTones = 10; int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440}; // mid C C# D D# E F F# G G# A void setup() { for (int i = 0; i < numTones; i++) { tone(speakerPin, tones[i]); delay(500); } noTone(speakerPin); } void loop() { }

Để chơi các nốt nhạc khác nhau, bạn phải thiết lập các tần số. Các tần số khác nhau tương ứng cho các nốt nhạc được đặt trong một mảng. Một mảng giống như một danh sách. Do đó, một khung nhạc có thể được phát ra bằng cách phát lần lượt từng nốt nhạc trong danh sách đó.

Vòng lặp ‘for’ sẽ đếm từ 0 đến 9 sử dụng biến ‘i’. Để nhận được tần số của mỗi nốt trong mỗi bước lặp, chúng ta sử dụng ‘tones[i]’. Điều này có nghĩa là, lấy giá trị của mảng ‘tones’ tại vị trí thứ ‘i’. Ví dụ, ‘tones[0] sẽ có giá trị 261, tones[1] sẽ có giá trị 277…

Hàm ‘tone’ của Arduino cần hai thông số, thông số đầu tiên là chân dùng để phát tín hiệu âm thanh (đây là chân được nối với loa chip) và thông số thứ hai là tần số của âm thành sẽ phát.

Khi tất cả các nốt nhạc đã được phát ra, hàm ‘noTone’ sẽ dừng việc phát âm thanh.

Chúng ta có thể đặt đoạn code phát nhạc vào hàm ‘loop’ thay vì ‘setup’, nhưng khi đó đoạn âm thanh sẽ phát lặp lại liên tục có thể khiến bạn khó chịu. Do đó, trong trường hợp ta chỉ muốn phát một lần, hàm ‘loop’ sẽ trống.

Để có thể nghe lại đoạn âm thanh lần nữa, chỉ cần nhấn nút reset trên Arduino.

Âm thanh

Sóng âm là sự dao động của không khí. Tần số của dao động (số chu kì trên giây, Hz) tạo ra cao độ của âm thanh. Tần số càng cao, cao độ càng lớn.

Nốt Đô (middle C) thường được định nghĩa với tần số 261 Hz. Nếu bạn bật và tắt một ngõ ra 261 lần mỗi giây thì âm thanh nhận được là nốt Đô.

Để nghe được âm thanh này, chúng ta cần phải có một thiết bị có thể chuyển đổi tín hiệu điện thành sóng âm. Việc này có thể được thực hiện nhờ vào loa hoặc như chúng ta đang sử dụng ở đây, một loa chip (Piezo sounder).

Mô phỏng nhạc cụ Theremin

Đàn Theremin (https://vi.wikipedia.org/wiki/Theremin) là một nhạc cụ có thể tạo ra âm thanh tổng hợp khi bạn vẫy tay trước nó. Nó được dùng để tạo ra nhạc nền cho loạt phim Star Trek nguyên bản.

Chúng ta sẽ làm một thiết bị tương tự, mặc dù không hay về âm sắc nhưng nó có thể thay đổi cao độ của nốt nhạc khi bạn vậy tay trước nó.

Bạn có thể kết nối trực tiếp loa chip và Arduino, nhưng chúng ta vẫn cần sử dụng breadboard để kết nối quan trở và điện trở để điều khiển cao độ của âm thanh.

Code cho Arduino

Hãy nạp đoạn code sau cho board Arduino của bạn

/* Lesson 10. Pseudo Thermin */ int speakerPin = 12; int photocellPin = 0; void setup() { } void loop() { int reading = analogRead(photocellPin); int pitch = 200 + reading / 4; tone(speakerPin, pitch); }

Sketch chúng ta sử dụng ở đây rất dễ hiểu. Chúng ta đơn giản đọc giá trị analog từ chân A0, để đo mức độ ánh sáng. Giá trị này sẽ nằm trong khoảng từ 0 đến 700.

Chúng ta thêm 200 vào giá trị đọc được, nhằm xác định 200 Hz là tần số thấp nhất và chia giá trị đọc được cho 4. Khi đó, giá trị của tần số âm được xác lập trong khoảng từ 200 Hz đến 370 Hz.

Mở rộng

Hãy thử thay giá trị 4 trong dòng bên dưới thành giá trị cao hoặc thấp hơn.

int pitch = 200 + reading / 4;

Khi đó, chúng ta đã mở rộng hoặc giới hạn lại khoảng giá trị của tần số âm thanh.

Trở lại với sketch đầu tiên, hãy thử điều chỉnh nó. Gợi ý, bạn có thể thay đổi các giá trị bên trong mảng ‘tones’ để tạo ra chuỗi âm thanh khác. Lưu ý, nếu bạn muốn thay đổi số nốt nhạc thay vì 10 nốt, bạn cũng phải thay đổi giá trị ‘numTones’ tương ứng.

Từ khóa » Phát âm Thanh Bằng Arduino