RF işaret çözümleme

RF işaret çözümleme

Giriş

Merhaba bu derste size 433 MHz ASK türünde oluşturulmuş işaretlerin nasıl çözüldüğünü anlatmaya çalışacağım.

Bu bilgileri kullanarak ilginç uygulamalar yapabilirsiniz. Örneğin kablosuz prizleri örüt ağdan kontrol edebilirsiniz ya da kablosuz iklim istasyonlarının verilerini okuyabilirsiniz.

İz Süren Devre

Burada 434 MHz RF alıcı kullanarak iz süreceğiz. İzi kaydetmek için basitçe ses kartını ve ses kayıt yazılımını kullanabiliriz. Ses kartı iz üzerinden yüksek bir hızda (örneğin 48.000 Hz) örnek alabilir ve bu sinyali bir dalga gözlere (“osiloskop”) göre daha uzun süre kaydedebilir.

Bu nedenle dalga gözler yerine ses kartını tercih edebiliriz.

RF alıcı

Burada dikkat ederseniz alıcının iki numaralı ucuna bağlı dirençler bir gerilim bölücü oluşturuyor. RF alıcının veri çıkışında genellikle 0-5V arası bir gerilim oluşuyor, gerilim bölücüyü kullanarak bu işareti yaklaşık 1V seviyelerine indiriyoruz. Ses kablosunda 2 tane kanal, 2 tane toprak var. Devre şemasında yeşil ve maviyle gösterilen bu kanalları birleştirdik. Daha sonra bu işareti ses kartının genellikle maviyle gösterilen "Line In" hat girişi ucuna veriyoruz.

İşaret kabloları

Ses kablosunu kullanmadan önce üzerindeki yalıtım malzemesini yakarak kabloların ucunu açabilirsiniz. Kablonun toprak uçlarını da birleştiriyoruz.

Verici devremiz oldukça basit. Sadece vericinin veri kapısını Arduino'nun 10 numaralı ikili ucuna bağlıyoruz.

Programı yazalım

Programımız RC Switch kütüphanesini kullanıyor. RC Switch kütüphanesini buradan indirip kurabilirsiniz.

Verici programımız şu şekilde:

#include <RCSwitch.h>

RCSwitch verici = RCSwitch();

void setup()
{
    verici.enableTransmit(10);  // 10 numaralı dijital kapıyı kullanıyoruz
}

void loop()
{
    verici.send("010101010101010101010101");
    delay(1000);
}

Alıcıya yükleyeceğimiz program:

#include <RCSwitch.h>

RCSwitch alici = RCSwitch();

void setup()
{
    Serial.begin(9600);
    alici.enableReceive(0);  // İki numaralı dijital kapı oluyor
}

void loop()
{
    if (alici.available())
    {

        int okunanDeger = alici.getReceivedValue();

        if (okunanDeger == 0)
        {
            Serial.print("Bilinmeyen kodlama");
        }
        else
        {
            Serial.print("Okunan değer : ");
            Serial.print( alici.getReceivedValue() );
            Serial.print(" ");
            Serial.print( alici.getReceivedBitlength() );
            Serial.print("bit ");
            Serial.print("İletişim kuralı : ");
            Serial.println( alici.getReceivedProtocol() );
        }

        alici.resetAvailable();
    }
}

Alıcı ve verici arasındaki iletişimin sorunsuz olduğunu Linux'ta

$ screen /dev/ttyACM0 9600

komutuyla görebilirsiniz. Ya da Arduino geliştirme ortamında Araçlar→Seri Port Ekranını kullanabilirsiniz.

Okunan değer : 5592405 24bit İletişim kuralı : 1

Her şey sorunsuz çalışıyorsa yukarıdaki gibi ya da benzer bir çıktı görüyor olmalısınız.

RF işaretlerini kaydetme

Artık alıcıyı bilgisayarın “Line In” hat girişi ucuna takabiliriz. Ses ayarlarında giriş sesinin açık olup olmadığını kontrol edin.

Ses ayarları

RF işaretlerini kaydetmek için Linux altında açık kaynak kodlu Audacity yazılımını kullanabilirsiniz. Aşağıda bir ekran görüntüsü bulabilirsiniz.

Audacity

Şimdi resimdeki gibi biraz aşağı çekelim ve yakınlaşalım.

Audacity

Oynat tuşuna basarak RF işaretlerini dinleyebilirsiniz. Görsel olarak da verinin nerede olduğunu aşağıda görebilirsiniz. Yukarıdaki gibi ilk önce veri kısmını dinleyin sonra gürültüyü dinleyin. Sanırım siz de duyarak verinin nerede olduğunu artık anlamışsınızdır ;-)

Bu kısmı içeriği sığdır düğmesine tıklayarak biraz daha büyütelim.

Audacity

Artık radyo elektroniğinde 0 ve 1'leri de öğrenmiş oldunuz.

