Bu yazıyı herkes okusun

Bu yazıyı herkes okusun - Perspektif
Klasman dışı - İçimizdeki Savaşlar

3 Mayıs 2015 Pazar

Arduino - NRF24 ile Kablosuz Haberleşme


Bugünkü yazımda 2.4 GHz (2.400 – 2.4835GHz) frekansında yayın yapan NRF24 haberleşme modülünü inceleyeceğim. Son zamanlarda farklı sistemlerin birbiri ile haberleştirilmesi, karşılıklı veri aktarımı ve senkron çalışma üzerine birçok çalışma mevcut. Bu çalışmaların birçoğunda xbee modülleri kullanılırken ucuz haberleşme sistemleri de üretilmiştir. Bunlardan biri olan NRF24L01 2.4 GHz frekans bandında 1Mhz çözünürlükte 126 farklı kanaldan yayın yapar. Alıcı (receiver) ve verici (transmitter) olmak üzere 2 farklı modülden oluşan NRF24 ucuz olması açısından birçok çalışmada kullanılır. NRF24 radio modülü SPI (serial peripheral interface) kütüphanesi ile kullanılır ve veri iletimi seri haberleşme ile yapar. Haberleşme hızı saniyede 2 Mb’ tır (2Mbps).


NRF24 radio modülleri alıcı ve verici olarak kullanılabilir. Modüllerin hangisinin alıcı hangisinin verici olduğu mikroişlemciye yazılan kod ile ilgili. Burda yapmaya çalıştığımız ise 2 arduino kartı birbiri ile haberleştirilecek ve senkron şekilde ilgili pinlere bağlı ledler yakılıp söndürülecek.Gerisi artık sizin neleri haberleştireceğinize kalmış diyebilirim.


NRF24 modülü alıcı olarak kullanıldığı durumda veri aktarım hızı 2Mbps iken 12.3 mA , verici olarak kullanıldığında 11.3 mA akım çekmektedir. Multireceiver olarak kullanılabilir ve 6 farklı vericiden 6 farklı adres ile bir modül veri alışverişinde bulunabilir.




Adresler datasheete göre şöyle de gösterilmiştir:




Pin açıklamaları ( yani ben öyle bağladım )

NF24L01

ARDUINO UNO


Chip Enable- Modülün alıcı yada verici olarak kullanılmasını ayarladığımız pin.

CE (CS)

9


SPI chip select

CSN

10


SPI clock

SCK

13


SPI slave data input

MOSI

11


SPI slave data output

MISO

12


Besleme (+1.9V – 3.6V DC)

VCC

3.3V


Besleme ground

GND

GND 


Ve de kodlar;

Verici tarafın kaynak kodu:

///// verici kısımdan gönderşlen ledin yanıp yanmadığının bilgisi karşı tarafa iletilir

#include <SPI.h> // kütüphaneler eklendi

#include <RF24.h>

#define LED 5 // 5. pine led bağlanmıştır

#define RF_CS 9 // RF24 üzerindeki CS pininin (bazı modellerde CE diye yazılmaktadır) arduino ya takıldığı pin numarası verilmiştir

#define RF_CSN 10 // RF24 üzerindeki CSN pininin arduino ya takıldığı pin numarası verilmiştir

RF24 radio(RF_CS, RF_CSN); // RF24 türünde radio isimli değişken tanımlandı

const uint64_t pipes[2] = { 0xe7e7e7e7e7LL, 0xc2c2c2c2c2LL }; // paralel veri yolu adresleri

boolean durum =false;

void setup() {

Serial.begin(9600); // seri haberleşme hızı

pinMode(LED, OUTPUT);

radio.begin(); // rf24 haberleşmesi başlatıldı

radio.openWritingPipe(pipes[0]); // modülün verici olarak kullanılması için gerekli olan data yolu adresini haberleşmeye açar. Yani 0xe7e7e7e7e7LL adresi veriyi gönderen kısım.

//Bunu karşı taraf 0xc2c2c2c2c2LL adresi ile alır

radio.openReadingPipe(1, pipes[1]); // modülün alıcı olarak kullanılması için gerekli olan data yolu adresini haberleşmeye açar. Yani 0xc2c2c2c2c2LL adresi veriyi alan kısım.

//Yani veri karşıdaki 0xe7e7e7e7e7LL adresinden alınır

radio.startListening(); // radio modüllerinden veri gelinip gelinmediğini kontrol eetmektedir.

radio.printDetails();

}


void loop() {

unsigned long time = millis(); // programın çalışma süresinin tutulduğu değişken

// belli bir sürede modüllerin birbiri ile haberleşmediği durumlarda uyarı vermesi için kullanılacaktır

uint8_t on[1],off[1];

on[0]=1;

off[0]=0;

radio.stopListening();

if(!durum)

{

digitalWrite(LED,HIGH); // led yandığında karşı tarafın ledi sonecek

radio.write( &on,sizeof(on));

durum= true;

}

else

{

digitalWrite(LED,LOW);

radio.write( &off,sizeof(off));

durum=false;

}

radio.startListening();

delay(1000);

}

Alıcı tarafın kaynak kodu:

/// verici tarafından gelen data bilgisi alıcı tarafından alındığında;verici tarafındaki led durumuna göre yandığında kapatılacak söndüğünde açılacak

#include <SPI.h>

#include <RF24.h>

#define led 3

#define RF_CS 9

#define RF_CSN 10

RF24 radio(RF_CS, RF_CSN);

const uint64_t pipes[2] = { 0xe7e7e7e7e7LL, 0xc2c2c2c2c2LL }; // paralel veri yolu adresleri

bool done = false;

void setup() {

Serial.begin(9600);

pinMode(led, OUTPUT);

radio.begin();

radio.openWritingPipe(pipes[1]);

radio.openReadingPipe(1, pipes[0]);

radio.startListening();

radio.printDetails();

}

void loop() {

if (radio.available()) {

char rx_data[1]; // gelen verinin dizi sayısı 1. Çünkü ya 0 gelecek yada 1 gelecek

radio.read( &rx_data, 1 );

if(rx_data[0]==1)

{

Serial.print("Sonsun: ");

Serial.println(rx_data[0]);

digitalWrite(led,LOW);

}

if(rx_data[0]==0)

{

digitalWrite(led,HIGH);
Serial.print("Yansin: ");
}

}

}

Hiç yorum yok :

Yorum Gönder