رباتیک و هوافضا

ساخت چت روم خصوصی بوسیله آردینو, ماژول nRF24L0 و Processing

ساخت چت روم خصوصی بوسیله آردینو و ماژول nRF24L0

به نام خدا

ساخت چت روم خصوصی بوسیله آردینو, ماژول nRF24L0 و Processing

ساخت چت روم خصوصی بوسیله آردینو و ماژول nRF24L0

برای مردم معمولی در دنیای مدرن امروزی, ساخت شبکه محلی که بتوان در آن اطلاعات شخصی و محرمانه را به اشتراک گذاشت تقریبا غیر ممکن است. دلیل آن این است که اکثر مردم برای انجام این چنین کاری از واتساپ، فیس بوک، تلگرام و… استفاده می کنند و بستر اصلی همه آن ها اینترنت است.اگر بخواهیم از اینترنت برای اینکار استفاده نکنیم باید چه کنیم؟ اینکار با استفاده از میکروکنترلر و مخابره گر بی سیم امکان پذیر است.

ساخت چت روم خصوصی بوسیله آردینو و ماژول nRF24L0

طرز کار پروژه ساخت چت روم خصوصی بوسیله آردینو, ماژول nRF24L0 و Processing:

برای این پروژه به یک جفت برد آردینو و ماژول بی سیم نیازمندیم. ما از ماژول بی سیم nRF24L0 استفاده کرده ایم. طرز کار با این ماژول ساده است.

ساخت چت روم خصوصی بوسیله آردینو و ماژول nRF24L0

آردینو و ماژول nRF24L0 بوسیله ارتباط سریال با هم ارتباط برقرار می کنند. ماژول nRF24L0 یک فرستنده گیرنده نیمه دوطرفه است چرا که میتواند همزمان اطلاعات را ارسال و دریافت کند. اطلاعاتی که توسط این ماژول جمع آوری و فرستاده می شود میتواند توسط هر ماژول دیگری دریافت شود.

از انجایی که ما میخواهیم چت روم شخصی سازی شده خودمان را بسازیم از «Processing» استفاده میکنیم. Processing نرم افزاری است که بوسیله UART با آردینو ارتباط برقرار می کند. ما بوسیله زبان Processing فایلی با فرمت exe درست می کنیم که روی هر کامپیوتری که Java Runtime داشته باشد قابل اجرا است. برای چت کردن فقط کافیست که آردینو را متصل کنیم و فایل exe را باز کنیم.

در این پروژه اعضای چت روم دو نفرند ولی با توجه به این که nRF24L0 شش خط  دارد, تعداد اعضا را میتوان به ۶ نفر هم رساند.این چت روم ها میتواند تا فاصله ۱۰۰ متری از یکدیگر کار کنند که البته میتوان این مقدار را نیز با خرید ماژولی بهتر افزایش داد.

قطعات مورد نیاز:

  • دو عدد آردینو از هر مدلی
  • دو عدد nRF24L01
  • رگولاتور ولتاژ ۳٫۳ (الزامی نیست)
  • سیم برد بورد

دیاگرام مدار:

Arduino Mega with nRF24L01 

ساخت چت روم خصوصی بوسیله آردینو, ماژول nRF24L0 و Processing

Arduino Nano with nRF24L01

ساخت چت روم خصوصی بوسیله آردینو, ماژول nRF24L0 و Processing

نکاتی درباره کار با nRF24L01:

برای اینکه نویز پذیری ماژول nRF24L01 را کاهش دهید به این نکات توجه کنید. مطمئن شوید ماژول چینی نمی خرید(!!).این ماژول نسبت به تغییرات ولتاژ و جریان حساس است و به سادگی خراب می شود حتی امکان سوختن ماژول نیز وجود دارد. برای اینکه ولتاژ تغذیه را صاف کنید از دو خازن ۱۰uf و ۰٫۱uf در دوسر vcc و gnd استفاده کنید.

کد های آردینو:

از آنجایی که ارتباط بین آردینو و nRF24L01 بوسیله spi صورت می گیرد باید کتابخانه spi را به برنامه اضافه کنیم. همچنین از کتابخانه RF24 برای کار کردن با nRF24L01 استفاده می کنیم. این کتابخانه ها را می توانید از آخر برنامه دانلود کرده و به IDE اضافه کنید.

#include <SPI.h>  
#include "RF24.h"

پایه های CE و CS ماژول NRF به تریب به پایه های ۸ و ۱۰ آردینو متصل می شود.

RF24 myRadio (8, 10);

