- FM-radio Generelt arbeider
- Komponenter kreves
- RDA5807 mottaker
- Audioforsterker
- Arduino FM-mottakerkretsdiagram
- Arduino FM-radiokode Forklaring
- Arbeid med Arduino FM-radio
I dag bruker nesten alle mobiltelefonene sine for å lytte til musikk, nyheter, podcaster osv. Men for ikke lenge siden var vi alle avhengige av lokale FM-radioer for å få de siste nyhetene og sangene, sakte mister disse radioene populariteten, men i nødstilfeller når internett er nede, plasserer radioer en viktig rolle for å overføre informasjon til brukerne. Radiosignaler er alltid til stede i luften (som sendes av stasjonene), og alt vi trenger er en FM-mottakerkrets for å fange radiosignalene og overføre dem til lydsignaler. I våre tidligere opplæringsprogrammer bygde vi også få andre FM-sendere og mottakere som er oppført nedenfor.
- Raspberry Pi FM-sender
- Raspberry Pi FM-mottakerradio
- FM-senderkrets
- FM-senderkrets uten induktor
I denne opplæringen skal vi konstruere en Arduino FM-mottaker, og legge den til i prosjektarsenalet vårt. Vi vil bruke RDA5807 FM-mottaker IC med Arduino og programmere den slik, spille hvilken som helst FM-radiostasjon som kan stilles inn av brukeren med et potensiometer. Vi vil også bruke en lydforsterker sammen med kretsen for å kontrollere utgangsvolumet til vår Arduino FM-radio, høres interessant ut, ikke sant? Så la oss komme i gang.
FM-radio Generelt arbeider
Radiostasjonene konverterer elektriske signaler til radiosignaler, og disse signalene må moduleres før de overføres gjennom antennen. Det er to metoder der et signal kan moduleres, nemlig AM og FM. Som navnet antyder, modulerer amplitudemodulasjon (AM) amplitude før du sender et signal, mens frekvensmodulasjonen (FM) moduleres signalets frekvens før den sendes gjennom antennen. På radiostasjonene bruker de frekvensmodulering for å modulere signalet og deretter overføre dataene. Nå er alt vi trenger å bygge en mottaker som kan innstilles til visse frekvenser, og motta disse signalene, og senere for å konvertere disse elektriske signalene til lydsignaler. Vi skal brukeRDA5807 FM-mottaker modul i dette prosjektet, som forenkler kretsen vår.
Komponenter kreves
- Arduino Nano
- RDA5807 mottaker
- Audioforsterker
- Koble ledninger
- Gryte - 100K
- Perf Board
RDA5807 mottaker
RDA5807 er en single-Chip FM stereo radiomodul med en fullt integrert synthesizer. Modulen støtter det verdensomspennende frekvensbåndet på 50 - 115MHz, volumkontroll og demp, programmerbar demping (50 / 75us), mottaks signalstyrkeindikator og SNR, 32,768KHz krystalloscillator, digital automatisk forsterkningskontroll, etc. Nedenfor viser figuren blokkskjema for RDA5807M tuner.
Den har digital lav-IF-arkitektur og integrerer en lav støyforsterker (LNA), som støtter FM-kringkastingsbåndet (50 til 115 MHz), en programmerbar forsterkningskontroll (PGA), en analog-til-digital-omformer med høy oppløsning, og en høykvalitets digital-til-analog-omformere (DAC). Begrenseren forhindrer overbelastning og begrenser antall intermodulasjonsprodukter opprettet av tilstøtende kanaler. PGA forsterker mikserutgangssignalet og digitaliseres deretter med ADC. DSP-kjernen styrer kanalvalget, FM-demodulering, stereo MPX-dekoder og utgangssignal. Den RDA5807 pinout diagram for IC er gitt nedenfor.
Modulen fungerer på strømforsyningen på 1,8 - 3,3V. Når du kommer til hvile og kontrollgrensesnitt valgt, tilbakestiller modulen seg selv når VIO er slått på, og støtter også myk tilbakestilling av utløseren av bit1 fra 0 til 1 av 02H-adressen. Modulen bruker I2C-kommunikasjon for å kommunisere med MCU, og grensesnittet begynner med starttilstand, en kommandobyte og databytes. RDA5807 har 13 16-biters registre, som hver utfører en bestemt funksjon. Registeradressene starter med 00H, som er tildelt chip ID og slutter med 0FH. I alle 13 registerene er noen biter reservert mens noen er R / W. Hvert register utfører oppgaver som varierende volum, endring av kanal osv. Avhengig av bitene som er tildelt dem.
Vi kan ikke bruke modulen direkte når vi kobler den til en krets da pinnene er lukket. Så jeg brukte et perf-kort og noen hannpinner og loddet modulen til hver pin til hver mannlige pin som vist på bildet nedenfor.
Audioforsterker
En lydforsterker er en elektronisk enhet som forsterker elektroniske lydsignaler med lav effekt til et nivå der den er høy nok til å kjøre høyttalere eller hodetelefoner. Vi har bygget en enkel lydforsterker ved hjelp av LM386, kretsen for det samme er vist nedenfor, og du kan også sjekke lenken for å lære mer om denne kretsen, også sjekke andre lydforsterkerkretser.
Arduino FM-mottakerkretsdiagram
Vi brukte to potensiometere for å stille FM-båndet og kontrollere lydforsterkerens volum. For å endre volumet man enten kan variere potten, som er koblet inn mellom 1 og 8 th tapp av LM386 eller potten, som er forbundet ved tappen 3 på LM386. Bildene nedenfor viser det komplette kretsskjemaet for Arduino FM-radio.
Jeg gjorde små endringer i forsterkeren. I stedet for å bruke to potensiometre i forsterkeren, brukte jeg bare en. Jeg byttet potten, som brukes til å endre gevinsten, med en motstand. Så nå har prosjektet vårt to potensiometre, en å stille inn, og en for å endre volumet. Potensiometeret, som brukes til å stille inn kanalen, er koblet til Arduino nano. Midtstiften på potten er koblet til A0-stiften på Arduino nano, og den ene av de resterende to pinnene er koblet til 5V og den andre er koblet til GND. En annen pott brukes til å kontrollere radiovolumet og er koblet til som vist i figuren ovenfor.
Pinnen A4 og A5 på Arduino er koblet til SDA og SCL-pinnen på RDA5807M. husk at mottakermodulen bare fungerer på 3,3 V. Så, koble 3v3-pinnen på Nano til VCC-pinnen på mottakermodulen. Når tilkoblingene ble gjort så oppsettet mitt slik ut
Arduino FM-radiokode Forklaring
Koden vil initialisere mottakermodulen og setter deretter kanalen med den forhåndsinnstilte frekvensen. Når verdien som leses av nano ved A0-pinnen endres (ved å bytte pott), endres frekvensen som igjen skifter kanal. Den fulle koden er gitt på slutten av siden.
Vi begynner programmet vårt med å legge til det nødvendige trådbiblioteket for kommunikasjon med RDA5807. Deretter setter vi verdien på kanalen i variabelen “kanal”. Hver gang radioen starter, blir den automatisk innstilt på denne kanalen.
#inkludere
Deretter vil vi laste inn byte til hvert register på vår RDA5807 IC for å stille vår opprinnelige konfigurasjon. På dette tidspunktet tilbakestiller vi mottakeren.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * register 0x04 * / 0b00001010, 0b00000000, / * register 0x05 * / 0b10001000, 0b000011116, / * register 0b00000000, 0b00000000, / * register 0x07 * / 0b01000010, 0b00000010,};
Etter at vi har tilbakestilt enheten, kan vi stille inn enheten. For å tanne kanalen trenger vi bare å programmere de første 4 byte. Denne delen av koden vil endre kanalen til ønsket frekvens. I I2C begynner vi overføringen, skriver eller leser dataene og avslutter deretter overføringen. I denne mottakeren IC trenger vi ikke å spesifisere adressen da databladet tydelig sier at I2C-grensesnittet har et fast startregister, dvs. 0x02h for en skriveoperasjon, og 0x0Ah for en leseoperasjon.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (kanal >> 2), ((kanal & 0b11) << 6) - 0b00010000};
I oppsettet initialiserer vi oppstartskonfigurasjonen (tilbakestilling) og deretter stiller vi inn på en kanal ved å skrive innstillingsbyte til RDA5807M.
ugyldig oppsett () {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 (); }
Da jeg brukte potten for å stille inn etter en frekvens, hadde jeg møtt et problem. Verdiene som leses av A0-pinnen er ikke konstante. Det er en støy clubbed med ønsket verdi. Jeg brukte en 0.1uF keramisk kondensator koblet mellom A0 og GND, selv om støyen ble minimert, er den ikke opp til ønsket nivå. Så jeg måtte gjøre noen endringer i koden. Først noterte jeg nedlesningene som er påvirket av støyen. Jeg fant ut at den maksimale verdien av støyen er 10. Så jeg skrev programmet på en slik måte at det bare vil vurdere den nye verdien hvis forskjellen mellom den nye verdien og den gamle verdien på den samme pinnen er større enn 10 og still deretter inn på ønsket kanal.
ugyldig sløyfe () {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øyfeend
Denne funksjonen brukes til å stille inn byte til tune_config- arrayet og overføre dataene til RDA5807M IC ved hjelp av I2C-protokollen.
ugyldig myChangeChannel (int-kanal) {/ * ugyldig hvis ingenting returneres annet 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 (); }
Arbeid med Arduino FM-radio
Når modulen slås på, tilbakestiller koden vår RDA5807-M IC og setter den til en kanal av brukeren som er ønsket (Merk: denne frekvensen blir tatt som basisfrekvensen som frekvensen økes med). Ved å endre potensiometeret (koblet til A0) endres verdiene som leses av Arduino Nano. Hvis forskjellen mellom den nye og den gamle verdien er større enn 10, vil koden vår vurdere denne nye verdien. Kanalen endres avhengig av endringen i den nye verdien fra den gamle verdien. Å øke eller redusere volumet avhenger av potensiometeret, som er koblet mellom pinnen 3 og GND.
På slutten av konstruksjonen og kodingen vil du ha din egen FM-radio. Fullstendig bearbeiding av FM-radioen finner du i videoen som er lenket nederst på denne siden. Håper du likte prosjektet og lærte noe nyttig. Hvis du har spørsmål om å få dette prosjektet til å fungere, kan du legge dem igjen i kommentarseksjonen eller bruke forumene våre for annen teknisk hjelp.