- Všeobecné rádio FM pracuje
- Súčasti sú povinné
- Prijímač RDA5807
- Zosilňovač zvuku
- Schéma zapojenia FM prijímača Arduino
- Vysvetlenie kódu rádia FM Arduino
- Fungovanie rádia Arduino FM
Dnes takmer každý používa svoje mobilné telefóny na počúvanie hudby, správ, podcastov atď. Ale nie je to tak dávno, čo sme všetci záviseli od miestnych rádií FM, aby sme dostali najnovšie správy a skladby, pomaly tieto rádia strácajú popularitu, ale v núdzových situáciách, keď internet je nefunkčné, rádiá hrajú dôležitú úlohu pri prenose informácií k používateľom. Rádiové signály sú vždy prítomné vo vzduchu (ktoré vysielajú stanice) a všetko, čo potrebujeme, je obvod prijímača FM, ktorý tieto rádiové signály zachytí a prenesie ich na zvukové signály. V našich predchádzajúcich tutoriáloch sme vytvorili aj niekoľko ďalších FM vysielačov a prijímačov, ktoré sú uvedené nižšie.
- FM vysielač Raspberry Pi
- Rádio prijímač FM Raspberry Pi
- Obvod vysielača FM
- Obvod vysielača FM bez tlmivky
V tomto výučbe zostrojíme Arduino FM prijímač a pridáme ho do nášho arzenálu projektu. Použijeme integrovaný obvod FM prijímača RDA5807 s programom Arduino a naprogramujeme ho tak, aby sme prehrávali ľubovoľné rozhlasové stanice FM, ktoré si môže užívateľ naladiť pomocou potenciometra. Spolu s obvodom tiež použijeme zvukový zosilňovač na riadenie výstupnej hlasitosti nášho rádia Arduino FM, znie to zaujímavo, že? Takže poďme na to.
Všeobecné rádio FM pracuje
Rádiové stanice prevádzajú elektrické signály na rádiové signály a tieto signály musia byť pred prenosom cez anténu modulované. Existujú dva spôsoby, ktorými je možné modulovať signál, a to AM a FM. Ako už z názvu vyplýva, amplitúdová modulácia (AM) moduluje amplitúdu pred vysielaním signálu, zatiaľ čo pri frekvenčnej modulácii (FM) sa frekvencia signálu moduluje pred vysielaním cez anténu. Na rozhlasových staniciach používajú na moduláciu signálu a potom na prenos údajov frekvenčnú moduláciu. Teraz musíme zostaviť iba prijímač, ktorý je možné naladiť na určité frekvencie a tieto signály prijímať a neskôr prevádzať tieto elektrické signály na zvukové signály. Budeme používaťModul prijímača FM RDA5807 v tomto projekte, čo zjednodušuje náš obvod.
Súčasti sú povinné
- Arduino Nano
- Prijímač RDA5807
- Zosilňovač zvuku
- Pripojovacie vodiče
- Hrniec - 100 tis
- Perf Board
Prijímač RDA5807
RDA5807 je jednočipový stereofónny rádiový tuner FM s plne integrovaným syntetizátorom. Modul podporuje celosvetové frekvenčné pásmo 50 - 115MHz, reguláciu hlasitosti a stíšenie, programovateľné znižovanie dôrazu (50 / 75us), indikátor sily signálu a SNR, krištáľový oscilátor 32,768KHz, digitálne automatické zosilnenie atď. Na nasledujúcom obrázku je znázornené bloková schéma tunera RDA5807M.
Má digitálnu architektúru s nízkym IF a integruje nízkošumový zosilňovač (LNA), ktorý podporuje pásmo FM vysielania (50 až 115 MHz), programovateľné riadenie zisku (PGA), analógovo-digitálny prevodník s vysokým rozlíšením a vysoko verné digitálno-analógové prevodníky (DAC). Obmedzovač zabraňuje preťaženiu a obmedzuje počet intermodulačných produktov vytvorených susednými kanálmi. PGA zosilňuje výstupný signál mixážneho pultu a potom sa digitalizuje pomocou ADC. DSP jadro riadi výber kanálov, FM demoduláciu, stereofónny MPX dekodér a výstupný zvukový signál. RDA5807 pinov schéma pre IC je uvedený nižšie.
Modul pracuje na napájanie 1,8 - 3,3V. Keď je vybrané odpočívadlo a riadiace rozhranie, modul sa resetuje, keď je VIO zapnuté, a tiež podporuje mäkký reset spúšťačom bit1 od 0 do 1 adresy 02H. Modul využíva komunikáciu I2C na komunikáciu s MCU a rozhranie začína stavom spustenia, príkazovým bajtom a dátovými bajtmi. RDA5807 má 13 16-bitových registrov, z ktorých každý vykonáva určitú funkciu. Adresy registrov začínajú číslom 00H, ktoré je pridelené ID čipu, a končia číslom 0FH. Vo všetkých 13 registroch sú niektoré bity rezervované, zatiaľ čo iné sú R / W. Každý register plní úlohy, ako je zmena hlasitosti, zmena kanála atď., V závislosti od bitov, ktoré sú im priradené.
Pri pripájaní k obvodu nemôžeme modul priamo použiť, pretože piny sú uzavreté. Použil som teda dosku perf a niekoľko mužských kolíkov a každý pin kolíka modulu som spájkoval s každým kolíkom tak, ako je to znázornené na obrázku nižšie.
Zosilňovač zvuku
Zosilňovač zvuku je elektronické zariadenie, ktoré zosilňuje elektronické zvukové signály s nízkou spotrebou energie na úroveň, ktorá je dostatočná na použitie pre reproduktory alebo slúchadlá. Vytvorili sme jednoduchý zvukový zosilňovač pomocou LM386, obvod toho istého je uvedený nižšie a môžete tiež skontrolovať odkaz a dozvedieť sa viac o tomto obvode. Skontrolujte tiež ďalšie obvody zvukového zosilňovača.
Schéma zapojenia FM prijímača Arduino
Použili sme dva potenciometre na naladenie pásma FM a ovládanie hlasitosti audio zosilňovača. Pre zmenu na zväzok, ktorý môže buď meniť pot, ktorý je pripojený v rozmedzí 1 až 8 th kolík LM386 alebo hrnca, ktorý je pripojený na pinu 3 LM386. Nasledujúci obrázok zobrazuje úplnú schému zapojenia pre rádio Arduino FM.
V zosilňovači som urobil malé zmeny. Namiesto použitia dvoch potenciometrov v zosilňovači som použil iba jeden. Hrniec, ktorý slúži na zmenu zosilnenia, som vymenil za odpor. Takže náš projekt má teraz dva potenciometre, jeden na vyladenie a druhý na zmenu hlasitosti. Potenciometer, ktorý sa používa na vyladenie kanálu, je spojený s Arduino nano. Stredový kolík hrnca je pripojený k pinu A0 Arduino nano a jeden zo zvyšných dvoch pinov je pripojený k 5 V a druhý k GND. Ďalší hrniec sa používa na ovládanie hlasitosti rádia a je pripojený tak, ako je to znázornené na vyššie uvedenom obr.
Pin A4 a A5 Arduina sú pripojené k pinom SDA a SCL RDA5807M. majte na pamäti, že modul prijímača funguje iba na 3,3V. Pripojte teda kolík 3v3 Nano k kolíku VCC prijímacieho modulu. Po vytvorení spojov moje nastavenie vyzeralo takto
Vysvetlenie kódu rádia FM Arduino
Kód inicializuje prijímací modul a potom nastaví kanál s prednastavenou frekvenciou. Keď sa zmení hodnota načítaná nano na kolíku A0 (zmenou potu), zmení sa frekvencia, ktorá zase zmení kanál. Celý kód je uvedený na konci stránky.
Náš program začíname pridaním požadovanej knižnice drôtov pre komunikáciu s RDA5807. Potom v premennej „channel“ nastavíme hodnotu kanálu. Kedykoľvek sa rádio spustí, automaticky sa naladí na tento kanál.
#include
Ďalej načítame bajty do každého registra na našom RDA5807 IC, aby sme nastavili našu počiatočnú konfiguráciu. V tomto okamihu resetujeme prijímač.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * register 0x04 * / 0b00001010, 0b00000000, / * register 0x05 * / 0b10001000, 0b00 * 0 0b00000000, 0b00000000, / * register 0x07 * / 0b01000010, 0b00000010,};
Po resetovaní zariadenia ho môžeme vyladiť. Na naladenie kanálu musíme naprogramovať iba prvé 4 bajty. Táto časť kódu zmení kanál na požadovanú frekvenciu. V I2C najskôr zahájime prenos, zapíšeme alebo prečítame údaje a potom prenos ukončíme. V tomto IC prijímača nemusíme špecifikovať adresu, pretože údajový list jasne hovorí, že rozhranie I2C má pevný štartovací register, tj. 0x02h pre operáciu zápisu a 0x0Ah pre operáciu čítania.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (kanál >> 2), ((kanál & 0b11) << 6) - 0b00010000};
V nastavení inicializujeme konfiguráciu bootovania (reset) a potom naladíme kanál zapísaním ladiacich konfiguračných bajtov do RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, VSTUP); / * Vzťahuje sa na tuner FM RDA5807M: * / 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 (); }
Pri používaní potu na ladenie frekvencie som narazil na problém. Hodnoty načítané pinom A0 nie sú konštantné. K dispozícii je hluk ukojený s požadovanou hodnotou. Použil som keramický kondenzátor 0,1 uF pripojený medzi A0 a GND, aj keď bol šum minimalizovaný, nie je na požadovanej úrovni. Musel som teda urobiť nejaké zmeny v kóde. Spočiatku som si zaznamenal hodnoty, ktoré sú ovplyvnené šumom. Zistil som, že maximálna hodnota šumu je 10. Program som teda napísal tak, že novú hodnotu bude brať do úvahy, iba ak je rozdiel medzi novou hodnotou a starou hodnotou toho istého kolíka väčší ako 10 a potom naladí požadovaný kanál.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int vysledok = 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; }}} // koniec slučky
Táto funkcia sa používa na nastavenie bajtov poľa tune_config a potom pomocou protokolu I2C prenesie údaje do IC RDA5807M.
void myChangeChannel (int kanál) {/ * void, ak sa nič nevráti, inak 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 (); }
Fungovanie rádia Arduino FM
Keď je modul zapnutý, náš kód vynuluje IC RDA5807-M a nastaví ho na kanál požadovaného používateľa (Poznámka: táto frekvencia sa berie ako základná frekvencia, o ktorú sa frekvencia zvýši). Zmenou potenciometra (pripojeného k A0) sa menia hodnoty načítané Arduino Nano. Ak je rozdiel medzi novou a starou hodnotou väčší ako 10, náš kód bude brať do úvahy túto novú hodnotu. Kanál sa zmení v závislosti od zmeny novej hodnoty zo starej hodnoty. Zvyšovanie alebo znižovanie hlasitosti závisí od potenciometra, ktorý je zapojený medzi pin 3 a GND.
Na konci stavby a kódovania budete mať vlastné FM rádio. Kompletné fungovanie FM rádia nájdete vo videu prepojenom v dolnej časti tejto stránky. Dúfam, že sa vám projekt páčil a dozvedeli ste sa niečo užitočné. Ak máte ďalšie otázky týkajúce sa uvedenia tohto projektu do života, môžete ich nechať v sekcii komentárov alebo použiť našu technickú podporu pre ďalšie technické pomoci.