- Općenito radi FM radio
- Komponente potrebne
- RDA5807 Prijemnik
- Audio pojačalo
- Shema kruga Arduino FM prijamnika
- Objašnjenje Arduino FM radijskog koda
- Rad Arduino FM radija
Danas gotovo svi koriste svoje mobilne telefone za slušanje glazbe, vijesti, podcastova itd. No, ne tako davno svi smo ovisili o lokalnim FM radijima kako bismo dobili najnovije vijesti i pjesme, polako ti radio gube na popularnosti, ali u hitnim slučajevima kada internet ako ne radi, radiji imaju važnu ulogu u prenošenju informacija do korisnika. Radio signali su uvijek prisutni u zraku (a stanice ih emitiraju), a sve što nam treba je krug FM prijamnika da uhvati te radio signale i prenese ih na audio signale. U našim prethodnim vodičima napravili smo i nekoliko drugih FM odašiljača i prijamnika koji su navedeni u nastavku.
- Raspberry Pi FM odašiljač
- Radio prijemnik Raspberry Pi FM
- Krug FM odašiljača
- Krug FM odašiljača bez prigušnice
U ovom uputstvu napravit ćemo Arduino FM prijamnik i dodati ga u naš projektni arsenal. Koristit ćemo RDA5807 FM prijemnik IC s Arduinom i programirati ga tako da reproduciramo bilo koju FM radio stanicu koju korisnik može podesiti pomoću potenciometra. Također ćemo koristiti audio pojačalo zajedno s krugom za kontrolu izlazne glasnoće našeg Arduino FM radija, zvuči zanimljivo zar ne? Dakle, krenimo.
Općenito radi FM radio
Radio stanice pretvaraju električne signale u radio signale i ti se signali moraju modulirati prije nego što se prenesu kroz antenu. Postoje dvije metode u kojima se signal može modulirati i to AM i FM. Kao što i samo ime govori, amplitudska modulacija (AM) modulira amplitudu prije odašiljanja signala, dok se u frekvencijskoj modulaciji (FM) frekvencija signala modulira prije odašiljanja kroz antenu. Na radijskim postajama koriste modulaciju frekvencije za modulaciju signala i zatim prijenos podataka. Sada sve što trebamo izgraditi je prijemnik koji se može podesiti na određene frekvencije i primati te signale, a kasnije i pretvarati te električne signale u audio signale. Koristit ćemoRDA5807 FM prijemnički modul u ovom projektu, koji pojednostavljuje naš krug.
Komponente potrebne
- Arduino Nano
- RDA5807 prijamnik
- Audio pojačalo
- Spajanje žica
- Lonac - 100K
- Perf Board
RDA5807 Prijemnik
RDA5807 je FM radio stereo modul s jednim čipom i potpuno integriranim sintetizatorom. Modul podržava svjetski frekvencijski opseg od 50 - 115 MHz, kontrolu glasnoće i prigušivanje zvuka, programabilno uklanjanje naglaska (50 / 75us), indikator jačine signala i SNR, kristalni oscilator od 32,768 kHz, digitalnu automatsku kontrolu pojačanja itd. Ispod slike prikazuje blok dijagram RDA5807M tunera.

Ima digitalnu arhitekturu s malim IF-om i integrira pojačalo s niskim nivoom šuma (LNA), koji podržava FM opseg emitiranja (50 do 115 MHz), programabilnu kontrolu pojačanja (PGA), analogno-digitalni pretvarač visoke rezolucije i digitalno-analogni pretvarači (DAC) visoke vjernosti. Ograničivač sprječava preopterećenje i ograničava broj intermodulacijskih proizvoda stvorenih susjednim kanalima. PGA pojačava izlazni signal miksera i zatim se digitalizira s ADC-ima. DSP jezgra upravlja odabirom kanala, FM demodulacijom, stereo MPX dekoderom i izlaznim audio signalom. Dijagram pinta RDA5807 za IC dat je u nastavku.

Modul radi na napajanju od 1,8 - 3,3V. Kada se odabere odmorište i upravljačko sučelje, modul se resetira kada je VIO Power up, a također podržava meki reset okidačem bit1 od 0 do 1 adrese 02H. Modul koristi I2C komunikaciju za komunikaciju s MCU-om, a sučelje započinje s uvjetima pokretanja, naredbenim bajtom i bajtovima podataka. RDA5807 ima 13 16-bitnih registara, od kojih svaki obavlja određenu funkciju. Adrese registra počinju s 00H, koje je dodijeljeno čip ID-u, a završavaju s 0FH. U svih 13 registara neki su bitovi rezervirani, dok su neki R / W. Svaki registar izvršava zadatke poput promjenjive glasnoće, promjene kanala itd., Ovisno o bitovima koji su im dodijeljeni.
Ne možemo izravno koristiti modul kada ga povezujemo s krugom jer su igle zatvorene. Dakle, upotrijebio sam perf ploču i neke muške igle i zalemio svaku iglu modula na svaku mušku iglu, kao što je prikazano na slici dolje.

Audio pojačalo
Pojačalo zvuka elektronički je uređaj koji pojačava elektroničke audio signale male snage do razine na kojoj je dovoljno visok za upravljanje zvučnicima ili slušalicama. Izgradili smo jednostavno audio pojačalo pomoću LM386, sklop za isti prikazan je u nastavku, a također možete provjeriti vezu da biste saznali više o ovom krugu, a također provjeriti i druge krugove audio pojačala.

Shema kruga Arduino FM prijamnika
Koristili smo dva potenciometra za podešavanje FM opsega i kontrolu glasnoće audio pojačala. Da biste promijenili glasnoću, možete mijenjati lonac koji je povezan između 1 i 8- og zatiča LM386 ili lonac koji je spojen na pinu 3 LM386. Sljedeća slika prikazuje kompletnu shemu sklopa za Arduino FM radio.

