Geri besleme 433 MHz devreli radyo kanalı. RF modüllerini kullanma. RF modüllerini test etme

Harici

Zanaatlarımla ilgili olarak 433 MHz aralığında çalışan alıcı ve vericilerin kullanımı hakkında daha önce yazmıştım. Bu sefer farklı varyasyonlarını karşılaştırıp aralarında bir fark olup olmadığını ve hangilerinin tercih edildiğini anlamak istiyorum. Kesimin altında arduino'ya dayalı bir test tezgahının yapısı, küçük bir kod, aslında testler ve sonuçlar var. Elektronik ev yapımı ürünleri sevenleri kediye davet ediyorum.

Bu aralıkta farklı alıcılarım ve vericilerim var, bu yüzden bu cihazları özetlemeye ve sınıflandırmaya karar verdim. Üstelik, özellikle de aracın sabit bir konumda olmaması gerekiyorsa, radyo kanalı olmayan cihazların tasarlanması oldukça zordur. Birisi artık çok sayıda wi-fi çözümü olduğunu ve bunları kullanmaya değer olduğunu iddia edebilir, ancak bunların kullanımının her yerde tavsiye edilmediğini ve ayrıca bazen kendinizi ve komşularınızı rahatsız ederek rahatsız etmek istemediğinizi belirtmek isterim. çok değerli bir frekans kaynağı.

Genel olarak hepsi şarkı sözleri, ayrıntılara geçelim, aşağıdaki cihazlar karşılaştırılabilir:
En yaygın ve en ucuz verici ve alıcı seti:


Satın alabilirsiniz, örneğin vericiyle birlikte alıcının maliyeti 0,65 dolar. Önceki incelemelerimde kullanılan şey buydu.

Aşağıdaki kit daha kaliteli olarak konumlandırılmıştır:


Bu seriye yönelik antenler ve yaylarla birlikte 2,48 dolara satılır.

Bu incelemenin asıl konusu alıcı olarak ayrı olarak satılmaktadır:

Bu etkinliğe katılan aşağıdaki cihaz bir vericidir:


Tam olarak nereden aldığımı hatırlamıyorum ama o kadar da önemli değil.

Tüm katılımcılar için eşit koşullar sağlamak amacıyla aynı olanları spiral şeklinde lehimliyoruz:


Ayrıca devre tahtasına yerleştirmek için pimleri lehimledim.

