پروژه آردوینو راه اندازی ماژول NRF24L01

15

در این پست از سایت اِمیک, ماژول رادیویی +NRF24L01 را با استفاده از برد آردوینو راه اندازی خواهیم کرد. ما در این پروژه نیاز به دو عدد برد اردوینو داریم که یکی از انها به عنوان فرستنده و دیگری به عنوان گیرنده استفاده می شود. قبلا در این پست ماژول +NRF24L01 را با میکروکنترلر AVR راه اندازی کرده بودم که توضیحات کاملی در مورد این ماژول و پایه های ان و… داده شد که توصیه می کنم مطالعه کنید.

این ماژول یکی از بهترین و مطمئن ترین ماژول های رادیویی برای ارسال و دریافت داده و اطلاعات می باشد که می توان در موارد مختلفی مانند قطعات کامپیوتری وایرلس, هدست های بیسیم, ریموت کنترل ها, اتوماسیون خانگی و غیره از ان استفاده کرد. این ماژول در دو نوع انتن دار و بدون انتن وجود دارد که نوع بدون انتن ان (انتن روی خود برد) برد حدود ۱۰۰ متر دارد و نوع انتن دار بردش بالای ۱۰۰۰ متر است. 

قطعات لازم برای راه اندازی ماژول +NRF24L01 شامل دو عدد برد اردوینو که من برد اردوینو UNO و MEGA 2560 داشتم و استفاده کردم شما می تونید از هر نوع برد اردوینو که دارید استفاده کنید, البته دقت کنید که حتما بردتون باید از ارتباط SPI پشتیبانی بکند. همچنین شما نیاز به دو عدد ماژول +NRF24L01 دارید (یکی برای فرستنده و دومی برای گیرنده) و یه سری قطعات دیگه که در ادامه توضیح داده می شود.

P-NRF24L01-Test-with-Arduino

برای راه اندازی ماژول +NRF24L01 ما از کتابخانه ان استفاده می کنیم بنابراین لازم است در ابتدا شما کتابخانه این ماژول را به نرم افزار اردوینو اضافه کنید, برای این منظور فایل زیر را دانلود کرده و از حالت Zip خارج کنید (پسورد www.emic.ir) و پوشه RF24-master را به پوشه‌ی libraries موجود در محل نصب برنامه اردوینو اضافه کنید.

دانلود کتابخانه nRF24L01

 

کتابخانه راه اندازی ماژول +NRF24L01 :

همانطور که گفته شد ما برای راه اندازی ماژول +NRF24L01 از کتابخانه ان استفاده خواهیم کرد, در ادامه شما با این کتابخانه و توابع ان اشنا خواهید شد و نحوه راه اندازی ماژول +NRF24L01 با استفاده از این کتابخانه را یاد خواهید گرفت.

در ابتدا شما باید کتابخانه های زیر را به ابتدای برنامه خود اضافه کنید:

در ادامه ما یک شیء از کلاس RF24 به نام radio میسازیم. این شیء دارای دو آرگومان ورودی است که اولین پین CE و دومین پین CSN را مشخص می کند. (می توانید این شماره پین ها را به دلخواه تغییر دهید)

سپس یک آرایه به نام rxAddr تعریف میکنیم, در این آرایه آدرس گیرنده که اطلاعات برای ان ارسال می شود قرار دارد. (ادرس ارتباط را مشخص می کنیم)

دستور زیر باعث فعال شدن ماژول می شود که در تابع setup از ان استفاده می کنیم

در ماژول +NRF24L01 با هر بار ارسال داده از فرستنده به گیرنده، گیرنده یک ack ایجاد میکند. حال با استفاده از تابع زیر، در صورتی که این ack توسط فرستنده دریافت نشد، فرستنده سعی به ارسال دوباره ی داده میکند. به زبان ساده تر اگر اطلاعات توسط گیرنده دریافت نشود، فرستنده داده ها را دوباره ارسال خواهد کرد.
در آرگومان اول عدد مورد نظر در ۲۵۰ میکرو ثانیه ضرب میشود (حداکثر مقدار برای آرگومان ۱۵ می باشد) و زمان تغییر در هر بار ارسال داده را مشخص میکند. بنابراین در مثال ما اگر گیرنده موفق به دریافت داده ای نشد، فرستنده هر۳۷۵۰ میکرو ثانیه یا هر ۳٫۷۵ میلی ثانیه (۱۵*۲۵۰=۳۷۵۰) سعی به ارسال داده میکند. آرگمان دوم تعداد دفعات سعی برای ارسال داده را مشخص میکند. در این مثال اگر ماژول گیرنده داده ای دریافت نکرد، ماژول فرستنده قبل از متوقف شدن ۱۵ بار برای ارسال مجدد داده تلاش میکند.

