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

nRF24L01 ماژولی برای انتقال  داده  به صورت بی سیم می باشد و در مواردی مانند:هدست های بی سیم ،  کنسول های بازی مانند ps3   ، اتوماسین خانگی  ، سیستم های مسیر یاب مانند GPS و …. استفاده می شود

این ماژول در نوع آنتن دار و بدون آنتن ارا,ه میشود که برد آنتن دار ۱۱۰۰ متر و بدون آنتن آن ۱۰۰ متر می باشد.

nRF24L01 ماژول یک ماژول بسیار عالی برای ارسال و دریافت اطلاعات  بدون خطا  می باشد در مقابسه با ماژول های HMTR  از امکانات بسیار بیشتری برخورد دار می باشند.

آموزش راه اندازی ماژول nRF24L01 با استفاده از آردوینو

توضیحات ماژول NRF24L01:

ولتاژ کاری :الی ۳٫۳ ولت

دیتاریت ۲ مگابیت بر ثانیه  در فضای باز

دارای رگولاتور داخلی

 

 

سخت افزار مورد نیاز برای کنترل سروو موتور  با جوک استیک با استفاده از  nRF24L01

دو عدد Arduino (در این پروژه از یک عدد آردوینو mega2560 و یک عدد آردوینو uno استفاده شده است).

دو عدد ماژول nrf24l01 (خرید از فروشگاه )

جوی استیک

سروو موتور

دو عدد خازن ۱۰ میکروفاراد به تغذیه ماژول nRF24L01 متصل می‌شود.

پین VCC به۳٫۳ولت و GND به GND  متصل شود.

 

 

در تصویر زیر نحوه ی اتصال پین ها را مشاهده می‌کنید.

آموزش راه اندازی nrf24l01 -دیجی اسپارک

آموزش راه اندازی nrf24l01 -دیجی اسپارک

 

پین های CE   و CSN میتوانند به هر پین دیجیتالی منصل شوند.

در برد آردوینو 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

ابتدا کتابخانه را از این لینک دانلود کنید و به نرم افزار اضافه کنید.

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

در ابتدای برنامه ابتدا سه کتابخانه  SPI.h ,nrf24L01.h,RF24.h را فراخوانی میکنیم.

از کلاس RF24   یک شی به نام radio میسازیم .

این شی  دو آرگمان ورودی دارد.که آرگومان اول  CE  و آرگومان دوم  CSN   می باشد.

قابل ذکر است که میتوانید پین های دیگری را نیز استفاده کنید.

 

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

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

