Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

29 Haziran 2021 Salı

NRF24L01 + Kablosuz Modül Nasil Kullanilir ve Arduino

 

NRF24L01 + Kablosuz Modül Nasıl Çalışır ve Arduino

İki veya daha fazla Arduino kartının belirli bir mesafeden kablosuz olarak birbirleriyle iletişim kurabilmesi, sensör verilerini uzaktan izleme, robotları kontrol etme, ev otomasyonu ve liste devam etme gibi birçok olasılık sağlar. Ucuz ama güvenilir 2 yollu RF çözümlerine sahip olmak söz konusu olduğunda, Nordic Semiconductor'ın nRF24L01 + alıcı-verici modülünden daha iyi bir iş çıkaran kimse yok .

nRF24L01 + (artı) alıcı-verici modülü genellikle çevrimiçi olarak iki dolardan daha az bir fiyata alınabilir, bu da onu alabileceğiniz en ucuz veri iletişim seçeneklerinden biri yapar. Ve hepsinden önemlisi, bu modüller çok küçüktür ve neredeyse her projeye kablosuz bir arayüz eklemenize izin verir.

Donanıma Genel Bakış

Radyo frekansı

NRF24L01 + alıcı-verici modülü, dünya çapında 2,4 GHz ISM frekans bandında çalışmak üzere tasarlanmıştır ve veri iletimi için GFSK modülasyonunu kullanır Veri aktarım hızı 250kbps, 1Mbps ve 2Mbps olabilir.

2.4 GHz ISM bandı nedir?

2,4 GHz bant, lisanssız düşük güçlü cihazların kullanımı için uluslararası olarak ayrılmış Endüstriyel, Bilimsel ve Medikal (ISM) bantlarından biridir. Örnekler arasında Kablosuz telefonlar, Bluetooth cihazları, yakın alan iletişimi (NFC) cihazları ve kablosuz bilgisayar ağları (WiFi) ISM frekanslarını kullanır.

Güç tüketimi

Modülün çalışma voltajı 1.9 ila 3.6V arasındadır , ancak iyi haber, mantık pinlerinin 5 volt toleranslı olmasıdır , bu nedenle herhangi bir mantık seviyesi dönüştürücü kullanmadan bir Arduino veya herhangi bir 5V mantık mikrodenetleyicisine kolayca bağlayabiliriz.

Modül, programlanabilir çıkış gücünü destekler. 0 dBm, -6 dBm, -12 dBm veya -18 dBm ve tek bir LED'den bile daha düşük olan 0 dBm'de iletim sırasında inanılmaz derecede yaklaşık 12 mA tüketir Ve en iyisi, bekleme modunda 26 µA ve güç kapatma modunda 900 nA tüketir. Bu nedenle, düşük güçlü uygulamalar için başvurulacak kablosuz cihazdır.

SPI Arayüzü

NRF24L01 + alıcı-verici modülü , maksimum 10Mbps veri hızı ile 4 pinli Seri Çevresel Arayüz ( SPI ) üzerinden iletişim kurar Frekans kanalı (125 seçilebilir kanal), çıkış gücü (0 dBm, -6 dBm, -12 dBm veya -18 dBm) ve veri hızı (250kbps, 1Mbps veya 2Mbps) gibi tüm parametreler SPI arayüzü üzerinden yapılandırılabilir.

SPI veriyolu, bir Master ve Slave konseptini kullanır, en yaygın uygulamalarda Arduino'muz Master ve nRF24L01 + alıcı-verici modülü Slave'dir. I2C veriyolunun aksine, SPI veri yolundaki slave sayısı sınırlıdır, Arduino Uno'da maksimum iki SPI slave, yani iki nRF24L01 + alıcı-verici modülü kullanabilirsiniz.

İşte eksiksiz özellikler:

Frekans aralığı2,4 GHz ISM Bandı
Maksimum Hava Veri Hızı2 Mb / sn
Modülasyon FormatıGFSK
Maks. Alan sayısı Çıkış gücü0 dBm
Çalışma Besleme Voltajı1,9 V ila 3,6 V
Maks. Alan sayısı Çalışma Akımı13,5 mA
Min. Akım (Bekleme Modu)26µA
Mantıksal Girişler5V Toleranslı
İletişim Aralığı800+ m (görüş hattı)

nRF24L01 + modül Vs nRF24L01 + PA / LNA modülü

NRF24L01 + yongasına dayanan çeşitli modüller mevcuttur. En popüler versiyonlar aşağıdadır.

nRF24L01 + Kablosuz Alıcı-Verici Modülü
nRF24L01 + Kablosuz Modül

İlk versiyon, yerleşik anten kullanır. Bu, kopmanın daha kompakt bir versiyonuna izin verir. Bununla birlikte, daha küçük anten aynı zamanda daha düşük bir iletim aralığı anlamına gelir. Bu sürümle, 100 metrelik bir mesafeden iletişim kurabileceksiniz Tabii ki bu dışarıda açık bir alanda. İç mekandaki menziliniz, özellikle duvarların arasından biraz zayıflayacaktır.

nRF24L01 + PA LNA Harici Anten Kablosuz Alıcı-Verici Modülü
nRF24L01 + PA LNA Harici Antenli Kablosuz Alıcı-Verici Modülü

