برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

ماژول انتقال بیسیم اطلاعات +nrf24l01 ( فرکانس 2.4g ) + آنتن

ShahBaz | شنبه, ۲۹ فروردين ۱۳۹۴، ۱۲:۳۵ ق.ظ

ماژول انتقال بیسیم اطلاعات +nrf24l01 ( فرکانس 2.4g ) + آنتن

ماژول فرستنده و گیرنده رادیویی +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


شماتیک مدار:
nrf24l01_sch.jpg

مثال آردوینو:
کد:
/*
 # 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="";
}
جهت سفارش این کالا، به این بخش در فروشگاه آفتاب رایانه مراجعه نمایید.
تصاویر کوچک شده (Thumbnails) پیوست شده تصاویر کوچک شده (Thumbnails) پیوست شده nrf24l01.jpg  
فایل های پیوست شده فایل های پیوست شده
ویرایش توسط max : 10-31-2013 در ساعت 01:12 PM

================================

سلام
این کد برای یک جفت +nrf24l01 تولید شده است ، فرض بر این هست که هر کدام از ماژول ها به یک برد آردوینو متصل هست ،کافی هست فقط این دو خط رو تغییر بدید و بعد روی هر برد جداگانه آپلود کنید.

کد:
String Receive_Address = "clie1";
String Send_Address = "clie2";



به صورت پیش فرض یکی از بردها به نام clie1 و برد دیگر clie2 نامگذاری شده ، پس توجه داشته باشد در زمان آپلود کد بر روی برد دوم حتما جای اسامی رو به این ترتیب تغییر بدید:


کد:
String Receive_Address = "clie2"; 
String Send_Address = "clie1";



بعد از اجرای کد در صورتی که از کنسول سریال مونیتور آردوینو استفاده کنید باید به راحتی بتونید پیام ها رو به صورت متنی برای برد دوم ارسال و دریافت کنید.

=====================================

سلام
این 11 12 13 پایه های برد آردوینو هست ، باید معادلش رو روی میکرو مورد نظر خودتون پیدا کنید.


* MISO -> 12 * MOSI -> 11 * SCK -> 13 * * Configurable: * CE -> 8 * CSN -> 7 */

=============================================

با سلام من آردوینو مگا رو با آردوینو پرو مینی را با این ماژول بیسیم به هم وصل کردم 

فقط یادتون باشه شما با استفاده از کتابخانههای بالا نمیتونید پایه هارو خودتون عوض کنید پس بل اجبار باید از دیتا شیت آردیونو خودتون پایهای فوق ( * MISO -> 12 * MOSI -> 11 * SCK -> 13 * * Configurable: * CE -> 8 * CSN -> 7 */) را پیدا کنید

==============================================


طبق دیتا شیت باید که از 1.9 تا 3.5 کارکنه و ولتاژ 2.5 به نظر ایمن میاد برای کار (ولتاژ 2.5 با تقیسم ولتاژ دو مقاومت 10 کیلو از پین VCC میکرو گرفته شده است)
البته از خود کتابخانه SPI واسه تست کردن استفاده کردم و تمام مود ها و تقسم کلاک ها را نیز چک کردم به نظر تو کلاک های پاینتر پایدارتر میاد اما باز هم نتیجه ای نگرفتم 
ممکن است به خاطر کیفیت پایین محصولات چینی باشه.

=============================

مشکل حل شد. سیم بندی برای Mega2560 باید به صورت زیر باشد:
MISO -> 50
MOSI -> 51
SCK -> 52
CE -> 8
CSN -> 7
GND -> GND
VCC -> 3.3v

==================================

من از یک Arduino Pro Mini که به یک سنسور دما و رطوبت DHT 22 متصل است استفاده کردم. طرف دیگه یک آردینو Uno بود که مقادیر رو دریافت می کنه و روی یک Liquid Crystal نمایش میده. با همه ماژول های NRF که 8 پایه هستند تست کردم و با همشون به خوبی کار میکنه.

