- FM-radio Allmänt arbete
- Komponenter krävs
- RDA5807 Mottagare
- Ljudförstärkare
- Arduino FM-mottagarkretsdiagram
- Arduino FM-radiokodförklaring
- Arduino FM-radio
Idag använder nästan alla sina mobiltelefoner för att lyssna på musik, nyheter, podcaster etc. Men för inte länge sedan var vi alla beroende av lokala FM-radioer för att få de senaste nyheterna och låtar, långsamt tappar dessa radioer popularitet men i nödsituationer när internet är nere, placerar radioapparater en viktig roll för att överföra information till användarna. Radiosignaler finns alltid i luften (som sänds av stationerna), och allt vi behöver är en FM-mottagarkrets för att fånga dessa radiosignaler och överföra dem till ljudsignaler. I våra tidigare handledning byggde vi också några andra FM-sändare och mottagare som listas nedan.
- Raspberry Pi FM-sändare
- Raspberry Pi FM-mottagarradio
- FM-sändarkrets
- FM-sändarkrets utan induktor
I denna handledning ska vi konstruera en Arduino FM-mottagare och lägga till den i vår projektarsenal. Vi kommer att använda RDA5807 FM-mottagare IC med Arduino och programmera den så, spela vilken FM-radiostation som helst som kan ställas in av användaren med en potentiometer. Vi kommer också att använda en ljudförstärkare tillsammans med kretsen för att styra utgångsvolymen på vår Arduino FM-radio, låter intressant, eller hur? Så, låt oss komma igång.
FM-radio Allmänt arbete
Radiostationerna omvandlar elektriska signaler till radiosignaler, och dessa signaler måste moduleras innan de sänds via antennen. Det finns två metoder där en signal kan moduleras, nämligen AM och FM. Som namnet antyder modulerar amplitudmodulering (AM) amplitud innan sändning av en signal medan frekvensmodulering (FM) moduleras signalens frekvens innan den sänds genom antennen. På radiostationerna använder de frekvensmodulering för att modulera signalen och sedan överföra data. Nu behöver vi bara bygga en mottagare som kan ställas in på vissa frekvenser och ta emot dessa signaler och senare konvertera dessa elektriska signaler till ljudsignaler. Vi ska användaRDA5807 FM-mottagarmodul i detta projekt, vilket förenklar vår krets.
Komponenter krävs
- Arduino Nano
- RDA5807-mottagare
- Ljudförstärkare
- Anslutande ledningar
- Kruka - 100K
- Perf Board
RDA5807 Mottagare
RDA5807 är en FM- stereoradiomodul med en chip och en helt integrerad synthesizer. Modulen stöder det världsomspännande frekvensbandet på 50 - 115 MHz, volymkontroll och avstängning, programmerbar avstängning (50 / 75us), mottagningssignalstyrkaindikator och SNR, 32.768KHz kristalloscillator, digital automatisk förstärkningskontroll, etc. Nedanstående figur visar blockdiagram för RDA5807M-tunern.
Den har digital låg IF-arkitektur och integrerar en LNA (low noise amplifier), som stöder FM-sändningsbandet (50 till 115 MHz), en programmerbar förstärkningskontroll (PGA), en högupplöst analog-till-digital-omvandlare och en högkvalitativ digital-till-analog-omvandlare (DAC). Begränsaren förhindrar överbelastning och begränsar antalet intermodulationsprodukter som skapas av intilliggande kanaler. PGA förstärker mixerns utsignal och digitaliseras sedan med ADC. DSP-kärnan hanterar kanalval, FM-demodulering, stereo MPX-avkodare och utgångssignal. Den RDA5807 pinut schema för IC ges nedan.
Modulen fungerar på strömförsörjningen på 1,8 - 3,3V. När du kommer till vila och kontrollgränssnitt valt, återställer modulen sig själv när VIO är Power up, och stöder också mjuk återställning av utlösaren av bit1 från 0 till 1 av 02H-adressen. Modulen använder I2C-kommunikation för att kommunicera med MCU: n, och gränssnittet börjar med startvillkor, en kommandobytes och databytes. RDA5807 har 13 16-bitarsregister, som var och en utför en viss funktion. Registeradresserna börjar med 00H, som tilldelas chip-ID och slutar med 0FH. I alla 13 register är vissa bitar reserverade medan andra är R / W. Varje register utför uppgifter som varierande volym, byte av kanal, etc beroende på de bitar som tilldelats dem.
Vi kan inte använda modulen direkt när vi ansluter den till en krets eftersom stiften stängs av. Så jag använde ett perf-kort och några manliga stift och lödde modulens varje stift till varje manlig stift som visas på bilden nedan.
Ljudförstärkare
En ljudförstärkare är en elektronisk enhet som förstärker elektroniska ljudsignaler med låg effekt till en nivå där den är tillräckligt hög för att köra högtalare eller hörlurar. Vi har byggt en enkel ljudförstärkare med hjälp av LM386, kretsen för densamma visas nedan och du kan också kolla länken för att lära dig mer om denna krets, även kontrollera andra ljudförstärkarkretsar.
Arduino FM-mottagarkretsdiagram
Vi använde två potentiometrar för att ställa in FM-bandet och kontrollera ljudförstärkarens volym. För att ändra volymen kan du antingen variera potten, som är ansluten mellan 1 och 8: e stift på LM386 eller potten, som är ansluten vid stift 3 på LM386. Bilden nedan visar det fullständiga kretsschemat för Arduino FM-radio.
Jag gjorde små förändringar i förstärkaren. Istället för att använda två potentiometrar i förstärkaren använde jag bara en. Jag bytte ut potten, som används för att ändra vinsten, med ett motstånd. Så nu har vårt projekt två potentiometrar, en att ställa in, och en för att ändra volymen. Potentiometern, som används för att ställa in kanalen, är ansluten till Arduino-nano. Grytans mittstift är ansluten till A0-stiftet på Arduino nano, och någon av de återstående två stiften är ansluten till 5V och den andra är ansluten till GND. En annan kruka används för att reglera radiovolymen och är ansluten som visas i figuren ovan.
Stift A4 och A5 på Arduino är anslutna till SDA och SCL-stift på RDA5807M. kom ihåg att mottagarmodulen endast fungerar på 3.3V. Så, anslut 3v3-stiftet på Nano till VCC-stiftet på mottagarmodulen. När anslutningarna gjordes såg min inställning ut så här
Arduino FM-radiokodförklaring
Koden initialiserar mottagarmodulen och ställer sedan in kanalen med den förinställda frekvensen. När värdet som läses av nano vid A0-stiftet ändras (genom att ändra pott) ändras frekvensen som i sin tur byter kanal. Den fullständiga koden ges i slutet av sidan.
Vi börjar vårt program med att lägga till det trådbibliotek som krävs för att kommunicera med RDA5807. Sedan, i variabeln "kanal" ställer vi in kanalens värde. När radion startar kommer den automatiskt att ställas in på den här kanalen.
#omfatta
Därefter laddar vi byte till varje register på vår RDA5807 IC för att ställa in vår ursprungliga konfiguration. Vid den här tiden återställer vi mottagaren.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * register 0x04 * / 0b00001010, 0b00000000, / * register 0x05 * / 0b10001000, 0b00001111, / * register 0b00000000, 0b00000000, / * register 0x07 * / 0b01000010, 0b00000010,};
När vi har återställt enheten kan vi ställa in enheten. För att tunna kanalen behöver vi bara programmera de fyra första byten. Denna del av koden ändrar kanalen till önskad frekvens. I I2C börjar vi överföringen, skriver eller läser data och avslutar sedan överföringen. I den här mottagaren IC behöver vi inte ange adressen eftersom databladet tydligt säger att I2C-gränssnittet har ett fast startregister, dvs 0x02h för en skrivoperation, och 0x0Ah för en läsoperation.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (kanal >> 2), ((kanal & 0b11) << 6) - 0b00010000};
I installationen initialiserar vi startkonfigurationen (återställer) och ställer sedan in en kanal genom att skriva inställningsbyte till RDA5807M.
ogiltig installation () {Serial.begin (9600); pinMode (A0, INPUT); / * Anslut till 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 jag använde potten för att ställa in en frekvens hade jag mött ett problem. Värdena som läses av A0-stiftet är inte konstanta. Det finns en buller med önskat värde. Jag använde en 0.1uF keramisk kondensator ansluten mellan A0 och GND, även om bullret minimerades är det inte upp till önskad nivå. Så jag var tvungen att göra några ändringar i koden. Först noterade jag de avläsningar som påverkas av bullret. Jag fick reda på att det maximala värdet på bruset är 10. Så jag skrev programmet på ett sådant sätt att det bara tar hänsyn till det nya värdet om skillnaden mellan det nya värdet och det gamla värdet på samma stift är större än 10 och ställer sedan in önskad kanal.
ogiltig loop () {int channel1 = 187, avg = 0, newA; statisk int oldA = 0; int-resultat = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (kanal); oldA = newA; }}} // slingans slut
Denna funktion används för att ställa in bytes i tune_config- matrisen och överför sedan data till RDA5807M IC med I2C-protokollet.
ogiltigt myChangeChannel (int-kanal) {/ * ogiltigt om inget returneras annars 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 (); }
Arduino FM-radio
När modulen är påslagen återställer vår kod RDA5807-M IC och ställer in den till en kanal för den önskade användaren (Obs: denna frekvens tas som basfrekvensen på vilken frekvensen kommer att ökas). Genom att ändra potentiometern (ansluten till A0) ändras värdena som läses av Arduino Nano. Om skillnaden mellan det nya och det gamla värdet är större än 10 kommer vår kod att ta hänsyn till detta nya värde. Kanalen ändras beroende på förändringen i det nya värdet från det gamla värdet. Öka eller minska volymen beror på potentiometern, som är ansluten mellan stift 3 och GND.
I slutet av konstruktionen och kodningen kommer du att ha din egen FM-radio. Fullständig bearbetning av FM-radio finns i den länkade videon längst ner på denna sida. Hoppas du gillade projektet och lärde dig något användbart. Om du har några frågor för att få detta projekt att fungera kan du lämna dem i kommentarsektionen eller använda våra forum för annan teknisk hjälp.