دستور زیر ماژول را به عنوان فرستنده تنظیم می کند و ادرس گیرنده را در ورودی ان وارد می کنیم.(در بالا یک ارایه به نام rxAddr تعریف کردیم که حاوی ادرس گیرنده بود)

دستور زیر اطلاعات موجود در متغیر DATA را ارسال می کند و ورودی دوم اندازه ی مقدار ارسالی می باشد که به کمک تابع sizeof به طور اتوماتیک اندازه ی آن را مشخص میکنیم

دستور زیر ماژول را برای دریافت اطلاعات اماده می کند, این دستور و دستورات پایین مربوط به گیرنده هستند

دستور زیر در صورتی که ماژول گیرنده اطلاعاتی دریافت کند برابر یک می شود و در غیر این صورت برابر صفر است

دستور زیر دارای دو ارگومان ورودی است که مقدار اول مربوط به تعداد فرستنده هایی است که گیرنده از انها اطلاعات دریافت می کند, توجه کنید که حداکثر از 6 فرستنده می توان به طور همزمان اطلاعات دریافت کرد, در اینجا فقط از ادرس 0 استفاده می شود و ارگومان دوم هم ادرس ارتباط ما میباشد

دستور زیر اطلاعات را از فرستنده دریافت می کند و درون متغیر DATA می ریزد همانند دستوری که در بالا برای ارسال اطلاعات معرفی کردیم دستور زیر هم در قسمت ورودی دوم ان از تابع sizeof برای محاسبه اتوماتیک اندازه متغیر استفاده شده است

 

پروژه آردوینو راه اندازی ماژول NRF24L01 :

در زیر یک پروژه با این ماژول قرار داده شده است که هدف ان اشنایی شما با راه اندازی این ماژول به صورت عملی می باشد, شما می توانید پروژه زیر را با توجه به توضیحات ارائه شده در این پست با توجه به نیاز خود تغییر دهید. عملکرد این پروژه به این صورت است که قسمت فرستنده دارای دو کلید فشاری است و در قسمت گیرنده هم دو عدد LED وجود دارد. با فشار داده هر کدام از کلیدهای فشاری یک LED در قسمت گیرنده روشن می شود, در کلیپی که در انتهای مطلب گذاشته شده است می توانید عملکرد این پروژه را به صورت عملی مشاهده کنید.

 

پایه های ماژول +NRF24L01 :

همانطور که گفته شد ما در این پروژه برای قسمت فرستنده از برد اردوینو UNO و برای گیرنده از برد اردوینو MEGA 2560 استفاده کرده ایم و همچنین نیاز به دو عدد ماژول +NRF24L01 داریم, پایه های این ماژول در هر دو مدل با انتن و بدون انتن به صورت زیر است :

nRF24L01-Pinout

همانطور که در بالا مشاهده می کنید, تغذیه این ماژول حداکثر ۳٫۳ ولت است و در صورتی که ولتاژ بیشتری به ان اعمال کنید امکان اسیب دیدن ان وجود دارد. بهتره که از برد راه انداز این ماژول هم استفاده کنید که کار رو راحت می کنه و می تونید با ۵ ولت هم ماژول و هم بقیه قطعات پروژه رو تغذیه کنید و خطر اسیب دیدن ماژول با استفاده از برد راه انداز از بین میره. در تصویر زیر یه نمونه از این برد راه انداز را مشاهده می کنید که ماژول +NRF24L01 روی اون نصب میشه و به راحتی میتونید با ۵ ولت تغذیه کنید و در پروژه استفاده کنید. من برای تست این پروژه از این برد راه انداز استفاده کردم که میتونید در اخر مطلب مشاهده کنید

BaseModuleNrf

 

شماتیک فرستنده :

Transmitter-NRF24L01-Test-with-Arduino

  • پین CE <<< 9
  • پین CSN <<< 10
  • پین MOSI <<< 11
  • پین MISO <<< 12
  • پین SCK <<<13

 

