برد nRF24L01 ماژولی برای انتقال داده به صورت بی سیم میباشد. در مواردی مانند:هدست های بی سیم ، کنسول های بازی مانند ps3 ، اتوماسین خانگی، سیستمهای مسیریاب مانند GPS و… استفاده میشود. این ماژول در نوع آنتن دار و بدون آنتن ارایه میشود که برد آنتن دار ۱۱۰۰ متر و بدون آنتن آن ۱۰۰ متر است. ماژول NRF یک ماژول بسیار عالی برای ارسال و دریافت اطلاعات بدون خطا است. ماژول NRF در مقابسه با ماژولهای HMTR از امکانات بسیار بیشتری برخورد دار می باشند. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
توضیحات ماژول NRF24L01
ماژول NRF24L01 یک ماژول بیسیم رادیویی است که توسط شرکت Nordic Semiconductor تولید میشود. این ماژول از پروتکل ارتباطی نیمهدوپلکس SPI (Serial Peripheral Interface) برای ارتباط با میکروکنترلرها یا میکروپروسسورها استفاده میکند و ارتباط بیسیم در فرکانس ۲٫۴ گیگاهرتز را پشتیبانی میکند. NRF24L01 قابلیت ارسال و دریافت دادهها را با سرعتهای مختلف فراهم میکند و به راحتی میتواند در برنامههای مختلف از جمله رباتیک، اینترنت اشیاء (IoT)، کنترل از راه دور و تجهیزات حسگری استفاده شود.
- فرکانس عملیاتی: ماژول از فرکانس ۲٫۴ گیگاهرتز استفاده میکند که برای بسیاری از برنامهها بسیار مناسب است.
- پروتکل ارتباطی: این ماژول از پروتکل اختصاصی خود که برای انتقال دادهها بهینهسازی شده است استفاده میکند. اما کتابخانهها و نرمافزارهایی برای اتصال با میکروکنترلرها ارائه شده است که این پروتکل را پشتیبانی میکنند.
- قدرت خروجی: این ماژول از سیستم آنتن داخلی بهره میبرد که باعث میشود قدرت خروجی آن برای برنامههای کوچک و متوسط مناسب باشد. اما در صورت نیاز به دامنه بیشتر میتوان از ماژولهای با آنتن خارجی استفاده کرد.
- سرعت انتقال داده: این ماژول قابلیت ارسال و دریافت دادهها با سرعتهای مختلف را داراست. سرعت انتقال داده بسته به نیاز برنامه قابل تنظیم است.
- ولتاژ کاری: ولتاژ کاری ماژول از ۱٫۹ ولت تا ۳٫۶ ولت میباشد که امکان اتصال به منابع تغذیه مختلف را فراهم میکند.
- مصرف انرژی پایین: NRF24L01 با مصرف انرژی کم عمل میکند که برای کاربردهایی که از منابع تغذیه با محدودیت استفاده میکنند، بسیار مناسب است.
- امنیت: این ماژول دارای روشهایی برای افزایش امنیت ارتباطات است که از جمله کدگذاری و تأیید دریافت دادهها میتوان به آنها اشاره کرد.
مشخصات فنی NRF24L01
مشخصات فنی ماژول NRF24L01 به طور خلاصه عبارتند از:
- فرکانس عملیاتی: ۲٫۴ گیگاهرتز.
- ولتاژ کاری: از ۱٫۹ ولت تا ۳٫۶ ولت.
- جریان مصرفی: حداکثر ۱۳٫۵ میلیآمپر در حالت فعال و کاری، ۹۰۰ نانوآمپر در حالت انتظار.
- مصرف برق در حالت خواب: کمتر از ۲۶ میکروآمپر.
- قدرت خروجی: قابل تنظیم از ۰dBm تا ۱۸dBm.
- پروتکل ارتباطی: پروتکل خاصی از نوع SPI با امکان اتصال به میکروکنترلرها و میکروپروسسورهای مختلف.
- نرخ انتقال داده: قابل تنظیم از ۲۵۰ کیلوبیت بر ثانیه تا ۲ مگابیت بر ثانیه.
- آنتن: دارای آنتن داخلی با دامنه مناسب برای برنامههای کوچک و متوسط. همچنین، ورژنهایی از این ماژول با آنتن خارجی نیز موجود است.
- پروتکل: این ماژول دارای پینهای SPI برای اتصال به میکروکنترلر و پینهای دیگری برای تنظیم پارامترها و کنترل.
- قابلیت امنیتی: این ماژول از رمزگذاری هاردویری و CRC (Cyclic Redundancy Check) برای بررسی صحت دادهها استفاده میکند.
- برد انتقال: برد ارتباطی در فضای آزاد تا ۱۰۰ متر برای شرایط دید مستقیم و تا ۳۰ متر برای شرایط دیواره و موانع میتواند باشد.
- ابعاد: ابعاد کوچک و جمعوجور با وزن کم که برای کاربردهای مختلف مناسب است.
بررسی پایه های NRF24L01
ماژول NRF24L01 دارای ۸ پایه (پین) است که هر کدام وظیفههای خاص خود را دارند. در زیر پایههای NRF24L01 به همراه توضیح کوتاهی برای هرکدام آمده است:
- VCC: منبع تغذیه ماژول (۱٫۹ تا ۳٫۶ ولت). اتصال این پین به منبع تغذیه برق با ولتاژ مناسب الزامی است.
- GND: زمین یا سر کارآمد برای اتصال به زمین مدار.
- CE (Chip Enable): این پین برای فعال کردن و غیرفعال کردن ماژول به کار میرود. وقتی این پین به حالت فعالیت (HIGH) درآید، ماژول آمادهٔ انتقال و دریافت داده میشود.
- CSN (Chip Select Not): این پین برای انتخاب ماژول در ارتباط SPI استفاده میشود. وقتی این پین به حالت LOW درآید، ماژول آمادهٔ برقراری ارتباط SPI میشود.
- SCK (Serial Clock): این پین کلاک سریال برای ارتباط SPI است.
- MOSI (Master Output Slave Input): این پین برای ارتباط دادههای ارسالی از میکروکنترلر به ماژول در ارتباط SPI است.
- MISO (Master Input Slave Output): این پین برای ارتباط دادههای دریافتی از ماژول به میکروکنترلر در ارتباط SPI است.
- IRQ: این پین برای اطلاعرسانی به میکروکنترلر در مورد وقوع رویدادهای مختلف مانند دریافت داده جدید، خطاها و موارد مشابه استفاده میشود.
هدف آموزش: کنترل سرو موتور با جوی استیک توسط NRF24L01
سخت افزار مورد نیاز برای کنترل سرو موتور با جوی استیک به کمک برد nRF24L01 دو عدد Arduino در این پروژه از یک عدد آردوینو mega2560 و یک عدد آردوینو uno استفاده شده است.
دو عدد ماژول NRF24L01
دو عدد خازن ۱۰ میکروفاراد برای اتصال به تغذیه ماژول nRF24L01
اتصال ماژول NRF24L01 به آردوینو
در تصویر زیر نحوه ی اتصال پین ها را مشاهده میکنید. پین VCC به ۳٫۳ ولت و GND به GND متصل شود. دقت داشته باشید که اتصالات پایههای ماژول NRF را درست انجام داده باشید.
پینهای CE و CSN ماژول NRF میتوانند به هر پین دیجیتالی منصل شوند. در برد آردوینو uno پینهای پرروتوکل spi به صورت زیر است.
- MOSI is connected to the digital pin 11
- MISO is connected to the digital pin 12
- SCK is connected to the digital pin 13
در برد آردوینو mega2560 پینهای پروتکل spi به صورت زیر است.
- MOSI is connected to the digital pin 51
- MISO is connected to the digital pin 50
- SCK is connected to the digital pin 52
ابتدا کتابخانه را از این لینک دانلود کنید و به نرم افزار اضافه کنید.
کد آردوینو فرستنده ماژول NRF
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
تحلیل کد آردوینو NRF24L01
در ابتدای برنامه آردوینو NRF ابتدا سه کتابخانه SPI.h ,nrf24L01.h,RF24.h را فراخوانی میکنیم. از کلاس RF24 یک شی به نام radio میسازیم.
RF24 radio(8,53);
این شی دو آرگمان ورودی دارد. که آرگومان اول CE و آرگومان دوم CSN است. قابل ذکر است که میتوانید پین های دیگری از برد آردوینو را استفاده کنید.
const byte rxAddr[6] = "00001";
سپس یک آرایه به نام rxAddr تعریف میکنیم.در این آرایه آدرس گیرنده که قرار است اطلاعات برایش ارسال شود قرار میگیرد. در تابع setup برای شروع کار با مودم از دستور زیر استفاده میکنیم.این دستور باعث فعال شدن ماژول می شود.
radio.begin()
سپس از دستور ;(radio.setRetries(15, 15 استفاده میکنیم. در این ماژول با هر بار ارسال داده به فرستنده به گیرنده ، گیرنده یک ack ایجاد میکند.حال با استفاده از تابع بالا ، در صورتی که این ack توسط فرستنده دریافت نشد ، فرستنده سعی به ارسال دوباره ی داده میکند. به زبان ساده تر ، اگر اطلاعات توسط گیرنده دریافت نشود ، فرستنده داده ها را دوباره ارسال خواهد کرد. در آرگومان اول عدد مورد نظر در ۲۵۰ میکرو ثانیه ضرب میشود (حداکثر مقدار برای آرگومان ۱۵ می باشد)و زمان تغییر در هر بار ارسال داده را مشخص میکند. بنابر این در مثال ما اگر گیرنده موفق به دریافت داده ای نشد ، فرستنده هر۳۷۵۰ میکرو ثانیه یا هر ۳٫۷۵ میلی ثانیه (۱۵*۲۵۰=۳۷۵۰) سعی به ارسال داده میکند. آرگمان دوم تعداد دفعات سعی برای ارسال داده را مشخص میکند.در این مثال اگر ماژول گیرنده داده ای دریافت نکرد ، ماژول فرستنده قبل از متوقف شدن ۱۵ بار برای ارسال مجدد داده تلاش میکند.
radio.openWritingPipe(rxAddr);
این متد ماژول را در مد فرستنده قرار میدهد و در ورودی آن آدرس گیرنده اطلاعات را وارد میکنیم.
joyStick[0]=analogRead(A0); joyStick[0]=map(joyStick[0],0,1023,0,180); radio.write(joyStick, sizeof(joyStick));
ابتدا مقدار آنالوگ جوی استیک که بین ۰ و ۱۰۲۳ می باشد در خانه ی صفرم آرایه joystick قرار میگیرد، سپس به کمک تابع map مقدار ۰ الی ۱۰۲۳ به مقدار ۰الی ۱۸۰ نسبت داده میشود. متد write داری دو ورودی می باشد که ورودی اول مقداری است که ارسال خواهد شد و ورودی دوم اندازه ی مقدار ارسالی می باشد که به کمک تابع sizeof به طور اتوماتیک اندازه ی آن را مشخص میکنیم.
کد آردوینو گیرنده ماژول NRF24L01
کدهای زیر را روی آردوینو آپلود کنید. این بخش از کدها مربوط به ماژول NRF در وضعیت گیرنده است.
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> RF24 radio(7, 8); Servo servo; const byte rxAddr[6] = "00001"; void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, rxAddr); radio.startListening(); servo.attach(3); } void loop() { if (radio.available()) { int joyStick[2]; radio.read(joyStick, sizeof(joyStick)); servo.write(joyStick[0]); } }
کد های گیرنده تقربیا مشابه کد های فرستنده می باشد فقط در چند تابع دارای اختلاف جزئی می باشد که به توضیح هر کدام میپردازیم.
radio.openReadingPipe(1, rxAddr);
آرگمان اول تعداد فرستتنده هایی است که گیرنده از آن ها اطلاعات در یافت میکند. قابل ذکر است از ۶ فرستنده به طور همزمان میتوان اطلاعات دریافت نمود. آرگمان دوم آدرس فرستنده اطلاعات می باشد.
radio.startListening();
این متد ماژول را برای دریافت اطلاعات آماده میکند.
radio.available()
اگر ماژول داده ای دریافت نمود ، این متد مقدار true و اگر مقداری دریافت نکرد مقدار false را بر میگرداند. پس از دریافت داده، مقدار مورد نظر به سروو موتور نسبت داده می شود.
جمع بندی
NRF24L01 یک ماژول بیسیم رادیویی با قابلیتهای منحصربهفرد است که توسط شرکت Nordic Semiconductor تولید میشود. این ماژول از فرکانس ۲٫۴ گیگاهرتز استفاده میکند و از پروتکل ارتباطی SPI برای اتصال به میکروکنترلرها و میکروپروسسورها استفاده میکند. از جمله ویژگیهای مهم NRF24L01 میتوان به مصرف انرژی پایین، دارا بودن آنتن داخلی، امنیت بالا، قابلیت ارسال و دریافت دادهها با سرعت بالا، و پشتیبانی از برد ارتباطی مناسب اشاره کرد. این ماژول به عنوان راهکاری ایدهآل برای اتصال بیسیم دستگاهها در کوتاه مدت و در فواصل نسبتاً کم استفاده میشود. برای مثال، میتوان از این ماژول برای ارتباط بین کنترلر و ربات، دستگاههای حسگری و کنترل از راه دور استفاده کرد.با توجه به مصرف انرژی پایین و قابلیتهای بیسیم، ماژول NRF24L01 میتواند به عنوان یک حلقه ارتباطی در شبکههای اینترنت اشیاء استفاده شود. مثلاً میتوان از این ماژول برای اتصال حسگاهها و دستگاههای مختلف در خانه هوشمند، کنترل تجهیزات خانگی و غیره استفاده کرد.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
۲۱۸ دیدگاه