Đài FM với Arduino Nano và chip RDA5807M

Sau khi các smart phone đời mới hầu như đã bỏ chức năng radio nên đôi khi muốn nghe 1 vài chương trình bằng sóng trực tiếp (cộng với tiếng rè rè quen thuộc) lại không có. Hôm nay mình sẽ chia sẻ 1 dự án làm 1 đài FM đầy đủ chức năng với Arduino và chip radio RDA5807M dễ mua và sử dụng. Các bạn có thể làm 1 cái để tặng gấu cùng nghe quà tặng âm nhạc nhé.blush

 

I. Giới thiệu chức năng

Đây là đài FM có lưu mặc định các đài FM phổ biến ở TP.HCM. Các bạn có thể dò thêm đài ở các nơi khác.

Các chức năng cơ bản:

1. Lưu trữ và play FM theo kênh lưu trước

2. Tự động tìm kênh

3. Play FM theo tần số đã set

3. Lưu trữ, chỉnh sửa và xóa các kênh đã lưu

4. Tăng giảm âm lượng, ngắt tiếng

5. Xem trạng thái các kênh đang phát (độ mạnh tín hiệu, station,...)

6. Điều chình thời gian sáng đèn nền LCD

 

II. Chuẩn bị

1. Arduin Nano x 1 

2. Module RDA5807M giao tiếp với arduino bằng I2C (datasheet tại đây) x 1 

3. LCD1602 x 1

4. Module touch sensor TTP223 (Nút cảm ứng thay cho nút bấm truyển thống) x 4

5. Module khuyếch đại PAM8403 x 1

6. Loa (1 hoặc 2 cái tùy các bạn)

7. PCBA Micro USB sang DIP (dùng để cấp nguồn cho mạch bằng sạc điện thoại) x 1

Thư viện cho module RDA5807M (download tại đây)

 

III. Sơ đồ mạch

 

 

IV. Lập trình

Tại vì mỗi nút có nhiều chức năng tương ứng với trạng thái hiện tại của thiết bị nên mình dùng state machine để điều khiển các trang hiển thị và các hoạt động tương ứng khi bấm nút.

Nguyên lý là sẽ liên tục check nút bấm, khi bấm nút thì sẽ check trạng thái hiện tại là gì và đưa ra các hành động tương ứng. Các bạn có thể tham khảo trên diễn đàn về state machine ở đây

 
1. Giải thích các hàm trong thư viện RDA5807M
 
- Radioinit ()  Hàm này sẽ khởi tạo chip RDA5807M, khởi tạo chip và trả về kết quả True nếu tìm thấy chip trên I2C bus và Fail nếu không tìm thấy chip.
- SetBand(byte BankSet) Hàm này sẽ set band FM làm việc cho chip FM, Band của Việt Nam là từ 87–108 MHz. Các giá trị của BankSet như bên dưới
00 = 87–108 MHz (US/Europe)
01 = 76–91 MHz (Japan)
10 = 76–108 MHz (world wide)
11 = 65 –76 MHz (East Europe) or 50-65MHz
 
- SetFrequency(unsigned int FreqSet,byte VolumeSet) Hàm này sẽ set tần số thu FM và bắt đầu play với VolumeSet. Volume là từ 0 đến 15 và
 giá trị Tần số = FreqSet x 10 Khz. Ví dụ muốn thu tần số  87Mhz   thì giá trị FreqSet  là 8700
 
GetRSSI_FMInfo() Hàm này trả về giá trị  1byte bao gồm 1 bit đầu báo kênh đó có phải là 1 đài đang phát hay không và 7 bit độ mạnh của tín hiệu.
 
SetVolume(byte VolumeSet) Hàm này set giá trị vollumn khi đang phát FM VolumeSet từ 0 đến 15.
 
- ResetChip() Hàm này reset chip.
 
SetMute(bool OnOff) Hàm này set ngắt tiếng hay không. OnOff = 0 -> ngắt tiếng, OnOff = 1 -> phát bình thường.
 