İkinci versiyon, bir SMA konektörü ve bir ördek anteniyle birlikte gelir, ancak gerçek fark bu değil. Gerçek fark, PA, LNA ve gönderme-alma anahtarlama devrelerini entegre eden özel bir RFX2401C yongasıyla birlikte gelmesidir . Ördek anteni ile birlikte bu menzil genişletici yonga, modülün yaklaşık 1000m civarında önemli ölçüde daha geniş bir iletim aralığı elde etmesine yardımcı olur .

PA LNA nedir?

PA, Güç Amplifikatörü anlamına gelir Yalnızca nRF24L01 + yongasından iletilen sinyalin gücünü artırır. Oysa LNA, Düşük Gürültülü Amplifikatör anlamına gelir LNA'nın işlevi,

nRF24L01 + RF PA LNA Güç Amplifikatörü Düşük Gürültülü Amplifikatör Blok Şeması
nRF24L01 + PA / LNA Blok Şeması

antenden gelen son derece zayıf ve belirsiz sinyal (genellikle mikrovoltlar düzeyinde veya -100 dBm'nin altında) ve onu daha kullanışlı bir seviyeye (genellikle yaklaşık 0,5 ila 1V) yükseltir

Alma yolunun düşük gürültülü amplifikatörü (LNA) ve iletim yolunun güç amplifikatörü (PA), iki sinyali ayıran ve nispeten güçlü PA çıkışının hassas LNA girişini aşırı yüklemesini önleyen bir dupleksleyici aracılığıyla antene bağlanır. Daha fazla bilgi için digikey.com'daki bu makaleye göz atın.

Bu farkın dışında, her iki modül de drop-in uyumludur. Yani, projenizi biriyle oluşturuyorsanız, sistemde herhangi bir değişiklik yapmanıza gerek kalmadan sadece fişini çekip başka birini kullanabilirsiniz.

NRF24L01 + alıcı-verici modülü nasıl çalışır?

RF Kanal Frekansı

NRF24L01 + alıcı-verici modülü, Kanal adı verilen belirli bir frekansta veri iletir ve alır Ayrıca iki veya daha fazla alıcı-verici modülün birbiriyle iletişim kurması için aynı kanalda olmaları gerekir. Bu kanal, 2,4 GHz ISM bandındaki herhangi bir frekans olabilir veya daha kesin olmak gerekirse, 2.400 ila 2.525 GHz (2400 ila 2525 MHz) arasında olabilir.

Her kanal 1MHz'den daha az bir bant genişliğine sahiptir. Bu bize 1MHz aralıklı 125 olası kanal verir. Böylece modül 125 farklı kanal kullanabilir ve bu da tek bir yerde bağımsız olarak çalışan 125 modemden oluşan bir ağa sahip olma imkanı verir.

nRF24L01 + Kablosuz Alıcı-Verici 2.4GHz 125 RF Kanalları 1MHz Aralık

Kanal, 250kbps ve 1Mbps hava veri hızında 1MHz'den daha az bir bant genişliği kaplar. Ancak 2Mbps hava veri hızında, 2MHz bant genişliği kullanılır (RF kanal frekans ayarının çözünürlüğünden daha geniş). Bu nedenle, çakışmayan kanalları sağlamak ve 2Mbps modunda paraziti azaltmak için, iki kanal arasında 2MHz aralık bırakmanız gerekir.

Seçtiğiniz kanalın RF kanal frekansı aşağıdaki formüle göre ayarlanır:

Frekans (Seçili) = 2400 + CH (Seçildi)

Örneğin, veri iletimi için kanalınız olarak 108'i seçerseniz, kanalınızın RF kanal frekansı 2508MHz (2400 + 108) olacaktır.

nRF24L01 + Çok Alıcı Ağı

NRF24L01 +, Multiceiver adlı bir özellik sağlar Çoklu Vericiler Tek Alıcı'nın kısaltmasıdır Her bir RF kanalının mantıksal olarak Veri Boruları adı verilen 6 paralel veri kanalına bölündüğü Başka bir deyişle, bir veri borusu, fiziksel RF Kanalındaki mantıksal bir kanaldır. Her veri borusunun kendi fiziksel adresi (Veri Borusu Adresi) vardır ve yapılandırılabilir. Bu, aşağıda gösterildiği gibi gösterilebilir.

nRF24L01 + Kablosuz Çok Vericili Ağ Çoklu Vericiler Tek Alıcı
nRF24L01 + Multiceiver Network - Çoklu Vericiler Tek Alıcı

Yukarıdaki diyagramı basitleştirmek için, birincil alıcının aynı anda 6 farklı verici düğümünden bilgi toplayan bir hub alıcı görevi gördüğünü hayal edin. Göbek alıcısı herhangi bir zamanda dinlemeyi durdurabilir ve bir verici görevi görebilir. Ancak bu, bir seferde yalnızca bir boru / düğüm yapılabilir.

Gelişmiş ShockBurst Protokolü

NRF24L01 + alıcı-verici modülü, Enhanced ShockBurst olarak bilinen bir paket yapısı kullanır. Bu basit paket yapısı, aşağıda gösterilen 5 farklı alana bölünmüştür.

nRF24L01 + Kablosuz Alıcı-Verici Gelişmiş ShockBurst Paket Yapısı
nRF24L01 + Geliştirilmiş ShockBurst Paket Yapısı

Orijinal ShockBurst yapısı yalnızca Giriş, Adres, Yük ve Döngüsel Artıklık Kontrolü (CRC) alanlarından oluşuyordu. Geliştirilmiş ShockBurst, yeni tanıtılan bir Paket Kontrol Alanı (PCF) kullanarak daha gelişmiş iletişim için daha fazla işlevsellik getirdi .

Bu yeni yapı, birkaç nedenden dolayı harika. İlk olarak, yük uzunluğu belirleyicili değişken uzunluklu yüklere izin verir, yani yükler 1 ila 32 bayt arasında değişebilir.

İkinci olarak, gönderilen her pakete, alıcı cihazın bir mesajın yeni olup olmadığını veya yeniden iletilip iletilmediğini (ve böylece göz ardı edilebileceğini) belirlemesine izin veren bir paket kimliği sağlar.

Son olarak ve en önemlisi, her mesaj, başka bir cihaz tarafından alındığında gönderilmesini isteyebilir.

nRF24L01 + Otomatik Paket Taşıma

Şimdi, iki nRF24L01 + modülünün birbiriyle nasıl işlem yaptığını daha iyi anlamak için üç senaryoyu tartışalım.

nRF24L01 + Alıcı-Verici Çalışma Paketi İletimi

Alındı ​​ve kesintili işlem Bu olumlu bir senaryo örneğidir. Burada verici, alıcıya bir veri paketi göndererek bir iletişim başlatır. Paketin tamamı iletildikten sonra, alındı ​​paketinin (ACK paketi) alınmasını bekler (yaklaşık 130 µs). Alıcı paketi aldığında, vericiye ACK paketini gönderir. ACK paketini alırken verici, yeni verilerin mevcut olduğunu belirtmek için kesme (IRQ) sinyali gönderir.

nRF24L01 + Alıcı-Verici Çalışma Paketi İletim Verileri Kayboldu

Veri paketi kaybı ile işlem Bu, iletilen paketin kaybı nedeniyle yeniden iletimin gerekli olduğu olumsuz bir senaryodur. Paket iletildikten sonra verici, ACK paketinin alınmasını bekler. Verici, Otomatik Yeniden İletim Gecikmesi (ARD) süresi içinde alamazsa, paket yeniden iletilir. Yeniden iletilen paket alıcı tarafından alındığında, ACK paketi iletilir ve bu da vericide kesinti oluşturur.

nRF24L01 + Alıcı-Verici Çalışma Paketi İletimi Onay Kaybı

Alındı ​​bildirimi kaybedilen işlem Bu yine, ACK paketinin kaybı nedeniyle yeniden iletimin gerekli olduğu olumsuz bir senaryodur. Burada alıcı paketi ilk denemede alsa bile, ACK paketinin kaybolması nedeniyle verici, alıcının paketi hiç alamadığını düşünür. Böylece Otomatik Yeniden İletim Gecikme süresi bittikten sonra paketi yeniden iletir. Şimdi alıcı, öncekiyle aynı paket kimliğini içeren paketi aldığında, onu atar ve ACK paketini yeniden gönderir.

Tüm bu paket işleme, mikro denetleyicinin katılımı olmadan nRF24L01 + yongası tarafından otomatik olarak yapılır.

nRF24L01 + Alıcı-Verici Modülü Pin Çıkışı

NRF24L01 + alıcı-verici Modülünün her iki versiyonunun da pin çıkışına bir göz atalım.

Pinout nRF24L01 + Kablosuz Alıcı-Verici Modülü
Pinout nRF24L01 + PA LNA Harici Anten Kablosuz Alıcı-Verici Modülü

GNDZemin Pimi'dir. Genellikle pimi bir kare içine alarak işaretlenir, böylece diğer pimleri tanımlamak için bir referans olarak kullanılabilir.

VCCmodül için güç sağlar. Bu, 1,9 ila 3,9 volt arasında herhangi bir yerde olabilir. Arduino'nuzdan 3.3V çıkışa bağlayabilirsiniz. 5V pinine bağlamanın nRF24L01 + modülünüzü büyük olasılıkla yok edeceğini unutmayın!

CE (Çip Etkinleştirme)bir aktif-YÜKSEK pindir. Seçildiğinde, nRF24L01 o anda hangi modda olduğuna bağlı olarak iletecek veya alacaktır.

CSN (Çip Seçimi Değil)aktif-DÜŞÜK bir pindir ve normalde YÜKSEK tutulur. Bu pin düştüğünde, nRF24L01 veri için SPI portunu dinlemeye başlar ve buna göre işler.

SCK (Seri Saat) SPI veri yolu Yöneticisi tarafından sağlanan saat darbelerini kabul eder.

MOSI (Ana Çıkış Köle Girişi) nRF24L01'in SPI girdisidir.

MISO (Köle Çıkışında Master) nRF24L01'den SPI çıkışıdır.

IRQ İşlenebilecek yeni veriler olduğunda ana kişiyi uyarabilen bir kesme pinidir.

Kablolama - nRF24L01 + alıcı-verici modülünü Arduino UNO'ya bağlama

Artık nRF24L01 + alıcı-verici modülünün nasıl çalıştığını tam olarak anladığımıza göre, onu Arduino'muza bağlamaya başlayabiliriz!

Başlamak için, modül üzerindeki VCC pinini Arduino'daki 3.3V'a ve GND pinini toprağa bağlayın. CSN ve CE pinleri Arduino'daki herhangi bir dijital pin'e bağlanabilir. Bizim durumumuzda, sırasıyla # 8 ve # 9 dijital pimlerine bağlıdır. Artık SPI iletişimi için kullanılan pinlerde kaldık.

NRF24L01 + alıcı-verici modülü çok fazla veri aktarımı gerektirdiğinden, bir mikrodenetleyicideki donanım SPI pinlerine bağlandığında en iyi performansı verecektir. Donanım SPI pinleri, başka bir pin seti kullanarak arayüz kodunu 'bit-vurmaktan' çok daha hızlıdır.

Her Arduino Board'un uygun şekilde bağlanması gereken farklı SPI pinlerine sahip olduğunu unutmayın. UNO / Nano V3.0 gibi Arduino kartları için bu pinler dijital 13 (SCK), 12 (MISO) ve 11 (MOSI) 'dir.

Bir Mega'nız varsa, iğneler farklıdır! Dijital 50 (MISO), 51 (MOSI), 52 (SCK) ve 53 (SS) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.

MOSIMİSOSCK
Arduino Uno111213
Arduino Nano111213
Arduino Mega515052

Yukarıda belirtilenden farklı bir Arduino kartı kullanıyorsanız, devam etmeden önce Arduino resmi belgelerini kontrol etmeniz önerilir .

NRF24L01 + Kablosuz Alıcı-Verici Modülü ile Arduino Kablolama Fritzing Bağlantıları
NRF24L01 + Kablosuz Alıcı-Verici Modülünü Arduino UNO'ya Kablolama

NRF24L01 + PA LNA Harici Anten Kablosuz Modülü ile Arduino Kablolama Fritzing Bağlantıları
NRF24L01 + PA LNA Kablosuz Modülünü Arduino UNO'ya Kablolama

Hatırlamak! Bu devrelerden iki tane yapmanız gerekiyor. Biri verici, diğeri alıcı görevi görür. Her ikisi için de kablolama aynıdır.

Her şeyi bağladıktan sonra gitmeye hazırsınız!

NRF24L01 + Modülü için RF24 Arduino Kitaplığı

NRF24L01 + alıcı-verici modülü ile bağlantı kurmak bir sürü iştir, ancak neyse ki bizim için çok sayıda kitaplık mevcuttur. Popüler kütüphanelerden biri RF24'tür . Bu kütüphane birkaç yıldır buralarda. Yeni başlayanlar için kullanımı basittir, ancak yine de ileri düzey kullanıcılar için çok şey sunar. Deneylerimizde aynı kütüphaneyi kullanacağız.

Kitaplığın en son sürümünü RF24 GitHub depo çatalından indirebilir veya zip dosyasını indirmek için bu düğmeyi tıklamanız yeterlidir:

Kurmak için Arduino IDE'yi açın, Sketch> Include Library> Add .ZIP Library'ye gidin ve ardından indirdiğiniz RF24-master dosyasını seçin. Bir kitaplık kurma konusunda daha fazla ayrıntıya ihtiyacınız varsa, bu Arduino Kitaplığı Kurma öğreticisini ziyaret edin .

Arduino Kodu - Verici İçin

Deneyimizde , vericiden alıcıya geleneksel bir ' Merhaba Dünya ' mesajı göndereceğiz .

Vericimiz için kullanacağımız taslak şu şekildedir:

//Include Libraries
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

//create an RF24 object
RF24 radio(9, 8);  // CE, CSN

//address through which two modules communicate.
const byte address[6] = "00001";

void setup()
{
  radio.begin();
  
  //set the address
  radio.openWritingPipe(address);
  
  //Set module as transmitter
  radio.stopListening();
}
void loop()
{
  //Send message to receiver
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  
  delay(1000);
}

Taslak, kitaplıkları dahil ederek başlar. SPI.h kitaplığı SPI iletişimini yönetirken nRF24L01.h ve RF24.h modülü kontrol eder.

//Include Libraries
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

Daha sonra, bir RF24 nesnesi oluşturmamız gerekiyor. Nesne, CE ve CSN sinyallerinin bağlandığı parametre olarak iki pin numarası alır.

//create an RF24 object
RF24 radio(9, 8);  // CE, CSN

Daha sonra, iki nRF24L01 + modülünün iletişim kurduğu boru adresini temsil edecek bir bayt dizisi oluşturmamız gerekiyor.

//address through which two modules communicate.
const byte address[6] = "00001";

Bu adresin değerini "düğüm1" gibi herhangi bir 5 harfli dizge olarak değiştirebiliriz. Bir ağda birkaç modülünüz varsa adres gereklidir. Adres sayesinde, iletişim kurmak istediğiniz belirli bir modülü seçebilirsiniz, bu nedenle bizim durumumuzda hem verici hem de alıcı için aynı adrese sahip olacağız.

Kurulum işlevinde sonraki: Vericinin adresini belirlediğimiz işlevi kullanarak radio.begin()ve kullanarak radyo nesnesini başlatmamız gerekir radio.openWritingPipe().

//set the address
radio.openWritingPipe(address);

Son olarak radio.stopListening()modülü verici olarak ayarlayan fonksiyonu kullanacağız .

//Set module as transmitter
radio.stopListening();

Döngü bölümünde: "Merhaba Dünya" mesajını atadığımız bir karakter dizisi oluşturuyoruz. radio.write()Fonksiyonu kullanarak bu mesajı alıcıya göndereceğiz. Buradaki ilk argüman, göndermek istediğimiz mesajdır. İkinci argüman, bu mesajda bulunan bayt sayısıdır.

const char text[] = "Hello World";
radio.write(&text, sizeof(text));

Bu yöntemle, bir seferde 32 bayta kadar gönderebilirsiniz. Çünkü nRF24L01 + 'nın işleyebileceği tek bir paketin maksimum boyutu budur. Alıcının verileri aldığına dair bir onay almanız gerekirse, yöntem radio.write()bir booldeğer döndürür TRUE döndürürse, veri alıcıya ulaştı. YANLIŞ döndürürse, veriler kaybolmuştur.

radio.write () işlevi, onayı alana kadar programı bloke eder veya tüm yeniden iletim girişimlerini bitirene kadar.

Arduino Kodu - Alıcı İçin

İşte alıcımız için kullanacağımız taslak

//Include Libraries
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

//create an RF24 object
RF24 radio(9, 8);  // CE, CSN

//address through which two modules communicate.
const byte address[6] = "00001";

void setup()
{
  while (!Serial);
    Serial.begin(9600);
  
  radio.begin();
  
  //set the address
  radio.openReadingPipe(0, address);
  
  //Set module as receiver
  radio.startListening();
}

void loop()
{
  //Read the data if available in buffer
  if (radio.available())
  {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
}

Bu program, bazı değişiklikler dışında vericinin programına oldukça benziyor.

Kurulum işlevinin başlangıcında seri iletişimi başlatırız. Daha sonra radio.setReadingPipe()işlevi kullanarak verici ile aynı adresi belirleriz ve bu şekilde verici ile alıcı arasındaki iletişimi etkinleştiririz.

  //set the address
  radio.openReadingPipe(0, address);

İlk argüman akışın numarasıdır. Farklı adreslere yanıt veren 6 adede kadar akış oluşturabilirsiniz. Sadece 0 numaralı akış için adres oluşturduk. İkinci argüman, akışın veri toplamak için tepki vereceği adrestir.

Bir sonraki adım, modülü bir alıcı olarak ayarlamak ve veri almaya başlamaktır. Bunu yapmak için radio.startListening()işlevi kullanıyoruz. O andan itibaren modem, verinin belirtilen adrese gönderilmesini bekler.

//Set module as receiver
  radio.startListening();

Döngü işlevinde: Çizim, radio.available()yöntemi kullanarak adrese herhangi bir verinin ulaşıp ulaşmadığını kontrol eder Bu yöntem, eğer tamponda herhangi bir veri mevcutsa, DOĞRU değeri döndürür.

if (radio.available())
  {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }

Veriler alınırsa, sıfırlarla dolu 32 karakterlik bir dizi oluşturur (daha sonra program alınan verilerle doldurur). Verileri okumak için radio.read (& text, sizeof (text)) yöntemini kullanıyoruz . Bu, alınan verileri karakter dizimize kaydedecektir.

Sonunda aldığımız mesajı seri monitöre yazdırıyoruz. Her şeyi doğru yaptıysanız ve bağlantılarda hata yoksa, Seri Monitörünüzde buna benzer bir şey görmelisiniz.

nRF24L01 + Alıcı-Verici RF24 Seri Monitörde Kitaplık Çizim Çıkışı
nRF24L01 + Seri Monitörde Alıcı-Verici Çıkışı

NRF24L01 + alıcı-verici Modülünün menzilinin iyileştirilmesi

Bir kablosuz iletişim sistemi için önemli bir parametre, iletişim aralığıdır. Çoğu durumda, bir RF çözümü seçerken belirleyici faktördür. Öyleyse, modülümüz için daha iyi bir aralık elde etmek için neler yapabileceğimizi tartışalım.

Güç Kaynağı Gürültüsünü Azaltın

Bir Radyo Frekansı (RF) sinyali üreten bir RF devresi, güç kaynağı gürültüsüne karşı çok hassastır. Kontrol edilmezse, güç kaynağı gürültüsü elde edebileceğiniz aralığı önemli ölçüde azaltabilir.

Güç kaynağı bağımsız bir pil olmadığı sürece, gücün üretimiyle ilişkili gürültü olma ihtimali yüksektir. Bu gürültünün sisteme girmesini önlemek için , güç kaynağı hattına fiziksel olarak nRF24L01 + modülüne mümkün olduğunca yakın bir 10 µf filtre kapasitör yerleştirilmesi önerilir.

Başa çıkmanın en kolay yolu, nRF24L01 için çok ucuz bir Adaptör Modülü kullanmaktır.

nRF24L01 + 5V Güç Adaptörü
nRF24L01 + Adaptör

Adaptör modülünde nRF24L01 modülünüzü takmanıza izin veren 8 pimli bir dişi konektör bulunur. Daha önce tartıştığımız hem entegre antenli hem de harici antenli (PA / LNA) modülü barındırabilir. Ayrıca SPI ve Interrupt bağlantıları için 6 pimli bir erkek konnektöre ve güç girişi için 2 pimli bir konnektöre sahiptir.

Adaptör modülünün kendi 3,3 voltluk voltaj regülatörü ve bir dizi filtre kondansatörü vardır, böylece onu 5 voltluk bir güç kaynağıyla çalıştırabilirsiniz.

Kanal frekansınızı değiştirin

Bir RF devresi için başka bir potansiyel gürültü kaynağı, özellikle aynı kanalda ayarlanmış komşu ağlarınız varsa veya diğer elektronik cihazlardan kaynaklanan girişimler varsa, dış ortamdır.

Bu sinyallerin sorun yaratmasını önlemek için nRF24L01 + modülünüzün en yüksek 25 kanalını kullanmanızı öneririz Bunun nedeni, WiFi'nin alt kanalların çoğunu kullanmasıdır.

Daha Düşük Veri Hızı

NRF24L01 +, -94dBm olan 250Kbps hızında en yüksek alıcı hassasiyetini sunar. Ancak 2MBps veri hızında alıcı hassasiyeti -82dBm'ye düşer. Bu dili konuşursanız, 250Kbps'deki alıcının 2Mbps'den yaklaşık 10 kat daha hassas olduğunu bilirsiniz. Bu, alıcının 10 kat zayıf bir sinyali çözebileceği anlamına gelir.

Alıcı (Rx) hassasiyeti ne anlama geliyor?

Alıcı hassasiyeti, alıcının bir RF sinyalini algılayabildiği en düşük güç seviyesidir. Negatif sayının mutlak değeri ne kadar büyükse alıcı hassasiyeti o kadar iyidir. Örneğin, -94 dBm'lik bir alıcı hassasiyeti, -82 dBm'lik 12 dB'lik bir alıcı hassasiyetinden daha iyidir.

Bu nedenle, veri hızını düşürmek, elde edebileceğiniz aralığı önemli ölçüde artırabilir. Ayrıca projelerimizin çoğu için 250Kbps hız fazlasıyla yeterli.

Daha Yüksek Çıkış Gücü

Maksimum çıkış gücünün ayarlanması, iletişim aralığını da iyileştirebilir. NRF24L01 +, çıkış gücünden birini seçmenize izin verir. 0 dBm, -6 dBm, -12 dBm veya -18 dBm. 0 dBm çıkış gücünün seçilmesi , havadan daha güçlü sinyal gönderir.

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.

28 Haziran 2021 Pazartesi

7 Segmentli Display Nasıl Çalışır ve Arduino

 

7 Segmentli Display Nasıl Çalışır ve Arduino




Birinin bir bombayı etkisiz hale getirmesi gereken bir filmi kaç kez izlediniz? Kahraman, her saniye bir öncekinden daha değerli olan zaman geçtikçe ekranı izler. Dikkat ederseniz, filmlerdeki tüm bu bombaların yedi bölümlü ekranı var. Olmak zorunda! Aksi takdirde, bir kahraman ne kadar zamanının kaldığını nasıl bilebilir? Belki yedi bölümlü ekranlar sizin için yeterince modern görünmüyor, ancak sayıları göstermenin en pratik yolu bunlar. Hem sınırlı ışık koşullarında hem de güçlü güneş ışığında kullanımı kolay, uygun maliyetli ve yüksek oranda okunabilir.

Yedi segmentli ekranı kullanan gerçek bir dünya örneği , NASA'nın Apollo inişi için kullandığı Florida, Cape Canaveral'daki ünlü geri sayım saatidir .

Fotoğraf kredisi: NASA / Jim Grossmann
Donanıma Genel Bakış

Arduino'ya bağlamadan önce 7 segmentli ekranın özelliklerini ve işlevselliğini kısaca tartışalım.

7 segmentli ekranlar, belirli bir düzende sıralanmış yedi LED'den ibarettir. Bu durumda hepimizin aşina olduğu '8' şekli. Yedi LED'in her birine segment adı verilir, çünkü segment aydınlatıldığında görüntülenecek sayısal bir rakamın (hem Ondalık hem de Onaltılık) bir parçasını oluşturur. Bazen bir ondalık noktanın belirtilmesi için ek bir 8. LED kullanılır.

7 Segment İç LED Formasyon Yapısı ve Pin Çıkışı

Ekrandaki yedi LED'in her birine, bağlantı pimlerinden biri doğrudan dikdörtgen plastik paketten çıkarılmış konumsal bir bölüm verilir. Bu ayrı LED pimleri, her bir LED'i temsil eden a'dan g'ye kadar etiketlenmiştir. Diğer LED pimleri, ortak bir pim oluşturmak için birbirine bağlanır ve kablolanır.

Ekranın belirli bir bölümünü açmak ve kapatmak için, normal bir LED ile yaptığınız gibi uygun pini YÜKSEK veya DÜŞÜK olarak ayarlarsınız. Böylelikle bazı segmentler açık, diğerleri karanlık olacak ve ekranda istenen numaranın karakter deseninin oluşturulmasına izin verilecek. Bu, daha sonra 0'dan 9'a kadar on ondalık basamağın her birini aynı 7 segmentli ekranda görüntülememize olanak tanır.

7 Segment Ekran Pin Çıkışı

Şimdi segment konfigürasyonunun üzerinden geçelim, böylece hangi pinlerin hangi segmentleri aydınlattığını bilelim. 7 segmentli ekran için pin çıkışı aşağıdaki gibidir.

7 Segment Ortak Anot Ortak Katot Pin Çıkışı

ag ve DP10 üzerinden 8 pin yani a, b, c, d, e, f, g ve DP segmenti (ondalık nokta) Arduino'nun dijital pinlerine bağlanır. Bağlı segmentteki her bir LED kontrol edilerek sayılar görüntülenebilir.

COMPim 3 ve 8, ortak bir pim oluşturmak için dahili olarak bağlanmıştır. Bu pin, ekranın tipine bağlı olarak GND'ye (ortak katot) veya 5V'ye (ortak anot) bağlanmalıdır.

Ortak Katot (CC) Vs Ortak Anot (CA)

Yedi segmentli ekran iki tiptedir: Ortak Katot (CC) ve Ortak Anot (CA). Her iki tipin de iç yapısı hemen hemen aynıdır. Aradaki fark, LED'lerin ve ortak terminalin polaritesidir. Adından da anlaşılacağı gibi, ortak katot birbirine bağlı bir 7 segmentte LED'lerin tüm katotlarına sahiptir ve ortak anot, birbirine bağlı bir 7 segmentteki LED'lerin tüm anotlarına sahiptir.

Ortak katot ekranında, LED segmentlerinin tüm katot bağlantıları birlikte 'mantık 0' / GND'ye bağlanır. Ayrı bölümler daha sonra, ayrı Anot terminallerine (ag) YÜKSEK / 'mantık 1' sinyali uygulanarak aydınlatılır.

Ortak Katot 7 Segment Ekranı Dahili Çalışma Animasyonu
Ortak Katot 7 Segment Çalışması

Ortak anot göstergesinde, LED segmentlerinin tüm anot bağlantıları mantık "1" ile birleştirilir. Ayrı bölümler, belirli bölümün (ag) Katoduna bir toprak, mantık “0” veya “DÜŞÜK” sinyali uygulanarak aydınlatılır.

Ortak Anot 7 Segment Ekranı Dahili Çalışma Animasyonu
Ortak Anot 7 Segment Çalışması

Genel olarak, ortak anot ekranları (aşağıdaki deneylerde kullandığımız) daha popülerdir çünkü birçok mantık devresi, kaynaklayabileceklerinden daha fazla akım çekebilir.

Ayrıca, ortak bir katot ekranının, ortak bir anot ekranı için bir devrede doğrudan bir ikame olmadığını ve bunun tersi olduğunu unutmayın, çünkü bu, LED'leri tersine bağlamakla aynıdır ve dolayısıyla ışık yayımı gerçekleşmez.

7 Segment Görüntüleme Nasıl Çalışır?    Görüntülenecek ondalık basamağa bağlı olarak, belirli LED'ler yanar. Örneğin, 4 numaralı rakamı görüntülemek için, b, c, f ve g'ye karşılık gelen dört LED segmentini aydınlatmamız gerekecek. Böylece, '0'dan 9'a kadar çeşitli rakamlar ve' A'dan F'ye kadar olan karakterler gösterildiği gibi 7 bölümlü bir ekran kullanılarak görüntülenebilir.7 Segment Ekran Numarası Oluşumu Segment Contol

Aşağıdaki doğruluk tablosu, rakamlar ve karakterler üretmek için aydınlatılması gereken ayrı segmentleri göstermektedir. Lütfen ortak anot 7 segmentli ekran için doğruluk tablosunun ortak katot 7 segmentli ekranın tam tersi olduğunu unutmayın.

Ortak Katot 7 Segment Görüntüleme Doğruluk Tablosu
Ortak Anot 7 Segment Ekran Doğruluk Tablosu

Kablolama - 7 Segment Ekranı Arduino UNO'ya Bağlama

Artık 7 segmentli ekranın nasıl çalıştığını anladığımıza göre, onu Arduino'ya kablolamaya başlayabiliriz!

7 segmentli ekranı devre tahtanıza yerleştirerek başlayın ve ekranın her iki tarafının devre tahtasının ayrı bir tarafında olmasını sağlayın. Ondalık nokta aşağıya bakarken, pimler aşağıdaki şekilde görüldüğü gibi soldan sağa alt tarafta 1-5 ve üst tarafta soldan sağa 10-6'dır.

Başlamak için, 3 veya 8 numaralı ortak pinlerden birini Arduino'daki 5V pinine (ortak bir anot 7 segmentli ekran kullanıyorsanız) veya Arduino'daki GND pinine (ortak bir katot 7 kullanıyorsanız) bağlayalım. segment ekranı). Üst konumdaki kalan 4 pim dijital pim 2'ye dijital pim 5'e bağlanır. Alt konumdaki diğer 4 pim, ondalık noktalı dijital pim 6'dan 9'a bağlanır.


Ekran, akım sınırlayıcı dirençler olmadan çalışabilirken, ekranınızın yanmasını önlemek için bunları devrenizde bulundurmak her zaman iyi bir fikirdir.

Tipik olarak standart kırmızı renkli 7 segmentli bir ekran için, her bir LED segmenti doğru aydınlatmak için yaklaşık 15 mA çekebilir, bu nedenle 5 voltluk bir dijital mantık devresinde akım sınırlama direncinin değeri yaklaşık 200Ω (5v - 2v) / 15mA olacaktır. veya 220Ω en yakın daha yüksek tercih edilen değere.

Ortak Anot Yedi Segment Ekranlı Arduino Kablolama Fritzing Bağlantıları


Ortak Anot Yedi Segment Ekranını Arduino UNO'ya Kablolama


Ortak Katot Yedi Segment Ekranlı Arduino Kablolama Fritzing Bağlantıları

Ortak Katot Yedi Segment Ekranını Arduino UNO'ya Kablolama
7 segmentli ekranları kontrol etmek için kod yazmaya başlamadan önce SevSeg Arduino Kitaplığını indirmeniz gerekir Bunu GitHub deposunu ziyaret ederek ve kitaplığı manuel olarak indirerek yapabilirsiniz veya zip dosyasını indirmek için bu düğmeyi tıklamanız yeterlidir:
Kurmak için Arduino IDE'yi açın, Sketch> Include Library> Add .ZIP Library'ye gidin ve ardından indirdiğiniz SevSeg ZIP dosyasını seçin. Bir kitaplık kurma konusunda daha fazla ayrıntıya ihtiyacınız varsa, bu Arduino Kitaplığı Kurma öğreticisini ziyaret edin .

Kitaplığı kurduktan sonra, bu çizimi Arduino IDE'ye kopyalayabilirsiniz. Aşağıdaki test taslağı 0'dan 9'a kadar sayılacaktır. Krokiyi deneyin; ve sonra onu biraz detaylı olarak açıklayacağız.

#include "SevSeg.h"
SevSeg sevseg;

void setup()
{
	//Set to 1 for single digit display
	byte numDigits = 1;

	//defines common pins while using multi-digit display. Left empty as we have a single digit display
	byte digitPins[] = {};

	//Defines arduino pin connections in order: A, B, C, D, E, F, G, DP
	byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
	bool resistorsOnSegments = true;

	//Initialize sevseg object. Uncomment second line if you use common cathode 7 segment
	sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
	//sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

	sevseg.setBrightness(90);
}

void loop()
{ 
   //Display numbers one by one with 2 seconds delay
   for(int i = 0; i < 10; i++)
   {
     sevseg.setNumber(i);
     sevseg.refreshDisplay(); 
     delay(2000);
   }
}

Kod Açıklaması:

Taslak, kontrolleri ve sinyalleri 7 segmente basitleştiren SevSeg kitaplığını dahil ederek başlar. Daha sonra taslak boyunca kullanabileceğimiz bir SevSeg nesnesi oluşturmalıyız.

#include "SevSeg.h"
SevSeg myDisplay;

Daha sonra, ekranın kaç basamağa sahip olduğunu belirtmeliyiz. Tek haneli bir ekran kullandığımız için 1'e ayarladık. 4 haneli bir ekran kullanıyorsanız, bunu 4'e ayarlayın.

//Set to 1 for single digit display
byte numDigits = 1;

DigitPins dizisi, çok basamaklı bir ekran kullanılırken basitçe 'ortak pinleri' tanımlar. Tek haneli bir ekranınız varsa boş bırakın. Aksi takdirde, tek tek basamakların 'ortak pinlerinin' bağlı olduğu arduino pin numaralarını sağlayın. Onları soldan sağa sıralayın.

//defines common pins while using multi-digit display
//Left empty as we have a single digit display
byte digitPins[] = {};

İlklendirildiğini gördüğümüz ikinci dizi, segmentPins dizisidir. Bu, segmentleri kontrol eden LED ekran üzerindeki pinlere bağlı tüm Arduino pin numaralarının bir dizisidir; bu durumda bunlar, devre tahtasından doğrudan Arduino'ya bağladıklarımızdır. Kütüphane pinlerin aşağıdaki sırada olduğunu varsaydığından, bunların da doğru sıraya konması gerekir: A, B, C, D, E, F, G, DP.

//Defines arduino pin connections in order: A, B, C, D, E, F, G, DP
byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};

