- NRF24L01 RF Modülünü tanıma
- NRF24L01 ile Arduino'nun arayüz bağlantısı
- Alıcı tarafı: Arduino Uno nRF24L01 modül bağlantıları
- Verici tarafı: Arduino Nano nRF24L01 modül Bağlantıları
- NRF24L01 + Kablosuz Alıcı-Verici Modülü ile Çalışma
- Arduino için nRF24L01 programlama
- NRF24L01 kullanarak Servo Motorun kablosuz olarak kontrol edilmesi
Nesnelerin İnterneti (IoT), Endüstri 4.0, Makineden Makineye iletişim vb. Giderek daha popüler hale gelirken, daha fazla makine / cihazın bulut üzerinde birbirleriyle konuşması nedeniyle kablosuz iletişim ihtiyacı zorunlu hale geldi. Tasarımcılar Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi Modülleri, 433MHz RF Modülleri, Lora, nRF vb. Gibi birçok kablosuz iletişim sistemini kullanır ve ortam seçimi, kullanıldığı uygulamanın türüne bağlıdır.
Hepsi arasında, yerel ağ iletişimi için popüler bir kablosuz ortam nRF24L01'dir. Bu modüller, birçok ülkede yasal olan ve endüstriyel ve tıbbi uygulamalarda kullanılabilen 250Kbps'den 2Mbps'ye kadar olan baud hızıyla 2.4GHz (ISM bandı) üzerinde çalışır. Ayrıca uygun antenlerle bu modüllerin aralarında 100 metreye kadar bir mesafeye kadar gönderip alabileceği de iddia edilmektedir. İlginç değil mi !!? Bu nedenle, bu eğitimde bu nRF24l01 modülleri ve Arduino gibi bir mikrodenetleyici platformuyla nasıl arayüzleneceği hakkında daha fazla bilgi edineceğiz. Bu modülü kullanırken sık karşılaşılan sorunlar için bazı çözümleri de paylaşacağız.
NRF24L01 RF Modülünü tanıma
NRF24L01 modülleri olan alıcı-verici modülleri her modül anlamına can send ve her iki veri almak ama çünkü onlar da göndermek veya bir defada veri alabilir yarı dubleks. Modül, verilerin iletilmesinden ve alınmasından sorumlu olan Nordic yarı iletkenlerinden jenerik nRF24L01 IC'ye sahiptir. IC, SPI protokolünü kullanarak iletişim kurar ve bu nedenle herhangi bir mikro denetleyici ile kolayca arayüzlenebilir. Kitaplıklar hazır olduğu için Arduino ile çok daha kolay hale geliyor. Standart bir NRF24L01 modülünün pinouts aşağıda gösterilmiştir
Modül, 1.9V ila 3.6V (tipik olarak 3.3V) arasında çalışma voltajına sahiptir ve normal çalışma sırasında yalnızca 12mA gibi çok daha az akım tüketir, bu da pilin verimli olmasını sağlar ve böylece madeni para pillerinde bile çalışabilir. Çalışma voltajı 3,3V olsa da pinlerin çoğu 5V toleranslıdır ve bu nedenle Arduino gibi 5V mikrodenetleyicilerle doğrudan arayüzlenebilir. Bu modülleri kullanmanın bir diğer avantajı, her modülün 6 Pipeline sahip olmasıdır. Yani, her modül veri iletmek veya almak için diğer 6 modülle iletişim kurabilir. Bu, modülü IoT uygulamalarında yıldız veya örgü ağlar oluşturmak için uygun hale getirir. Ayrıca 125 benzersiz ID'den oluşan geniş bir adres aralığına sahiptirler, bu nedenle kapalı bir alanda bu modüllerden 125'ini birbirine karışmadan kullanabiliriz.
NRF24L01 ile Arduino'nun arayüz bağlantısı
Bu eğitimde , diğer Arduino'daki potansiyometreyi değiştirerek bir Arduino'ya bağlı servo motoru kontrol ederek nRF24L01'i Arduino ile nasıl arayüzleyeceğimizi öğreneceğiz. Basitlik adına, bir nRF24L01 modülünü verici ve diğeri alıcı olarak kullandık, ancak her modül ayrı ayrı veri gönderip alacak şekilde programlanabilir.
NRF24L01 modülünü Arduino ile bağlamak için devre şeması aşağıda gösterilmiştir. Değişkenlik açısından, alıcı tarafı için UNO ve verici tarafı için Nano kullandım. Ancak bağlantı mantığı mini, mega gibi diğer Arduino kartları için de aynı kalır.
Alıcı tarafı: Arduino Uno nRF24L01 modül bağlantıları
Daha önce de belirtildiği gibi nRF24L01, SPI protokolünün yardımıyla iletişim kurar. Arduino Nano ve UNO'da 11, 12 ve 13 pinleri SPI iletişimi için kullanılır. Bu nedenle nRF'den MOSI, MISO ve SCK pinlerini sırasıyla 11, 12 ve 13 pinlerine bağlarız. CE ve CS pinleri kullanıcı tarafından konfigüre edilebilir, burada pin 7 ve 8'i kullandım, ancak programı değiştirerek herhangi bir pin kullanabilirsiniz. NRF modülü, çoğu durumda çalışacak olan Arduino'daki 3,3V pini tarafından desteklenmektedir. Değilse, ayrı bir güç kaynağı denenebilir. NRF'yi arayüzlemenin yanı sıra, 7 numaralı pime bir servo motor bağladım ve bunu Arduino'daki 5V pininden çalıştırdım. Benzer şekilde verici devresi aşağıda gösterilmiştir.
Verici tarafı: Arduino Nano nRF24L01 modül Bağlantıları
Vericinin bağlantıları da aynı, ek olarak Arduino'nun 5V ad Ground pinine bağlı bir potansiyometre kullandım. 0-5V arasında değişecek olan çıkış analog voltajı Nano'nun A7 pinine bağlanır. Her iki kart da USB bağlantı noktasından güç alır.
NRF24L01 + Kablosuz Alıcı-Verici Modülü ile Çalışma
Bununla birlikte, nRF24L01'inin gürültüsüz çalışmasını sağlamak için aşağıdaki hususları göz önünde bulundurmak isteyebiliriz. Bu nRF24L01 + üzerinde uzun süredir çalışıyorum ve duvara çarpmanıza yardımcı olabilecek aşağıdaki noktaları öğrendim. Modüller normal şekilde çalışmadığında bunları deneyebilirsiniz.
1. Piyasadaki nRF24L01 + modüllerinin çoğu sahtedir. Ebay ve Amazon'da bulabildiğimiz ucuz olanlar en kötüsü (Endişelenmeyin, birkaç ince ayar ile onları çalıştırabiliriz)
2. Ana sorun, kodunuz değil, güç kaynağıdır. Çevrimiçi kodların çoğu düzgün çalışacak, kişisel olarak test ettiğim bir çalışma kodum var, İhtiyacınız olursa bana bildirin.
3. NRF24L01 + olarak basılan modüller aslında Si24Ri (Evet bir Çin ürünü) olduğundan dikkat edin.
4. Klon ve sahte modüller daha fazla güç tüketir, dolayısıyla güç devrenizi nRF24L01 + veri sayfasına dayalı olarak geliştirmeyin, çünkü Si24Ri yaklaşık 250 mA yüksek akım tüketimine sahip olacaktır.
5. Voltaj dalgalanmalarına ve akım dalgalanmalarına karşı dikkatli olun, bu modüller çok hassastır ve kolayca yanabilir. (;-(şimdiye kadar 2 modül kızartılmış)
6. Modülün Vcc ve Gnd'sine bir çift kapasitör (10 uF ve 0.1 uF) eklemek, beslemenizi saf hale getirmenize yardımcı olur ve bu, modüllerin çoğu için işe yarar.
Yine de sorun yaşıyorsanız, yorum bölümünde bildirin veya bunu okuyun veya forumumuzda sorularınızı sorun.
Ayrıca nRF24L01 kullanarak bir Sohbet odası oluşturma konusundaki önceki projemize bakın.
Arduino için nRF24L01 programlama
GitHub'da manyakbug tarafından oluşturulan hazır kütüphane sayesinde bu modülleri Arduino ile kullanmak çok kolay oldu. Kitaplığı ZIP klasörü olarak indirmek için bağlantıya tıklayın ve Sketch -> Include Library -> Add.ZIP library seçeneğini kullanarak Arduino IDE'nize ekleyin . Kütüphaneyi ekledikten sonra proje için programlamaya başlayabiliriz. Biri verici tarafı ve diğeri alıcı tarafı için olmak üzere iki program yazmalıyız. Ancak daha önce de söylediğim gibi, her modül hem verici hem de alıcı olarak çalışabilir. Her iki program da bu sayfanın sonunda verilmiştir., verici kodunda alıcı seçeneği yorumlanacak ve alıcı programında verici kodu yorumlanacaktır. Modülün her ikisi olarak çalışması gereken bir projeyi deniyorsanız bunu kullanabilirsiniz. Programın işleyişi aşağıda açıklanmıştır.
Tüm programlar gibi, başlık dosyalarını dahil ederek başlıyoruz. NRF, SPI protokolünü kullandığından, SPI başlığını ve ayrıca yeni indirdiğimiz kitaplığı dahil ettik. Servo kitaplığı, servo motoru kontrol etmek için kullanılır.
#Dahil etmek
Sonraki satır, kütüphaneye CE ve CS pinleri hakkında talimat verdiğimiz önemli satırdır. Devre şemamızda CE'yi pim 7'ye ve CS'yi pim 8'e bağladık, böylece hattı şu şekilde ayarladık
RF24 myRadio (7, 8);
RF kitaplığıyla ilişkili tüm değişkenler, bileşik bir değişken yapısı olarak bildirilmelidir. Bu programda değişken msg , RF modülünden veri göndermek ve almak için kullanılır.
struct paketi { int msg; }; typedef struct paketi Paketi; Paket verileri;
Her RF modülünün, ilgili cihaza veri gönderebileceği benzersiz bir adresi vardır. Burada sadece bir çiftimiz olduğu için , adresi hem verici hem de alıcıda sıfıra ayarlıyoruz, ancak birden fazla modülünüz varsa kimliği herhangi bir benzersiz 6 basamaklı diziye ayarlayabilirsiniz.
bayt adresleri = {"0"};
İnside Sonraki geçersiz kurulum fonksiyonu biz 115 bandı ile çalışmalarına RF modülü ve set başlatmak gürültüden arınmış ve aynı zamanda 250kbps minimum hızı ile minimum güç tüketimi modunda çalışmaya modülü ayarlayın.
geçersiz kurulum () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // WIFI sinyallerinin üzerindeki 115 bant myRadio.setPALevel (RF24_PA_MIN); // MIN güç düşük öfke myRadio.setDataRate (RF24_250KBPS); // Minimum hız myservo.attach (6); Serial.print ("Kurulum Başlatıldı"); gecikme (500); }
void WriteData () işlevi, kendisine iletilen verileri yazar. Daha önce de belirtildiği gibi, nRF'nin veri okuyup yazabileceğimiz 6 farklı kanalı vardır, burada veri yazmak için adres olarak 0xF0F0F0F066 kullandık. Alıcı tarafında, yazılan veriyi almak için ReadData () fonksiyonundaaynı adresi kullanmalıyız.
void WriteData () { myRadio.stopListening (); // Almayı Durdur ve myRadio.openWritingPipe'ı aktarmaya başla (0xF0F0F0F066); // Bu 40 bitlik adrese veri gönderir myRadio.write (& data, sizeof (data)); gecikme (300); }
void WriteData () işlevi verileri okur ve bir değişkene yerleştirir. Yine burada veri okuyabileceğimiz veya yazabileceğimiz 6 farklı kanaldan veri okumak için adres olarak 0xF0F0F0F0AA kullandık. Bu, diğer modülün vericisinin bu adrese bir şey yazdığı ve dolayısıyla biz de onu okuyoruz demektir.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Okunacak kanal, 40 bit Adres myRadio.startListening (); // Transminting'i durdurun ve Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Bu satırlar dışında programdaki diğer satırlar POT'u okumak ve harita fonksiyonu kullanılarak 0'dan 180'e çevirmek ve servoyu buna göre kontrol ettiğimiz Alıcı modülüne göndermek için kullanılır. Servo Arayüz eğitimimizde zaten öğrendiğimizden beri bunları satır satır açıklamadım.
NRF24L01 kullanarak Servo Motorun kablosuz olarak kontrol edilmesi
Programa hazır olduğunuzda verici ve alıcı kodunu (aşağıda verilmiştir) ilgili Arduino kartlarına yükleyin ve USB portu ile çalıştırın. Ayrıca, hangi değerin iletildiğini ve neyin alındığını kontrol etmek için her iki panonun seri monitörünü de başlatabilirsiniz. Verici tarafındaki POT düğmesini çevirdiğinizde her şey beklendiği gibi çalışıyorsa, diğer taraftaki servo da buna göre dönmelidir.
Projenin tam çalışması aşağıdaki videoda gösterilmektedir. Bu modüllerin ilk denemede çalışmaması oldukça normaldir. Herhangi bir sorunla karşılaştıysanız kodu ve kablolamayı tekrar kontrol edin ve yukarıda verilen sorun giderme yönergelerini deneyin. Hiçbir şey işe yaramazsa, sorununuzu forumlarda veya yorum bölümünde yayınlayın ve ben bunları çözmeye çalışacağım.