- Radio FM General de lucru
- Componente necesare
- Receptor RDA5807
- Amplificator audio
- Schema circuitului receptorului Arduino FM
- Explicație despre codul radio Arduino FM
- Funcționarea Arduino Radio FM
Astăzi aproape toată lumea își folosește telefoanele mobile pentru a asculta muzică, știri, podcast-uri etc. Dar nu cu mult timp în urmă depindeam cu toții de radiourile FM locale pentru a obține cele mai recente știri și melodii, încet aceste radiouri pierd popularitate, dar în situații de urgență, atunci când internetul este defect, radiourile joacă un rol important în transmiterea informațiilor către utilizatori. Semnalele radio sunt întotdeauna prezente în aer (care sunt transmise de posturi) și tot ce ne trebuie este un circuit receptor FM pentru a prinde acele semnale radio și a le transfera către semnale audio. În tutorialele noastre anterioare, am construit și câteva alte emițătoare și receptoare FM care sunt enumerate mai jos.
- Transmițător FM Raspberry Pi
- Radio receptor FM Raspberry Pi
- Circuitul emițătorului FM
- Circuit emițător FM fără inductor
În acest tutorial vom construi un receptor FM Arduino și îl vom adăuga la arsenalul proiectului nostru. Vom folosi IC-ul receptorului FM RDA5807 cu Arduino și îl vom programa astfel încât să redăm orice post de radio FM care poate fi reglat de utilizator cu un potențiometru. De asemenea, vom folosi un amplificator audio împreună cu circuitul pentru a controla volumul de ieșire al radio-ului nostru Arduino FM, sună interesant, nu? Deci sa începem.
Radio FM General de lucru
Stațiile radio convertesc semnalele electrice în semnale radio, iar aceste semnale trebuie să fie modulate înainte de a fi transmise prin antenă. Există două metode în care un semnal poate fi modulat și anume AM și FM. După cum sugerează și numele, modularea amplitudinii (AM) modulează amplitudinea înainte de a transmite un semnal, în timp ce, în modulația de frecvență (FM), frecvența semnalului este modulată înainte de a transmite prin antenă. La posturile de radio, utilizează modulația de frecvență pentru a modula semnalul și apoi transmite datele. Acum, tot ce trebuie să construim este un receptor care poate fi reglat la anumite frecvențe și poate primi acele semnale și ulterior pentru a converti aceste semnale electrice în semnale audio. Vom folosiModul receptor RDA5807 FM în acest proiect, care simplifică circuitul nostru.
Componente necesare
- Arduino Nano
- Receptor RDA5807
- Amplificator audio
- Conectarea firelor
- Ghiveci - 100K
- Perf Board
Receptor RDA5807
RDA5807 este un modul tuner radio stereo FM cu un singur chip, cu un sintetizator complet integrat. Modulul acceptă banda de frecvență la nivel mondial de 50 - 115MHz, controlul volumului și mutarea, dez accentul programabil (50 / 75us), recepționarea indicatorului de putere a semnalului și SNR, oscilator cu cristale de 32,768KHz, controlul digital al câștigului auto, etc. Mai jos fig. diagrama bloc a tunerului RDA5807M.
Are arhitectură digitală cu IF redus și integrează un amplificator cu zgomot redus (LNA), care acceptă banda de difuzare FM (50 până la 115 MHz), un control al câștigului programabil (PGA), un convertor analog-digital de înaltă rezoluție și un convertor digital-analog (DAC) de înaltă fidelitate. Limitatorul previne supraîncărcarea și limitează numărul de produse de intermodulare create de canalele adiacente. PGA amplifică semnalul de ieșire al mixerului și apoi este digitalizat cu ADC-uri. Nucleul DSP gestionează selectarea canalului, demodularea FM, decodorul MPX stereo și semnalul audio de ieșire. RDA5807 pinout Diagrama pentru IC este prezentată mai jos.
Modulul funcționează pe sursa de alimentare de 1,8 - 3,3V. Când se oprește și controlează interfața selectată, modulul se resetează când VIO este pornit și acceptă, de asemenea, resetarea soft prin declanșarea bitului 1 de la 0 la 1 din adresa 02H. Modulul utilizează comunicația I2C pentru a comunica cu MCU, iar interfața începe cu condiția de pornire, un octet de comandă și octeți de date. RDA5807 are 13 registre pe 16 biți, fiecare îndeplinind o anumită funcție. Adresele de registru încep cu 00H, care este alocat ID-ului cipului și se termină cu 0FH. În toate cele 13 registre, unii biți sunt rezervați, în timp ce unii sunt R / W. Fiecare registru îndeplinește sarcini precum volumul variabil, schimbarea canalelor etc., în funcție de biții atribuiți acestora.
Nu putem utiliza direct modulul atunci când îl conectăm la un circuit, deoarece pinii sunt închise. Deci, am folosit o placă de perfecționare și niște pini masculi și am lipit fiecare pin al modulului la fiecare pin masculin, așa cum se arată în imaginea de mai jos.
Amplificator audio
Un amplificator audio este un dispozitiv electronic, care amplifică semnalele audio electronice de mică putere la un nivel în care este suficient de mare pentru a conduce difuzoare sau căști. Am construit un amplificator audio simplu folosind LM386, circuitul pentru același lucru este prezentat mai jos și puteți verifica, de asemenea, linkul pentru a afla mai multe despre acest circuit, puteți verifica și alte circuite de amplificare audio.
Schema circuitului receptorului Arduino FM
Am folosit două potențiometre pentru reglarea benzii FM și controlul volumului amplificatorului audio. Pentru a modifica volumul pe care fie poate varia potul, care este conectat între 1 și 8 - lea PIN al LM386 sau oală, care este conectat la pinul 3 al LM386. Imaginea de mai jos arată schema completă a circuitului pentru radio FM Arduino.
Am făcut mici modificări în amplificator. În loc să folosesc două potențiometre în amplificator, am folosit doar unul. Am schimbat potul, care este folosit pentru a schimba Gain, cu un rezistor. Așadar, acum proiectul nostru are două potențiometre, unul pe care să îl reglați și unul pentru a modifica volumul. Potențiometrul, care este utilizat pentru reglarea canalului, este conectat cu Arduino nano. Pinul central al potului este conectat la pinul A0 al nano Arduino și oricare dintre cei doi pin rămași este conectat la 5V, iar celălalt este conectat la GND. Un alt pot este utilizat pentru a controla volumul radioului și este conectat așa cum se arată în fig.
Pinul A4 și A5 al Arduino sunt conectate la pinul SDA și SCL al RDA5807M. rețineți că modulul receptor funcționează numai pe 3.3V. Deci, conectați pinul 3v3 al Nano la pinul VCC al modulului receptor. Odată ce conexiunile au fost făcute, configurarea mea a arătat așa
Explicație despre codul radio Arduino FM
Codul va inițializa modulul receptor și apoi setează canalul cu frecvența prestabilită. Când valoarea citită de nano la pinul A0 se schimbă (prin schimbarea potului) se schimbă frecvența, care la rândul său schimbă canalul. Codul complet este dat la sfârșitul paginii.
Începem programul nostru prin adăugarea bibliotecii de cabluri necesare pentru comunicarea cu RDA5807. Apoi, în variabila „canal” setăm valoarea canalului. Ori de câte ori pornește radioul, acesta va fi acordat automat la acest canal.
#include
Apoi, vom încărca octeți în fiecare registru de pe RDA5807 IC pentru a seta configurația noastră inițială. În acest moment, resetăm receptorul.
uint8_t boot_config = {/ * registru 0x02 * / 0b11000001, 0b00000011, / * registru 0x03 * / 0b00000000, 0b00000000, / * registru 0x04 * / 0b00001010, 0b00000000, / * registru 0x05 * / 0b100111, 0 0b00000000, 0b00000000, / * registru 0x07 * / 0b01000010, 0b00000010,};
După ce resetăm dispozitivul, îl putem regla. Pentru reglarea canalului trebuie doar să programăm primii 4 octeți. Această parte a codului va schimba canalul la frecvența dorită. La I2C la început, începem transmisia, scriem sau citim datele și apoi terminăm transmisia. În acest IC receptor, nu trebuie să specificăm adresa, deoarece foaia tehnică spune clar că interfața I2C are un registru de pornire fix, adică 0x02h pentru o operație de scriere și 0x0Ah pentru o operație de citire.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (canal >> 2), ((canal & 0b11) << 6) - 0b00010000};
În configurație, inițializăm configurația de boot (resetare) și apoi reglăm pe un canal scriind octeți de configurare de configurare pe RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Conectați-vă la tunerul 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 (); }
Când foloseam potul pentru reglarea unei frecvențe, mă confruntasem cu o problemă. Valorile citite de pinul A0 nu sunt constante. Există un club de zgomot cu valoarea dorită. Am folosit un condensator ceramic 0.1uF conectat între A0 și GND, deși zgomotul a fost minimizat, nu este la nivelul dorit. Deci, a trebuit să fac câteva modificări la cod. La început, am notat citirile care sunt afectate de zgomot. Am aflat că valoarea maximă a zgomotului este 10. Așa că am scris programul în așa fel încât să ia în considerare noua valoare numai dacă diferența dintre noua valoare și vechea valoare a aceluiași pin este mai mare de 10 și apoi reglați canalul dorit.
bucla void () {int canal1 = 187, avg = 0, newA; static int vechiA = 0; int result = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (canal); vechiA = nouA; }}} // sfârșitul buclei
Această funcție este utilizată pentru a seta octeții matricei tune_config și apoi transmite datele către RDA5807M IC folosind protocolul I2C.
void myChangeChannel (canal int) {/ * void dacă nu se returnează nimic altceva int * / tune_config = (canal >> 2); tune_config = ((canal & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Funcționarea Arduino Radio FM
Când modulul este pornit, codul nostru resetează RDA5807-M IC și îl setează pe un canal al utilizatorului dorit (Notă: această frecvență este luată ca frecvență de bază pe care frecvența va fi incrementată). Prin schimbarea potențiometrului (conectat la A0), valorile citite de Arduino Nano se schimbă. Dacă diferența dintre valoarea nouă și cea veche este mai mare de 10, codul nostru va lua în considerare această nouă valoare. Canalul este schimbat în funcție de schimbarea noii valori de la vechea valoare. Creșterea sau scăderea volumului depinde de potențiometru, care este conectat între pinul 3 și GND.
La sfârșitul construcției și codării, veți avea propriul radio FM. Funcționarea completă a Radio FM poate fi găsită în videoclipul legat în partea de jos a acestei pagini. Sper că ți-a plăcut proiectul și ai învățat ceva util. Dacă aveți întrebări cu privire la funcționarea acestui proiect, le puteți lăsa în secțiunea de comentarii sau puteți folosi forumurile noastre pentru alte asistențe tehnice.