Bu değişkenleri oluşturduktan sonra, onları begin()işlev kullanarak SevSeg yapıcısına iletiriz .

//Initialize sevseg object
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

'Döngü' bölümünde: Program 'for' döngüsünü ve 'i' değişkenini kullanarak 0'dan 9'a kadar saymaya başlar. Her seferinde, o SevSeg kütüphane işlevini kullanır setNumber()birlikte refreshDisplay ()ekrana üzerine sayısını ayarlamak için.

Ardından, 'i' artırılmadan ve sonraki sayı görüntülenmeden önce ikinci bir gecikme olur.

for(int i = 0; i < 10; i++)
{
     sevseg.setNumber(i);
     sevseg.refreshDisplay(); 
     delay(1000);
}

Arduino Projesi

Zar atmak

Ek olarak, erişilebilirlik teknolojisine ihtiyaç duyan kişilerin zar atmasını sağlayan başka bir proje. Bunu Yahtzee, ludo vb. Oyunları oynamak için kullanabilirsiniz. Hızlı yuvarlanma için dokunsal bir anahtar kullanmamız dışında aynı Arduino kurulumunu kullanır.

Rolling Dice Arduino Oyunu Kablolama Ortak Anot 7 Segmenti ile Fritzing Bağlantıları
Yuvarlanan Zar Arduino Projesi - Ortak Anot Yedi Segment Ekranının Arduino UNO'ya Kablolanması

Bir zarın tüm amacı, 1'den 6'ya kadar rastgele bir sayı bulmanın bir yolunu sağlamaktır. Ve rastgele bir sayı elde etmenin en iyi yolu, yerleşik bir rastgele işlevi (min, max) kullanmaktır . Bu iki parametre alır, ilki rastgele değerin alt sınırını (bu sayı dahil) ve ikinci parametre rasgele değerin üst sınırını belirtir (bu sayı hariç). Min ve max-1 arasında rastgele sayı üretilecek anlam

#include "SevSeg.h"
SevSeg sevseg; 
const int buttonPin = 10;     // the number of the pushbutton pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup(){
    byte numDigits = 1;
    byte digitPins[] = {};
    byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
    bool resistorsOnSegments = true;
 
    sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
    sevseg.setBrightness(90);
	
	// initialize the pushbutton pin as an input:
	pinMode(buttonPin, INPUT);
}

void loop()
{
	// read the state of the pushbutton value:
	buttonState = digitalRead(buttonPin);
  
	if (buttonState == HIGH) 
	{
		sevseg.setNumber(random(1,7));
		sevseg.refreshDisplay(); 
	}
}


Yedi Segment Arduino Projesi Rolling Dice Çıkışı

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.