Audacity

RF işaretlerinin süresini ölçmek istersek nasıl bir yöntem kullanabiliriz?

Audacity programında işaretlere iyice yaklaştığınızda örnek noktaları görebilirsiniz. Örnekleme hızının 48000 Hz olduğunu biliyoruz.

Hertz bir işin sıklığını belirtiyor. Örneğin 1 Hz derken bir işin saniyede 1 kere yapıldığını belirtiyoruz. Audacity programı 1 saniyede 48.000 örnek alıyorsa bir örnek için geçen süre 1/48.000 olacaktır.

Audacity programı seçilen bir bölgede kaç örnek olduğunu gösterebiliyor. Baktığımızda uzun açık işaretinde 50 tane örnek varmış. Bir örnek için 1/48.000 saniye ise, 50 örnek için geçen süre 50/48.000 saniye oluyor. Bu da yaklaşık olarak 1040 mikro saniyeye tekabül ediyor. Benzer şekilde kısa açık için geçen süreyi ise 333 us olarak hesapladım.

Bundan sonraki aşamada kaydettiğiniz bu işaretleri Arduino ile oluşturmayı deneyebilirsiniz. En başta bahsettiğimiz gibi kablosuz güç prizlerini örüt ağdan kontrol edebilirsiniz. Ya da kablosuz iklim istasyonlarının verilerine erişebilirsiniz.

Kablosuz prizler üzerinde tersine mühendislik

Bu sefer uzaktan kumandalı prizlerin açma kapama kodlarını üretmeye çalışacağız.

Kullandığımız kablosuz prizin bilgileri şu şekildedir.

Perium

Power source : Emitter 12V/DC

Receiver : 220 - 240 V AC

Power frequency : 50 Hz

Frequency : 433 Mhz

Rated load : 1200W max

Alıcı yazılımda çok ufak değişiklikler yaptık.

#include <RCSwitch.h>

RCSwitch alici = RCSwitch();

void setup()
{
    Serial.begin(9600);
    alici.enableReceive(0);  // INT0 yani 2 numaralı uca bağlıdır
}

void loop()
{
    if (alici.available())
    {

        int okunanDeger = alici.getReceivedValue();

        if (okunanDeger == 0)
        {
            Serial.print("Bilinmeyen kodlama");
        }
        else
        {
            Serial.print("Okunan değer : ");
            Serial.println( alici.getReceivedValue() );
            Serial.print("İkili değer : ");
            Serial.println( alici.getReceivedValue(), BIN);
            Serial.print(" ");
            Serial.print( alici.getReceivedBitlength() );
            Serial.println("bit ");
            Serial.print("İletişim kuralı : ");
            Serial.println( alici.getReceivedProtocol() );
        }

        alici.resetAvailable();
    }
}

Alıcıyı çalıştırıp uzaktan kumandalı prizin kumandasının 1 numaralı düğmesine basalım.

Bastığımızda şu çıktıyı aldık.

Okunan değer : 5592512
İkili değer : 10101010101010111000000
24bit 
İletişim kuralı : 1

Burada dikkat edilmesi gereken nokta ikili değerin önünde bir sıfır olacak.

Yani ikili değer tam olarak 0101 0101 0101 0101 1100 0000 oluyor. Burada sıfır ve birlerin başta tekrar edildiğine dikkat ediniz.

Şimdi bu değeri Arduino ile oluşturup gönderelim.

#include <RCSwitch.h>

RCSwitch verici = RCSwitch();

void setup()
{
    verici.enableTransmit(12);  // 12 numaralı dijital kapıyı kullanıyoruz
}

void loop()
{
    verici.send("010101010101010111000000");
    delay(5000);
}

Eğer vericiyi çalıştırıp uzaktan kumandalı prizi fişe takarsanız her 5 saniyede bir prizin açılıp kapandığını görebilirsiniz.

Hatta diğer odaki radyoyu bile çalıştırmıştı.

Kablosuz prizin anahtar kodları

1 Numaralı prizi aç kapa

Ondalık : 5592512

İkilik : 0101 0101 0101 0101 1100 0000

2 Numaralı prizi aç kapa

Ondalık : 5592368

İkilik : 0101 0101 0101 0101 0011 0000

Birlerin sağa doğru kaydığına dikkat ediniz.

3 Numaralı prizi aç kapa

Ondalık : 5592323

İkilik : 0101 0101 0101 0101 0000 0011

Tüm prizleri kapat

Ondalık : 5592332

İkilik : 0101 0101 0101 0101 0000 1100

Malzeme listesi

  • Arduino Uno R3
  • USB programlama kablosu A - B
  • Yarım boy deneme kartı
  • 10 kΩ Direnç
  • 39 kΩ Direnç
  • Ses kablosu (TRS)
  • 434 Mhz verici
  • 434 Mhz alıcı
  • Bağlantı kabloları

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.