Napravio sam male promjene na pojačalu. Umjesto da koristim dva potenciometra u pojačalu, upotrijebio sam samo jedan. Zamijenio sam lonac koji se koristi za promjenu pojačanja otpornikom. Dakle, sada naš projekt ima dva potenciometra, jedan za podešavanje i jedan za promjenu glasnoće. Potenciometar koji služi za podešavanje kanala povezan je s Arduino nano. Središnji zatik lonca povezan je s A0 pinom Arduino nano-a, a bilo koji od preostala dva zatiča spojen je na 5V, a drugi s GND-om. Drugi lonac koristi se za kontrolu glasnoće radija i povezan je kako je prikazano na gornjoj sl.
Pin A4 i A5 Arduina spojeni su na SDA i SCL pin RDA5807M. imajte na umu da prijemni modul radi samo na 3.3V. Dakle, spojite 3v3 pin Nano-a na VCC pin modula prijemnika. Jednom kad su uspostavljene veze, moja je postavka izgledala ovako

Objašnjenje Arduino FM radijskog koda
Kôd će inicijalizirati modul prijemnika, a zatim će postaviti kanal s unaprijed podešenom frekvencijom. Kada se vrijednost koju nano očita na pinu A0 promijeni (promjenom lonca), frekvencija se mijenja, što zauzvrat mijenja kanal. Potpuni kod dan je na kraju stranice.
Naš program započinjemo dodavanjem potrebne žičane biblioteke za komunikaciju s RDA5807. Zatim, u varijabli "kanal" postavljamo vrijednost kanala. Kad god se radio pokrene, automatski će se prilagoditi ovom kanalu.
#include
Dalje, učitat ćemo bajtove u svaki registar na našem RDA5807 IC kako bismo postavili našu početnu konfiguraciju. U ovom trenutku resetiramo prijamnik.
uint8_t boot_config = {/ * registar 0x02 * / 0b11000001, 0b00000011, / * registar 0x03 * / 0b00000000, 0b00000000, / * registar 0x04 * / 0b00001010, 0b00000000, / * registar 0x05 * / 0b10001000, 0b000011x, / * registar 0b00001111, / * registar 0b00001111, / * 0b00000000, 0b00000000, / * registar 0x07 * / 0b01000010, 0b00000010,};
Nakon što resetiramo uređaj, možemo ga podesiti. Za podešavanje kanala trebamo programirati samo prva 4 bajta. Ovaj dio koda promijenit će kanal na željenu frekvenciju. U I2C isprva započinjemo prijenos, zapisujemo ili čitamo podatke, a zatim završavamo prijenos. U ovom IC prijemniku ne moramo navesti adresu jer tablica podataka jasno kaže da I2C sučelje ima fiksni startni registar, tj. 0x02h za operaciju pisanja i 0x0Ah za operaciju čitanja.
uint8_t tune_config = {/ * registar 0x02 * / 0b11000000, 0b00000001, / * registar 0x03 * / (kanal >> 2), ((kanal & 0b11) << 6) - 0b00010000};
U postavljanju inicijaliziramo konfiguraciju pokretanja (resetiranje), a zatim ugađamo na kanal upisujući bajtove za podešavanje konfiguracije na RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Povezivanje s RDA5807M FM tunerom: * / 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 (); }
Kada sam koristio pot za podešavanje frekvencije, naišao sam na problem. Vrijednosti koje očitava pin A0 nisu konstantne. Postoji buka sa željenom vrijednošću. Koristio sam 0,1uF keramički kondenzator povezan između A0 i GND, iako je buka svedena na minimum, nije na željenoj razini. Dakle, morao sam unijeti neke promjene u kod. Isprva sam zabilježio očitanja na koja utječe buka. Otkrio sam da je maksimalna vrijednost šuma 10. Dakle, napisao sam program na takav način da će novu vrijednost uzeti u obzir samo ako je razlika između nove vrijednosti i stare vrijednosti tog istog pina veća od 10 a zatim podešava željeni kanal.
void loop () {int channel1 = 187, avg = 0, newA; statički int stariA = 0; rezultat int = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (novoA! = staroA) {kanal = kanal1 + (novoA / 10); myChangeChannel (kanal); staroA = novoA; }}} // kraj petlje
Ova se funkcija koristi za postavljanje bajtova niza tune_config, a zatim prenosi podatke na IC RDA5807M koristeći I2C protokol.
void myChangeChannel (int channel) {/ * void ako se ništa ne vrati inače int * / tune_config = (channel >> 2); tune_config = ((channel & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Rad Arduino FM radija
Kada se modul uključi, naš kod resetira RDA5807-M IC i postavlja ga na kanal željenog korisnika (Napomena: ova frekvencija uzima se kao osnovna frekvencija na kojoj će se frekvencija povećavati). Promjenom potenciometra (spojenog na A0) mijenjaju se vrijednosti očitane od Arduino Nano. Ako je razlika između nove i stare vrijednosti veća od 10, naš će kôd uzeti u obzir tu novu vrijednost. Kanal se mijenja ovisno o promjeni nove vrijednosti od stare vrijednosti. Povećavanje ili smanjivanje glasnoće ovisi o potenciometru koji je povezan između zatiča 3 i GND.

Na kraju izrade i kodiranja imat ćete vlastiti FM radio. Kompletan rad FM radija možete pronaći u videozapisu na dnu ove stranice. Nadam se da ste uživali u projektu i naučili nešto korisno. Ako imate pitanja u vezi s radom ovog projekta, možete ih ostaviti u odjeljku za komentare ili koristiti našu forume za drugu tehničku pomoć.

