RF Giriş, CC1101 + Arduino ve OOK

Kendime nasıl bir sıkıntı yaratırım, beynimi nasıl patlatabilirim diye düşünürken, aklıma uzun bir süre önce aldığım ve kenarda yatan CC1101 modülüyle oynamak geldi.

İşin zorluklarını özetlemek gerekirse: kısıtlı C bilgim, mikroişlemci seviyesinde iletişim, OOK modülasyonunun CC1101 ile neredeyse hiç kullanılmaması diyebilirim.

CC1101, Texas Instruments tarafından üretilen, oldukça kabul görmüş ve çok gelişmiş özelliklere sahip bir Sub-1 GHz, yani 1 GHz altı frekanslarda çalışan bir RF (radyofrekans) modülüdür.

Buradan satın alabileceğiniz modül, 315/433/868/915MHZ frekanslarında çalışabiliyor, yani ISM bandını kapsıyor.

ISM = industrial, scientific, medical.

ISM bandında çalışan uygulamalara örnek verecek olursak: otopark kapıları, spor/kalp monitörleri, kablosuz oyuncaklar ve benzerleri şeklinde liste uzar gider. Özetle, kullanımı için izin gerektirmeyen bir frekans aralığı diyebiliriz. Avrupa, Amerika ve tüm dünyada kullanılan ortak bir banddır ve ülkeden ülkeye farklı frekanslar kullanılır.

Örneğin, Amerika’da 315 MHz çok yaygın kullanılır, Avrupa’da daha çok 433 ve 868 MHz tercih edilir.

Bizim ülkemizin -tabi ki- bu konuda bir standartı olmamakla birlikte, genelde 433 MHz kullanılır. Bu genellemeyi otopark bariyer sistemlerine dayanarak yapıyorum tabi. (her şey bitti de ISM mi kaldı?)

Aslında, tüm bu bandlar, frekanslar ve diğer bilgiler çok daha uzun konular ve daha sonra bunlara da yer vermeye çalışacağım.

Peki bu modül ile neler yapabiliriz?

2 ya da daha fazla Arduino arasında iletişim kurabiliriz, otopark/garaj kapımızı açıp kapatabiliriz, ISM bandında yayın yapan cihazlarımızı dinleyebiliriz, kablosuz kapı zilimizi çaldırabiliriz 🙂

Arduinolar arasında iletişim sağlamak için bir çok library var, bunları araştırarak kolaylıkla bulabilirsiniz. Modülden 1 tane olduğu için, Arduino konuşturma şansım olmadı ama şöyle bir mesafe testi videosu var. Mesh ya da başka uygulamalar düşünüyorsanız, CC1101 gayet uygun ve düşük maliyetli bir çözüm olabilir.

Gelelim benim olayıma 🙂

Eski model bir arabam olduğu için, daha doğrusu donanım paketi de düşük olduğu için uzaktan kumanda, merkezi kilit gibi bir olay yoktu arabada.

Araba işlerinden iyi anlayan bir arkadaşımın yardımıyla, oto sanayide bir yere bu düzeneği taktırmıştık.

Sonrasında tabi ki bitmek bilmeyen merakla, sistemi ve kumandayı söküp detaylıca incelemeye karar vermiştim.

Çok basitçe özetlemek gerekirse, belli bir frekans üzerinden 8 haneli bir şifrenin aktarımıyla araba açıp kapanıyordu.

Kilitle komutu için: 00011000

Kilidi aç komutu için: 00010001

Kumanda (RF vericisi) her 2 hareket için 2 ayrı SABİT* şifre gönderiyordu.

*Sabit kısmına dikkat edelim, çünkü yeni model arabalarda, kendi kumandası olan arabalarda SABİT (fixed) bir kod/şifre yok. Her tuşa basıldığında değişen bir şifreleme tekniği kullanılıyor. Buna da rolling code diyoruz.

Doğru şifreler arabadaki RF alıcısına ulaştığında, kilit mandalı açıp kapanıyordu.

Şifreler (veriler) belli olduğuna göre ve frekans belli olduğuna göre, aynı iletişimi tekrarlarsam arabayı açıp kapatabilecektim.

Sonrasında Raspberry ile bunu gerçekleştirdim. (baya da kolay oldu :p)

Şimdi yine hepsi için ayrı ve uzun konular diyeceğm ama anahtar kelimeleri vererek, neyi araştırmanız gerektiğini söyleyebilirim: sdr, rtl-sdr, rtl_433, ook, on-off keying, ask, fixed code, rolling code

Ayrıca bir önceki yazıda çok geniş bir kütüphane var. Onları da incelerseniz, olayın içine tepeden düşmüş olursunuz 🙂 –> 433 Resources

İletişimi tekrarlamak için gerekenler: raspberry ya da arduino + 433 modülü + rcswitch kütüphanesi

İletişimi dinlemek için de aynı donanımı kullanabilirsiniz. (kumandanızın ne gönderdiğini görmek için)

Belirttiğim kaynakları okuyacağınızı düşünüyorum.

Her neyse, araba açıp kapatma işini CC1101 ile yapmaya karar verdim ve Arduino ile çalışacak hem de OOK modülasyonunu destekleyecek bir kütüphane oluşturmaya çalıştım.

PanStamp kütüphanesini alarak, chip registerlarıyla oynaya oynaya ve baya da zorlana zorlana sonunda çözebildim.

Bu vesileyle de ilk github repomu yaratmış oldum.

Kodlara buradan ulaşabilirsiniz.

Gerçekten beyin yakan bir deneyimdi, fakat mikroişlemci (bildiğin küçücük çip) seviyesinde iletişimi anlayabilmek için çok öğretici oldu.

Bu yazının devamı olarak ve teknik detaylara çok daha fazla değineceğim bir yazı hazırlayacağım.

Sorularınızı yorum bölümünden bana gönderebilirsiniz.

Bu arada, gerçekten ilginizi çekebilecek OpenSesame projesine bakmanızı şiddetle tavsiye ediyorum 🙂