- Paggawa ng Pangkalahatang FM Radio
- Kinakailangan ang Mga Bahagi
- RDA5807 Tagatanggap
- Audio Amplifier
- Arduino FM Receiver Circuit Diagram
- Paliwanag ng Arduino FM Radio Code
- Paggawa ng Arduino FM Radio
Ngayon halos lahat ay gumagamit ng kanilang mga mobile phone upang makinig ng musika, balita, podcast, atbp. Ngunit hindi pa matagal na ang lahat ay nakasalalay tayo sa mga lokal na FM Radio upang makuha ang pinakabagong balita at mga kanta, dahan-dahan ang mga Radyo na ito ay nawawalan ng katanyagan ngunit sa mga emerhensiya kapag ang internet ay pababa, ang mga radio ay naglalagay ng isang mahalagang papel upang makapagpadala ng impormasyon sa mga gumagamit. Ang mga signal ng radyo ay palaging naroroon sa hangin (na nai-broadcast ng mga istasyon), at ang kailangan lang namin ay isang circuit ng FM receiver upang mahuli ang mga signal ng radyo at ilipat ang mga ito sa mga audio signal. Sa aming nakaraang mga tutorial, nagtayo rin kami ng ilang iba pang mga FM Transmitter at Receiver na nakalista sa ibaba.
- Transmitter ng Raspberry Pi FM
- Radyo ng Raspberry Pi FM Receiver
- FM Transmitter circuit
- FM Transmitter circuit nang walang Inductor
Sa tutorial na ito magtatayo kami ng isang Arduino FM Receiver, at idagdag ito sa aming arsenal ng proyekto. Gagamitin namin ang RDA5807 FM Receiver IC kasama ang Arduino at iprogram ito kaya, patugtugin ang anumang istasyon ng radyo ng FM na maaaring mai-tune ng gumagamit gamit ang isang potensyomiter. Gumagamit din kami ng isang Audio Amplifier kasama ang circuit upang makontrol ang dami ng output ng aming Arduino FM Radio, parang nakakainteres ang tunog? Kaya, magsimula na tayo.
Paggawa ng Pangkalahatang FM Radio
Ang mga istasyon ng Radyo ay binago ang mga signal ng elektrisidad sa mga signal ng radyo, at ang mga senyas na ito ay kailangang baguhin sa modya bago mailipat sa pamamagitan ng antena Mayroong dalawang mga pamamaraan kung saan ang isang signal ay maaaring modulated namely AM at FM. Tulad ng ipinahihiwatig ng pangalan, ang modulate ng amplitude (AM) ay nagbabago ng amplitude bago magpadala ng isang senyas samantalang, sa frequency modulation (FM), ang dalas ng signal ay binago bago mailipat sa pamamagitan ng antena. Sa mga istasyon ng radyo, gumagamit sila ng dalas na pagbago upang mabago ang signal at pagkatapos ihatid ang data. Ngayon, ang kailangan lang naming buuin ay isang tatanggap na maaaring mai-tune sa ilang mga frequency, at makatanggap ng mga signal na iyon, at maya-maya ay i-convert ang mga electrical signal na ito sa mga audio signal. Gagamitin namin angRDA5807 FM module ng tatanggap sa proyektong ito, na nagpapadali sa aming circuit.
Kinakailangan ang Mga Bahagi
- Arduino Nano
- Tatanggap ng RDA5807
- Audio Amplifier
- Mga kumokonekta na mga wire
- Palayok - 100K
- Perf Board
RDA5807 Tagatanggap
Ang RDA5807 ay isang solong-Chip FM stereo radio tuner module na may isang ganap na isinamang synthesizer. Sinusuportahan ng module ang buong mundo dalas ng banda ng 50 - 115MHz, dami ng kontrol at walang imik, programmable de-diin (50 / 75us), makatanggap ng tagapagpahiwatig ng lakas ng signal at SNR, 32.768KHz kristal oscillator, digital auto makakuha ng kontrol, atbp Sa ibaba fig ipinapakita ang harangan ang diagram ng RDA5807M tuner.
Mayroon itong digital na mababang-IF na arkitektura at isinasama ang isang mababang ingay amplifier (LNA), na sumusuporta sa FM broadcast band (50 hanggang 115 MHz), isang programmable gain control (PGA), isang mataas na resolusyon na analog-to-digital converter, at isang mataas na katapatan digital-to-analog converter (DACs). Pinipigilan ng limiter ang labis na pag-load at nililimitahan ang bilang ng mga produktong intermodulation na nilikha ng mga katabing channel. Pinapalaki ng PGA ang signal ng output ng panghalo at pagkatapos ay na-digitize sa mga ADC. Pinangangasiwaan ng DSP core ang pagpili ng channel, demodulasyon ng FM, decoder ng stereo MPX, at output audio signal. Ang RDA5807 pinout diagram para sa IC ay ibinibigay sa ibaba.
Gumagana ang module sa power supply ng 1.8 - 3.3V. Kapag papunta sa pamamahinga at kontrolin ang napili na interface, i-reset ng module ang sarili nito kapag ang VIO ay Power up, at sinusuportahan din ang malambot na pag-reset ng gatilyo ng bit1 mula 0 hanggang 1 ng 02H address. Gumagamit ang module ng komunikasyon ng I2C upang makipag-usap sa MCU, at nagsisimula ang interface sa pagsisimula ng kundisyon, isang byte ng utos, at mga byte ng data. Ang RDA5807 ay may 13 16-bit register, bawat isa ay gumaganap ng isang partikular na pagpapaandar. Ang mga address ng rehistro ay nagsisimula sa 00H, na inilaan sa chip ID at nagtatapos sa 0FH. Sa lahat ng 13 mga rehistro, ang ilang mga piraso ay nakalaan habang ang ilan ay R / W. Gumagawa ang bawat rehistro ng mga gawain tulad ng iba't ibang dami, pagbabago ng mga channel, atbp depende sa mga piraso na nakatalaga sa kanila.
Hindi namin direktang magagamit ang module kapag ikonekta ito sa isang circuit habang ang mga pin ay sarado ng. Kaya, gumamit ako ng isang perf board at ilang mga lalaking pin at naghinang ng bawat pin ng module sa bawat lalaking pin tulad ng ipinakita sa larawan sa ibaba.
Audio Amplifier
Ang isang audio amplifier ay isang elektronikong aparato, na nagpapalakas ng mga signal ng electronic audio na may mababang lakas sa isang antas kung saan sapat itong mataas para sa pagmamaneho ng mga loudspeaker o headphone. Bumuo kami ng isang simpleng audio amplifier gamit ang LM386, ang circuit para sa pareho ay ipinapakita sa ibaba at maaari mo ring suriin ang link upang malaman ang higit pa tungkol sa circuit na ito, suriin din ang iba pang mga circuit ng audio amplifier.
Arduino FM Receiver Circuit Diagram
Gumamit kami ng dalawang potentiometers para sa pag-tune ng FM band at pagkontrol sa dami ng audio amplifier. Upang baguhin ang lakas ng tunog maaari kang mag-iba ng palayok, na konektado sa pagitan ng 1 at ika- 8 na pin ng LM386 o palayok, na konektado sa pin 3 ng LM386. Ipinapakita ng larawan sa ibaba ang kumpletong diagram ng circuit para sa Arduino FM Radio.
Maliit ang ginawa kong pagbabago sa amplifier. Sa halip na gumamit ng dalawang potentiometers sa amplifier, isa lang ang ginamit ko. Pinagpalit ko ang palayok, na ginagamit upang baguhin ang Gain, na may isang risistor. Kaya ngayon ang aming proyekto ay may dalawang potensyomiter na isa upang ibagay, at isa upang baguhin ang dami. Ang potensyomiter, na ginagamit upang ibagay ang channel ay konektado sa Arduino nano. Ang gitnang pin ng palayok ay konektado sa A0 pin ng Arduino nano, at alinman sa natitirang dalawang pin ay konektado sa 5V at ang isa ay konektado sa GND. Ang isa pang palayok ay ginagamit upang makontrol ang dami ng radyo at konektado tulad ng ipinakita sa itaas na igos.
Ang pin A4 at A5 ng Arduino ay konektado sa SDA at SCL pin ng RDA5807M. tandaan na ang module ng tatanggap ay gagana lamang sa 3.3V. Kaya, ikonekta ang 3v3 pin ng Nano sa VCC pin ng module ng tatanggap. Kapag ginawa ang mga koneksyon ay ganito ang aking set-up
Paliwanag ng Arduino FM Radio Code
Sisimulan ng code ang module ng tatanggap at pagkatapos ay itatakda ang channel na may preset na dalas. Kapag ang halagang binasa ng nano sa A0 pin ay nagbabago (sa pamamagitan ng pagbabago ng palayok) nagbabago ang dalas na siya namang nagbabago ng channel. Ang buong code ay ibinibigay sa dulo ng pahina.
Sinimulan namin ang aming programa sa pamamagitan ng pagdaragdag ng kinakailangang wire library para sa pakikipag-usap sa RDA5807. Pagkatapos, sa variable na "channel" itinakda namin ang halaga ng channel. Kailan man magsimula ang radyo awtomatiko itong masusunod sa channel na ito.
# isama
Susunod, maglo-load kami ng mga byte sa bawat rehistro sa aming RDA5807 IC upang maitakda ang aming paunang pagsasaayos. Sa puntong ito, itinatakda namin ang tatanggap.
uint8_t boot_config = {/ * rehistro 0x02 * / 0b11000001, 0b00000011, / * rehistro 0x03 * / 0b00000000, 0b00000000, / * rehistro 0x04 * / 0b00001010, 0b00000000, / * rehistro 0x05 * / 0b10001000, 0b00001111, / * rehistro 0b00000000, 0b00000000, / * rehistro 0x07 * / 0b01000010, 0b00000010,};
Pagkatapos naming mai-reset ang aparato, maaari naming ibagay ang aparato. Para sa pag-tune ng channel kailangan lang namin i-program ang unang 4 bytes. Ang bahaging ito ng code ay magbabago ng channel sa nais na dalas. Sa I2C sa una, sinisimulan namin ang paghahatid, Isulat o basahin ang data at pagkatapos ay wakasan ang paghahatid. Sa tatanggap na IC na ito, hindi namin kailangang tukuyin ang address bilang malinaw na sinasabi ng datasheet na ang interface ng I2C ay may isang nakapirming pagsisimula ng rehistro ie 0x02h para sa isang operasyon ng pagsusulat, at 0x0Ah para sa isang binasang operasyon.
uint8_t tune_config = {/ * rehistro 0x02 * / 0b11000000, 0b00000001, / * rehistro 0x03 * / (channel >> 2), ((channel & 0b11) << 6) - 0b00010000};
Sa pag-setup, pinasisimulan namin ang pagsasaayos ng boot (pag-reset) at pagkatapos ay pag-tune sa isang channel sa pamamagitan ng pagsulat ng mga byte ng pagsasaayos ng pag-tune sa RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Makipag-ugnay sa 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 (); }
Kapag gumagamit ng palayok para sa pag-tune sa isang dalas, nahaharap ako sa isang problema. Ang mga halagang binabasa ng A0 pin ay hindi pare-pareho. Mayroong ingay na clubbed na may nais na halaga. Gumamit ako ng isang 0.1uF ceramic capacitor na konektado sa pagitan ng A0, at GND, kahit na ang pag-ingay ay nabawasan, hindi ito hanggang sa nais na antas. Kaya, kailangan kong gumawa ng ilang mga pagbabago sa code. Sa una, itinala ko ang mga pagbasa na apektado ng ingay. Nalaman ko na ang maximum na halaga ng ingay ay 10. Kaya't isinulat ko ang programa sa paraang, isasaalang-alang lamang nito ang bagong halaga kung ang pagkakaiba sa pagitan ng bagong halaga at ang dating halaga ng parehong pin ay mas malaki sa 10 at pagkatapos ay mga tono sa nais na channel.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int resulta = 0; newA = analogRead (A0); kung ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); kung (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (channel); oldA = bagongA; }}} // loop end
Ang pagpapaandar na ito ay ginagamit upang itakda ang mga byte ng tune_config array at pagkatapos ay ilipat ang data sa RDA5807M IC gamit ang I2C protocol.
void myChangeChannel (int channel) {/ * walang bisa kung walang ibinalik pa 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 (); }
Paggawa ng Arduino FM Radio
Kapag pinapagana ang module, i-reset ng aming code ang RDA5807-M IC at itinakda ito sa isang channel ng ninanais ng gumagamit (Tandaan: ang dalas na ito ay kinuha bilang ang dalas ng batayan kung saan madaragdagan ang dalas). Sa pamamagitan ng pagbabago ng potensyomiter (konektado sa A0), ang mga halagang binasa ng Arduino Nano ay nagbabago. Kung ang pagkakaiba sa pagitan ng bago at lumang halaga ay higit sa 10, isasaalang-alang ng aming code ang bagong halagang ito. Ang channel ay nabago depende sa pagbabago sa bagong halaga mula sa dating halaga. Ang pagdaragdag o pagbawas ng dami ay nakasalalay sa potensyomiter, na konektado sa pagitan ng pin 3 at GND.
Sa pagtatapos ng konstruksyon at pag-coding, magkakaroon ka ng iyong sariling FM Radio. Ang kumpletong pagtatrabaho ng FM Radio ay matatagpuan sa video na naka- link sa ilalim ng pahinang ito. Inaasahan kong nasiyahan ka sa proyekto at natutunan ang isang bagay na kapaki-pakinabang. Kung mayroon kang anumang mga katanungan sa pagkuha ng proyektong ito maaari mong iwanan ang mga ito sa seksyon ng komento o gamitin ang aming mga forum para sa iba pang tulong na panteknikal.