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 🙂
Türkçe kaynaklarda kolay bulunamayacak bir içerik olmuş.
Bizde amatörler aç kapa komutu için bile 2.4ghz modüller tercih ediyor. Sonra da neden çekmiyor deniyor. Halbuki 1ghz altı modüller çekim mesafesi olarak çok daha iyi.
Ben de üç farklı çift(nrf905, cc1101, si4432) aldım hepsini deneyip projede birini kullanacağım artık.
Teşekkürler. CC1101 modülünü kesinlikle tavsiye ederim.
Hocam bir den fazla verici ve tek bir alıcının bulunduğu bir rf sistemi inşa etmek istiyorum. cc1101 ile mümkün müdür bu? Aynı anda bir den fazla vericiden gelen datayı algılayabilir mi tek bir verici?
Bildiğim kadarıyla mümkün değil. Özellikle aynı anda veri gönderiliyorsa ve aynı frekans üzerinden gönderiliyorsa, veri üst üste binecektir. Yani overlapping denen durum yaşanacaktır.
Ya veriler farklı zamanlara bölünmeli (time division) ya da farkli frekanslara bölünmeli (frequency division)
Projenizin genel hatlarını yazarsanız belki başka bir senaryo üretilebilir.
Hey, how can i adapt your code to transmit a 125kHz (OOK) signal using the cc1101 tranciever?
Thanks.
İyi günler Tamer Bey. Bir projemde CC1101 Modülünü kullanmak istiyorum verdğiniz örnekteki arduino örneğini de çalıştırdım. 2 adet arduino uno ve 2 adet CC1101 modulünü kullanarak birinden diğerine veri gönderip Serial port ekranında gördüm. Benim şu olacaktı aynı alan da bu bahsettiğim gibi birden cok veri devre ile veri alıp göndermem gerekecek. Kendi arasında Veri alıp veren CC1101 modüllerine nasıl şifreleme sağlarım