- FM-radio Generelt arbejde
- Komponenter, der kræves
- RDA5807 modtager
- Audioforstærker
- Arduino FM-modtager kredsløbsdiagram
- Arduino FM-radiokode Forklaring
- Arbejde med Arduino FM-radio
I dag bruger næsten alle deres mobiltelefoner til at lytte til musik, nyheder, podcasts osv. Men ikke længe siden var vi alle afhængige af lokale FM-radioer for at få de seneste nyheder og sange, langsomt mister disse radioer popularitet, men i nødsituationer, når internettet er nede, placerer radioer en vigtig rolle for at overføre information til brugerne. Radiosignaler er altid til stede i luften (som sendes af stationerne), og alt hvad vi behøver er et FM-modtager kredsløb for at fange disse radiosignaler og overføre dem til lydsignaler. I vores tidligere tutorials byggede vi også få andre FM-sendere og -modtagere, der er anført nedenfor.
- Raspberry Pi FM-sender
- Raspberry Pi FM-modtagerradio
- FM-senderkredsløb
- FM-senderkredsløb uden induktor
I denne vejledning skal vi konstruere en Arduino FM-modtager og føje den til vores projektarsenal. Vi bruger RDA5807 FM-modtager IC med Arduino og programmerer det så, afspil enhver FM-radiostation, der kan indstilles af brugeren med et potentiometer. Vi bruger også en lydforstærker sammen med kredsløbet til at kontrollere outputvolumenet på vores Arduino FM-radio, lyder interessant, ikke? Så lad os komme i gang.
FM-radio Generelt arbejde
Radiostationerne konverterer elektriske signaler til radiosignaler, og disse signaler skal moduleres, før de transmitteres gennem antennen. Der er to metoder, hvor et signal kan moduleres, nemlig AM og FM. Som navnet antyder, modulerer amplitudemodulation (AM) amplitude, inden der transmitteres et signal, mens frekvensmoduleringen (FM) moduleres, inden signalet sendes gennem antennen. På radiostationerne bruger de frekvensmodulation til at modulere signalet og derefter transmittere dataene. Nu skal vi bare bygge en modtager, der kan indstilles til bestemte frekvenser og modtage disse signaler og senere konvertere disse elektriske signaler til lydsignaler. Vi skal brugeRDA5807 FM-modtagermodul i dette projekt, hvilket forenkler vores kredsløb.
Komponenter, der kræves
- Arduino Nano
- RDA5807 modtager
- Audioforstærker
- Tilslutning af ledninger
- Gryde - 100K
- Perf Board
RDA5807 modtager
RDA5807 er et single-Chip FM stereo radiomodul med en fuldt integreret synthesizer. Modulet understøtter det verdensomspændende frekvensbånd på 50 - 115MHz, lydstyrkekontrol og dæmpning, programmerbar afvækst (50 / 75us), modtagesignalstyrkeindikator og SNR, 32.768KHz krystaloscillator, digital automatisk forstærkningskontrol osv. Nedenfor viser figuren blokdiagram over RDA5807M-tuneren.
Den har digital low-IF-arkitektur og integrerer en forstærker med lav støj (LNA), der understøtter FM-udsendelsesbåndet (50 til 115 MHz), en programmerbar forstærkningskontrol (PGA), en analog-til-digital-konverter med høj opløsning og en højkvalitets digital-til-analog konvertere (DAC'er). Begrænseren forhindrer overbelastning og begrænser antallet af intermodulationsprodukter oprettet af tilstødende kanaler. PGA forstærker mixerudgangssignalet og digitaliseres derefter med ADC'er. DSP-kernen styrer kanalvalget, FM-demodulation, stereo MPX-dekoder og output-lydsignal. Den RDA5807 pinout diagram for IC er angivet nedenfor.
Modulet fungerer på strømforsyningen på 1,8 - 3,3V. Når det kommer til hvile og kontrolinterface valgt, nulstiller modulet sig selv, når VIO er tændt, og understøtter også soft reset ved udløseren af bit1 fra 0 til 1 af 02H-adressen. Modulet bruger I2C-kommunikation til at kommunikere med MCU'en, og grænsefladen begynder med starttilstand, en kommandobyte og databytes. RDA5807 har 13 16-bit-registre, der hver udfører en bestemt funktion. Registeradresserne starter med 00H, som er tildelt chip-ID og slutter med 0FH. I alle 13 registre er nogle bits reserveret, mens nogle er R / W. Hvert register udfører opgaver som varierende lydstyrke, skift af kanaler osv. Afhængigt af de bits, der er tildelt dem.
Vi kan ikke bruge modulet direkte, når vi forbinder det til et kredsløb, da stifterne lukkes af. Så jeg brugte et perf-kort og nogle mandlige ben og lodde modulets hver pin til hver mandstift som vist på billedet nedenfor.
Audioforstærker
En lydforstærker er en elektronisk enhed, der forstærker elektroniske lydsignaler med lav effekt til et niveau, hvor den er høj nok til at køre højttalere eller hovedtelefoner. Vi har bygget en simpel lydforstærker ved hjælp af LM386, kredsløbet for det samme er vist nedenfor, og du kan også tjekke linket for at lære mere om dette kredsløb, også kontrollere andre lydforstærkerkredsløb.
Arduino FM-modtager kredsløbsdiagram
Vi brugte to potentiometre til at indstille FM-båndet og kontrollere lydforstærkerens lydstyrke. At ændre lydstyrken kan enten variere potten, som er forbundet i mellem 1 og 8 th pin af LM386 eller potten, som er forbundet på ben 3 i LM386. Nedenstående billede viser det komplette kredsløbsdiagram for Arduino FM-radio.
Jeg gjorde små ændringer i forstærkeren. I stedet for at bruge to potentiometre i forstærkeren brugte jeg kun en. Jeg udskiftede potten, som bruges til at ændre gevinsten, med en modstand. Så nu har vores projekt to potentiometre, en til at indstille og en til at ændre lydstyrken. Potentiometeret, som bruges til at indstille kanalen, er forbundet med Arduino-nano. Midterstiften på gryden er forbundet med A0-stiften i Arduino nano, og en af de resterende to stifter er forbundet til 5V, og den anden er forbundet til GND. En anden gryde bruges til at kontrollere radioens lydstyrke og er forbundet som vist i ovenstående fig.
Stiften A4 og A5 på Arduino er forbundet til SDA og SCL-stiften på RDA5807M. husk, at modtagermodulet kun fungerer på 3.3V. Så tilslut Nano 3v3-stiften til VCC-stiften på modtagermodulet. Når forbindelserne var oprettet, så min opsætning sådan ud
Arduino FM-radiokode Forklaring
Koden initialiserer modtagermodulet og indstiller derefter kanalen med den forudindstillede frekvens. Når værdien, der læses af nano ved A0-stiften, ændres (ved at skifte pot), ændres frekvensen, som igen skifter kanal. Den fulde kode findes i slutningen af siden.
Vi begynder vores program med at tilføje det nødvendige trådbibliotek til kommunikation med RDA5807. Derefter indstiller vi i variablen ”kanal” kanalens værdi. Hver gang radioen starter, bliver den automatisk indstillet på denne kanal.
#omfatte
Derefter indlæser vi bytes til hvert register på vores RDA5807 IC for at indstille vores oprindelige konfiguration. På dette tidspunkt nulstiller vi modtageren.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * register 0x04 * / 0b00001010, 0b00000000, / * register 0x05 * / 0b10001000, 0b000011116, / * register 0 0b00000000, 0b00000000, / * register 0x07 * / 0b01000010, 0b00000010,};
Når vi har nulstillet enheden, kan vi indstille enheden. For at tune kanalen behøver vi kun at programmere de første 4 byte. Denne del af koden ændrer kanalen til den ønskede frekvens. I I2C begynder vi transmissionen, skriver eller læser dataene og afslutter derefter transmissionen. I denne modtager IC behøver vi ikke angive adressen, da databladet tydeligt siger, at I2C-grænsefladen har et fast startregister, dvs. 0x02h for en skriveoperation, og 0x0Ah for en læseoperation.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (kanal >> 2), ((kanal & 0b11) << 6) - 0b00010000};
I opsætningen initialiserer vi startkonfigurationen (nulstilling) og indstiller derefter til en kanal ved at skrive tuningkonfigurationsbyte til RDA5807M.
ugyldig opsætning () {Serial.begin (9600); pinMode (A0, INPUT); / * Forbind til 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 (); }
Når jeg brugte pot til at indstille til en frekvens, havde jeg haft et problem. De værdier, der læses af A0-stiften, er ikke konstante. Der er en støj med køleskab med den ønskede værdi. Jeg brugte en 0,1 uF keramisk kondensator tilsluttet mellem A0 og GND, selvom støjen blev minimeret, er den ikke op til det ønskede niveau. Så jeg var nødt til at foretage nogle ændringer i koden. Først bemærkede jeg de aflæsninger, der er påvirket af støj. Jeg fandt ud af, at den maksimale værdi af støj er 10. Så jeg skrev programmet på en sådan måde, at det kun vil overveje den nye værdi, hvis forskellen mellem den nye værdi og den gamle værdi af den samme pin er større end 10 og indstiller derefter den ønskede kanal.
ugyldig sløjfe () {int channel1 = 187, avg = 0, newA; statisk int oldA = 0; int resultat = 0; newA = analogRead (A0); hvis ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); hvis (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (kanal); oldA = newA; }}} // sløjfeende
Denne funktion bruges til at indstille bytes i tune_config- arrayet og transmitterer derefter dataene til RDA5807M IC ved hjælp af I2C-protokollen.
ugyldig myChangeChannel (int-kanal) {/ * ugyldig, hvis intet returneres andet int * / tune_config = (kanal >> 2); tune_config = ((kanal & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Arbejde med Arduino FM-radio
Når modulet tændes, nulstiller vores kode RDA5807-M IC og indstiller den til en kanal for den ønskede bruger (Bemærk: denne frekvens tages som basisfrekvensen, hvormed frekvensen forøges). Ved at skifte potentiometer (forbundet til A0) ændres værdierne, der læses af Arduino Nano. Hvis forskellen mellem den nye og den gamle værdi er større end 10, vil vores kode overveje denne nye værdi. Kanalen ændres afhængigt af ændringen i den nye værdi fra den gamle værdi. Forøgelse eller formindskelse af lydstyrken afhænger af potentiometeret, der er forbundet mellem pin 3 og GND.
I slutningen af konstruktionen og kodningen får du din egen FM-radio. Den komplette funktion af FM-radioen kan findes i den linkede video nederst på denne side. Håber du nød projektet og lærte noget nyttigt. Hvis du har spørgsmål til at få dette projekt til at arbejde, kan du lade dem være i kommentarfeltet eller bruge vores fora til anden teknisk hjælp.