ماژول فرستنده و گيرنده راديويي
+nrf24l01 از جديدترين فرستنده و گيرنده 2.4 گيگاهرتزي
شركت nordic semiconductor يعني چيپ +nrf24l01 استفاده مي كند. فركانس اين آي سي براي دريافت و ارسال راديويي اطلاعات باند 2.4 گيگاهرتز بوده و مشخصات بسيار جديدي دارد. اين آي سي تمامي مشخصات و مزاياي آي سي سري قبل خود يعني nrf24l01a را داراست. بعلاوه pipeline و بافرهاي اضافي، و همچنين ارسال مجدد اتوماتيك، از قابليتهاي اضافه شده در اين سري از آي سي هاي rf است.
توجه: در سري پلاس «+» از اين آي سي ها يعني +nrf24l01 شركت nordic مشخصاتي مانند برد، حساسيت و نرخ تبادل اطلاعات را نسبت به محصول سري قبل يعني nrf24l01 ارتقاء داده است. با اين حال دستورات كنترلي يا command های اين سري با سري قبل يكي بوده و تغييري نداشته است.
مشخصات:
- آنتن 2.4 گيگاهرتز روي بورد
- برد 100 متر
- نرخ تبادل اطلاعات قابل تنظيم از 250 كيلوبيت تا 2 مگابيت بر ثانيه
- auto acknowledge
- re-transmit auto
- multiceiver با 6 ديتاپايپ
- داراي 32 بايت fifo بصورت مجزا براي tx و rx
- پايه هاي ورودي با تحمل ولتاژ 5 ولت
- قابليت تنظيم كانال ارتباطي از 2400 مگاهرتز تا 2525 مگاهرتز (125كانال قابل انتخاب)
- حداقل نياز به قطعات جانبي جهت راه اندازي
- ترتيب پايه ها :vcc ، ce ، csn ، sck ، mosi ، miso ، irq
شماتیک مدار:
فایل پیوست 442
مثال آردوینو:
کد:
/*
# be name khoda!
# a mirf example to test the latency between two ardunio.
# company : Aftabrayaneh
# website : Http://shop.aftabrayaneh.com
# developers : Reza najafi, elham rasekh
# date : 09.09.2013
# version : 3.0
* pins:
* hardware spi:
* miso -> 12
* mosi -> 11
* sck -> 13
*
* configurable:
* ce -> 8
* csn -> 7
*/
#include <spi.h>
#include <mirf.h>
#include <nrf24l01.h>
#include <mirfhardwarespidriver.h>
const int max_buffer_len = 16;
string receive_address = "clie1"; //a name that is dedicated to this station; max is 5 char.
String send_address = "clie2"; //a name that is dedicated to another station; max is 5 char.
String strmirfbuffer="";
byte transfer_lock=0;
void setup()
{
serial.begin(9600);
setup_mirf(); // initializing overall needed...
Senddata("talk");
}
void loop()
{
if (!mirf.issending())
check_mirfbuffer();
read_serialbuffer();
}
//this function checks mirf data availability. If data is available, put it in the buffer and generates an event.
Void check_mirfbuffer()
{
if (mirf.dataready())
{
while(mirf.dataready())
{
int tmp_index=0;
byte tmp_buffer[4]={0};
mirf.getdata(tmp_buffer);
while(tmp_buffer[tmp_index] && tmp_index<4 )
{
strmirfbuffer = strmirfbuffer + char(tmp_buffer[tmp_index]);
tmp_index++;
}
if (strmirfbuffer.length() >= max_buffer_len )
buffer_ready();
if (!mirf.dataready())
delay(2);
}
}
else if (strmirfbuffer.length()>0 )
buffer_ready();
}
//this function sends a 4 byte packet
void sendpacket(char packet[5])
{
mirf.send((byte *)packet);
while(mirf.issending());
}
//this function sends data
void senddata(string strdata)
{
int strlen=0;
string tmp_str="";
serial.print("sending data: ");
serial.print(strdata);
transfer_lock=1;
strlen=strdata.length();
serial.print(" : ");
serial.println(strlen);
//parsing the data to 4 character packets (byte *)packet
while (strlen>0)
{
char tmp_char[5]={0};
if(strlen>4)
{
tmp_str=strdata.substring(0,4);
strdata=strdata.substring(4);
}
else
{
tmp_str=strdata;
strdata="";
}
tmp_str.tochararray(tmp_char, 5);;
sendpacket(tmp_char);
strlen=strdata.length();
}
transfer_lock=0;
}
//this function parses received commands from another nrfs.
Void buffer_ready()
{
if (strmirfbuffer == "talk")
{
senddata("hurray !");
serial.println("talking...");
}
//and parse other commands so on ...
Else
{
serial.print("<");
serial.print(strmirfbuffer);
serial.println(">");
}
clear_buffer();
}
//this function forms a buffer of serial data and send it
void read_serialbuffer()
{
if(serial.available())
{
char chardata;
string strserialbuffer="";
while (serial.available() && strserialbuffer.length() < max_buffer_len )
{
chardata=serial.read();
strserialbuffer=strserialbuffer + chardata;
if (!serial.available())
delay(1);
}
while (transfer_lock); //wait for transfer process
senddata(strserialbuffer);
}
}
//this function initializes overall needed for wireless communication
void setup_mirf()
{
char receive_adr_char[6];
char send_adr_char[6];
receive_address.tochararray(receive_adr_char, 6);
send_address.tochararray(send_adr_char, 6);
mirf.spi = &mirfhardwarespi;
mirf.init();
mirf.setraddr((byte *)receive_adr_char);
mirf.settaddr((byte *)send_adr_char);
mirf.payload = sizeof(unsigned long);
mirf.config();
//reg - start
byte rf_setup = 0;
mirf.readregister( rf_setup, &rf_setup, sizeof(rf_setup) );
if (rf_setup != 0)
serial.println("beginning ... ");
else
{
serial.println( "wireless did not initialize!" );
while (rf_setup==0);
}
delay(100);
}
//this function clears the buffer
void clear_buffer ()
{
strmirfbuffer="";
}
جهت سفارش این کالا، به
این بخش در فروشگاه آفتاب رایانه مراجعه نمایید.