ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتایج: از 1 به 1 از 1
  1. #1
    2017/04/04
    15
    44

    راه اندازی rfm12b با آردوینو

    rmf12b محصول شرکت چینی HOPE RF هستش و قراره امروز آموزش راه اندازی rfm12b رو در سایت قرار بدیم ، این فرستنده و گیرنده در فرکانس های 433 و 868 و 915 مگاهرتز کار میکنه.این ماژول فرکانس های دیگه هم میتونه تولید کنه ولی خب این 3 فرکانس ، فرکانس های آزاد یا اصطلاحا بدون گواهینامه هستند. واحد های فرستنده و گیرنده هر دو در یک تراشه هستن که در شکل زیر هم پایه ها و اسم هاشون میشه:


    دیتاشیت این ماژول رو هم میتونید از لینک زیر دانلود کنید:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


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

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    اگر بخوام از کاربرد های این ماژول که یک ماژول کم مصرف هستن و برای کاربرد های توان پایین بسیار مناسبه بگم ، باید به موارد زیر اشاره کنم :
    ریموت کنترلها
    ریموت سنسورها
    انتقال داده بصورت بیسیم
    اسباب بازی ها
    و …
    توی Example های کتابخونه خیلی ازکدها جنبه کاربردی دارن ،مثل ریموت rgb و کنترل رله و.. که میتونید اونهارو هم چک و امتحان کنید.

    ویژگی های RMF12:

    توان خروجی 100mw که توان بالایی به حساب میاد.
    ورودی/خروجی آنتن 50 اهم
    توان ارسال (TX) قابل برنامه ریزی
    واسط کنترل سریال با SPI
    دارای Wake-Up Timer یا زمان سنج بیدارباش
    كنترل خودكار فركانس
    حساسیت ورودی بالا
    و …
    که اگه قرار باشه همشو لیست کنم ، کل وقتمون رو میگیره!
    یک نکته فقط اینکه حواستون باشه که تغذیه ی این ماژول 3.3 ولته و واسط ارتباطی ، SPI هستش که در مطلب

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    اون رو آموزش دادیم.
    نحوه کار Rmf12

    درسته که از آردوینو استفاده میکنیم تا از ورود کردن به جزئیات فرار کنیم ، ولی چون بحث آموزشیه ، خوبه که یکم وارد جزئیات هم بشیم، البته این هارو باید بدونین که ادامشو هم بفهمین!
    در شبکه بی سیم ، هر گروه از تعدادی گره و یک گره مرکزی تشکیل میشه که هر گره ریزپردازنده ای داره. نمودار گروه رو در شکل زیر میبینید:
    تعداد گره ها در شبکه بی سیم 31 عدد هست که گره های صفر و 31 خاص هستن و در مجموع 30 گره برامون میمونه و کلا 250 گروه هم داریم و نکته اینجاست که گره های متعلق به یک گروه میتونن با هم تبادل اطلاعات داشته باشن.
    برای راه اندازی rmf12b یا به شکل کلی تر یک شبکه ی حسگر بی سیم ، نیاز به بسته بندی اطلاعات، قراردادن داده ی سربار برای آدرس ، خطایابی و تایید داریم. در ماژول RFM12b ، یک بسته ی اطلاعاتی 9 بایت اضافی سربار داره:
    سه بایت مقدمه
    دو بایت همزمانی
    دو بایت اطلاعات بسته
    دو بایت crc

    payload بسته ای اطلاعاتی است که 66 بایت جا داره. قسمت SYN ، دو بخش داره که بایت اول اون ثابته و بخش دوم اون گروهی تبادل داده میکنه. قسمت Head ، چند بیت داره ک در شکل زیر میبینید.

    بیت A (ACK): این بیت نشون میده ، بسته ای که میفرستیم از گیرنده تاییدِ درسخوات میخواد یا نه.
    بیت D (DST): بیت مشخص کننده ، گره مبدا یا مقصده
    اگر بخوایم به گره خاصی ، داده بفرستیم ، بیت رو یک میکنیم
    اگر بخوایم همه ی گره ها ، داده رو دریافت کنن، بیت رو صفر میکنیم.
    بیت C (CTL): این بیت برای ارسال تایید دریافت به کار میره.
    گفتیم که تعداد گره ها 30 تاس و 250 گروه میتونیم داشته باشیم .چون گروه ها در فرکانس یکسانی کار میکنن ، همزمان نمیتونن تبادل داده کنن.سرعت تبادل داد هم حدود 50 هزار بیت در ثانیه هستش. درنتیجه ، یک بسته ی داده کامل 66 تایی حدود 12 میلی ثانیه طول میشکه ارسال بشه.

    (66+9)*8*20us=12ms

    یک بسته داده رو با جزئیات کامل در شکل زیر میبینید:


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

    آردوینو تابع های لازم برای ارتباط با RFM12b رو فراهم میکنه که در کتابخونه ی JeeLib.h موجوده .(اگر از افرادی هستین که

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سایت رو دنبال میکنید این مژده رو بدم که جلسات آخر، آموزش کتابخانه نوشتن برای آردوینو رو هم آموزش میدم و دیگه لازم نیست اگر کتابخونه ای پیدا نکردین بیخیال آردوینو بشین!)

    تابع rf12_initialize

    تابع زیر برای تعریف شبکه rfm12b استفاده میشه و 3 ورودی داره:

    کد HTML:
    rf12_initialize(id,rf12_band,group)
    id : شماره گره .(گفتم گره صفر و 31 گره های خاصی هستن. گره صفر مخصص حالت ON-Off keying هستش و گره شماره 31 ، پیام مربوط به همه ی گره ها در گروه خود رو برمیداره.)
    rf12_band : برای تعریف محدوده ی فرکانسی هستش. فرکانس کاری روی تراشه درج شده.
    group :گروهی که گره ها با هم تبادل اطلاعات دارن.

    مثال:مازول رو در گروه 33 و در فرکانس 433 مگاهرتز و در گره دوم تعریف کردم:
    کد HTML:
    rf12_initialize(1,rf12_433,2)
    تابع rf12_recvdone(void)

    اگر ماژول داده ای دریافت کنه ، خروجی تابع TRUE هست .پس از دریافت داده ، متغیر های زیر معتبرن :
    rf12_hdr : بایت header است که شامل بیت های پرچم و شماره گره هستش.
    rf12_len : تعداد بایت داده در بسته رو میده. (عددی بین صفر تا66)
    rf12_data : اشاره گری به داده ی دریافتی هستش.
    rf12_crc : کد crc داده ی دریافتی (2 بایت کدی که بالا گفتم )
    که اگر عددی بجز صفر دریافت کنیم ، سایر داده ها صحیح نیستند.
    مثال: این برنامه اگر داده ای رو دریافت کنه ، به صورت سریال میفرسته:
    کد HTML:
    if(rf12_recvDone() && rf12_crc==0){
        for(byte i=0;i<rf12_len;i++)
           serial.println(rf12_data[i]);
    }

    تابع rf12_canSend(void)

    اگر تراشه آماده ارسال باشه ، خروجی تابع TRUE هستش و در صورت آماده بودن تراشه ، تابع rf12_sendStar رو برای ارسال داده فراخوانی میکنیم.
    تابع rf12_sendStar

    شکل کلی این تابع به شکل زیره :
    کد HTML:
    rf12_sendStar(hdr,ptr,len)
    با فرخوانی ای تابع ، داده ها شروع به ارسال میشن، قبل از اون باید مطمئن بشیم که داده دیگه ای در حال ارسال یا دریافت نباشه . با بررسی خروجی دو تابع rf12_canSend و rf12_recvDone از این موضوع میتونیم مطمئن بشیم.پارامتر های ورودی تابع بصورت زیره:
    hdr : این قسمت شامل بیت های پرچم و شماره ی گره مقصده.
    ptr :اشاره گر به داده ی ارسالیه.
    len : تعداد بایت های ارسالی رو نشون میده.

    مثال:
    بیست بایت ارسالی رو با درخواست تایید از طرف گیرنده به گره شماره یک قراره بفرستیم:
    کد HTML:
    #include <JeeLib.h>
    #define RF12_HDR_ACK 0X20 
    MilliTimer sendTimer;
    const byte Node_ID ;
    char buf[20];
    byte needToSend;
    void setup(){
      }
    void loop(){
    if (sendTimer.poll(3000))
    needToSend=1;
    if(needToSend && rf12_canSend()){
    needToSend=0;
    rf12_sendStart(RF12_HDR_ACK|Node_ID,buf,20);}}
    تابع sendTimer.poll(3000) هر 3 ثانیه TRUE میده ! علت اینکه تاخیر رو جدا از rf12_canSend بررسی میکنیم ، امکان صفر شدن لحظه ای خروجی تابع تاخیر هنگام یک شدن تابع rf12_canSend هستش.
    تابع rf12_sendNow(unit8_t hdr,const void*ptr,unit8_t len)

    این تابع ترکیبی از تابع هایrf12_cansend و rf12_sendStar میباشد. به محض اینکه ماژول ، آماده ی ارسال داده باشه ، داده رو ارسال میکنه. پارامتر های ورودی اون مثل تابع rf12_sendstar هستش.

    مثال پایانی:
    برنامه ای قراره بنویسیم که دمای اتاق رو بشکل بی سیم میفرسته و گیرنده داده دریافتی رو به صورت سریال ارسال میکنه.


    کد HTML:
    #include <JeeLib.h>
    byte temp,pending;
    MilliTimer sendTimer;
    void setup(){
      analogReference(INTERNAL);
      rf12_initialize(1,RF12_433MHZ,88);
    }
    void loop(){
      temp=analogRead(0);
      rf12_recvDone();
      if(sendTimer.poll(100)){
        pending=1;
      }
      if(pending && rf12_canSend()){
        rf12_sendStart(0,&temp,sizeof temp);
        pending =0;
      }
    }
    ,و برنامه ی گیرنده :

    کد HTML:
    #include <JeeLib.h>
    void setup(){
      Serial.begin(9600);
      rf12_initialize(1,RF12_433MHZ,88);
    }
    void loop(){
      if(rf12_recvDone()&& rf12_crc ==0){
        for(byte i=0;i<rf12_len;i++){
          Serial.print(' ');
          Serial.print(rf12_data[i],HEX);    
        }
       
      }
    }
    تابع های اصلی رو گفتم و همین مطلب خودش یک روز کامل ازم وقت گرفت ! توضیحات بیشتر رو در باره تابع های دیگه توی سایت

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ببینید.

    منبع :

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

نمایش نتایج: از 1 به 1 از 1

موضوعات مشابه

  1. راه اندازی ماژول hx711 با آردوینو
    توسط bann در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 2
    آخرين نوشته: 2018/12/03, 23:27
  2. کمک برای راه اندازی شیلد lcd tft 2.4 با آردوینو مگا
    توسط sadegh.put در انجمن خانواده Arduino
    پاسخ: 11
    آخرين نوشته: 2017/05/28, 12:20
  3. راه اندازی دسته بازی ps2 با آردوینو
    توسط engamanc در انجمن خانواده Arduino
    پاسخ: 6
    آخرين نوشته: 2016/12/09, 15:16
  4. راه اندازی wtv020m01 با آردوینو
    توسط sfzz در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2015/07/20, 22:56
  5. مشکل در راه اندازی ماژول RFM12b
    توسط esalimi در انجمن ماژول های RF - ISM Band و بلوتوث
    پاسخ: 11
    آخرين نوشته: 2013/08/01, 18:33

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •