- Radio FM Umum Berfungsi
- Komponen Diperlukan
- Penerima RDA5807
- Penguat Audio
- Diagram Litar Penerima Arduino FM
- Penjelasan Kod Radio Arduino FM
- Bekerja di Radio Arduino FM
Hari ini hampir semua orang menggunakan telefon bimbit mereka untuk mendengar muzik, berita, podcast, dll. Tetapi tidak lama dahulu kita semua bergantung pada Radio FM tempatan untuk mendapatkan berita dan lagu terkini, perlahan-lahan Radio ini semakin popular tetapi dalam keadaan darurat ketika internet sedang dimatikan, radio meletakkan peranan penting untuk menghantar maklumat kepada pengguna. Isyarat radio selalu ada di udara (yang disiarkan oleh stesen), dan yang kita perlukan hanyalah litar penerima FM untuk menangkap isyarat radio tersebut dan memindahkannya ke isyarat audio. Dalam tutorial sebelumnya, kami juga membina beberapa Pemancar dan Penerima FM lain yang disenaraikan di bawah.
- Pemancar Raspberry Pi FM
- Radio Penerima Raspberry Pi FM
- Litar Pemancar FM
- Litar Pemancar FM tanpa Induktor
Dalam tutorial ini kita akan membina Penerima FM Arduino, dan menambahkannya ke gudang projek kita. Kami akan menggunakan RDA5807 FM Receiver IC dengan Arduino dan memprogramkannya, memainkan mana-mana stesen radio FM yang dapat ditala oleh pengguna dengan potensiometer. Kami juga akan menggunakan Penguat Audio bersama dengan litar untuk mengawal kelantangan output Radio Arduino FM kami, terdengar menarik bukan? Oleh itu, mari kita mulakan.
Radio FM Umum Berfungsi
Stesen Radio menukar isyarat elektrik menjadi isyarat radio, dan isyarat ini harus dimodulasi sebelum dihantar melalui antena. Terdapat dua kaedah di mana isyarat dapat dimodulasi iaitu AM dan FM. Seperti namanya, modulasi amplitud (AM) memodulasi amplitud sebelum mengirimkan isyarat sedangkan, dalam modulasi frekuensi (FM), frekuensi isyarat dimodulasi sebelum dihantar melalui antena. Di stesen radio, mereka menggunakan modulasi frekuensi untuk memodulasi isyarat dan kemudian mengirimkan data. Sekarang, yang perlu kita bina adalah penerima yang dapat disetel ke frekuensi tertentu, dan menerima isyarat tersebut, dan kemudian untuk menukar isyarat elektrik ini menjadi isyarat audio. Kami akan menggunakanModul penerima RDA5807 FM dalam projek ini, yang mempermudahkan litar kami.
Komponen Diperlukan
- Arduino Nano
- Penerima RDA5807
- Penguat Audio
- Menyambung wayar
- Periuk - 100K
- Lembaga Perf
Penerima RDA5807
RDA5807 adalah modul penala radio stereo FM tunggal-Chip dengan synthesizer bersepadu sepenuhnya. Modul ini menyokong jalur frekuensi sedunia 50 - 115MHz, kawalan kelantangan dan bisu, penekanan yang dapat diprogramkan (50 / 75us), penunjuk kekuatan isyarat dan SNR, pengayun kristal 32.768KHz, kawalan keuntungan automatik digital, dan lain-lain. Rajah di bawah menunjukkan rajah blok penala RDA5807M.
Ia mempunyai seni bina digital rendah-IF dan mengintegrasikan penguat bunyi rendah (LNA), yang menyokong jalur siaran FM (50 hingga 115 MHz), kawalan keuntungan diprogram (PGA), penukar analog-ke-digital resolusi tinggi, dan penukar digital-ke-analog (DAC) kesetiaan yang tinggi. Pembatas menghalang pembebanan berlebihan dan menghadkan bilangan produk intermodulasi yang dibuat oleh saluran bersebelahan. PGA menguatkan isyarat output pengadun dan kemudian didigitalkan dengan ADC. Inti DSP menguruskan pemilihan saluran, demodulasi FM, penyahkod MPX stereo, dan isyarat audio output. The RDA5807 pinout rajah bagi IC diberikan di bawah.
Modul berfungsi pada bekalan kuasa 1.8 - 3.3V. Ketika berehat dan mengawal antara muka yang dipilih, modul diset semula apabila VIO dihidupkan, dan juga menyokong soft reset oleh pencetus bit1 dari 0 hingga 1 dari alamat 02H. Modul menggunakan komunikasi I2C untuk berkomunikasi dengan MCU, dan antara muka bermula dengan keadaan mula, bait perintah, dan bait data. RDA5807 mempunyai 13 register 16-bit, masing-masing menjalankan fungsi tertentu. Alamat daftar bermula dengan 00H, yang diperuntukkan ke ID cip dan berakhir dengan 0FH. Dalam semua 13 daftar, beberapa bit disimpan sementara yang lain adalah R / W. Setiap daftar melakukan tugas seperti jumlah yang berbeza-beza, menukar saluran, dan lain-lain bergantung pada bit yang diberikan kepadanya.
Kami tidak dapat menggunakan modul secara langsung semasa menyambungkannya ke litar kerana pin ditutup oleh. Oleh itu, saya menggunakan papan perf dan beberapa pin lelaki dan menyolder setiap pin modul ke setiap pin lelaki seperti yang ditunjukkan dalam gambar di bawah.
Penguat Audio
Penguat audio adalah peranti elektronik, yang menguatkan isyarat audio elektronik berkuasa rendah ke tahap di mana cukup tinggi untuk menggerakkan pembesar suara atau fon kepala. Kami telah membina penguat audio sederhana menggunakan LM386, litar yang sama ditunjukkan di bawah dan anda juga boleh memeriksa pautan untuk mengetahui lebih lanjut mengenai litar ini, juga memeriksa litar penguat audio yang lain.
Diagram Litar Penerima Arduino FM
Kami menggunakan dua potensiometer untuk menyetel jalur FM dan mengawal kelantangan penguat audio. Untuk menukar kelantangan, anda boleh mengubah periuk, yang dihubungkan antara pin ke- 1 dan ke- 8 LM386 atau periuk, yang dihubungkan di pin 3 dari LM386. Gambar di bawah menunjukkan gambarajah litar lengkap untuk Radio Arduino FM.
Saya melakukan sedikit perubahan pada penguat. Daripada menggunakan dua potensiometer dalam penguat, saya hanya menggunakan satu. Saya menukar periuk, yang digunakan untuk menukar Gain, dengan perintang. Jadi sekarang projek kami mempunyai dua potensiometer satu untuk menyesuaikan, dan satu untuk menukar kelantangan. Potensiometer, yang digunakan untuk menala saluran dihubungkan dengan Arduino nano. Pin tengah periuk disambungkan ke pin A0 dari Arduino nano, dan salah satu daripada dua pin yang tersisa disambungkan ke 5V dan yang lain disambungkan ke GND. Periuk lain digunakan untuk mengawal kelantangan radio dan dihubungkan seperti yang ditunjukkan dalam rajah di atas.
Pin A4 dan A5 dari Arduino disambungkan ke pin SDA dan SCL dari RDA5807M. ingat bahawa modul penerima hanya berfungsi pada 3.3V. Oleh itu, sambungkan pin 3v3 Nano ke pin VCC modul penerima. Setelah sambungan dibuat, susunan saya kelihatan seperti ini
Penjelasan Kod Radio Arduino FM
Kod akan memulakan modul penerima dan kemudian menetapkan saluran dengan frekuensi yang telah ditetapkan. Apabila nilai yang dibaca oleh nano pada pin A0 berubah (dengan menukar periuk) frekuensi berubah yang seterusnya mengubah saluran. Kod penuh diberikan di hujung halaman.
Kami memulakan program kami dengan menambahkan perpustakaan wayar yang diperlukan untuk berkomunikasi dengan RDA5807. Kemudian, dalam "saluran" pemboleh ubah kita menetapkan nilai saluran. Setiap kali radio dimulakan, radio akan ditala secara automatik.
#sertakan
Seterusnya, kami akan memuatkan bait ke setiap daftar pada RDA5807 IC kami untuk menetapkan konfigurasi awal kami. Pada ketika ini, kami menetapkan semula penerima.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * daftar 0x04 * / 0b00001010, 0b00000000, / * daftar 0x05 * / 0b10001000, 0b10001000, 0b10001000 0b00000000, 0b00000000, / * daftar 0x07 * / 0b01000010, 0b00000010,};
Selepas kami menetapkan semula peranti, kami dapat menyesuaikan peranti. Untuk menala saluran, kita hanya perlu memprogramkan 4 bait pertama. Bahagian kod ini akan mengubah saluran ke frekuensi yang diingini. Pada I2C pada mulanya, kami memulakan penghantaran, Menulis atau membaca data dan kemudian menamatkan penghantaran. Dalam IC penerima ini, kita tidak perlu menentukan alamat kerana lembar data dengan jelas mengatakan bahawa antara muka I2C mempunyai daftar permulaan tetap iaitu 0x02h untuk operasi tulis, dan 0x0Ah untuk operasi baca.
uint8_t tune_config = {/ * daftar 0x02 * / 0b11000000, 0b00000001, / * daftar 0x03 * / (saluran >> 2), ((saluran & 0b11) << 6) - 0b00010000};
Dalam penyediaan, kami memulakan konfigurasi boot (reset) dan kemudian menala ke saluran dengan menulis bait konfigurasi penalaan ke RDA5807M.
persediaan tidak sah () {Serial.begin (9600); pinMode (A0, INPUT); / * Sambungkan ke 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 (); }
Semasa menggunakan periuk untuk menala frekuensi, saya menghadapi masalah. Nilai yang dibaca oleh pin A0 tidak tetap. Terdapat bunyi bising dengan nilai yang diinginkan. Saya menggunakan kapasitor seramik 0.1uF yang dihubungkan antara A0, dan GND, walaupun kebisingan diminimumkan, ia tidak sampai ke tahap yang diinginkan. Jadi, saya terpaksa melakukan beberapa perubahan pada kod tersebut. Pada mulanya, saya mencatat bacaan yang dipengaruhi oleh kebisingan. Saya dapati bahawa nilai maksimum kebisingan adalah 10. Oleh itu, saya menulis program sedemikian rupa sehingga hanya akan mempertimbangkan nilai baru jika perbezaan antara nilai baru dan nilai lama pin yang sama lebih besar daripada 10 dan kemudian menala ke saluran yang dikehendaki.
gelung void () {int channel1 = 187, avg = 0, newA; statik int oldA = 0; hasil int = 0; newA = analogRead (A0); jika ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); jika (newA! = oldA) {saluran = saluran1 + (baruA / 10); myChangeChannel (saluran); lamaA = baruA; }}} // hujung gelung
Fungsi ini digunakan untuk mengatur bait array tune_config dan kemudian mengirimkan data ke RDA5807M IC menggunakan protokol I2C.
batal myChangeChannel (saluran int) {/ * batal jika tiada yang dikembalikan lain int * / tune_config = (saluran >> 2); tune_config = ((saluran & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Bekerja di Radio Arduino FM
Apabila modul dihidupkan, kod kami menetapkan semula IC RDA5807-M dan menetapkannya ke saluran pengguna yang dikehendaki (Catatan: frekuensi ini diambil sebagai frekuensi asas di mana frekuensi akan meningkat). Dengan menukar potensiometer (disambungkan ke A0), nilai yang dibaca oleh Arduino Nano berubah. Sekiranya perbezaan antara nilai baru dan lama lebih besar daripada 10, kod kami akan mempertimbangkan nilai baru ini. Saluran diubah bergantung pada perubahan nilai baru dari nilai lama. Menambah atau mengurangkan kelantangan bergantung pada potensiometer, yang dihubungkan di antara pin 3 dan GND.
Pada akhir pembinaan dan pengekodan, anda akan mempunyai Radio FM anda sendiri. Kerja lengkap Radio FM boleh didapati dalam video yang dihubungkan di bahagian bawah halaman ini. Semoga anda menikmati projek ini dan mempelajari sesuatu yang berguna Sekiranya anda mempunyai pertanyaan untuk membuat projek ini berfungsi, anda boleh meninggalkannya di bahagian komen atau menggunakan forum kami untuk bantuan teknikal yang lain.