- Obecné rádio FM
- Požadované komponenty
- Přijímač RDA5807
- Zesilovač zvuku
- Schéma zapojení přijímače FM Arduino
- Vysvětlení kódu rádia FM Arduino
- Práce s FM rádiem Arduino
Dnes téměř každý používá své mobilní telefony k poslechu hudby, zpráv, podcastů atd. Ale není to tak dávno, co jsme všichni záviseli na místních FM rádiích, abychom dostali nejnovější zprávy a písně, pomalu tato rádia ztrácejí popularitu, ale v naléhavých případech, kdy internet je dole, rádia hrají důležitou roli při přenosu informací uživatelům. Rádiové signály jsou vždy přítomné ve vzduchu (které vysílají stanice) a vše, co potřebujeme, je obvod přijímače FM, který tyto rádiové signály zachytí a přenese na zvukové signály. V našich předchozích výukových programech jsme také vytvořili několik dalších FM vysílačů a přijímačů, které jsou uvedeny níže.
- Vysílač FM Raspberry Pi
- Rádio přijímače Raspberry Pi FM
- Obvod vysílače FM
- Obvod vysílače FM bez induktoru
V tomto tutoriálu zkonstruujeme přijímač FM Arduino a přidáme jej do našeho arzenálu projektu. Použijeme IC přijímač RDA5807 FM s Arduinem a naprogramujeme jej, přehráváme jakoukoli rádiovou stanici FM, kterou může uživatel naladit potenciometrem. Spolu s obvodem použijeme také zvukový zesilovač k ovládání výstupní hlasitosti našeho Arduino FM rádia, zní to zajímavě, že? Pojďme tedy začít.
Obecné rádio FM
Rozhlasové stanice převádějí elektrické signály na rádiové signály a tyto signály je třeba před přenosem přes anténu modulovat. Existují dva způsoby, kterými lze signál modulovat, a to AM a FM. Jak název napovídá, amplitudová modulace (AM) moduluje amplitudu před přenosem signálu, zatímco při frekvenční modulaci (FM) je frekvence signálu modulována před přenosem přes anténu. Na rozhlasových stanicích používají frekvenční modulaci k modulaci signálu a následnému přenosu dat. Nyní musíme vytvořit pouze přijímač, který lze naladit na určité frekvence a přijímat tyto signály a později převádět tyto elektrické signály na zvukové signály. Budeme používatModul přijímače FM RDA5807 v tomto projektu, což zjednodušuje náš obvod.
Požadované komponenty
- Arduino Nano
- Přijímač RDA5807
- Zesilovač zvuku
- Připojovací vodiče
- Hrnec - 100 tis
- Perf Board
Přijímač RDA5807
RDA5807 je jednočipový modul stereofonního rádiového tuneru FM s plně integrovaným syntetizátorem. Modul podporuje celosvětové frekvenční pásmo 50 - 115MHz, ovládání hlasitosti a ztlumení, programovatelné zrušení důrazu (50 / 75us), indikátor síly signálu a SNR, krystalový oscilátor 32,768KHz, digitální automatické řízení zisku atd. Na níže uvedeném obr. blokové schéma tuneru RDA5807M.
Má digitální low-IF architekturu a integruje nízkošumový zesilovač (LNA), který podporuje vysílací pásmo FM (50 až 115 MHz), programovatelné řízení zisku (PGA), analogově-digitální převodník s vysokým rozlišením a vysoce věrný digitálně-analogový převodník (DAC). Omezovač zabraňuje přetížení a omezuje počet intermodulačních produktů vytvořených sousedními kanály. PGA zesiluje výstupní signál směšovače a poté je digitalizován pomocí ADC. DSP jádro spravuje výběr kanálu, FM demodulaci, stereofonní MPX dekodér a výstupní audio signál. Níže je uveden pinoutový diagram RDA5807 pro IC.
Modul pracuje na napájení 1,8 - 3,3V. Když je vybráno rozhraní pro odpočinek a ovládání, modul se resetuje, když je VIO Power up, a také podporuje soft reset spouštěním bitu 1 od 0 do 1 adresy 02H. Modul využívá komunikaci I2C ke komunikaci s MCU a rozhraní začíná podmínkou spuštění, bajtem příkazu a datovými bajty. RDA5807 má 13 16bitových registrů, z nichž každý vykonává určitou funkci. Adresy registrů začínají 00H, která je přidělena ID čipu, a končí 0FH. Ve všech 13 registrech jsou některé bity rezervovány, zatímco jiné jsou R / W. Každý registr provádí úkoly, jako je měnící se hlasitost, měnící se kanály atd. V závislosti na bitech, které jsou jim přiřazeny.
Modul nemůžeme přímo použít, když jej připojujeme k obvodu, protože piny jsou uzavřeny. Použil jsem tedy desku perf a několik mužských pinů a připájel jsem každý pin modulu na každý mužský pin, jak je znázorněno na obrázku níže.
Zesilovač zvuku
Zvukový zesilovač je elektronické zařízení, které zesiluje elektronické zvukové signály s nízkou spotřebou na úroveň, která je dostatečně vysoká pro řízení reproduktorů nebo sluchátek. Postavili jsme jednoduchý audio zesilovač pomocí LM386, obvod stejného je uveden níže a můžete také zkontrolovat odkaz a dozvědět se více o tomto obvodu, zkontrolovat také další obvody zvukového zesilovače.
Schéma zapojení přijímače FM Arduino
Použili jsme dva potenciometry pro vyladění pásma FM a ovládání hlasitosti audio zesilovače. Pro změnu na svazek, který může buď měnit pot, který je připojen v rozmezí 1 až 8 th kolík LM386 nebo hrnce, který je připojen na pinu 3 LM386. Níže uvedený obrázek ukazuje kompletní schéma zapojení Arduino FM rádia.
Udělal jsem malé změny v zesilovači. Místo použití dvou potenciometrů v zesilovači jsem použil pouze jeden. Vyměnil jsem hrnec, který slouží ke změně zisku, s rezistorem. Náš projekt má nyní dva potenciometry, jeden pro vyladění a druhý pro změnu hlasitosti. Potenciometr, který se používá k vyladění kanálu, je spojen s Arduino nano. Středový kolík hrnce je připojen k kolíku A0 Arduino nano a jeden ze zbývajících dvou kolíků je připojen k 5 V a druhý ke GND. Další hrnec slouží k ovládání hlasitosti rádia a je připojen, jak je znázorněno na výše uvedeném obr.
Pin A4 a A5 Arduina jsou připojeny k pinům SDA a SCL na RDA5807M. mějte na paměti, že modul přijímače funguje pouze na 3.3V. Připojte tedy kolík 3v3 Nano k kolíku VCC přijímacího modulu. Jakmile byla spojení provedena, moje nastavení vypadalo takto
Vysvětlení kódu rádia FM Arduino
Kód inicializuje přijímací modul a poté nastaví kanál s přednastavenou frekvencí. Když se změní hodnota načtená nano na pinu A0 (změnou potu), změní se frekvence, což zase změní kanál. Celý kód je uveden na konci stránky.
Náš program začíná přidáním požadované knihovny vodičů pro komunikaci s RDA5807. Poté v proměnné „kanál“ nastavíme hodnotu kanálu. Kdykoli se rádio spustí, automaticky se naladí na tento kanál.
#zahrnout
Dále načteme bajty do každého registru na našem RDA5807 IC a nastavíme počáteční konfiguraci. V tomto okamžiku resetujeme přijímač.
uint8_t boot_config = {/ * registr 0x02 * / 0b11000001, 0b00000011, / * registr 0x03 * / 0b00000000, 0b00000000, / * registr 0x04 * / 0b00001010, 0b00000000, / * registr 0x05 * / 0b10001000, 0b00 0b00000000, 0b00000000, / * registr 0x07 * / 0b01000010, 0b00000010,};
Po resetování zařízení můžeme zařízení vyladit. Pro naladění kanálu musíme naprogramovat pouze první 4 bajty. Tato část kódu změní kanál na požadovanou frekvenci. V I2C nejdříve zahájíme přenos, zapíšeme nebo načteme data a poté přenos ukončíme. V tomto IC přijímače nemusíme specifikovat adresu, protože datový list jasně říká, že rozhraní I2C má pevný startovací registr, tj. 0x02h pro operaci zápisu a 0x0Ah pro operaci čtení.
uint8_t tune_config = {/ * registr 0x02 * / 0b11000000, 0b00000001, / * registr 0x03 * / (kanál >> 2), ((kanál & 0b11) << 6) - 0b00010000};
V nastavení inicializujeme bootovací konfiguraci (reset) a poté naladíme kanál zápisem konfiguračních bajtů ladění do RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, VSTUP); / * 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 (); }
Když jsem použil pot pro ladění na frekvenci, narazil jsem na problém. Hodnoty, které jsou čteny pinem A0, nejsou konstantní. Tam je hluk udeřen s požadovanou hodnotou. Použil jsem keramický kondenzátor 0,1 uF připojený mezi A0 a GND, i když se hluk minimalizoval, není na požadované úrovni. Takže jsem musel udělat nějaké změny v kódu. Nejprve jsem si zaznamenal hodnoty, které jsou hlukem ovlivněny. Zjistil jsem, že maximální hodnota šumu je 10. Program jsem tedy napsal tak, že novou hodnotu bude brát v úvahu pouze v případě, že rozdíl mezi novou hodnotou a starou hodnotou stejného kolíku bude větší než 10 a poté naladí požadovaný kanál.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int výsledek = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (kanál); oldA = newA; }}} // konec smyčky
Tato funkce se používá k nastavení bajtů pole tune_config a poté pomocí protokolu I2C přenáší data na IC RDA5807M.
void myChangeChannel (int kanál) {/ * void, pokud se nic nevrátí, jinak int * / tune_config = (kanál >> 2); tune_config = ((kanál & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Práce s FM rádiem Arduino
Když je modul zapnutý, náš kód resetuje IC RDA5807-M a nastaví jej na kanál požadovaného uživatele (Poznámka: tato frekvence je brána jako základní frekvence, na které bude frekvence zvýšena). Změnou potenciometru (připojeného k A0) se změní hodnoty načtené Arduino Nano. Pokud je rozdíl mezi novou a starou hodnotou větší než 10, náš kód zváží tuto novou hodnotu. Kanál se mění v závislosti na změně nové hodnoty ze staré hodnoty. Zvýšení nebo snížení hlasitosti závisí na potenciometru, který je zapojen mezi pin 3 a GND.
Na konci konstrukce a kódování budete mít vlastní FM rádio. Kompletní fungování rádia FM najdete ve videu, na které odkazujete ve spodní části této stránky. Doufám, že se vám projekt líbil a naučili jste se něco užitečného. Pokud máte nějaké dotazy k uvedení tohoto projektu do provozu, můžete je nechat v sekci komentářů nebo použít naši fóra pro další technickou pomoc.