یک ساختار به نام package میسازیم که شامل یک آرایه ۲۰ متغییره است.

struct package
{
  char  text[20]; //Text to transmit on air
};
typedef struct package Package;
Package data;

در تابع () void setup , ما baud rate را روی ۹۶۰۰ تنظیم کرده ایم. ماژول را روی ۱۱۵ و ولتاژ پایین, با سرعت  ۲۵۰kbps تنظیم کرده ایم.این به دلخواه قابل تغییر است.

void setup() 
{
  Serial.begin(9600);
  delay(1000);
  //Serial.print("Setup Initialized");
  myRadio.begin(); 
  myRadio.setChannel(115);  //115 band above WIFI signals
  myRadio.setPALevel(RF24_PA_MIN); //MIN power low rage
  myRadio.setDataRate( RF24_250KBPS ) ;  //Minimum speed
}

ماژول در دو حالت کار می کند یا فرستنده که اطلاعات را از طریق بافر سریالش می فرستد یا درحالت دریافت که دنبال گرفتن اطلاعت است. دیتایی که کاربر مینویسد در آرایه ای ذخیره و به () WriteData ارسال میشود تا فرستاده شود.

void loop()  
{
  
  while(Serial.available()>0) //Get values from user
  { 
    val = Serial.peek();
    if(index < 19) // One less than the size of the array
      {
          inChar = Serial.read(); // Read a character
          inData[index] = inChar; // Store it
          index++; // Increment where to write next
          inData[index] = '\0'; // Null terminate the string
      }
     if (val=='#')
      { 
       strcpy( data.text, inData);
        WriteData(); //Put module in Transmit mode
    while (index!=0)
      {
      inData[index] = ' ';
      index--;
      }
      }
  }
ReadData(); //Put module Receive mode
}

تابع () void WriteData دیتا را روی آدرس۰xF0F0F0F0AA می نویسد. این آدرس در ماژول های دیگر بعنوان خط نوشتن استفاده می شود.

void WriteData()
{
  myRadio.stopListening(); //Stop Receiving and start transminitng 
  myRadio.openWritingPipe(0xF0F0F0F066);//Sends data on this 40-bit address
  myRadio.write(&data, sizeof(data)); 
  delay(300);
}

تابع () void ReadData دیتا را روی آدرس ۰xF0F0F0F066 می نویسد. این آدرس در ماژول های دیگر بعنوان خط خواندن استفاده می شود.

void ReadData()
{
myRadio.openReadingPipe(1, 0xF0F0F0F0AA); //Which pipe to read, 40 bit Address
  myRadio.startListening(); //Stop Transminting and start Reveicing 
  if ( myRadio.available()) 
  {
    while (myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
    }
    Serial.println(data.text);
  }
}

نرم افزار Processing:

Processing یک نرم افزار سورس باز (open source) است که برای طراحی گرافیکی استفاده می شود. کار کردن با این نرم افزار بسیار ساده است و شباهت زیادی به Android Development IDE دارد. کد های Processing برای هر دو صفحه چت در قسمت دانلود آمده است. برای استفاده از این کد ها باید Processing را نصب کرده باشید. در کد زیر قسمت  “port = new Serial(this,Serial.list()[4],9600); //Reads the 4th PORT at 9600 baudrate”  مهم است چون که مشخص می کند کدام پورت دیتا را میخواند.

void setup()
{
  size(510,500);
  port = new Serial(this,Serial.list()[4],9600); //Reads the 4th PORT at 9600 baudrate
  println(Serial.list());
  background(0);
}

در اینجا ما از پورت چهارم آردینو دیتا را خوانده ایم.

بیشتر بخوانید...  فاصله سنج آلتراسونیک با آردوینو

