ArduinoGenel

nrf24l01 Otomatik Resetleme Nasıl Yapılabilir?

Öncelikle NRF2L01 Radyo frekansı ile haberleşme yapmaktadır. İki nokta arasındaki bilgiyi RF transfer modülü kullanarak haberleşme sağlanmaktadır. NRF24L01 otomatik resetleme yapmadan önce cihazı kısaca tanıyalım…

Nasıl Çalışır?

2.4 GHz bandında, 250Kbps’den 2Mbps’ye aralığında baud hızında çalışabilirler. Açık alanda iletim kuvvetleri çok daha iyi olmaktadır. Kapaklı alanda iki nokta arası haberleşme mesafesi oldukça düşmektedir. Açık alanda 100 metreye kadar yalın halde haberleşmektedir.

NRF24l01 modülü

NRF24l01 modülünü veri aktarım mesafesini nasıl arttırırım? sorusuna cevap olarak alttaki görselde kullanılan antenli modül kullanılabilir. Bu durumda haberleşme mesafeniz yine açık ortamda 800m ila 1km arasına çıkabilmektedir.

nRF24L01+PA+LNA Long Range Antenna Wireless Transceiver Module
NRF24l01 + PA + LNA SMA

Product’s Features:

  • Frequency: 2.4 GHz ~ 2.5 GHz
  • Operating Voltage: 3V ~ 3.6V
  • Max. Current: 115mA
  • Multi Frequency: 125 Frequency
  • It suppots up to 6 channel’s data receiving.
  • NRF24L01 connector: SMA-female
  • Antenna connector: SMA-male

NRF24l01 resetlemek…

Bu cihazlar uzun süre kullanımda haberleşmede kopukluklar veya haberleşme de hücre, veri yanlışlıkları olmaktadırlar. Yapmış olduğumuz 9 node (hücreli) bir çalışmada 7-10 gün enerjide kaldıklarında sistemin yanılmalara uğradığını veya haberleşmenin tamamen durduğunu gördük. Bu durumun tüm cihazların enerjisini kesip tekrar verdiğimizde giderildiğini farkettik.

Bunun üzerine arduino içerisinde yazılımsal olarak her 72 saatte bir resetlemesini sağladık. Geçerli bir sonuç elde edemedik. Yapılan araştırmalar sonucu (araştırman: Yunus Emre HENDEK) arduino resetlemenin yerine nrf24l01 cihazının resetlenmesinin daha doğru olacağını gördük ve bunun kodlarını sizlerle paylaşmanın faydalı olacağını düşündük.

void loop()
{
  dataTransmitted[0]++;
  if ( haber1.write( &dataTransmitted, sizeof(dataTransmitted)))
  {

    if (haber1.isAckPayloadAvailable())
    {
      haber1.read(&ack, sizeof(ack));
    }
  }
  else
  {
    haber.powerDown();
    \\Serial.println(" 1 Tx1 problem giderildi.");
    radio1_init();
    haber1.powerUp();
  }
}
void loop()
{
      if (haber2.available())
      {
        haber2.read( &dataReceived, sizeof(dataReceived));
        haber2.writeAckPayload(1, &ack2, sizeof(ack2));
        if (prevack2 == dataReceived[0])
        {
          \\Serial.println("RX 2 problem");
          c2++;
        }
        prevack2 = dataReceived[0];
        if (c2 > 2)
        {
          haber2.powerDown();
          radio2_init();
          haber2.powerUp();
          c2 = 0;
        }
      }
}

Yukarıdaki kodlar sadece konu ile ilgili olan kısımlardan aldım. Buradaki örnek ile kendi kod kaynağınızda değişikliklere giderek ayarlayabilirsiniz.

Teknik destek için yine bana ulaşabilirsiniz.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu