چهارشنبه, دی 26, 1403
ادامه منو
    خانهپروژه های میکروکنترلر AVRپروژه با ماژول هاراه اندازی ماژول NRF24L01 با میکروکنترلر AVR

    راه اندازی ماژول NRF24L01 با میکروکنترلر AVR

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

    NRF24L01-Wireless-Transceiver

     

    اشنایی با چیپ +NRF24L01

    چیپ +NRF24L01 نمونه تصحیح شده با امکانات بیشتر و دیتا ریت بالاتر چیپ NRF2401 است که توسط شرکت NORDIC در اوایل سال 2008 معرفی شد. این چیپ  یک ماژول بسیار عالی برای ارسال و دریافت اطلاعات بدون خطا است چیزی که در ماژول های  HMTR یا حتی در RFMXX ها یا به کلی وجود نداشت یا این که مشکلات خاص خود را داشت.
    مدولاسیون ارتباطی این ماژول به صورت GFSK است, همان مدولاسیونی که در تکنولوژی BLUETOOTH استفاده شده و به صورت انحصاری در دست چند شرکت بزرگ قرار دارد.

    CHIP-NRF24L01-Wireless-Transceiver
    فرکانس ارتباطی این چیپ 2.4 گیگا هرتز است که این خاصیت آن ویژگی های زیادی را برای ما به ارمغان می آورد! از جمله کوچک شدن سایز آنتن که حتی میتوان از خود PCB به صورت یک آنتن استفاده کرد. مورد دیگر هم به دلیل فرکانس بالا بسیار راحت تر از دیوار یا اجسام دیگر عبور می کند و باعث افزایش برد ان می شود. می توانید فرکانس RFM12 یا HMTR را با این چیپ مقایسه کنید! می بینید که فرکانس این سری از ماژول ها حداقل چند برابر آن ها است.
    این چیپ به صورت دو طرفه کار می کند و در کل شما فقط به 2 عدد از این چیپ ها برای ارتباط لازم دارید (مشابه RDM12) . دیتا ریت این چیپ حداکثر 2 مگا بیت بر ثانیه است که می توان از آن برای انتقال اطلاعات سنگینی مشابه صوت و یا حتی ویدئو استفاده کرد.

    ویژگی های ماژول +NRF24L01 نوع بدون آنتن

    • حداکثر دیتا ریت تا 2 مگا بیت بر ثانیه در فضای باز
    • جریان مصرفی بسیار پایین (12 میلی آمپر)
    • دارای رگولاتور داخلی و بی نیاز از تأمین ولتاژ های مختلف
    • محدوده ولتاژ تغذیه چیپ از 1.9 تا 3.6 ولت
    • مجهز به تکنولوژِی پیشرفته SHOCKBURST
    • قابلیت اتصال چند ماژول به هم از طریق بی سیم و ایجاد یک شبکه محلی
    • قابلیت تحمل ولتاژ 5 ولت بر روی پین های دیتا
    • سایز کوچک چیپ و نیاز به قطعات خارجی کم

    ویژگی های ماژول +NRF24L01 نوع آنتن دار

    • طبقه تقویت کننده گیرنده و فرستنده داخلی
    • حداکثر دیتا ریت تا 2 مگا بیت بر ثانیه در فضای باز
    • جریان مصرفی بسیار پایین (12 میلی آمپر)
    • دارای رگولاتور داخلی و بی نیاز از تأمین ولتاژ های مختلف
    • مجهز به تکنولوژِی پیشرفته SHOCKBURST
    • قابلیت اتصال چند ماژول به هم از طریق بی سیم و ایجاد یک شبکه محلی
    • قابلیت تحمل ولتاژ 5 ولت بر روی پین های دیتا
    • سایز کوچک چیپ و نیاز به قطعات خارجی کم

    موارد استفاده ماژول +NRF24L01

    • قطعات کامپیوتری وایرلس مانند موس یا کی بورد یا قطعات دیگر
    • هدست های بیسیم مانند VOIP HEADSET
    • دسته های بیسیم کنسول های بازی مانند PS3
    • ساعت های ورزشی یا سنسور ها
    • ریموت کنترل برای مصارف الکترونیکی
    • اتوماسیون خانگی (خانه هوشمند)
    • در شبکه هایی که نیاز به یک ارتباط وایرلس بسیار کم مصرف است
    • سیستم های مسیر یاب مانند GPS
    •  اسباب بازی ها
    • و در بسیاری از پروژه های متنوع صنعتی و غیرصنعتی که نیاز به یک ارتباط بی سیم مطمئن می باشد

     

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

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

     

    تابع nRF_Config :

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

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

     

    تابع Send_Data :

    نکته : زمانی که می خواهیم اطلاعاتی را ارسال یا دریافت کنیم این اطلاعات در فرستنده یا گیرنده درون ارایه ای به نام payload قرار داده می شوند. payload یک ارایه 32 در 8 بیتی می باشد که اطلاعات مورد نظر خود را در ان قرار داده و پشت سرهم ارسال می شوند.

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

     

    متغیر State :

    از متغیر State در گیرنده استفاده می شود. زمانی که ماژول گیرنده اطلاعاتی را دریافت نمی کند State برابر 0 است و زمانی که اطلاعات را از فرستنده دریافت کرد برابر 1 می شود. همانطور که گفته شد اطلاعاتی که قصد ارسال انها را داریم درون ارایه payload قرار می دهیم و در گیرنده بعد از اینکه متغیر State برابر 1 شد می توانیم این اطلاعات را از شماره payload که در فرستنده مشخص کرده ایم(درون تابع Send_Data) دریافت کنیم. به عنوان مثال در زیر اطلاعات موجود در payload یک را که از فرستنده دریافت کرده ایم درون متغیر data ریخته ایم :

     

    پایه های ماژول +NRF24L01 و نحوه اتصال ان به میکرو کنترلر :

    ما در این پروژه از میکروکنترلر ATmega32 برای راه اندازی ماژول +NRF24L01 استفاده کرده ایم. پایه های این ماژول در هر دو مدل با انتن و بدون انتن به صورت زیر است :

    nRF24L01-Pinout

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

    BaseModuleNrf

    نحوه اتصال ماژول +NRF24L01 به میکرو هم به صورت زیر است (برای فرستنده و گیرنده) :

    • پین IRQ <<< PB2
    • پین CE <<< PB3
    • پین CSN <<< PB4
    • پین MOSI <<< PB5
    • پین MISO <<< PB6
    • پین SCK <<< PB7

    نکته : در صورتی که از میکروکنترلر دیگری استفاده می کنید, باید پین های MOSI و MISO و SCK را به پین های مربوط به پروتکل SPI در ان میکروکنترلر متصل کنید و پین های CE و CSN را می توانید به هر پین خالی در میکرو متصل کنید اما قبل از ان باید در کتابخانه ماژول شماره پین ها را با توجه به پین های جدیدی که انتخاب کرده اید تغییر دهید. پین IRQ را هم به هر پینی که وقفه خارجی دارد می توان متصل کرد و تغییرات لازم را با توجه به شماره وقفه خارجی جدید در کتابخانه ایجاد کرد.

     

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

    NRF24L01-Test-with-AVR

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

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

    Transmitter-NRF24L01-Test-with-AVR

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

    Receiver-NRF24L01-Test-with-AVR

     

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

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

    نکته : توجه کنید که در شبیه سازی پروتئوس پایه های تغذیه میکروکنترلر مگا 32 وجود ندارد به همین دلیل به جایی وصل نشده اند, ولی شما در عمل پایه 10 هر دو میکرو را به مثبت و پایه 11 انها را به منفی (زمین) متصل کنید (5 ولت)

    توضیحات قسمت های مهم برنامه نوشته شده, سوالات خودتون رو می تونید در قسمت نظرات مطرح کنید

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

     

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

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

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

    عابد رازانی
    عابد رازانیhttps://emic.ir/
    فارغ التحصیل کارشناسی الکترونیک از دانشکده باهنر شیراز و علاقمند به برنامه نویسی و طراحی مدارات الکترونیکی, در حال حاضر به تولید محتوای آموزشی و طراحی و انجام پروژه مشغول هستم.

    74 نظرات

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

    2. درود وقت بخیر. مهندس اول اینکه ممنون بابت پروژه . فقط یک ایرادی تو کتابخانه هست حتماااااا این درست ش کنید یا تو متن بنویسید که دوستان کتابخانه رو درست ش کنن که مثل من دو روز به مشکل نخورن. یک ایراد کوچیک تو برنامه هست که باعث شده بعضی از دوستان و خودم نتیجه نگیریم و یا با اختلال کار کنه.
      من اول مدار رو روی برد برد بستم جواب داد بعد اومدم پی سی بی زدم بدون اینکه پایه ها تغییر بدم ولی اصلا کار نکرد. دو روز درگیر بودم که چرا همین برنامه داره روی برد برد کار میکنه ولی رو بردی که زدم کار نمیکنه. بطور کاملا اتفاقی فهمیدم دستم که نزدیک سیمی که به NRF وصل هست نزدیک میکنم با یکم اشکال کار میکنه. دستم که به رگولاتور میزنم کلا کار نمیکنه . خلاصه مشخص بود یک نویز کوچیکی هست که باعث این ایراد شده. سه تا میکرو هم عوض کردم ولی بازم با اختلال کار میکرد . همه مدل فیلتر و خازن و هر چی بگی هم تست کردم ولی حل نشد. تو کتابخانه NRF که نگاه کردم دیدم شما نوشتید که:
      #define CE PORTB.3
      #define CSN PORTB.4
      این دوتا پین خروجی هستن ولی پایین تر شما نوشتید:
      PORTB=0x00;
      DDRB=0xB0;
      یعنی اشتباهی پورتB.3 که خروجی هست و تو کتابخانه به عنوان خروجی استفاده کردید تو خط بالا اومدی ورودی تعریف کردید. همین باعث اختلال تو برنامه و جواب نگرفتن دوستان شده. من خط بالا رو تغییر دادم نوشتم:
      DDRB=0xBB;
      یعنی خروجی تعریف کردم پورتB.3 تمام مشکلات و اختلال ها و نویز ها و اینکه یکبار میگرفت یکبار نمیگرفت همه چی حل شد.
      این یا شما خودتون کتابخانه رو اصلاح کنید و دوباره بذارید تو سایت یا حداقل کامنت من رو تو متن بنویسید که اینطوری مشکل نخورن بقیه.

    3. سلام ممنون از آموزش خوبتون
      من یه برنامه دیگه ایو که قبلا با آردوینو نوشته بودم و خیلی خوب هم جواب داد رو ریختم روی atmega8 ولی خیلی کنده یعنی تو فرستنده جوی استیکو حرکت میدم تو گیرنده چند ثانیه بعد عدد نشون میده. علت بوت لودرمه یا اتمگا8 کلا ضعیفه؟
      بوت لودر میکرو کنترلرو قبلا با آردوینو ریختم روش بعد با مبدل سریال برنامه رو ریختم. به میکرو کنترلر هم یه کریستال 16مگاهرتز وصله

    4. عرض درود و خسته نباشید
      میخواستم بدونم آیا میشه وسط برنامه ماژول رو از حالت slave به master یا همون از گیرنده به فرستنده و بلعکس تغییر داد یعنی مثلا اول از دستور nRF_Config(1) استفاده کردیم بعد وسطای برنامه بیایم و از دستور nRF_Config(0) استفاده کنیم؟

    5. سلام خسته نباشید
      امکان دارد با یک فرستنده 10 گیرنده را کنترل کرد ممنون میشم راهنمایی بفرمایید متشکرم

    6. سلام وقت بخیر
      برای استفاده از توابع ماژول nrf24l01 در کدویژن نیاز کتابخانه ی خاصی رو دانلود کنیم ؟

    7. سلام. من کد رو برای atmega8 تغییر دادم. کتاب خونه رو هم تغییراتی دادم ولی هرچی تست میکنم کار نمیکنه..!
      ال ای دی گذاشتم که بفهمم کار میکنه دیدم اصلا کار نمیکنه. پروگرمر و میکرو سالمه تست کردم…
      فایل کدی که تغییر دادم اینه:
      https://uupload.ir/view/nrf24l01-test-with-avr-www.emic.ir_nyv3.rar/
      لطفا بررسی کنید ببینید مشکل چیه..؟!

      • سلام
        حدود یکو نیم سال از پیامتون میگذره ولی با اینحال گفتم شاید راه حلی براش پیدا کرده باشید
        من هم همینکارو کردم ولی با atmega8 کار نمیکنه. کلا با atmega8 نمیشه یا اینکه راهی داره؟

    8. سلام مهندس جان
      امکان داره بخوام هم بصورت گیرنده و فرستنده همزمان استفاده کنم.یعنی دیتا رو از فرستنده به گیرنده فرستاده و روی ال سی دی نمایش و از گیرنده یه سری دیتا مث کلید به فرستنده ارسال بشه؟؟!!

    9. سلام من با توجه به نیازم کتابخونرو برای mega2560 تغییر دادم البته هنوز در عمل تستش نکردم ولی فکر میکنم درست باشه.
      سوالی که داشتم اینه که (البته فکر کنم مشابه این سوالو چنتا از دوستان پرسیده بودن) من در پروژم 30 عدد کلید میخوام بزارم که میخوام وضعیت این 30 کلید برای برد گیرنده ارسال بشه و (به صورت 0 یا 1 یا on و off یا هرجور دیگه ای) بتونم اونرو از طریق ترمینال کامپیوتر که از طریق USART به گیرنده متصل هستش بخونم الان سوال اینجاست که شما فقط یک بایت از کل 32 بایت ماژول NRF24L01+ استفاده کردید ولی من با 30 عدد کلید میخوام 30 بایت استفاده کنم و برای گیرنده ارسال کنم میخواستم بدونم چطور 30 تا کلید رو بجای 1 کلید تعریف کنم تو قسمت data=PINA.0; و Send_Data(1 , &data);
      ممنون میشم راهنمایی کنید خیلی به این پروژه نیاز دارم

    10. سلام
      خداقوت خسته نباشید بخاطر سایت خوبتون
      برد این فرستنده و گیرنده آنتن دار که شما بستین روی برد برد عملا حداکثر چقدر است (خودتون تست گرفتین)؟
      و بیزحمت برنامه رو برای آی سی مگا 8 بیزحمت بزارین ، تشکر فراوان

      • سلام, برد ماژول NRF24L01 انتن دار 1 کیلومتر در فضای باز می باشد. البته من خودم برد ماژول را در عمل تست نکردم و طبق اطلاعات ارائه شده توسط سازنده ماژول باید این میزان برد داشته باشد

    ارسال دیدگاه

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

    spot_img