Deneyler için iki arduino hata ayıklama panosuna (Nano'yu aldım), iki devre tahtasına, kablolara, bir LED'e ve bir sınırlayıcı dirence ihtiyacınız olacak. Bunu şu şekilde anladım:

Testler için kütüphaneyi kullanmaya karar verdim, kurulu arduino IDE'nin "kütüphaneler" dizinine açılması gerekiyor. Sabit olacak basit bir verici kodu yazalım:
#katmak RCSwitch mySwitch = RCSwitch(); void setup() ( Serial.begin(9600); mySwitch.enableTransmit(10); ) void loop() ( mySwitch.send(5393, 24); gecikme(5000); )
Bu vericilerin pinini arduino’nun 10 numaralı çıkışına bağlayacağız. Verici her 5 saniyede bir 5393 sayısını yayınlayacaktır.

Alıcı kodu, harici bir diyotun sınırlayıcı bir direnç aracılığıyla arduino'nun 7 numaralı pimine bağlanması nedeniyle biraz daha karmaşıktır:
#katmak #define LED_PIN 7 RCSwitch mySwitch = RCSwitch(); void setup() ( Serial.begin(9600); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, 0); mySwitch.enableReceive(0); ) void loop() ( if (mySwitch.available()) ( int değer = mySwitch.getReceivedValue(); if (value == 0) ( Serial.print("Bilinmeyen kodlama"); ) else ( Serial.print("Alınan "); uint16_t rd = mySwitch.getReceivedValue(); if(rd= =5393)( digitalWrite(LED_PIN, 1); gecikme(1000); digitalWrite(LED_PIN, 0); gecikme(1000); ) ) mySwitch.resetAvailable(); ))
Alıcı, arduino Nano'nun pin 2'sine bağlanır (pim 2, kesme tipi 0'a karşılık geldiğinden kod mySwitch.enableReceive(0) kullanır). Gönderilen numara alınırsa harici diyotu bir saniyeliğine yanıp söneriz.

Tüm vericilerin aynı pin çıkışına sahip olması nedeniyle deney sırasında kolaylıkla değiştirilebilirler:


Alıcılar için de durum benzerdir:





Alıcı parçanın hareketliliğini sağlamak için bir güç bankası kullandım. Öncelikle devreyi masaya monte ettikten sonra alıcı ve vericilerin birbirleriyle herhangi bir kombinasyonla çalıştığından emin oldum. Test videosu:


Gördüğünüz gibi yükün az olması nedeniyle powerbank bir süre sonra yükü kapatıyor ve bir butona basmak zorunda kalıyorsunuz, bu durum testlere engel olmadı.

İlk olarak vericiler hakkında. Deney sırasında aralarında hiçbir fark olmadığı ortaya çıktı, tek şey isimsiz, küçük deneysel olanın rakiplerinden biraz daha kötü çalıştığıydı, bu:


Kullanırken güvenilir alım mesafesi 1-2 metre azaldı. Vericilerin geri kalanı tamamen aynı şekilde çalıştı.

Ancak alıcılarla her şeyin daha karmaşık olduğu ortaya çıktı. Bu sette onurlu 3. sırayı alıcı aldı:


Görüş alanından 6 metre uzaktayken (5 metrede - vericiler arasında dışarıdan biri kullanıldığında) iletişimi kaybetmeye başladı.

İkincilik ise en ucuz setten katılımcıya verildi:


Görüş alanı içinde 8 metrede güvenle kabul edildi, ancak 9. metrede ustalaşamadı.

Rekorun sahibi incelemenin konusuydu:


Mevcut görüş hattı (12 metre) onun için kolay bir işti. Ve yaklaşık 40 metre mesafedeki toplam 4 sağlam beton duvardan duvarların içinden almaya geçtim - zaten sınırda alıyordu (bir adım ileri alım, bir adım geri LED sessiz). Bu nedenle, bu incelemenin konusunu el sanatlarında satın alma ve kullanma konusunda kesinlikle tavsiye edebilirim. Kullanırken verici gücünü eşit mesafelerde azaltabilir veya eşit güçlerde güvenilir alım mesafesini artırabilirsiniz.

Önerilere göre vericinin besleme voltajını artırarak iletim gücünü (ve dolayısıyla alma mesafesini) artırabilirsiniz. 12 Volt, görüş hattı içindeki başlangıç ​​mesafesini 2-3 metre artırmayı mümkün kıldı.

Burada bitiriyorum, umarım bilgiler birilerine faydalı olur.

+125 almayı planlıyorum Favorilere ekle İncelemeyi beğendim +121 +225

Bu derste popüler bir 433 MHz alıcı-verici kullanarak iki Arduino kontrol cihazı arasında radyo sinyali iletme problemini çözeceğiz. Aslında bir veri aktarım cihazı iki modülden oluşur: bir alıcı ve bir verici. Veriler yalnızca tek yönde aktarılabilir. Bu modülleri kullanırken bunu anlamak önemlidir. Örneğin, mobil bir robot veya örneğin bir TV gibi herhangi bir elektronik cihazın uzaktan kontrolünü yapabilirsiniz. Bu durumda veriler kontrol panelinden cihaza aktarılacaktır. Diğer bir seçenek ise kablosuz sensörlerden gelen sinyalleri bir veri toplama sistemine iletmektir. Burada rota değişiyor, artık verici sensör tarafında, alıcı ise toplama sistemi tarafında oluyor. Modüller farklı adlara sahip olabilir: MX-05V, XD-RF-5V, XY-FST, XY-MK-5V, vb. ancak hepsi yaklaşık olarak aynı görünüme ve pin numaralandırmasına sahiptir. Ayrıca radyo modüllerinin iki frekansı yaygındır: 433 MHz ve 315 MHz.

1. Bağlantı

Vericinin yalnızca üç pimi vardır: Gnd, Vcc ve Data.
Bunları aşağıdaki şemaya göre ilk Arduino kartına bağlıyoruz: Her iki cihazı da bir devre tahtası üzerine monte ediyoruz ve program yazmaya başlıyoruz.

2. Verici programı

Radyo modülleriyle çalışmak için RCSwitch kütüphanesini kullanacağız. Her saniyede iki farklı mesajı sırayla gönderecek bir program yazalım. #katmak RCSwitch mySwitch = RCSwitch(); void setup() ( mySwitch.enableTransmit(2); ) void loop() ( mySwitch.send(B0100, 4); gecikme(1000); mySwitch.send(B1000, 4); gecikme(1000); ) Şimdi analiz edelim programı. Yaptığımız ilk şey vericiyle çalışacak bir nesne bildirmek ve ona mySwitch adını vermekti. RCSwitch mySwitch = RCSwitch(); Daha sonra standart fonksiyonun içinde kurmak vericiyi açın ve bağlı olduğu pini belirtin: mySwitch.enableTransmit(2); Son olarak, program döngüsünün ana döngüsünde, önce bir mesajı, ardından ikincisini işlevi kullanarak göndeririz. Göndermek : mySwitch.send(B1000, 4); İşlev Göndermek iki argümanı var. Birincisi, bir darbe patlaması şeklinde havadan gönderilecek olan gönderilen bir mesajdır. İkinci argüman gönderilecek paketin boyutudur. Programımızda mesajları ikili sayı formatında belirttik. Bu, B1000 kodunun başındaki İngilizce “B” harfiyle gösterilir. Ondalık gösterimde bu sayı sekiz olur. Böylece fonksiyonu çağırabiliriz Göndermek şu şekilde: mySwitch.send(8, 4); Gönder ayrıca ikili dizeleri de kabul edebilir: mySwitch.send("1000", 4);

3. Alıcı için program

Şimdi alıcı için bir program yazalım. İletim gerçeğini göstermek için Arduino kartının 3 numaralı pinine bağlı LED'i yakacağız. Alıcı B1000 kodunu yakaladıysa LED'i açın, B0100 ise kapatın. #katmak RCSwitch mySwitch = RCSwitch(); void setup() ( pinMode(3, OUTPUT); mySwitch.enableReceive(0); ) void loop() ( if(mySwitch.available())( int value = mySwitch.getReceivedValue(); if(value == B1000) digitalWrite(3, HIGH); else if(value == B0100) digitalWrite(3, LOW); mySwitch.resetAvailable(); )) ) İşlev mevcut verici en azından bir miktar veri almışsa true değerini döndürür: mySwitch.available() İşlev getReceivedValue veri akışından bir paket çıkarır ve kodunu çözerek bir sayıya dönüştürür. Programda elde edilen sayıyı bir değişkene atadık değer : int değer = mySwitch.getReceivedValue();

Görevler

Artık pratik yapmayı ve çeşitli kullanışlı cihazlar yapmayı deneyebilirsiniz. İşte bazı fikirler.
  1. Lamba için uzaktan kumanda. Alıcı tarafında, lambanın güç kaynağı devresine bağlanır (dikkatli olun, 220 Volt!). Verici tarafında: . Alıcı ve verici için, bir düğmeye basıldığında uzak röleyi açacak programlar yazın. Düğmeye tekrar bastığınızda röle kapanacaktır.
  2. Radyo kanallı dış mekan termometresi. Verici tarafına yerleştirin. Pillerden otonom güç kaynağı sağlayın. Alıcı tarafında: . Alıcı ve verici için, uzak bir sensörden gelen sıcaklık okumalarını ekranda görüntülemenizi sağlayacak programlar yazın.

Çözüm

Artık verileri uzak mesafelere aktarmanın basit ve ucuz bir yolunu biliyoruz. Ne yazık ki, bu tür radyo modüllerinde iletim hızı ve mesafesi çok sınırlıdır, bu nedenle örneğin bir quadcopteri tam olarak kontrol edemeyiz. Ancak basit bir ev aletini kontrol etmek için radyo uzaktan kumandası yapabiliriz: bir lamba, bir vantilatör veya bir TV. Çoğu radyo kanalı kontrol paneli, 433 MHz ve 315 MHz frekansına sahip alıcı-vericilere dayalı olarak çalışır. Bir Arduino ve bir alıcı verildiğinde kontrol sinyallerinin kodunu çözebilir ve bunları tekrarlayabiliriz. Aşağıdaki derslerden birinde bunun nasıl yapılacağı hakkında daha fazla yazacağız!

Herkese selam! İş yerimde otoparkım var. Elbette bu yazının amacı, park yeri olan yollardaki zor durum göz önüne alındığında övünmek değil ve yönetimimin çalışanlarını önemsediği konusunda PR yapmak değil (iş yerimden bile bahsetmeyeceğim!) , konu o değil. Mesele şu ki, iş yerimle alakası olmayan herhangi birinin bu otoparka park etmesini engelleyen nedir? Bu da otoparka giriş çıkışları kısıtlayan bir bariyer.

Ve birçok kuruluşta olduğu gibi işletmeme girişler beni ve diğer herkesi kontrol etmek amacıyla sıradan geçişlerle yapılıyor. Eh, aynı geçişlerle otoparka da giriş yaptılar. Yani otoparka gidiyorsunuz, kartınızı okuyucuya sunuyorsunuz, çalışıyor, bariyer açılıyor (otomatik olarak kapanıyor), içeri giriyorsunuz ve hepsi bu. Onlar da böyle düşündüler. Ancak elektroniğe olan tutkum ve doğal tembelliğim (bu, her arabaya bindiğimde, pencereyi açtığımda, elimi çektiğimde, pencereyi kapattığımda ve eğer yağmur yağıyorsa ve hava soğuksa) sistemin aleyhine oldu.

Öyleyse asıl meseleye geçelim. Öncelikle bariyerin oldukça popüler bir Nice şirketi olduğunu öğrendim ve bu konuda bilgi aramaya başladım. Ancak üreticinin popülaritesine rağmen kod formatları hakkında çok az bilgi vardı. 12 bit ve 24 bit kod formatlarının olduğu ortaya çıktı. 12-bit daha eskidir, 24-bit ise daha moderndir. İşyerindeki bariyerin uzun süredir ayakta olduğunu bildiğim için 12 bitlik kodlarla başlamaya karar verdim (sonradan doğru anladım). Ve böylece veri paketi 12 bitten oluşur. 12 bitlik koddan önce "pilot periyodu" ve "başlangıç ​​darbesi" adı verilen bir dönem vardır. “Pilot periyodu” 36 düşük seviyeli aralıktan oluşur, “başlangıç ​​darbesi” ise 1 yüksek seviyeli aralıktan oluşur. Bir veri paketi bir "pilot periyodu", ardından bir "başlangıç ​​darbesi" ve bunu takip eden 12 bitlik bir koddan (her bariyer için farklı) oluşur. Bariyer uzaktan kumandaları aynı anda 4 veri paketi iletiyor, ancak birçok cihaz bu frekansta çalıştığından (özellikle araba alarmları) ve parazit mümkün olduğundan daha fazlasını kurdum. Nice bariyerleri için darbe süreleri:

  • Mantıksal “1” – 1400 µs düşük (iki aralık) ve 700 µs yüksek (tek aralık)
  • Mantık "0" 700 µs düşük (tek aralık) ve 1400 µs yüksek (tek aralık)
  • “Pilot periyodu” – 25200 μs (36 aralık)
  • “Başlatma darbesi” – 700 µs (1 aralık)
Bu bariyer için ne bende ne de başkasında uzaktan kumanda bulunmadığından (böyle bir durumda mevcut uzaktan kumandadan sinyali okumak mümkün olacaktır), o zaman tüm olası seçenekleri arayarak gerçek kodu tahmin etmeniz gerekecektir, ancak 4096.

Genel olarak tüm bunlar nasıl gerçekleştirilebilir? Son zamanlarda Arduino platformlarına olan tutkum bu konu üzerinde uzun süre düşünmeme izin vermedi.

Bileşenlerin listesi:

1. Arduino Uno,

2. 433 MHz radyo vericisi, bunun için ev yapımı anten,

3. Pil 9 volttur, popüler olarak “Krona”dır.

Bu radyo vericileri, tanınmış Çin mağazalarında radyo alıcılarıyla birlikte çok ucuza (yaklaşık 50 ruble) satılıyor. Bunlar çok basit, üç pinli: güç, toprak ve sinyal pini. Güç kaynağı 5 ila 12 volt arasındadır, besleme voltajı ne kadar yüksek olursa aralık da o kadar iyi olur. Aslında bu yüzden 9 voltluk bir pil seçildi. Arduino Uno için önerilen besleme voltajı 7 ila 12 volt (Vin pini) arasındadır, bu nedenle “Krona” oldukça uygundur. Ayrıca, radyo vericisinin menzili bir antenin varlığına bağlıdır (onsuz menzil yaklaşık 1 metre olacaktır). Bütün setin maliyeti yaklaşık 300 ruble.

Aslında burada Arduino Uno'nun taslağı var:

Int send_code_pin = 13; //int gönder_kodu = 3061; bu benim bariyer void kurulumum için kaba kuvvet tarafından belirlenen koddur() ( pinMode(send_code_pin, OUTPUT); ) void loop () ( for (int send_code = 0; send_code)< 4096; send_code++) // этот цикл после того как код определен необходимо убрать { for (int j = 0; j <7; j++) // достаточно 4-х, но из-за помех поставил 7 { digitalWrite(send_code_pin, HIGH); // стартовый импульс delayMicroseconds(700); digitalWrite(send_code_pin, LOW); for (int i = 12; i >0; i--) ( boolean bit_code = bitRead(send_code, i - 1); if (bit_code) ( digitalWrite(send_code_pin, LOW); // birim gecikmeMicroseconds(1400); digitalWrite(send_code_pin, YÜKSEK); gecikmeMicroseconds(700); ) else ( digitalWrite(send_code_pin, LOW); // sıfır gecikmeMicroseconds(700); digitalWrite(send_code_pin, YÜKSEK); gecikmeMicroseconds(1400); ) ) digitalWrite(send_code_pin, LOW); // pilot periyodu gecikmesiMikrosaniye(25200); )) ) //gecikme(10000); kodu tanımladıktan sonra bir gecikme ayarlayın)
Bariyerden günde bir çıkış dikkate alındığında, tüm olası seçenekleri gözden geçirmek yaklaşık 1 hafta sürdü. Doğru kodu hızla seçme tekniği çok basitti. Komutu kullanma mikro() bir kodun iletim süresini belirledi. Yaklaşık 0,25 saniyeydi. Tüm seçenekleri gözden geçirmek için gereken toplam süre yaklaşık 17 dakikadır. Bariyerin önünde Arduino'yu çalıştırdım ve zamanı not ettim. Yaklaşık 12,5 dakika sonra bariyer açıldı. Buna dayanarak ilk 2800 seçeneği hemen attım. Ve benzeri. Yaklaşık 30 seçenek kaldığında her veri aktarımından sonra 1 saniyelik bir gecikme ayarladım. Veri aktarım kontağını 13. (LED'li) olarak kurduğum için iletimin her anı görülüyordu, sayıp tam kodu belirledim.

Bu kadar! Demo olarak - otopsi videosu.

Bazen cihazlar arasında kablosuz bağlantı kurmanız gerekir. Son zamanlarda Bluetooth ve Wi-Fi modülleri bu amaçla giderek daha fazla kullanılmaya başlandı. Ancak videoları ve ağır dosyaları aktarmak başka, bir makineyi veya robotu 10 komutla kontrol etmek başka şey. Öte yandan, radyo amatörleri genellikle hazır komut kodlayıcılar/kod çözücülerle çalışacak şekilde alıcılar ve vericiler oluşturur, ayarlar ve yeniden yapar. Her iki durumda da oldukça ucuz RF modüllerini kullanabilirsiniz. Çalışmalarının özellikleri ve kesim altında kullanımı.

Modül türleri

Veri iletimi için RF modülleri VHF bandında çalışır ve 433 MHz, 868 MHz veya 2,4 GHz standart frekanslarını kullanır (daha az yaygın olarak 315 MHz, 450 MHz, 490 MHz, 915 MHz, vb.). Taşıyıcı frekansı ne kadar yüksek olursa, bilgi o kadar hızlı olur iletilebilir.
Üretilen RF modülleri kural olarak bazı veri iletim protokolleriyle çalışacak şekilde tasarlanmıştır. Çoğu zaman bu UART (RS-232) veya SPI'dir. Tipik olarak UART modülleri daha ucuzdur ve standart dışı (özel) iletim protokollerinin kullanımına da izin verir. İlk başta böyle bir şeyi perçinlemeyi düşündüm, ancak radyo kontrol ekipmanı yapımında yaşadığım acı deneyimi hatırlayarak oldukça ucuz olan HM-T868 ve HM-R868'i seçtim (60 UAH = set başına 8 dolardan az). Aşağıda açıklananlardan yalnızca taşıyıcı frekansı (sırasıyla 315 MHz ve 433 MHz) açısından farklılık gösteren HM-*315 ve HM-*433 modelleri de mevcuttur. Ek olarak, çalışma şekilleri bakımından benzer birçok modül daha vardır, bu nedenle bilgiler diğer modüllerin sahipleri için yararlı olabilir.

Verici

Hemen hemen tüm RF modülleri, gücü bağlamak, veri iletmek ve kontrol sinyallerini iletmek için pinlere sahip küçük bir baskılı devre kartıdır. HM-T868 vericisini düşünün
Üç pimli bir konektörü vardır: GND (ortak), DATA (veri), VCC (+ güç) ve ayrıca anteni lehimlemek için bir yama (8,5 cm - 1/4 dalga boyunda bir MGTF tel saplaması kullandım).

Alıcı

HM-R868 alıcısı görünüş olarak karşılık gelen vericiye çok benzer

ancak konektöründe dördüncü bir kontak var - ENABLE; ona güç uygulandığında alıcı çalışmaya başlar.

İş

Belgelere bakılırsa, çalışma voltajı 2,5-5V'dur, voltaj ne kadar yüksek olursa çalışma aralığı da o kadar büyük olur. Özünde, bu bir radyo genişleticidir: vericinin DATA girişine voltaj uygulandığında, alıcının DATA çıkışında da voltaj görünecektir (voltajın ENABLE'a da uygulanması şartıyla). AMA, birkaç nüans var. Birincisi: veri iletim frekansı (bizim durumumuzda 600-4800 bps'dir). İkincisi: DATA girişinde 70 ms'den fazla sinyal yoksa verici uyku moduna geçer (esasen kapanır). Üçüncüsü: Alıcının alıcı alanında çalışan bir verici yoksa çıkışında her türlü gürültü ortaya çıkar.

Küçük bir deney yapalım: Vericinin GND ve VCC kontaklarına gücü bağlayın. DATA pini bir düğme veya jumper aracılığıyla VCC'ye bağlanır. Ayrıca alıcının GND ve VCC kontaklarına da güç bağlarız ve ENABLE ile VCC'yi birbirine bağlarız. DATA çıkışına bir LED bağlarız (tercihen bir direnç aracılığıyla). Anten olarak 1/4 dalga boyunda uygun herhangi bir kablo kullanırız. Diyagram şöyle görünmelidir:


Alıcıyı açtıktan ve/veya ENABLE'a voltaj uyguladıktan hemen sonra LED yanmalı ve sürekli olarak (iyi veya hemen hemen sürekli) yanmalıdır. Vericideki düğmeye bastıktan sonra LED'e hiçbir şey olmuyor - yanmaya devam ediyor. Düğmeyi bıraktığınızda LED yanıp sönecek (sönecek ve tekrar yanacaktır) ve yanmaya devam edecektir. Düğmeye tekrar basıp bıraktığınızda her şey tekrarlanmalıdır. Orada neler oluyordu? Alıcı açıldığında verici uyku durumundaydı, alıcı normal bir sinyal bulamadı ve her türlü gürültüyü almaya başladı ve buna bağlı olarak çıkışta her türlü gürültü ortaya çıktı. Sürekli bir sinyali gürültüden gözle ayırt etmek imkansızdır ve LED'in sürekli parladığı görülmektedir. Düğmeye bastıktan sonra verici hazırda bekletme modundan çıkar ve iletim yapmaya başlar, alıcı çıkışında mantıksal bir "1" görünür ve LED gerçekten sürekli olarak yanar. Düğmeyi bıraktıktan sonra verici, alıcı tarafından alınan mantıksal bir "0" iletir ve çıkışında da bir "0" görünür - LED sonunda söner. Ancak 70 ms sonra verici, girişinde hala aynı "0" olduğunu görür ve uykuya geçer, taşıyıcı frekans üreteci kapanır ve alıcı her türlü gürültüyü, çıkıştaki gürültüyü almaya başlar - LED yanar Tekrar.

Yukarıdakilerden, verici girişindeki sinyalin 70 ms'den daha kısa bir süre boyunca olmaması ve doğru frekans aralığında olması durumunda modüllerin normal bir kablo gibi davranacağı anlaşılmaktadır (şimdilik parazit ve diğer sinyallere dikkat etmiyoruz) ).

Paket formatı

Bu tür RF modülleri doğrudan UART donanımına veya MAX232 aracılığıyla bir bilgisayara bağlanabilir, ancak çalışmalarının özellikleri göz önüne alındığında, yazılımda açıklanan özel protokollerin kullanılmasını tavsiye ederim. Amacım doğrultusunda şu türdeki paketleri kullanıyorum: başlangıç ​​bitleri, bilgi içeren baytlar, bir kontrol baytı (veya birkaç) ve bir durdurma biti. İlk başlangıç ​​bitinin daha uzun yapılması tavsiye edilir; bu, vericinin uyanması, alıcının ona uyum sağlaması ve alıcı mikro denetleyicinin (veya sahip olduğunuz her şeyin) almaya başlaması için zaman verecektir. O zaman "01010" gibi bir şey, eğer bu alıcının çıkışıysa, büyük olasılıkla gürültü değildir. Daha sonra bir tanımlama baytı koyabilirsiniz; bu, paketin hangi cihaza yönlendirildiğini anlamanıza yardımcı olur ve gürültüyü reddetme olasılığı daha yüksektir. Bu ana kadar bilgilerin ayrı bitler halinde okunması ve kontrol edilmesi tavsiye edilir, eğer bunlardan en az biri yanlışsa alımı tamamlayıp yayını tekrar dinlemeye başlarız. Aktarılan daha fazla bilgi, uygun kayıtlara/değişkenlere yazılarak bir kerede bayt bayt okunabilir. Alım sonunda kontrol ifadesini çalıştırıyoruz, sonucu kontrol byte'ına eşitse alınan bilgilerle gerekli işlemleri gerçekleştiriyoruz, aksi halde yayını tekrar dinliyoruz. Bir kontrol ifadesi olarak, bir tür sağlama toplamını düşünebilirsiniz; iletilen çok fazla bilgi yoksa veya programlama konusunda güçlü değilseniz, iletilen baytların değişkenler olacağı bir tür aritmetik ifadeyi basitçe hesaplayabilirsiniz. Ancak sonucun bir tam sayı olması ve kontrol bayt sayısına uyması gerektiğini dikkate almak gerekir. Bu nedenle aritmetik işlemler yerine bit düzeyinde mantıksal işlemleri kullanmak daha iyidir: AND, OR, NOT ve özellikle XOR. Mümkünse bir kontrol baytı yapmak gerekiyor çünkü radyo yayıncılığı özellikle günümüzde elektronik cihazlar dünyasında çok kirli bir şey. Bazen cihazın kendisi parazite neden olabilir. Örneğin, kartta alıcıdan 10 cm uzakta 46 kHz PWM olan ve alımı büyük ölçüde engelleyen bir parçam vardı. Ve bu, RF modüllerinin şu anda diğer cihazların çalışabileceği standart frekansları kullandığı gerçeğinden bahsetmiyor: telsizler, alarmlar, radyo kontrolü, telemetri vb.

Radyo modülleri: verici (FS1000A) ve alıcı (MX-RM-5V) - düşük güçlü cihazlara yönelik LPD433 (Düşük Güçlü Cihaz) aralığında yer alan, lisanssız 433.920 MHz frekansında bir radyo kanalı üzerinden veri iletimi için tasarlanmıştır.

FS1000A Verici Özellikleri

  • Çalışma frekansı: 433,920 MHz (modülün metal gövdesinde belirtilmiştir);
  • İletim aralığı: 100 m'ye kadar (görüş hattında, antensiz);
  • Çıkış gücü: 40 mW'a kadar;
  • Besleme voltajı: 3 ... 12 V;
  • Beklemede akım tüketimi: 0 mA;
  • İletim modunda akım tüketimi: 20 .. 30 mA;
  • Çalışma sıcaklığı: -10 ... 70 °C;
  • Boyutlar: 19x19x8 mm;
  • Ağırlık: 2 gr;

Alıcı Özellikleri MX-RM-5V

  • Çalışma frekansı: 433,920 MHz (123456789 şablonu olmadığı sürece baskılı devre kartındaki tabloda belirtilmiştir);
  • Modülasyon türü: ASK - genlik kaydırmalı anahtarlama;
  • Alım aralığı: 100 m'ye kadar (görüş hattında, antensiz);
  • Besleme voltajı: 5V;
  • Akım tüketimi: 4 mA;
  • Boyutlar 30x14x17 mm;
  • Ağırlık: 4 gr;

Bağlantı

Arduino'ya kolay bağlantı için veya kullanın.

Verici herhangi bir pine bağlanır ve alıcı bağlantısı kullanılan kitaplığın türüne bağlıdır:

  • Kitaplıkları kullanırken RemoteSwitch, RCSwitch , alıcı yalnızca harici kesme kullanılarak pime bağlanır. Ancak bu kitaplıklar donanım zamanlayıcılarını kullanmaz, bu da PWM kullanımınızı sınırlamadıkları anlamına gelir.
  • Kütüphaneyi kullanırken, alıcı herhangi bir pine bağlanır. Ancak kütüphane, hem bu zamanlayıcının hem de PWM pinlerinin kullanımına kısıtlamalar getiren ilk donanım zamanlayıcıyı kullanıyor.

Beslenme

  • Vericinin Vcc ve GND terminallerine 2 ... 12 V DC voltaj sağlanır.
  • Alıcının Vcc ve GND pinlerine 5 V DC voltaj verilmektedir.

Modüller hakkında daha fazla bilgi

  • Verici, sinyali ASK (Genlik Kaydırma Anahtarlaması) kullanarak iletmek için bir dijital giriş kullanır. Genlik anahtarlama (ASK), herhangi bir sinyalin modüle edilebilmesi (hem dijital hem de analog) açısından genlik modülasyonundan (AM) farklıdır, ancak yalnızca dijital manipüle edilebilir.
  • Veriler, görüş alanında 100 m'ye kadar bir mesafedeki bir radyo kanalı üzerinden iletilir (üretici tarafından belirlenir)
  • Antenleri vericiye ve alıcıya bağlayarak güvenilir alım aralığı artırılabilir.
  • Alıcının elektrikle bağlı iki dijital çıkışı vardır (herhangi biri kullanılabilir). Çıkış, radyo kanalında taşıyıcı frekans varsa mantıksal seviye "1"e, yoksa mantıksal seviye "0"a ayarlanır.
  • Alıcı, alım aralığını artıran bir otomatik kazanç kontrol ünitesine (AGC - Otomatik Kazanç Kontrolü) sahiptir, ancak vericiden bir sinyal gelmediğinde, alıcı çıkışında mantıksal seviyelerin kaotik değişimleri gözlenir.
  • Alıcı, güç veriyolundaki küçük dalgalanmalar için bile kritik öneme sahiptir. Varsa, alıcı bunları bir bilgi sinyali olarak alır, güçlendirir ve mantıksal seviyeler halinde çıkarır. Güç veriyolundaki dalgalanma, servolar, LED göstergeler, kendi jeneratörleri olan veya PWM kullanan cihazlar vb. gibi cihazlardan kaynaklanabilir.
  • Dalgalanmanın alıcı üzerindeki etkisi birkaç yolla azaltılabilir; işte bunlardan bazıları:
    • Arduino'ya güç vermek için USB veriyolunu değil harici bir kaynak kullanın. Birçok harici güç kaynağının çıkış voltajı kontrol edildiğinden veya düzeltildiğinden. Gerilimin önemli ölçüde "düşebileceği" USB veri yolunun aksine.
    • Alıcı güç veriyoluna bir yumuşatma kapasitörü takın.
    • Alıcı için ayrı bir stabilize güç kaynağı kullanın.
    • Güç veriyoluna dalgalanma katan cihazlar için ayrı güç kullanın.

Antenler

Herhangi bir alıcının ilk amplifikatörü ve herhangi bir vericinin son amplifikatörü antendir. En basit anten, kamçı antendir (belirli uzunlukta bir tel parçası). Antenin uzunluğu (hem alıcı hem de verici), taşıyıcı frekansın dalga boyunun dörtte birinin katı olmalıdır. Yani kırbaç antenler çeyrek dalga (L/4), yarım dalga (L/2) ve dalga boyuna (1L) eşit olabilir.