کد ارسال:
کد:
/* YourDuinoStarter Example: nRF24L01 Transmit Joystick values
 - WHAT IT DOES: Reads Analog values on A0, A1 and transmits
   them over a nRF24L01 Radio Link to another transceiver.
 - SEE the comments after "//" on each line below
 - CONNECTIONS: nRF24L01 Modules See:
 http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
   1 - GND
   2 - VCC 3.3V !!! NOT 5V
   3 - CE to Arduino pin 9
   4 - CSN to Arduino pin 10
   5 - SCK to Arduino pin 13
   6 - MOSI to Arduino pin 11
   7 - MISO to Arduino pin 12
   8 - UNUSED
   - 
   Analog Joystick or two 10K potentiometers:
   GND to Arduino GND
   VCC to Arduino +5V
   X Pot to Arduino A0
   Y Pot to Arduino A1
   
 - V1.00 11/26/13
   Based on examples at http://www.bajdi.com/
   Questions: terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include "DHT.h"
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN   9
#define CSN_PIN 10
//#define JOYSTICK_X A0
//#define JOYSTICK_Y A1
#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe


/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/
int data[3];  // 2 element array holding Joystick readings

DHT dht(DHTPIN, DHTTYPE);
void setup()   /****** SETUP: RUNS ONCE ******/
{
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  dht.begin();
   
  
}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  //joystick[0] = analogRead(JOYSTICK_X);
  //joystick[1] = analogRead(JOYSTICK_Y);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  data[0] = 1;
  data[1] = 100;//h;
  data[2] = 200;//t;
  
  radio.write( data, sizeof(data) );
  //delay(1000);
}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/

//NONE
//*********( THE END )***********
کد دریافت
کد:
/* YourDuinoStarter Example: nRF24L01 Receive Joystick values

 - WHAT IT DOES: Receives data from another transceiver with
   2 Analog values from a Joystick or 2 Potentiometers
   Displays received values on Serial Monitor
 - SEE the comments after "//" on each line below
 - CONNECTIONS: nRF24L01 Modules See:
 http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
   1 - GND
   2 - VCC 3.3V !!! NOT 5V
   3 - CE to Arduino pin 9
   4 - CSN to Arduino pin 10
   5 - SCK to Arduino pin 13
   6 - MOSI to Arduino pin 11
   7 - MISO to Arduino pin 12
   8 - UNUSED
   
 - V1.00 11/26/13
   Based on examples at http://www.bajdi.com/
   Questions: terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display


/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN   9
#define CSN_PIN 10

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe


/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/
int data[3];  // 2 element array holding Joystick readings

void setup()   /****** SETUP: RUNS ONCE ******/
{
  Serial.begin(9600);
  delay(1000);
  Serial.println("Nrf24L01 Receiver Starting");
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();;
  
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  if ( radio.available() )
  {
    // Read the data payload until we've received everything
    bool done = false;
    while (!done)
    {
      // Fetch the data payload
      done = radio.read( data, sizeof(data) );
      //Serial.print("H = ");
      //Serial.print(data[1]);
      //Serial.print(" T = ");      
      //Serial.println(data[2]);
      lcd.clear();

      lcd.setCursor(0,0);
      lcd.print("Channel: ");
      lcd.print(data[0]);
      
      lcd.setCursor(0,1);
      
      lcd.print("H: ");
      lcd.print(data[1]);
      lcd.print(" T: ");
      lcd.print(data[2]);

      delay(500);
    }
  }
  else
  {    
      //Serial.println("No radio available");
      lcd.clear();
      lcd.print("No radio available");
      delay(500);
  }

}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/

//NONE
//*********( THE END )***********

امّا از دو طرف فقط توی سریال صفر میبینم...
دوستانی که کار کردن با این ماژول و یا اطلاعاتی دارن لطفاً راهنمایی کنید...
قسمت SETUP هر دو تا برنامه یکی هست و فقط جای آدرس pipe ها (read و write)عوض شده
اون قسمت setRetries هم با 15و15 هم همین طور کار می کرد...

من چیز دیگه ای، به ذهنم نمیرسه دوستان اگر چیزی میدونند لطفاً کمک کنید...

لطفاً از طریق همین فروم یا میل «arsham.sharifnia@gmail.com» پاسخ بدید

نقل قول نوشته اصلی توسط navidnkh نمایش پست ها
میشه کتابخونه هایی که استفاده کردید رو بزارید تا بهتر بتونم مشکلتونو حل کنم
این هم لینک دانلود دوتا کتابخونه rf24,nRF24l01 ممنون میشم...


لینک پرشین*گیگ:
Download LIBRARIES.zip


لینک از سرور همین سایت:
LIBRARIES.zip


نقل قول نوشته اصلی توسط arsham نمایش پست ها
این هم لینک دانلود دوتا کتابخونه rf24,nRF24l01 ممنون میشم...


لینک پرشین*گیگ:
Download LIBRARIES.zip


لینک از سرور همین سایت:
فایل پیوست 1159
من کد شما رو تست کردم و خب دقیقا همون جواب 0 رو دریافت کردم ولی چون من دقیقا نمیدونم میخواید چه کار انجام بدید نمی دونم کد رو اون جور که میخواید تونستم تغییر بدم یا نه