سپس  از دستور ;(radio.setRetries(15, 15 استفاده میکنیم.

در این ماژول با هر بار ارسال داده به فرستنده به گیرنده  ، گیرنده یک ack ایجاد میکند.حال با استفاده از تابع بالا ، در صورتی که این ack  توسط فرستنده دریافت نشد ، فرستنده سعی به ارسال دوباره ی داده میکند.

به زبان ساده تر ، اگر اطلاعات توسط گیرنده دریافت نشود ، فرستنده داده ها را دوباره ارسال خواهد کرد.

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

این متد ماژول را در مد فرستنده قرار میدهد و در ورودی آن آدرس گیرنده اطلاعات را وارد میکنیم.

ابتدا مقدار آنالوگ جوی استیک که بین ۰ و ۱۰۲۳ می باشد در خانه ی صفرم آرایه joystick   قرار میگیرد، سپس به کمک تابع map   مقدار ۰ الی ۱۰۲۳ به مقدار ۰الی ۱۸۰ نسبت داده میشود.

 

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

 کد های گیرنده:

 

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

آرگمان  اول تعداد فرستتنده هایی است که گیرنده از آن ها اطلاعات در یافت میکند. قابل ذکر است از۶  فرستنده به طور همزمان میتوان اطلاعات دریافت نمود.

آرگمان دوم آدرس فرستنده اطلاعات می باشد.

 

این متد ماژول را برای دریافت اطلاعات آماده میکند.

 

اگر ماژول داده ای دریافت نمود ، این متد مقدار true و اگر مقداری دریافت نکرد مقدار false را بر میگرداند.

 

پس از دریافت   داده،  مقدار مورد نظر به سروو موتور نسبت داده می شود.

 

 

[advanced_iframe securitykey=”355da9b1daf6a615cc55b91130b5d7f8b997ce0c” src=”http://www.aparat.com/video/video/embed/videohash/OwLvH/vt/frame” allowFullScreen=”true” webkitallowfullscreen=”true” mozallowfullscreen=”true” height=”360″ width=”640″]
علیرضا قربانی
علیرضا قربانی
علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

67 دیدگاه ها

  1. علی می‌گه:

    خیلی جامع بود ممنون

  2. مجید عزیزی می‌گه:

    سلام
    من این ماژول را از توی جمهوری خریدم، ولی اینی که من دارم، کریستال روش نیست، البته یکی هستا ولی خیلی ریزه گفتم نکنه ماژولم فرق داره با این آموزش؟
    لطفا کمک کنید.

    • علیرضا قربانی می‌گه:

      سلام
      اگه ماژول بدون آنتن باشه کریستالش بزرگه و اگر هم آنتن داشته باشه ، کریستالش کوچیکه
      تفاوتی در راه اندازی ندارن
      موفق باشید

  3. امیر می‌گه:

    سلام
    اول باید یه تشکر بکنم از این آموزشهای روان و خوبتون
    یه نکته هم هست فکر کنم توی توضیح کدهای فرستنده radio.available() را اشتباه نوشتین باید radio.begin(); رو مینوشتین

  4. 1@ می‌گه:

    سلام
    عکس های این مطلب حذف شده اند.

  5. sahar می‌گه:

    سلام و خسته نباشین به خاطر زحماتتون
    بنده میخاستم به سیله این ماژول صدا را انتقال بدم ولی هر چی در وب گشتم چیز به درد بخوری پیدا نردم. شما میدونین این کار را چجوری باید انجام بدم؟
    با تشکر

    • علیرضا قربانی می‌گه:

      سلام

      امکانش هست ولی یکم مشکله. الان اکثرا تو راه اندازی همین ماژول مشکل دارن چه برسه به انتقال صدا.

      ولی من بررسی کردم میشد انجامش داد. در لیست آموزش ها قرارش میدم

  6. مهدی می‌گه:

    سلام با تشکر از زحماتتون امکانش هست از دوتا آردوینوی uno استفاده بشه ؟میشه یکم توضیح بدین؟ ممنون

    • علیرضا قربانی می‌گه:

      سلام بله.شما از هر مدل آردوینویی که دارین میتونین استفاده کنین .همونطور ک در آموزش هم گفته شده این ماژول بر اساس پروتکل spi کار میکند و فقط کافی است این ارتباط را بین ماژول و آردوینو برقرار کنید

      سوالی بود در خدمتم

      • مهدی می‌گه:

        ممنون از اینکه پاسخ دادین

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

  7. حامد می‌گه:

    آقا خیلی خیلی خیلی ممنون….

  8. میم می‌گه:

    سلام ببخشید دیتا شیت فارسی nrf رو اگه ممکنه برای دانلود بذارید.چون توضیحاته دستورات توابعی که توی کتابخانه ش هست به زبانه انگلیسیه من زیاد متوجه طرز کاره توابع نمیشم. توی نت خیلی گشتم اما نتونستم پیدا کنم.ممنون میشم اگر راهنمایی کنید

  9. میم می‌گه:

    سلام ببخشید دیتا شیت فارسی nrf رو اگه ممکنه برای دانلود بذارید.چون توضیحاته دستورات توابعی که توی کتابخانه ش هست به زبانه انگلیسیه من زیاد متوجه طرز کاره توابع نمیشم. توی نت خیلی گشتم اما نتونستم پیدا کنم.ممنون میشم اگر راهنمایی کنید

  10. amin می‌گه:

    سلام
    من یه مشکل دارم تو گیرنده فکنم، شایدم فرستنده
    گیرنده همه ش صفر میده بیرون

    اینم لینک عکسش، بنظرتون چ کنم؟

    http://uupload.ir/files/deih_untitled_picture.png

    • amin می‌گه:

      پینگ پونگ (فرستنده و گیرنده با یک ماشول) رو ک خواستم درست کنم، اونم فیلد میشد، یه خازن به خروجی۳٫۳ برد سری کردم ، مشکلش حل شد(مشکلش نویز رگلاتور بود فکنم)،
      ولی الان نمیدونم چی کار کنم
      .
      .
      .
      بعد اگه فرستنده رو قطع کنم، گیرنده میفهمه ولی اطلاعات غلطه وقتی وصله!!!!!!!!!

  11. مرتضی می‌گه:

    سلام
    code completion با چه کلیدی در IDE فعال میشه ؟ “توی فیلم code completion استفاده شده”

  12. حجت می‌گه:

    سلام یه سوال
    تکلیف این پایه ی IRQ ماژول چیه
    کجا باید وصلش کنم هر چی متنتونو می خونم نمی فهمم
    لطفاً کمکم کنین

  13. حجت می‌گه:

    سلام مچکرم از راه نماییت
    یه سوال دگه حتماً باید از این اردینو ها استفاده کنم یا با اردینو هایه دگه هم مشه این کار رو کرد مثلاً من یه نانو شو دارم می خواستم ببینم می شه

  14. حجت می‌گه:

    سلام اگه جوی استیک و سروو رو نخوای باید چکار کنی؟
    من تازه کارم بم نخند

  15. حجت می‌گه:

    سلام اگه جوی استیک و سروو رو نخوای باید چکار کنی؟
    من تازه کارم بم نخند

  16. Tragzes می‌گه:

    سلام وقت بخیر
    شرمنده موقع کامپایل کدها یهو ارور میده سه تا کتابخانه nRF24 رو نمیشناسه
    میشه راهنمایی کنید

  17. Tragzes می‌گه:

    اضافه کردن کتابخونه رو دقت نکرده بودم
    حل شد .. یه کم درمورد اضافه کردن کتابخونه توضیح بدید برای خیلی ها میتونه کمک باشه
    دانلود فایل زیپ از صفحه معرفی شده .. منوی اسکچ..اضافه کردن کتابخانه بصورت زیپ..معرفی فایل زیپ

  18. Tragzes می‌گه:

    بسیار عالی ممنونم
    بعد کلی کار با بیسیک از اول شروع کردن با آردوینو گرچه خیلی امکانات عالی داره ولی تند تند پیشرفتن رو سخت میکنه
    اسباب زحمت من یه برنامه میخوام قسمت فرستنده مقدار ADC رو بخونه روی LCD نمایش بده بعد به گیرنده بفرسته
    برنامه مشابه آماده دارید بهم معرفی کنید
    سرهم کردن کامل کدها بدون ارور کار سختیه

  19. Tragzes می‌گه:

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

  20. حسین می‌گه:

    باسلام و تشکرفراوان
    اگه بخوایم به جای nrfازrfاستفاده کنیم کدها فرق میکنه؟لطفا یه مقدار توضیح بدید.
    ممنون

  21. hosein می‌گه:

    سلام اگه فقط بخوایم ۱ ارسال کنیم با چه دستوری باید انجام بدیم؟ radio.write(, sizeof());
    باتشکر

  22. عباس می‌گه:

    سلام
    داداش یه شماتیک میزاری؟؟
    برای کنترل خاموش و روشن کزدن یه کلید LED چکار کنم؟؟
    لطفا راهنمایی کنید.

  23. محمد می‌گه:

    سلام
    ممنونم به خاطر اموزش خوب و کاملتون.
    فقط دو سوال دارم:
    ۱- توی دستور radio.openReadingPipe چرا ارگومان اول رو صفر گذاشتید؟ مگه نگفتید تعداد فرستنده ها رو مشخص میکنه

    ۲- توی کلیپی که گذاشتید از چه کلیدی استفاده میکردید که برای هر دستور راهنما میداد و کاملش میکرد؟

  24. hossein می‌گه:

    سلام
    با تشکر از مطالب خوبتون
    من فیلم انتهای صفحه رو دیدم و متوجه شدم در نرم افزار IDE شما کدها Autocompletion هستند. ممکنه راهنمایی بفرمایید این کار چطور در نرم افزار IDE ممکنه؟
    با تشکر

  25. hossein می‌گه:

    سلام
    با تشکر از مطالب خوبتون
    من فیلم انتهای صفحه رو دیدم و متوجه شدم در نرم افزار IDE شما کدها Autocompletion هستند. ممکنه راهنمایی بفرمایید این کار چطور در نرم افزار IDE ممکنه؟
    با تشکر

  26. آمانج می‌گه:

    با سلام
    من دو تا ماژول nrf24l01 معمولی دارم که تنها وقتی کار میکنند که دستم رو اطراف ماژول نگه دارم یا اینکه به کل پایه ی gnd ماژول رو وصل نکنم!
    به نظرتون مشکلشون چیه؟

  27. آمانج می‌گه:

    با سلام و تشکر بابته مطلب
    مدار رو دقیقا به شکل بیان شده بستم ولی چرا واسه من کار نمیکنه؟
    هر کاری کردم درس نشد
    لطفا راهنمایی کنید

  28. […] آموزش راه اندازی nrf24L01 به همراه جوی استیک و آردوینو […]

  29. محمد می‌گه:

    ببخشید میشه زحمت بکشی محل اتصال ماژول جوی استیک با آردوینو بذارید بتونم وصل کنم

  30. حسین می‌گه:

    باسلام و تشکر بابت مطالبی که به صورت رایگان ارائه شده.
    گفتید که با دستور radio.begin() ارتباط فعال میشه حالا اگه بخوایم وسط برنامه این ارتباط قطع شه دستورش چیه؟(لطفا محبت کنید و به ایمیلم بفرستید)

  31. احسان نازی می‌گه:

    سلام… ممنون بابت مطالب مفیدتون.
    میشه توضیح بدین چرا آرایه ی joystick رو بصورت آرایه ی سه تایی استفاده کردین و نه بصورت متغییر ساده. در ضمن چرا سه تا؟؟
    دز ضمن من این مدار رو دقیقا بستم. توی سریال مانیتور failed میزنه و توی هر دو آردوینو فقط ال ای دی چشمک میزنه.

    • درود
      آرایه ی joyStick را به صورت آرایه ی ۲ تایی تعریف کردم نه سه تایی .
      دلیل استفاده از ارایه هم به این دلیل بوده که جوی استیک دارای دو مقدار x و y و اگر بخواهیم هر بار متغیر ارسال کنیم فقط برنامه ی خود را پیچیده تر کرده ایم پس بهتر است با آرایه این کار را انجام دهیم

  32. ارمان می‌گه:

    سلام
    من اینو راه انداختم جواب داد روی مدل بدون انتن اما روی انتن دار جواب نمیده!!!!
    رو سالم بودن وصحت سخت افزار هام مطمئنم
    البته اینم بگم روی انتن دار فقط بار اول ارسال میشه و دیگه fail میشه…

  33. ارمان می‌گه:

    سلام میشه بگید باچه دستوری باید توان مدل انتن دار را ماکزیمم کرد؟
    در صورت امکان جوابشو به ایمیل هم بفرستید
    متشکرم

  34. علی می‌گه:

    سلام .ممنون از آموزش های مفیدتون
    من می خوام از دوتا nrf برای دوتا فرستنده و یک nrfبرای یک گیرنده استفاده کنم البته با آردینو.در قسمت گیرنده برای مشخص کردن این که از کدام فرستنده دیتا دریافت شود و در کجا ذخیره شود از چه کد هایی باید استفاده کنم

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *