İçindekiler:
- Adım 1: Sensör Modülleri
- 2. Adım: Donanım
- 3. Adım: Yazılım
- 4. Adım: Veri Kaydı
- Adım 5: Örnek Alıcı Yazılımı
Video: Arduino RF Sensör Dekoderi: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Önceki evim, kapı sensörleri, hareket sensörü ve kontrol paneli olan önceden kurulmuş bir güvenlik sistemiyle geldi. Her şey bir dolaptaki büyük bir elektronik kutuya bağlıydı ve bir alarm durumunda otomatik olarak arama yapmak için sabit hatlı bir telefonun kablolanması için talimatlar vardı. Onunla oynamayı denediğimde, kapı sensörlerinden birinin eksik takıldığını ve diğerinin yanlış hizalama nedeniyle kesintili olduğunu keşfettim. Güvenlik şirketinin kartvizitinde lanse edilen profesyonel kurulum için çok fazla. O zamanki çözümüm birkaç internet güvenlik kamerası ve ucuz bir kablosuz güvenlik alarmı almaktı.
Bugüne hızlı ileri sar ve kablosuz alarm bodrumumdaki bir kutuda duruyor. Ucuz bir RF alıcısı edindikten sonra, sahip olduğum çeşitli alarm sensörleri ve uzaktan kumandalar tarafından iletilen mesajların kodunu çözüp çözemeyeceğimi görmeye karar verdim. Hepsi ucuz alarm kutusuyla çalıştığından, hepsinin aynı mesaj formatını farklı bir kimlikle kullanması gerektiğini düşündüm. Kısa sürede mesajların sadece genel yapısında benzer olduklarını öğrendim. Böylece proje hızla önemsizden çok ilginç hale geldi.
Adım 1: Sensör Modülleri
Yukarıdaki resimlerde de görebileceğiniz gibi vericiler, kapı açık sensörleri, hareket dedektörleri, devreye alma uzaktan kumandaları ve alarm kutusunu programlamak için kullanılan bir kablosuz tuş takımı içerir. Görünüşe göre, bu cihazlardan hiçbiri aynı senkronizasyon uzunluğunu veya bit süresini kullanmaz. Mesaj uzunluğu dışındaki tek ortak nokta, bitlerin temel formatıdır. Her bit, sıfır ve bir arasındaki fark yüksek/düşük bölümlerin görev döngüsü olacak şekilde sabit bir zaman periyodu alır.
Yukarıda gösterilen güzel dalga formu, ilk aldığım şey DEĞİLDİR. 433 MHz frekans bandında çok fazla trafik olduğundan, kapsamı tek bir tetikleme yapacak şekilde ayarlamadan hemen önce sensörü etkinleştirdiğimden emin olmam gerekiyordu. Neyse ki sensörler, etkinleştirildiğinde veri mesajının birkaç kopyasını çıkarır ve uzaktan kumandalar ve tuş takımı, bir tuşa basıldığı sürece mesaj göndermeye devam eder. Kapsamı kullanarak, her bir öğe için senkronizasyon uzunluğunu ve veri biti sürelerini belirleyebildim. Daha önce bahsedildiği gibi, senkronizasyon zamanları farklıdır ve bit zamanları farklıdır ancak mesaj formatlarının tümü, 24 veri biti ve bir durdurma biti tarafından takip edilen düşük seviyeli bir senkronizasyona sahiptir. Bu, her bir cihaz için tüm farklı ayrıntıları sabit kodlamak zorunda kalmadan yazılımda genel bir kod çözücü oluşturabilmem için yeterliydi.
2. Adım: Donanım
Başlangıçta bir PIC mikrodenetleyici ve montaj dili kullanarak bir sensör kod çözücüsü oluşturdum. Son zamanlarda Arduino varyantlarıyla oynuyordum, bu yüzden onu çoğaltabilir miyim diye düşündüm. Basit şema yukarıda gösterilmiştir ve ayrıca benim prototipimin bir resmi de vardır. Tek yaptığım Arduino Nano'dan RF alıcı kartına gitmek için üç ortak atlama kablosu kullanmaktı. Tüm gereken güç ve tek bir veri hattıdır.
"3'ü 1 Arada Zaman ve Hava Durumu Ekranı"ndaki Talimatımı okursanız, ortak bir RXB6, 433-MHz alıcı kullandığımı göreceksiniz. Bu proje için gereken kısa mesafelerde çalışacak gerçekten ucuz alıcıları elde edebilirsiniz, ancak yine de süper heterodin bir alıcı kullanmanızı tavsiye ederim.
3. Adım: Yazılım
Yazılım, alınan bitleri görüntülenebilir ASCII karakterlerine dönüştürür. Senkronizasyon uzunluğunun değerini ve 1 ve 0 bitlerinin uzunluklarını verir. Senkron uzunluklarını ve bit biçimlerini zaten bildiğim için yazılımı özellikle onlar için yazabilirdim. Bunun yerine, senkronizasyon uzunluklarını sıralamak ve veri bitlerini otomatik olarak bulmak için yazıp yazamayacağımı görmeye karar verdim. Bu, bir süre sonra diğer biçimleri algılamaya çalışmak istemem durumunda değiştirmeyi kolaylaştırmalı. Yazılımın bir mesajın ilk bitinin 1 mi yoksa 0 mı olduğunu bilmediğine dikkat etmek önemlidir. Bunun 1 olduğunu varsayar, ancak sıfır olması gerektiğini anlarsa, ters çevirir. seri bağlantı noktasından göndermeden önce tamamlanan mesajdaki bitler.
Senkronizasyon darbesinin süreleri ve veri bitleri, bir kesme işleyicisini tetiklemek için INT0 harici kesme girişi kullanılarak belirlenir. INT0 yükselen, düşen veya her iki kenarda veya sabit bir düşük seviyede tetiklenebilir. Yazılım her iki kenarda da kesintiye uğrar ve darbenin düşük kaldığı süreyi ölçer. Bu, işleri basitleştirir, çünkü mesaj başlatma/senkronizasyon düşük seviyeli bir darbedir ve bitler, düşük seviye zamanlarına göre belirlenebilir.
Kesme işleyicisi önce yakalanan sayının bir başlatma/senkronizasyon darbesi olacak kadar uzun olup olmadığını belirler. Sahip olduğum çeşitli cihazlar 4, 9, 10 ve 14 milisaniyelik senkronizasyon darbeleri kullanıyor. Min/maks izin verilen eşitleme değerleri için tanımlama ifadeleri yazılımda ön plandadır ve şu anda 3 ve 16 milisaniye olarak ayarlanmıştır. Bit süreleri de sensörler arasında farklılık gösterir, bu nedenle bitlerin kodunu çözme algoritmasının bunu hesaba katması gerekir. İlk bitin bit zamanı, ilk bitten önemli bir farkı olan bir sonraki bitin zamanı gibi kaydedilir. Sonraki bit sürelerinin doğrudan karşılaştırılması mümkün değildir, bu nedenle bir "geçişleme faktörü" tanımlaması ("Varyasyon") kullanılır. Bit kod çözme, ilk veri bitinin her zaman bir mantık 1 olarak kaydedildiği varsayılarak başlar. Bu değer kaydedilir ve ardından sonraki bitleri test etmek için kullanılır. Bir sonraki veri biti sayısı kaydedilen değerin varyans penceresi içindeyse, o zaman aynı zamanda lojik 1 olarak kaydedilir. Kaydedilen değerin varyans penceresinin dışındaysa, lojik 0 olarak kaydedilir. bit zamanı ilk bit zamanından daha kısaysa, yazılıma baytların görüntülenmeden önce ters çevrilmesi gerektiğini söylemek için bir bayrak ayarlanır. Bu algoritmanın başarısız olduğu tek durum, bir mesajdaki bitlerin hepsinin 0 olması durumudur. Bu tür bir mesaj anlamsız olduğu için bu sınırlamayı kabul edebiliriz.
Tüm ilgilendiğim sensörlerin mesaj uzunluğu 24 veri biti ama yazılım bu uzunlukla sınırlı değil. Yedi bayta kadar bir arabellek vardır (daha fazlası eklenebilir) ve bayt cinsinden minimum ve maksimum mesaj uzunluğunu tanımlar. Yazılım, bitleri toplamak, bunları baytlara dönüştürmek, geçici olarak depolamak ve ardından seri bağlantı noktası aracılığıyla ASCII formatında çıktı vermek üzere ayarlanmıştır. Mesajın çıkışını tetikleyen olay, yeni bir başlatma/senkronizasyon darbesinin alınmasıdır.
4. Adım: Veri Kaydı
Yazılım, dönüştürülen verileri ASCII karakterleri olarak Arduino'nun seri (TX) çıkışı üzerinden verecek şekilde ayarlanmıştır. PIC versiyonunu yaptığımda, verileri görüntülemek için PC'deki bir terminal programına arayüz oluşturmam gerekiyordu. Arduino IDE'nin bir avantajı, yerleşik bir Seri Monitör işlevine sahip olmasıdır. Seri port hızını 115.2k olarak ayarladım ve ardından Seri Monitör penceresini aynı hıza ayarladım. Buradaki ekran görüntüsü, sahip olduğum çeşitli sensörlerden gelen çıktılara sahip tipik bir ekranı gösteriyor. Gördüğünüz gibi, veriler bazen mükemmel değil ancak her sensörün gerçek değerinin ne olması gerektiğini kolayca belirleyebilirsiniz.
Adım 5: Örnek Alıcı Yazılımı
Uygulamanız için belirli bir kod setini almak için toplanan bilgileri nasıl kullanabileceğinizi gösteren örnek bir yazılım listesi ekledim. Bu örnek, Etekcity uzak çıkışlarımdan birini taklit edecek şekilde ayarlanmıştır. Bir komut Nano'da yerleşik LED'i (D13) açar ve diğer komut LED'i kapatır. Arduino'nuzda yerleşik bir LED yoksa, direnç ve LED'i şemada gösterildiği gibi ekleyin. Gerçek bir uygulamada bu işlev, bir elektrik prizinin gücünü açar/kapatır (bir röle veya triyak kullanarak). Senkronizasyon süreleri, bit süreleri ve beklenen veri baytlarının tümü, değişiklik kolaylığı için önceden tanımlanmıştır. Özel uygulamanız için bazı şeyleri açmak/kapatmak vb. için kalan veri hatlarından herhangi birini kullanabilirsiniz. Sadece ilgili komut kodu tanımlarını ekleyin ve LED açma/kapama mantığını ihtiyaçlarınıza göre “loop”ta değiştirin.
Önerilen:
Arduino Araba Geri Geri Park Uyarı Sistemi - Adım Adım: 4 Adım
Arduino Araba Geri Geri Park Uyarı Sistemi | Adım Adım: Bu projede Arduino UNO ve HC-SR04 Ultrasonik Sensör kullanarak basit bir Arduino Araba Geri Park Sensörü Devresi tasarlayacağım. Bu Arduino tabanlı Araba Ters uyarı sistemi, Otonom Navigasyon, Robot Mesafesi ve diğer menzil r
İkili Ağaç Mors Dekoderi: 7 Adım (Resimlerle)
İkili Ağaç Mors Kod Çözücü: a.articles {yazı tipi boyutu: %110,0; yazı tipi ağırlığı: kalın; yazı tipi stili: italik; metin-dekorasyon: yok; background-color: red;} a.articles:hover {background-color: black;} Bu talimat, bir Arduino Uno R3.T kullanarak Mors Kodunun nasıl çözüleceğini açıklar
Adım Adım Arduino Uno ile Akustik Kaldırma (8 adım): 8 Adım
Arduino Uno ile Akustik Kaldırma Adım Adım (8 adım): ultrasonik ses dönüştürücüler L298N erkek dc pinli Dc dişi adaptör güç kaynağı Arduino UNOBreadboardBu nasıl çalışır: İlk olarak, Arduino Uno'ya kod yüklersiniz (dijital ile donatılmış bir mikrodenetleyicidir) ve kodu dönüştürmek için analog bağlantı noktaları (C++)
Kütüphanesiz RC5 Uzaktan Kontrol Protokolü Dekoderi: 4 Adım
Kütüphanesiz RC5 Uzaktan Kontrol Protokolü Dekoderi: rc5'in kodunu çözmeden önce, rc5 komutunun ne olduğunu ve yapısının ne olduğunu tartışıyoruz. yani temelde televizyonlarda, cd çalarlarda, d2h'de, ev sinema sistemlerinde vb. kullanılan uzaktan kumandalarda kullanılan rc5 komutu
Basys 3 Mors Dekoderi: 11 Adım
Basys 3 Morse Decoder: Bu bir üniversite sınıfı için bir projedir. Bu proje, Vivado adlı bir programda VHDL'de yazılmıştır. Basys 3 kartını kullanarak bir Mors Kod Çözücü uygulamak için gerekli tüm modülleri oluşturma görevleri. Tahta, bir sw'den mors kodunu almak için kullanılır