حالا این کد هارو میزارم ببینید به درد کارتون میخوره یا بازهم اگر مشکل داره بگید تغیرش بدم

کد مگا به عنوان فرستنده

کد:
 /*       
        ####UPLOAD TO MEGA####
        #     MOSI==>51      #
        #     MISO==>50      #
        #     SCK===>52      #
        # # # # # # # # # # ##
        # CE_pin 7&CSN_pin 8 #
        ######################
*/


//====# header files #====
#include<SPI.h>
#include<nRF24l01.h>
#include<RF24.h>


//====# define #====
#define CE_pin 7
#define CSN_pin 8


//====# pre initializing #====
RF24 radio(CE_pin,CSN_pin);
const uint64_t mega_to_uno_pipe=0x0f0f0f0f01LL; //40 bit add, differs in lsb
const uint64_t uno_to_mega_pipe=0x0f0f0f0f02LL; // LL means long-long
int A[1];
bool done;
//====# SetUp part #====
void setup(){
  Serial.begin(9600);
  radio.begin();
  radio.setPayloadSize(sizeof(A));
  radio.openReadingPipe(1,mega_to_uno_pipe);
  radio.openWritingPipe(uno_to_mega_pipe);
  radio.setRetries(0,0);
  radio.setDataRate(RF24_1MBPS);
}


//====# The main program #====
void loop(){
  A[0] = 0xF0;
 done=radio.write( A, 1 );
 Serial.print(done);
 delay(100);
}
کد uno به عنوان گیرنده





کد:
/*        
        ####UPLOAD TO UNO####
        #    MOSI==>11      #
        #    MISO==>12      #
        #    SCK===>13      #
        # # # # # # # # # # #
        #CE_pin 7&CSN_pin 8 #
        #####################
*/




//====# header files #====
#include<SPI.h>
#include<nRF24l01.h>
#include<RF24.h>


//====# define #====
#define CE_pin 7
#define CSN_pin 8


//====# pre initializing #====
RF24 radio(CE_pin,CSN_pin);
const uint64_t mega_to_uno_pipe=0x0f0f0f0f01LL; //40 bit add, differs in lsb
const uint64_t uno_to_mega_pipe=0x0f0f0f0f02LL; // LL means long-long
int A[1];
bool done=false;
//====# SetUp part #====
void setup(){
  A[0] = 0x000;
  Serial.begin(9600);
  radio.begin();
  //radio.setPayloadSize(sizeof(A));
  radio.openReadingPipe(1,uno_to_mega_pipe);
  radio.openWritingPipe(mega_to_uno_pipe);
  radio.setRetries(0,0);
  radio.setDataRate(RF24_1MBPS);
  pinMode(13,OUTPUT);
  radio.startListening();
}


//====# The main program #====
void loop(){
   
  if (radio.available()){   
    while (true){
      radio.read(&A,sizeof(A));
      if(A[0]==0xF0){
        done=true;
      }
      //radio.stopListening();
      digitalWrite(13,done);
      Serial.print("Done: ");
      Serial.println(done);
      Serial.print("A[0]: ");
      Serial.println(A[0],HEX);
      delay(100);
    }
  }
}
ویرایش توسط navidnkh : 11-10-2014 در ساعت 06:15 PM
===================================================
بسم الله الرحمن الرحیم

0)من اینو خریدم منتها قاعدتا این کد برای سایر بوردهای NRF24l01 هم جواب می ده:

ماژول انتقال بیسیم اطلاعات +NRF24L01 ( فرکانس 2.4G ) + آنتن

1) برای رفع مشکل تغذیه شما می تونید با موازی کردن دو خازن در رنج های ۱۰۰ نانو فاراد و ۱۰ میکرو فاراد با تغذیه ۳/۳ ولتی اون هر نویزی رو از روی تغذیه حذف کنید و مطابق شکل زیر سیم کشی ها رو انجام بدید:

nrf24l01_bb_.jpg
my_nrf24.jpg

2)من از کتابخونه RF24 استفاده کردم؛ فایل فشرده RF24 رو unzip کنید و توی فولدر libraries قرار بدید.

github.com/tmrh20/RF24

3)فایل فشرده my_RF24_T کد مربوط به فرستنده هست و فایل فشرده my_RF24_R کد مربوط به گیرنده هست.
اتصال پین ها باید با کد انطباق داشته باشه:

کد:
// Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 
RF24 radio(7,8);
امیدوارم مفید بوده باشه.
فایل های پیوست شده فایل های پیوست شده


نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی