- Đài FM Hoạt động chung
- Thành phần bắt buộc
- Máy thu RDA5807
- Bộ khuếch đại âm thanh
- Sơ đồ mạch bộ thu FM Arduino
- Giải thích mã đài FM Arduino
- Hoạt động của Arduino FM Radio
Ngày nay hầu như mọi người đều sử dụng điện thoại di động của mình để nghe nhạc, tin tức, podcast, v.v. Nhưng cách đây không lâu, tất cả chúng ta đều phụ thuộc vào Radio FM địa phương để nhận tin tức và bài hát mới nhất, dần dần những chiếc Radio này mất dần tính phổ biến nhưng trong những trường hợp khẩn cấp khi internet là xuống, bộ đàm đóng một vai trò quan trọng để truyền tải thông tin đến người dùng. Tín hiệu vô tuyến luôn hiện hữu trong không trung (được các đài phát), và tất cả những gì chúng ta cần là một mạch thu FM để bắt các tín hiệu radio đó và chuyển chúng sang tín hiệu âm thanh. Trong các hướng dẫn trước đây của chúng tôi, chúng tôi cũng đã xây dựng một số Bộ phát và Bộ thu FM khác được liệt kê bên dưới.
- Máy phát FM Raspberry Pi
- Đài thu FM Raspberry Pi
- Mạch phát FM
- Mạch phát FM không có cuộn cảm
Trong hướng dẫn này, chúng ta sẽ tạo một Bộ thu FM Arduino và thêm nó vào kho dự án của chúng ta. Chúng tôi sẽ sử dụng IC thu FM RDA5807 với Arduino và lập trình nó như vậy, phát bất kỳ đài FM nào mà người dùng có thể điều chỉnh bằng chiết áp. Chúng ta cũng sẽ sử dụng Bộ khuếch đại âm thanh cùng với mạch để điều khiển âm lượng đầu ra của Đài FM Arduino của chúng ta, nghe thật thú vị phải không? Vậy hãy bắt đầu.
Đài FM Hoạt động chung
Các đài phát thanh chuyển đổi tín hiệu điện thành tín hiệu vô tuyến, và các tín hiệu này phải được điều chế trước khi truyền qua ăng-ten. Có hai phương pháp mà tín hiệu có thể được điều chế là AM và FM. Như tên của nó, điều chế biên độ (AM) điều chế biên độ trước khi truyền tín hiệu trong khi trong điều chế tần số (FM), tần số của tín hiệu được điều chế trước khi truyền qua ăng-ten. Tại các đài phát thanh, họ sử dụng điều tần để điều chế tín hiệu và sau đó truyền dữ liệu. Bây giờ, tất cả những gì chúng ta cần xây dựng là một bộ thu có thể được điều chỉnh đến các tần số nhất định và nhận các tín hiệu đó, sau đó chuyển đổi các tín hiệu điện này thành tín hiệu âm thanh. Chúng tôi sẽ sử dụngMô-đun thu FM RDA5807 trong dự án này, giúp đơn giản hóa mạch của chúng tôi.
Thành phần bắt buộc
- Arduino Nano
- Bộ thu RDA5807
- Bộ khuếch đại âm thanh
- Kết nối dây
- Nồi - 100K
- Bảng Perf
Máy thu RDA5807
RDA5807 là mô-đun bộ dò đài FM stereo một Chip với bộ tổng hợp tích hợp đầy đủ. Mô-đun hỗ trợ dải tần trên toàn thế giới từ 50 - 115MHz, điều khiển âm lượng và tắt tiếng, tắt tiếng có thể lập trình (50/75us), chỉ báo cường độ tín hiệu nhận và SNR, bộ dao động tinh thể 32,768KHz, điều khiển độ lợi tự động kỹ thuật số, v.v. Hình bên dưới cho thấy sơ đồ khối của bộ chỉnh RDA5807M.
Nó có kiến trúc kỹ thuật số low-IF và tích hợp bộ khuếch đại tiếng ồn thấp (LNA), hỗ trợ băng tần phát sóng FM (50 đến 115 MHz), điều khiển độ lợi có thể lập trình (PGA), bộ chuyển đổi tương tự sang kỹ thuật số có độ phân giải cao và một bộ chuyển đổi kỹ thuật số sang tương tự (DAC) có độ trung thực cao. Bộ giới hạn ngăn quá tải và giới hạn số lượng sản phẩm xuyên điều chế được tạo bởi các kênh lân cận. PGA khuếch đại tín hiệu đầu ra của bộ trộn và sau đó được số hóa bằng ADC. Lõi DSP quản lý việc lựa chọn kênh, giải điều chế FM, bộ giải mã MPX âm thanh nổi và tín hiệu âm thanh đầu ra. Các RDA5807 pinout sơ đồ cho các IC được đưa ra dưới đây.
Module hoạt động trên nguồn điện 1,8 - 3,3V. Khi đến trạng thái nghỉ ngơi và giao diện điều khiển được chọn, mô-đun tự đặt lại khi VIO Bật nguồn và cũng hỗ trợ thiết lập lại mềm bằng kích hoạt của bit1 từ 0 đến 1 của địa chỉ 02H. Mô-đun sử dụng giao tiếp I2C để giao tiếp với MCU và giao diện bắt đầu với điều kiện bắt đầu, một byte lệnh và các byte dữ liệu. RDA5807 có 13 thanh ghi 16 bit, mỗi thanh ghi thực hiện một chức năng cụ thể. Địa chỉ thanh ghi bắt đầu bằng 00H, được phân bổ cho ID chip và kết thúc bằng 0FH. Trong tất cả 13 thanh ghi, một số bit được dành riêng trong khi một số là R / W. Mỗi thanh ghi thực hiện các nhiệm vụ như thay đổi âm lượng, thay đổi kênh, v.v. tùy thuộc vào các bit được gán cho chúng.
Chúng tôi không thể sử dụng trực tiếp mô-đun khi kết nối nó với một mạch vì các chân đã được đóng lại. Vì vậy, tôi đã sử dụng một bo mạch hoàn hảo và một số chân nam và hàn từng chân của mô-đun vào từng chân nam như trong hình bên dưới.
Bộ khuếch đại âm thanh
Bộ khuếch đại âm thanh là một thiết bị điện tử, có chức năng khuếch đại tín hiệu âm thanh điện tử công suất thấp đến mức đủ cao để điều khiển loa hoặc tai nghe. Chúng tôi đã chế tạo một bộ khuếch đại âm thanh đơn giản sử dụng LM386, mạch cho tương tự được hiển thị bên dưới và bạn cũng có thể kiểm tra liên kết để tìm hiểu thêm về mạch này, cũng kiểm tra các mạch khuếch đại âm thanh khác.
Sơ đồ mạch bộ thu FM Arduino
Chúng tôi đã sử dụng hai chiết áp để điều chỉnh băng tần FM và điều khiển âm lượng của bộ khuếch đại âm thanh. Để thay đổi âm lượng bạn có thể thay đổi nồi, được kết nối ở giữa 1 và 8 tháng pin của LM386 hoặc nồi, được kết nối tại chân 3 của LM386. Hình dưới đây cho thấy sơ đồ mạch hoàn chỉnh cho Arduino FM Radio.
Tôi đã thực hiện một số thay đổi nhỏ trong bộ khuếch đại. Thay vì sử dụng hai chiết áp trong bộ khuếch đại, tôi chỉ sử dụng một. Tôi đã thay đổi nồi, được sử dụng để thay đổi Gain, bằng một điện trở. Vì vậy, bây giờ dự án của chúng tôi có hai chiết áp một để điều chỉnh và một để thay đổi âm lượng. Chiết áp, được sử dụng để điều chỉnh kênh được kết nối với Arduino nano. Chân giữa của nồi được kết nối với chân A0 của Arduino nano, và một trong hai chân còn lại được kết nối với 5V và chân còn lại được kết nối với GND. Một cái nồi khác được sử dụng để điều khiển âm lượng của radio và được kết nối như trong hình trên.
Chân A4 và A5 của Arduino được kết nối với chân SDA và SCL của RDA5807M. hãy nhớ rằng mô-đun bộ thu chỉ hoạt động trên 3.3V. Vì vậy, kết nối chân 3v3 của Nano với chân VCC của mô-đun thu. Sau khi các kết nối được thực hiện, thiết lập của tôi trông như thế này
Giải thích mã đài FM Arduino
Mã sẽ khởi tạo mô-đun máy thu và sau đó đặt kênh với tần số đặt trước. Khi giá trị được đọc bởi nano tại chân A0 thay đổi (bằng cách thay đổi nồi) tần số thay đổi, do đó sẽ thay đổi kênh. Mã đầy đủ được đưa ra ở cuối trang.
Chúng tôi bắt đầu chương trình của mình bằng cách thêm thư viện dây bắt buộc để giao tiếp với RDA5807. Sau đó, trong biến "kênh", chúng tôi đặt giá trị của kênh. Bất cứ khi nào đài bắt đầu, đài sẽ tự động dò kênh này.
#include
Tiếp theo, chúng tôi sẽ tải các byte vào mỗi thanh ghi trên IC RDA5807 của chúng tôi để thiết lập cấu hình ban đầu của chúng tôi. Tại thời điểm này, chúng tôi đang đặt lại đầu thu.
uint8_t boot_config = {/ * đăng ký 0x02 * / 0b11000001, 0b00000011, / * đăng ký 0x03 * / 0b00000000, 0b00000000, / * đăng ký 0x04 * / 0b00001010, 0b00000000, / * đăng ký 0x05 * / 0b1000x1000, 0b0000 0b00000000, 0b00000000, / * đăng ký 0x07 * / 0b01000010, 0b00000010,};
Sau khi chúng tôi đặt lại thiết bị, chúng tôi có thể điều chỉnh thiết bị. Để dò kênh, chúng ta chỉ cần lập trình 4 byte đầu tiên. Phần mã này sẽ thay đổi kênh thành tần số mong muốn. Trong I2C lúc đầu, chúng ta bắt đầu truyền, Ghi hoặc đọc dữ liệu và sau đó kết thúc quá trình truyền. Trong IC thu này, chúng ta không phải chỉ định địa chỉ vì biểu dữ liệu nói rõ ràng rằng giao diện I2C có một thanh ghi khởi động cố định tức là 0x02h cho một thao tác ghi và 0x0Ah cho một thao tác đọc.
uint8_t tune_config = {/ * đăng ký 0x02 * / 0b11000000, 0b00000001, / * đăng ký 0x03 * / (kênh >> 2), ((kênh & 0b11) << 6) - 0b00010000};
Trong quá trình thiết lập, chúng tôi khởi tạo cấu hình khởi động (đặt lại) và sau đó điều chỉnh kênh bằng cách ghi các byte cấu hình điều chỉnh vào RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Conect to RDA5807M FM Tuner: * / Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (boot_config, BOOT_CONFIG_LEN); Wire.endTransmission (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Khi sử dụng pot để điều chỉnh tần số, tôi đã gặp phải một vấn đề. Các giá trị được đọc bởi chân A0 không phải là hằng số. Có một câu lạc bộ tiếng ồn với giá trị mong muốn. Tôi đã sử dụng một tụ gốm 0,1uF được kết nối giữa A0 và GND, mặc dù tiếng ồn đã được giảm thiểu, nhưng nó không đạt đến mức mong muốn. Vì vậy, tôi đã phải thực hiện một số thay đổi đối với mã. Lúc đầu, tôi ghi lại các kết quả đọc bị ảnh hưởng bởi tiếng ồn. Tôi phát hiện ra rằng giá trị lớn nhất của nhiễu là 10. Vì vậy, tôi đã viết chương trình theo cách đó, nó sẽ chỉ xem xét giá trị mới nếu sự khác biệt giữa giá trị mới và giá trị cũ của cùng một chân đó lớn hơn 10 và sau đó dò kênh mong muốn.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int kết quả = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (kênh); oldA = newA; }}} // kết thúc vòng lặp
Hàm này được sử dụng để thiết lập các byte của mảng tune_config và sau đó truyền dữ liệu đến IC RDA5807M bằng giao thức I2C.
void myChangeChannel (int channel) {/ * void if không có gì được trả về else int * / tune_config = (channel >> 2); tune_config = ((kênh & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Hoạt động của Arduino FM Radio
Khi mô-đun được cấp nguồn, mã của chúng tôi sẽ đặt lại IC RDA5807-M và đặt nó thành kênh người dùng mong muốn (Lưu ý: tần số này được lấy làm tần số cơ bản mà tần số sẽ được tăng lên). Bằng cách thay đổi chiết áp (kết nối với A0), các giá trị được đọc bởi Arduino Nano sẽ thay đổi. Nếu sự khác biệt giữa giá trị mới và cũ lớn hơn 10, mã của chúng tôi sẽ xem xét giá trị mới này. Kênh được thay đổi tùy thuộc vào sự thay đổi giá trị mới so với giá trị cũ. Việc tăng hoặc giảm âm lượng phụ thuộc vào chiết áp, được kết nối giữa chân 3 và GND.
Khi kết thúc quá trình xây dựng và mã hóa, bạn sẽ có Đài FM của riêng mình. Hoạt động hoàn chỉnh của Đài FM có thể được tìm thấy trong video được liên kết ở cuối trang này. Hy vọng bạn thích dự án và học được điều gì đó hữu ích. Nếu bạn có bất kỳ câu hỏi nào trong việc thực hiện dự án này, bạn có thể để lại chúng trong phần bình luận hoặc sử dụng diễn đàn của chúng tôi để được trợ giúp kỹ thuật khác.