برای مثال اگر شما داشته باشید [COM[5] COM[2] COM[1] COM [7] COM[19 در کد بالا اطلاعات از [COM [7 خوانده میشود.

تست کردن:

ساخت چت روم خصوصی بوسیله آردینو و ماژول nRF24L0

آردینو ها را به کامپیوتر خود متصل کنید. صفحه Processing را باز کرده شروع به نوشتن کنید, در نهایت ENTER را بزنید. خواهید دید که پیغامتان روی صفحه دیگر Processing نمایش داده می شود.

دانلود کد پروژه ساخت چت روم خصوصی بوسیله آردینو, ماژول nRF24L0 و Processing:

دانلود فایل

 

Code for Arduino Mega:

 

/**********
Arduino Mega with NRF24l01 for Chatroom project
Code by B.Aswinth Raj
on 8-2016
***********/

#include <SPI.h>  
#include "RF24.h"  // Manicbug LIB to be downloaded

RF24 myRadio (49, 53); // CE to 49 and 53 to CS
struct package
{
  char  text[20]; //Text to transmit on air
};

//byte addresses[][6] = {"0"}; 
char inData[20]; // Allocate some space for the string
char inChar; // Where to store the character read
byte index = 0; // Index into array; where to store the character
 int val;

typedef struct package Package;
Package data;

void setup() 
{
  Serial.begin(9600);
  delay(1000);
  //Serial.print("Setup Initialized");
  myRadio.begin(); 
  myRadio.setChannel(115);  //115 band above WIFI signals
  myRadio.setPALevel(RF24_PA_MIN); //MIN power low rage
  myRadio.setDataRate( RF24_250KBPS ) ;  //Minimum speed
}

void loop()  
{
  
  while(Serial.available()>0) //Get values from user
  { 
    val = Serial.peek();
    if(index < 19) // One less than the size of the array
      {
          inChar = Serial.read(); // Read a character
          inData[index] = inChar; // Store it
          index++; // Increment where to write next
          inData[index] = '\0'; // Null terminate the string
      }
     if (val=='#')
      { 
       strcpy( data.text, inData);
        WriteData(); //Put module in Transmit mode
    while (index!=0)
      {
      inData[index] = ' ';
      index--;
      }
      }
  }
ReadData(); //Put module Receive mode
}

void ReadData()
{
myRadio.openReadingPipe(1, 0xF0F0F0F0AA); //Which pipe to read, 40 bit Address
  myRadio.startListening(); //Sopt Transminting and start Reveicing 
  if ( myRadio.available()) 
  {
    while (myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
    }
  // Serial.print("\nReceived:");
    Serial.println(data.text);
  }
}

void WriteData()
{
  myRadio.stopListening(); //Stop Receiving and start transminitng 
  myRadio.openWritingPipe(0xF0F0F0F066);//Sends data on this 40-bit address
  myRadio.write(&data, sizeof(data)); 
    //Serial.print("\nSent:");
    //Serial.println(data.msg);
  delay(300);
}

 

Code for Arduino Nano:

/**********
Arduino Nano with NRF24l01 for Chatroom project
Code by B.Aswinth Raj
on 8-2016
***********/

 

#include <SPI.h>  
#include "RF24.h"  // Manicbug LIB to be downloaded

RF24 myRadio (8, 10); // CE to 8 and 10 to CS

struct package
{
  char  text[20]; //Text to transmit on air
};

typedef struct package Package;
Package data;

char inData[20]; // Allocate some space for the string
char inChar; // Where to store the character read
byte index = 0; // Index into array; where to store the character
 int val;

void setup()
{
  Serial.begin(9600);
  delay(1000);
  myRadio.begin();  
  myRadio.setChannel(115);  //115 band above WIFI signals
  myRadio.setPALevel(RF24_PA_MIN); //MIN power low rage
  myRadio.setDataRate( RF24_250KBPS ) ; //Minimum speed
  //Serial.print("Setup Initialized");
}

void loop()
{
  while(Serial.available()>0) //Get values from user
  { 
    val = Serial.peek();
    if(index < 19) // One less than the size of the array
      {
          inChar = Serial.read(); // Read a character
          inData[index] = inChar; // Store it
          index++; // Increment where to write next
          inData[index] = '\0'; // Null terminate the string
      }
     if (val=='#')
      { 
       strcpy( data.text, inData);
        WriteData(); //Put module in Transmit mode
   while (index!=0)
      {
      inData[index] = ' ';
      index--;
      }
      }
  }
 ReadData(); //Put module Receive mode
}

void WriteData()
{
  myRadio.stopListening(); //Stop Receiving and start transminitng 
  myRadio.openWritingPipe( 0xF0F0F0F0AA);  //Sends data on this 40-bit address
  myRadio.write(&data, sizeof(data)); 
//Serial.print("\nSent:");
//Serial.println(data.text);
  delay(300);
}

void ReadData()
{ 
myRadio.openReadingPipe(1, 0xF0F0F0F066); // Which pipe to read, 40 bit Address
  myRadio.startListening();  //Stop Transminting and start Reveicing 
  if ( myRadio.available()) 
  {
    while (myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
    }
    //Serial.print("\nReceived:");
    Serial.println(data.text);
  }
}

دیدگاه‌ها (0)

*
*