- FM Radyo Genel Çalışma
- Gerekli Bileşenler
- RDA5807 Alıcı
- Ses amplifikatörü
- Arduino FM Alıcı Devre Şeması
- Arduino FM Radyo Kodu Açıklaması
- Arduino FM Radyosunun Çalışması
Bugün hemen hemen herkes müzik, haber, podcast vb. Dinlemek için cep telefonunu kullanıyor. Ancak kısa süre önce hepimiz en son haberleri ve şarkıları almak için yerel FM Radyolarına bağımlıydık, yavaş yavaş bu Radyoların popülerliği azaldı, ancak internet olduğunda acil durumlarda çalışmadığında, telsizler kullanıcılara bilgi aktarmada önemli bir rol oynar. Radyo sinyalleri her zaman havada mevcuttur (istasyonlar tarafından yayınlanan) ve tek ihtiyacımız olan bu radyo sinyallerini yakalamak ve bunları ses sinyallerine aktarmak için bir FM alıcı devresi. Önceki eğitimlerimizde, aşağıda listelenen birkaç başka FM Verici ve Alıcı da yaptık.
- Raspberry Pi FM Verici
- Raspberry Pi FM Alıcı Radyo
- FM Verici devresi
- İndüktörsüz FM Verici devresi
Bu eğitimde bir Arduino FM Alıcısı inşa edeceğiz ve bunu proje cephanemize ekleyeceğiz. RDA5807 FM Receiver IC'yi Arduino ile kullanacağız ve programlayacağız, kullanıcı tarafından potansiyometre ile ayarlanabilen herhangi bir FM radyo istasyonunu çalacağız. Arduino FM Radyomuzun çıkış sesini kontrol etmek için devre ile birlikte bir Ses Amplifikatörü de kullanacağız, kulağa ilginç geliyor değil mi? Öyleyse başlayalım.
FM Radyo Genel Çalışma
Radyo istasyonları, elektrik sinyallerini radyo sinyallerine dönüştürür ve bu sinyallerin anten yoluyla iletilmeden önce modüle edilmesi gerekir. AM ve FM olmak üzere bir sinyalin modüle edilebildiği iki yöntem vardır. Adından da anlaşılacağı gibi, genlik modülasyonu (AM), bir sinyali iletmeden önce genliği modüle ederken, frekans modülasyonunda (FM), sinyalin frekansı antenden iletilmeden önce modüle edilir. Radyo istasyonlarında, sinyali modüle etmek için frekans modülasyonu kullanırlar ve ardından verileri iletirler. Şimdi, yapmamız gereken tek şey, belirli frekanslara ayarlanabilen ve bu sinyalleri alabilen ve daha sonra bu elektrik sinyallerini ses sinyallerine dönüştürebilen bir alıcı. KullanacağızDevremizi basitleştiren bu projede RDA5807 FM alıcı modülü.
Gerekli Bileşenler
- Arduino Nano
- RDA5807 alıcı
- Ses amplifikatörü
- Bağlantı telleri
- Saksı - 100K
- Perf Kurulu
RDA5807 Alıcı
RDA5807, tamamen entegre bir sentezleyiciye sahip tek Çipli bir FM stereo radyo tuner modülüdür. Modül, dünya çapında 50 - 115 MHz frekans bandını, ses kontrolü ve sessiz, programlanabilir güç azaltma (50 / 75us), sinyal gücü göstergesi ve SNR, 32.768KHz kristal osilatör, dijital otomatik kazanç kontrolü vb. Destekler. RDA5807M tunerinin blok şeması.
Dijital düşük IF mimarisine sahiptir ve FM yayın bandını (50 ila 115 MHz) destekleyen bir düşük gürültü amplifikatörü (LNA), programlanabilir bir kazanç kontrolü (PGA), yüksek çözünürlüklü bir analogdan dijitale dönüştürücü ve yüksek sadakatli dijitalden analoğa dönüştürücüler (DAC'ler). Sınırlayıcı aşırı yüklemeyi önler ve bitişik kanallar tarafından oluşturulan intermodülasyon ürünlerinin sayısını sınırlar. PGA, mikser çıkış sinyalini güçlendirir ve ardından ADC'ler ile dijital hale getirilir. DSP çekirdeği, kanal seçimini, FM demodülasyonunu, stereo MPX kod çözücüyü ve çıkış ses sinyalini yönetir. RDA5807 bacak yapısı IC diyagramı aşağıda verilmiştir.
Modül 1.8 - 3.3V güç kaynağı ile çalışır. Dinlenmeye geldiğinde ve kontrol arabirimi seçildiğinde, modül VIO açıldığında kendini sıfırlar ve ayrıca bit1'in tetikleyicisi tarafından 02H adresinin 0'dan 1'e yumuşak sıfırlamayı destekler. Modül, MCU ile iletişim kurmak için I2C iletişimini kullanır ve arayüz, başlatma koşulu, bir komut baytı ve veri baytları ile başlar. RDA5807, her biri belirli bir işlevi yerine getiren 13 16 bitlik yazmaçlara sahiptir. Kayıt adresleri, yonga kimliğine tahsis edilen ve 0FH ile biten 00H ile başlar. 13 kütüğün tümünde, bazı bitler rezerve edilirken, bazıları R / W'dir. Her kayıt, kendilerine atanan bitlere bağlı olarak değişen ses seviyesi, kanal değiştirme vb. Gibi görevleri gerçekleştirir.
Pimler kapatıldığı için modülü bir devreye bağlarken doğrudan kullanamayız. Bu yüzden, bir performans tahtası ve bazı erkek pimler kullandım ve modülün her bir pimini aşağıdaki resimde gösterildiği gibi her bir erkek pime lehimledim.
Ses amplifikatörü
Bir ses amplifikatörü, düşük güçlü elektronik ses sinyallerini, hoparlörleri veya kulaklıkları sürmek için yeterince yüksek bir seviyeye yükselten elektronik bir cihazdır. LM386 kullanarak basit bir ses amplifikatörü oluşturduk, bunun için devre aşağıda gösterilmiştir ve ayrıca bu devre hakkında daha fazla bilgi edinmek için bağlantıyı kontrol edebilir, ayrıca diğer ses amplifikatör devrelerini de kontrol edebilirsiniz.
Arduino FM Alıcı Devre Şeması
FM bandını ayarlamak ve ses amplifikatörünün sesini kontrol etmek için iki potansiyometre kullandık. Eğer 1 ila 8 bağlanır pot değişebilir ya olabilir seviyesini değiştirmek için inci LM386 ya da LM386 pimi 3 bağlanır, kap, pim. Aşağıdaki resim, Arduino FM Radyosu için tam devre şemasını göstermektedir.
Amplifikatörde küçük değişiklikler yaptım. Amplifikatörde iki potansiyometre kullanmak yerine sadece bir tane kullandım. Kazancı değiştirmek için kullanılan potu bir dirençle değiştirdim. Şimdi projemizde biri ayarlanacak, diğeri ses düzeyini değiştirecek iki potansiyometre var. Kanalı ayarlamak için kullanılan potansiyometre Arduino nano ile bağlantılıdır. Potun merkez pini Arduino nano'nun A0 pinine bağlanır ve kalan iki pimden biri 5V'ye ve diğeri GND'ye bağlanır. Telsizin sesini kontrol etmek için başka bir pot kullanılır ve yukarıdaki şekil 2'de gösterildiği gibi bağlanır.
Arduino'nun A4 ve A5 pinleri, RDA5807M'nin SDA ve SCL pinlerine bağlıdır. Alıcı modülün yalnızca 3,3V ile çalıştığını unutmayın. Bu nedenle, Nano'nun 3v3 pinini alıcı modülün VCC pinine bağlayın. Bağlantılar yapıldıktan sonra kurulumum şöyle görünüyordu
Arduino FM Radyo Kodu Açıklaması
Kod, alıcı modülünü başlatacak ve ardından kanalı önceden ayarlanmış frekansla ayarlayacaktır. Nano tarafından A0 pininde okunan değer değiştiğinde (pot değiştirilerek) frekans değişir ve bu da kanalı değiştirir. Tam kod sayfanın sonunda verilmiştir.
Programımıza RDA5807 ile iletişim için gerekli tel kitaplığını ekleyerek başlıyoruz. Daha sonra "kanal" değişkeninde kanalın değerini belirleriz. Radyo her başladığında bu kanala otomatik olarak ayarlanacaktır.
#Dahil etmek
Ardından, ilk yapılandırmamızı ayarlamak için RDA5807 IC'mizdeki her kayda bayt yükleyeceğiz. Bu noktada alıcıyı sıfırlıyoruz.
uint8_t boot_config = {/ * kayıt 0x02 * / 0b11000001, 0b00000011, / * kayıt 0x03 * / 0b00000000, 0b00000000, / * kayıt 0x04 * / 0b00001010, 0b00000000, / * kayıt 0x05 * / 0b10001000, 0b000011, 0b000011 0b00000000, 0b00000000, / * kayıt 0x07 * / 0b01000010, 0b00000010,};
Cihazı sıfırladıktan sonra cihazı ayarlayabiliriz. Kanalı ayarlamak için sadece ilk 4 baytı programlamamız gerekiyor. Kodun bu kısmı kanalı istenen frekansa değiştirecektir. İlk önce I2C'de iletime başlıyoruz, verileri yazıyoruz veya okuyoruz ve sonra iletimi sonlandırıyoruz. Bu alıcı IC'de, veri sayfası I2C arayüzünün sabit bir başlangıç kaydına sahip olduğunu, yani bir yazma işlemi için 0x02h ve bir okuma işlemi için 0x0Ah olduğu için adresi belirtmemize gerek yoktur.
uint8_t tune_config = {/ * kayıt 0x02 * / 0b11000000, 0b00000001, / * kayıt 0x03 * / (kanal >> 2), ((kanal & 0b11) << 6) - 0b00010000};
Kurulumda, önyükleme yapılandırmasını başlatıyoruz (sıfırlama) ve ardından ayar yapılandırma baytlarını RDA5807M'ye yazarak bir kanala ayarlıyoruz.
geçersiz kurulum () {Serial.begin (9600); pinMode (A0, INPUT); / * RDA5807M FM Ayarlayıcıya Bağlan: * / 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 (); }
Potu bir frekansa ayarlamak için kullandığımda bir sorunla karşılaşmıştım. A0 pini tarafından okunan değerler sabit değildir. İstenilen değerde bir gürültü var. A0 ile GND arasına bağlı 0.1uF seramik kondansatör kullandım, ancak gürültü en aza indirilmiş olsa da istenen seviyeye kadar çıkmadı. Bu yüzden kodda bazı değişiklikler yapmam gerekti. İlk başta gürültüden etkilenen okumaları not ettim. Gürültünün maksimum değerinin 10 olduğunu öğrendim. Bu yüzden programı öyle yazdım ki, yeni değeri ancak aynı pinin eski değeri ile yeni değeri arasındaki fark 10'dan büyükse dikkate alacak. ve ardından istenen kanala geçer.
geçersiz döngü () {int kanal1 = 187, ortalama = 0, yeniA; statik int oldA = 0; int sonuç = 0; newA = analogRead (A0); eğer ((yeniA - eskiA)> 10 - (eskiA - yeniA)> 10) {Serial.println (yeniA); eğer (yeniA! = eskiA) {kanal = kanal1 + (yeniA / 10); myChangeChannel (kanal); eskiA = yeniA; }}} // döngü sonu
Bu işlev, tune_config dizisinin baytlarını ayarlamak için kullanılır ve ardından verileri I2C protokolünü kullanarak RDA5807M IC'ye iletir.
void myChangeChannel (int kanal) {/ * başka hiçbir şey döndürülmezse void int * / tune_config = (kanal >> 2); tune_config = ((kanal & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Arduino FM Radyosunun Çalışması
Modüle güç verildiğinde, kodumuz RDA5807-M IC'yi sıfırlar ve onu istenen kullanıcının bir kanalına ayarlar (Not: bu frekans, frekansın artırılacağı temel frekans olarak alınır). Potansiyometreyi (A0'a bağlı) değiştirerek, Arduino Nano tarafından okunan değerler değişir. Yeni ve eski değer arasındaki fark 10'dan büyükse, kodumuz bu yeni değeri dikkate alacaktır. Kanal, eski değerden yeni değerdeki değişikliğe bağlı olarak değiştirilir. Hacmin artırılması veya azaltılması, pin 3 ile GND arasına bağlanan potansiyometreye bağlıdır.
Yapım ve kodlamanın sonunda kendi FM Radyonuza sahip olacaksınız. FM Radyonun eksiksiz çalışması, bu sayfanın alt kısmında bağlantısı verilen videoda bulunabilir. Umarım projeden zevk almışsınızdır ve faydalı bir şeyler öğrenmişsinizdir. Bu projenin çalışmasıyla ilgili herhangi bir sorunuz varsa, bunları yorum bölümünde bırakabilir veya diğer teknik yardım için forumlarımızı kullanabilirsiniz.