شماتیک گیرنده :

Receiver-NRF24L01-Test-with-Arduino

برای دیدن تصویر در اندازه بزرگتر ان را ذخیره کنید

  • پین CE <<< 48
  • پین CSN <<< 49
  • پین MISO <<< 50
  • پین MOSI <<< 51
  • پین SCK <<<52

برنامه فرستنده :

برنامه گیرنده :

برنامه های فرستنده و گیرنده را در بالا مشاهده می کنید که در ابتدای مطلب در قسمت توضیح کتابخانه NRF24L01 دستورات استفاده شده بطور کامل توضیح داده شده اند. در صورتی که می خواهید از بردهای اردینو دیگری استفاده کنید فقط کافی است در خط 5 برنامه ها پین های CE و CSN را با توجه به برد اردوینو مورد نظر خود به دلخواه تغییر دهید و پایه های ماژول را به پین های مربوط به ارتباط SPI در برد جدید متصل کنید.

 

  • برای اشنایی با دستورات مهم برنامه نویسی اردوینو اینجا کلیک کنید
  • برای مشاهده پروژه راه اندازی ماژول NRF24L01 با میکروکنترلر AVR اینجا کلیک کنید
  • برای اشنایی با نحوه پروگرام کردن برد اردوینو (ریختن برنامه روی برد) اینجا کلیک کنید

کلیپ تست عملی پروژه :

 

دانلود فایل ها

پسورد فایل زیپ : www.emic.ir

نظر یادتون نره…

15 دیدگاه‌ها

  1. سلام توی این کد ها فقط دوتا پین رو میشه فعال و غیر فعال کرد
    زمانی که میخوایم این تعداد رو افزایش بدیم کلا میکرو هنگ مینه و هیچ کاری انجام نمیده
    انگار ماژول اردینو یا میکرو خاموشه
    لطفا بگید چجوری میشه تعداد ورودی و خروجی رو افزایش داد
    بغد یه سوال دیگه اینه که میشه زمانی که یه ماژل رو فرستنده در نظر میگیریم یه سری اطلاعات هم دریاف کنه
    اگه میشه باید چجوری دستوراتشو بنویسیم
    ممنون میشم توضیح بدید

  2. سلام ممنون از آموزش های عالیتون ببخشید میخواستم ببینم میتوانید با اردینو و ماژول nrfپروژه کنترل 4عدد ال ای دی از راه دور را بزارید که بتوانم با 4ولوم بصورت بیسیم نور ال ای دی ها را کنترل کرد

    • سلام, در مورد برد Nodemcu اطلاع زیادی ندارم ولی تا اونجایی که می دونم یک برد برای ارتباط وای فای بر اساس ESP8266 هست و راه اندازیش با ماژول های رادیویی تفاوت داره. البته به زودی اموزش راه اندازی ماژول ESP8266 را در سایت قرار خواهم داد

  3. سلام
    ممنون از اموزش خوبتون
    خط 18 و 19 فرستنده میخوام به جاش یه سنسور بزارم که اگه مقدار سنسورم 0 بود 0 رو ارسال کنه
    و اگر مقدار سنسورم 1 بود 1رو ارسال کنه
    یه راهنمایی کنید ممنون میشم

    • سلام, فقط کافیه که خروجی دیجیتال سنسورتون را به عنوان مثال به پایه 2 اردوینو بجای کلید متصل کنید و اون یکی کلید را هم اگر نیاز ندارید حذف کنید

  4. سلام
    ممنون از این پروژه ای که توضیح دادین . فقط یک سوال و اون هم اینکه وقتی ما یک فرمان به گیرنده بفرستیم و همزمان ماژول فرستنده رو خاموش کنیم آخرین دستور داخل گیرنده میمونه و فقط تنها راحش ریست آردوینویی هست که در ماژول گیرنده قرار داره .
    لطفا در مورد رفع عیب این ایراد راه حلی دارین ؟

  5. سلام
    من خیلی دتبال کتابخانه nrf برای proteus گشتم ولی چیز خوبی گیرم نیومد میشه کتابخونه ای که ازش تو تصویر بالا استفاده کردید رو معرفی کنید ؟
    من خیلی لازم دارم
    مرسی

ارسال دیدگاه

لطفا دیدگاه خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید