عناوين الدرس

اتصال لاسلكي بين لوحتين اردوينو باستخدام (RF 433Mhz)

مبتدئ

المقدمة

توجد العديد من التقنيات التي توفر اتصال لاسلكي بين الأجهزة، و من هذه التقنيات الاتصال باستخدام ترددات الراديو (RF)، في هذا الدرس سنتعرف على وحدة المستقبل والمرسل لموجات الراديو الترددي (RF 433Mhz)، و ستتمكن من برمجة مشروع بسيط يساعدك على التحكم بشدة الإضاءة الثنائي المشع للضوء (LED) عن بعد باستخدام مقاومة متغيرة.

RF-COMMUNICATION اتصال

المواد والأدوات المطلوبة

اردوينو

X2 اردوينو اونو

سلك اردوينو

X1 سلك الاردوينو

محول طاقة

X2 محول طاقة

RF مرسل و مستقبل

X1 المستقبل والمرسل لموجات الراديو الترددي (RF 433Mhz)

لوحة تجارب

X2 لوحة تجارب

مقاومة متغيرة

X1 مقاومة متغيرة

ثنائي المشع للضوء led

X1 الثنائي المشع للضوء (LED)

مقاومة 220

X1 مقاومة 220 أوم

أسلاك توصيل

مجموعة أسلاك توصيل (ذكر/ذكر)

المستقبل والمرسل لموجات الراديو الترددي (RF 433Mhz)

يمكن ارسال البيانات بين لوحتين اردوينو باستخدام وحدة المستقبل والمرسل لموجات الراديو الترددي (RF 433Mhz). حيث ترسل البيانات بشكل متسلسل من جهاز المرسل إلى جهاز المستقبل.
تعمل وحدات المرسل لموجات الراديو الترددي المستخدمة بالدرس بتردد محدد يبلغ 433 ميجاهرتز. تُستخدم هذه الوحدات في الاتصالات قصيرة المدى. ويتم استخدامه في مجالات مختلفة مثل أجهزة التحكم في الإضاءة عن بُعد، وأنظمة RFID، والإنذار اللاسلكي وأنظمة الأمان وما إلى ذلك.
تعمل وحدة المرسل لموجات الراديو الترددي على اصدار موجات بشكل مستمر وتؤثر اشارة البيانات على سعة الموجة ما يعرف بتقنية تضمين إزاحة السعة (Amplitude Shift Keying). عندما تكون إشارة البيانات (1)، يتم تشغيل إشارة الناقل وعندما تكون إشارة البيانات (0) يتم إيقاف تشغيل إشارة الناقل.

موجات RF

وتحتوي وحدة المستقبل على دارة RF لتضخيم الموجة الحاملة المستقبلة من جهاز الإرسال.

 

توصيل دائرة المرسل

دائرة توصيل المرسل

توصيل دائرة المستقبل

توصيل دائرة المستقبل RF

البرمجة

بالبداية ستحتاج إلى تحميل مكتبة (VirtualWire) و من ثم تثبيتها على بيئة تطوير الاردوينو (Arduino IDE) يمكنك الاطلاع على الدرس الأول -تنصيب برنامج اردوينو (IDE) على جهازك من سلسة تعلم الاردوينو لمعرفة كيف يتم تثبيت المكتبات

برمجة المرسل 

#include <VirtualWire.h> 
#define size 1
int pot = A0;
byte TX_buffer[size]={0};
byte i;


void setup() 
{

vw_set_tx_pin(3); // pin
vw_setup(2000); // bps
for(i=0;i<size;i++)
{
TX_buffer[i]=i;
}
}

void loop()
{ 
int val = map(analogRead(pot),0,1024,0,255);
TX_buffer[0] = val; 
vw_send(TX_buffer, size); 
vw_wait_tx(); 
delay(10); 
}

برمجة المستقبل 

 

#include <VirtualWire.h> 
byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages
byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message
int received_number = 0;
int LED = 5;

void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
Serial.println("Ready...");
vw_set_rx_pin(3); // pin
vw_setup(2000); // bps
vw_rx_start();
}

void loop()
{
if (vw_get_message(message, &messageLength)) // non-blocking
{
Serial.print("Potentiometer: ");
for (int i = 0; i < messageLength; i++)
{
//Serial.print(message[i]);
received_number = message[i];
}
Serial.println(received_number);
analogWrite(LED, received_number);
}
}

شرح الكود البرمجي

أولا المرسل

في البداية سنقوم باستدعاء مكتبة (VirtualWire) والتي تتضمن دوال تساعدنا على برمجة الوحدة، ونعرف منفذ المقاومة المتغيرة

#include <VirtualWire.h> 
#define size 1
int pot = A0;
byte TX_buffer[size]={0};
byte i;

في دالة void setup()  نهيئ منفذ الارسال

void setup() 
{

vw_set_tx_pin(3); // pin
vw_setup(2000); // bps
for(i=0;i<size;i++)
{
TX_buffer[i]=i;
}
}

في دالة void loop() نأخذ قراءة من المقاومة المتغيرة ضمن مدى من 0 إلى 255 والتي  تمثل شدة الإضاءة المطلوبة، و نرسل الإشارة

void loop()
{ 
int val = map(analogRead(pot),0,1024,0,255);
TX_buffer[0] = val; 
vw_send(TX_buffer, size); 
vw_wait_tx(); 
delay(10); 
}

ثانيا المستقبل

نقوم باستدعاء مكتبة VirtualWire وتعريف الإشارة المستقبلة وحجم الرسالة، وتعريف منفذ الثنائي المشع للضوء (LED)

#include <VirtualWire.h> 
byte message[VW_MAX_MESSAGE_LEN]; 
byte messageLength = VW_MAX_MESSAGE_LEN; 
int received_number = 0;
int LED = 5;

في دالة void setup() نقوم بتهيئة منفذ الاتصال التسلسلي حتى نتمكن من طباعة القيم المستقبلة على شاشة الاتصال  وكمت سيتم تعريف منافذ الخرج

void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
Serial.println("Ready...");
vw_set_rx_pin(3); // pin
vw_setup(2000); // bps
vw_rx_start();
}

في دالة void loop() نستقبل الرسالة و نعكس قيمتها ليتم تحديد شدة اضاءة الثنائي المشع للضوء (LED)

void loop()
{
if (vw_get_message(message, &messageLength)) // non-blocking
{
Serial.print("Potentiometer: ");
for (int i = 0; i < messageLength; i++)
{
//Serial.print(message[i]);
received_number = message[i];
}
Serial.println(received_number);
analogWrite(LED, received_number);
}
}

 

 

 

X
Product added to the cart