- SeekUp() Hàm này tự động dò tới 1 tần số mà có đài đang phát và dừng lại.
 
2. Lập trình chức năng của thiết bị
- Trạng Thái khởi động: Khởi tạo chip. Nếu không tim thấy Chip RDA5807M thì báo là không tim thấy chip.
- Sau khi khởi tạo chip thành công thì kiểm tra trong ROM đã có lưu trữ thông tin kênh chưa. Nếu chưa thì sẽ hỏi người dùng dò kênh hay tự động load các kênh của Việt Nam vào ROM.
- Sau khi khởi động và đã có thông tin kênh lưu trữ thì bắt đầu phát kênh đang lưu.
 
 Trong Quá trình Phát FM:
- Nhấn Next sẽ chuyển sang kênh tiếp theo được lưu, Nhấn Prev sẽ chuyền về kênh kề trước.
- Nhấn Mute sẽ ngắt tiếng và nhấn Mute lần nữa sẽ hủy ngắt tiếng
- Nhấn và giữ Vol- sẽ giảm âm lượng, nhấn và giữ Vol+ để tăng âm lượng
- Nhấn và giữ Menu sẽ  hiển thị các thông số tín hiệu của kênh. Nhấn và giữ Menu lần nữa sẽ hiển thị thông tin bình thường.
- Nhấn và giữ Seek để tự động dò tới kênh tiếp theo.
- Nhấn Menu để vào Menu sau đó chọn các chức năng tương ứng bằng phím F1, F2. nhấn menu lần nữa để chuyển trang Menu.
 
Trong Quá trình Dò Kênh FM:
- Nhấn Next sẽ chuyển sang kênh tiếp theo được lưu, Nhấn Prev sẽ chuyền về kênh kề trước. - Nhấn Mute sẽ ngắt tiếng và nhấn Mute lần nữa sẽ hủy ngắt tiếng - Nhấn và giữ Vol- sẽ giảm âm lượng, nhấn và giữ Vol+ để tăng âm lượng - Nhấn và giữ Menu sẽ  hiển thị các thông số tín hiệu của kênh. Nhấn và giữ Menu lần nữa sẽ hiển thị thông tin bình thường. - Nhấn và giữ Seek để tự động dò tới kênh tiếp theo.
- Nhấn Save để lưu lại kênh, sau khi nhấn Save con trỏ sẽ cho phép nhập tên kênh. Dùng Up,Down để đổi ký tự và Enter để chuyển sang ký tự tiếp theo. Nhấn Save lần nữa để lưu kênh và trở về chức năng phát bình thường.
 
Chức năng phát đài FM theo tần số :
- Nhấn Up và Down để tăng giảm tần số.
- Nhấn và giữ Enter để chuyển đổi giữa phần nguyên và thập phân tần số
- Nhấn nút Save để lưu lại thành kênh phát
 
Các chức năng khác trong Menu.
- Load kênh set sẵn cho FM ở Hồ chí Minh
- Xóa kênh
- chỉnh sửa tên kênh
- Load thông số mặt định
- Xóa toàn bộ EEPROM
- Điều chỉnh thời gian sáng đèn nền LCD
 

V. Code

Các bạn có thể download Code tại đây.

 

VI. Kết Luận

Sau 1 hồi nghiên cứu thì mình đã có 1 chiếc Radio để nghe quà tặng âm nhạc laugh. Các  bạn có  thể thay đổi 1 vài chức năng hoặc code lại để hiển thị giao diện tiếng việt nhé và thêm 1 cái vỏ để hoàn thiện. 

Các chi tiết về chi RDA5807M các bạn có thể đọc datasheet hoặc tra cứu trên mạng nhé. Có thời gian mình sẽ viết chi tiết về con này.

 

Youtube: 
Radio FM by arduino nano and RDA5807M
Những hình ảnh về dự án: 
Bài viết truyền cảm hứng: 
lên
16 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results