- Radio FM generale di lavoro
- Componenti richiesti
- Ricevitore RDA5807
- Amplificatore audio
- Schema del circuito del ricevitore FM Arduino
- Spiegazione del codice radio FM Arduino
- Funzionamento della radio FM Arduino
Oggi quasi tutti usano i loro telefoni cellulari per ascoltare musica, notizie, podcast, ecc. Ma non molto tempo fa dipendevamo tutti dalle radio FM locali per ricevere le ultime notizie e canzoni, lentamente queste radio stanno perdendo popolarità ma in situazioni di emergenza quando Internet è inattivo, le radio svolgono un ruolo importante per trasmettere informazioni agli utenti. I segnali radio sono sempre presenti nell'aria (che vengono trasmessi dalle stazioni) e tutto ciò di cui abbiamo bisogno è un circuito ricevitore FM per catturare quei segnali radio e trasferirli in segnali audio. Nei nostri tutorial precedenti, abbiamo anche costruito pochi altri trasmettitori e ricevitori FM elencati di seguito.
- Trasmettitore FM Raspberry Pi
- Ricevitore radio FM Raspberry Pi
- Circuito trasmettitore FM
- Circuito trasmettitore FM senza induttore
In questo tutorial costruiremo un ricevitore FM Arduino e lo aggiungeremo al nostro arsenale del progetto. Useremo l' IC ricevitore FM RDA5807 con Arduino e lo programmeremo in modo da riprodurre qualsiasi stazione radio FM che può essere sintonizzata dall'utente con un potenziometro. Useremo anche un amplificatore audio insieme al circuito per controllare il volume di uscita della nostra radio FM Arduino, sembra interessante, vero? Quindi iniziamo.
Radio FM generale di lavoro
Le stazioni radio convertono i segnali elettrici in segnali radio e questi segnali devono essere modulati prima di essere trasmessi attraverso l'antenna. Esistono due metodi in cui un segnale può essere modulato, ovvero AM e FM. Come suggerisce il nome, la modulazione di ampiezza (AM) modula l'ampiezza prima di trasmettere un segnale mentre, nella modulazione di frequenza (FM), la frequenza del segnale viene modulata prima di trasmettere attraverso l'antenna. Nelle stazioni radio, usano la modulazione di frequenza per modulare il segnale e quindi trasmettere i dati. Ora, tutto ciò che dobbiamo costruire è un ricevitore che possa essere sintonizzato su determinate frequenze e ricevere quei segnali e successivamente convertire questi segnali elettrici in segnali audio. Useremo il fileModulo ricevitore FM RDA5807 in questo progetto, che semplifica il nostro circuito.
Componenti richiesti
- Arduino Nano
- Ricevitore RDA5807
- Amplificatore audio
- Cavi di collegamento
- Pentola - 100K
- Scheda Perf
Ricevitore RDA5807
RDA5807 è un modulo sintonizzatore radio stereo FM a chip singolo con un sintetizzatore completamente integrato. Il modulo supporta la banda di frequenza mondiale di 50-115 MHz, controllo del volume e disattivazione dell'audio, riduzione dell'enfasi programmabile (50 / 75us), indicatore dell'intensità del segnale di ricezione e SNR, oscillatore a cristallo 32,768KHz, controllo automatico del guadagno digitale, ecc. schema a blocchi del sintonizzatore RDA5807M.
Ha un'architettura digitale a bassa IF e integra un amplificatore a basso rumore (LNA), che supporta la banda di trasmissione FM (da 50 a 115 MHz), un controllo del guadagno programmabile (PGA), un convertitore analogico-digitale ad alta risoluzione e un convertitore digitale-analogico (DAC) ad alta fedeltà. Il limitatore impedisce il sovraccarico e limita il numero di prodotti di intermodulazione creati dai canali adiacenti. Il PGA amplifica il segnale di uscita del mixer e quindi digitalizzato con ADC. Il core DSP gestisce la selezione del canale, la demodulazione FM, il decoder MPX stereo e il segnale audio in uscita. Di seguito è riportato il diagramma di pinout RDA5807 per l'IC.
Il modulo lavora sulla alimentazione di 1,8 - 3,3. Quando si arresta e l'interfaccia di controllo selezionata, il modulo si ripristina quando VIO è acceso, e supporta anche il soft reset tramite il trigger del bit1 da 0 a 1 dell'indirizzo 02H. Il modulo utilizza la comunicazione I2C per comunicare con l'MCU e l'interfaccia inizia con la condizione di avvio, un byte di comando e byte di dati. L'RDA5807 dispone di 13 registri a 16 bit, ciascuno dei quali esegue una particolare funzione. Gli indirizzi di registro iniziano con 00H, assegnato all'ID del chip e termina con 0FH. In tutti i 13 registri, alcuni bit sono riservati mentre altri sono R / W. Ogni registro esegue attività come la variazione del volume, il cambio di canale, ecc. A seconda dei bit assegnati.
Non è possibile utilizzare direttamente il modulo quando lo si collega a un circuito poiché i pin sono chiusi da. Quindi, ho usato una scheda perf e alcuni pin maschi e ho saldato ogni pin del modulo a ciascun pin maschio come mostrato nella foto sotto.
Amplificatore audio
Un amplificatore audio è un dispositivo elettronico che amplifica i segnali audio elettronici a bassa potenza a un livello sufficientemente alto per pilotare altoparlanti o cuffie. Abbiamo costruito un semplice amplificatore audio usando LM386, il circuito per lo stesso è mostrato di seguito e puoi anche controllare il link per saperne di più su questo circuito, controllare anche altri circuiti dell'amplificatore audio.
Schema del circuito del ricevitore FM Arduino
Abbiamo usato due potenziometri per sintonizzare la banda FM e controllare il volume dell'amplificatore audio. Per modificare il volume è possibile variare il potenziometro, che è collegato tra l'1 e l'8 ° pin dell'LM386 o il potenziometro, che è collegato al pin 3 dell'LM386. L'immagine sotto mostra lo schema elettrico completo per Arduino FM Radio.
Ho fatto piccoli cambiamenti nell'amplificatore. Invece di usare due potenziometri nell'amplificatore, ne ho usato solo uno. Ho scambiato il potenziometro, che serve per cambiare il guadagno, con un resistore. Quindi ora il nostro progetto ha due potenziometri uno per regolare e uno per cambiare il volume. Il potenziometro, che viene utilizzato per sintonizzare il canale, è collegato ad Arduino nano. Il pin centrale del potenziometro è collegato al pin A0 di Arduino nano e uno dei due pin rimanenti è collegato al 5V e l'altro è collegato al GND. Un altro potenziometro viene utilizzato per controllare il volume della radio ed è collegato come mostrato nella fig.
I pin A4 e A5 di Arduino sono collegati ai pin SDA e SCL dell'RDA5807M. tieni presente che il modulo ricevitore funziona solo su 3.3V. Quindi, collega il pin 3v3 del Nano al pin VCC del modulo ricevitore. Una volta effettuati i collegamenti, la mia configurazione appariva così
Spiegazione del codice radio FM Arduino
Il codice inizializzerà il modulo ricevitore e quindi imposta il canale con la frequenza preimpostata. Quando il valore letto dal nano al pin A0 cambia (cambiando potenziometro) cambia la frequenza che a sua volta cambia il canale. Il codice completo è riportato alla fine della pagina.
Iniziamo il nostro programma aggiungendo la libreria di cavi richiesta per la comunicazione con RDA5807. Quindi, nella variabile “channel” impostiamo il valore del canale. Ogni volta che la radio si avvia, si sintonizzerà automaticamente su questo canale.
#includere
Successivamente, caricheremo byte in ogni registro sul nostro IC RDA5807 per impostare la nostra configurazione iniziale. A questo punto, stiamo resettando il ricevitore.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * register 0x04 * / 0b00001010, 0b00000000, / * register 0x05 * / 0b1000 011000, 0b00 * 06 0b00000000, 0b00000000, / * register 0x07 * / 0b01000010, 0b00000010,};
Dopo aver ripristinato il dispositivo, possiamo sintonizzarlo. Per sintonizzare il canale dobbiamo solo programmare i primi 4 byte. Questa parte del codice cambierà il canale alla frequenza desiderata. In I2C all'inizio, iniziamo la trasmissione, scriviamo o leggiamo i dati e poi terminiamo la trasmissione. In questo IC del ricevitore, non è necessario specificare l'indirizzo poiché il datasheet dice chiaramente che l'interfaccia I2C ha un registro di avvio fisso, ovvero 0x02h per un'operazione di scrittura e 0x0Ah per un'operazione di lettura.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (channel >> 2), ((channel & 0b11) << 6) - 0b00010000};
Nella configurazione, inizializziamo la configurazione di avvio (ripristino) e quindi ci sintonizziamo su un canale scrivendo i byte di configurazione di sintonizzazione sull'RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Collegamento al sintonizzatore 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 (); }
Quando usavo il potenziometro per sintonizzarmi su una frequenza, avevo riscontrato un problema. I valori letti dal pin A0 non sono costanti. C'è un rumore bastonato con il valore desiderato. Ho usato un condensatore ceramico da 0.1uF collegato tra A0 e GND, anche se il rumore è stato ridotto al minimo, non è al livello desiderato. Quindi, ho dovuto apportare alcune modifiche al codice. All'inizio ho annotato le letture che sono influenzate dal rumore. Ho scoperto che il valore massimo del rumore è 10. Quindi ho scritto il programma in modo tale che consideri il nuovo valore solo se la differenza tra il nuovo valore e il vecchio valore dello stesso pin è maggiore di 10 e quindi si sintonizza sul canale desiderato.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int risultato = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (canale); oldA = newA; }}} // fine del ciclo
Questa funzione viene utilizzata per impostare i byte dell'array tune_config e quindi trasmette i dati all'IC RDA5807M utilizzando il protocollo I2C.
void myChangeChannel (int channel) {/ * void se non viene restituito nulla else int * / tune_config = (channel >> 2); tune_config = ((channel & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Funzionamento della radio FM Arduino
Quando il modulo è acceso, il nostro codice ripristina l'IC RDA5807-M e lo imposta su un canale dell'utente desiderato (Nota: questa frequenza è considerata la frequenza di base sulla quale verrà incrementata la frequenza). Cambiando il potenziometro (collegato ad A0), cambiano i valori letti da Arduino Nano. Se la differenza tra il nuovo e il vecchio valore è maggiore di 10, il nostro codice considererà questo nuovo valore. Il canale viene cambiato a seconda del cambiamento nel nuovo valore dal vecchio valore. L'aumento o la diminuzione del volume dipende dal potenziometro, che è collegato tra il pin 3 e GND.
Alla fine della costruzione e della codifica, avrai la tua radio FM. Il funzionamento completo della Radio FM si trova nel video collegato in fondo a questa pagina. Spero ti sia piaciuto il progetto e hai imparato qualcosa di utile. Se hai domande su come far funzionare questo progetto, puoi lasciarle nella sezione commenti o utilizzare i nostri forum per altro aiuto tecnico.