آردوینو Arduino

کنترل سرو موتور با استفاده از NRF و Arduino

در پست های گذشته به تفصیل در مورد موتور های سرو و ماژول ارتباطی بی سیم NRF و راه های استفاده از این ابزار و کنترل آنها توضیح داده ایم. هر پروژه ای که در زمینه الکترونیک روی آن کار می کنیم و وظیفه کنترلی به عهده دارد با بی سیم شدن به سطح پیشرفته و بهینه تر از کنترل آن به روش سیمی می رسد. اکنون که به اندازه کافی با موتور سرو و NRF آشنا شده ایم در این پست قصد داریم با استفاده از NRF کنترل موتور سرو با استفاده از پتانسیومتر را به صورت بی سیم انجام دهیم.

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

FT89UQXJ52QANHM.LARGE

ابتدا توضیحاتی اجمالی در مورد هر کدام از وسایل مورد نیاز در این پروژه می دهیم و سپس به مرحله ساخت و برنامه نویسی آن می رسیم.

سرو موتور ( Servo Motor ) متشکل از یک موتور الکتریکی ساده است که در کنار موتور تعدادی المان الکترونیکی به منظور کنترل زاویه ، سرعت و یا شتاب به شفت موتور متصل می شوند و کلیه المان ها به همراه موتور در یک پکیج واحد ارائه می شوند. سرو موتور ها ممکن است دارای گیربکس یا فاقد گیربکس باشد و اندازه های بسیار کوچک برای مصارف ساخت تجهیزات مکاترونیکی مانند ربات ها و هواپیما های مدل تا اندازه های بزرگ برای دستگاه های صنعتی ساخته می شوند. در حوزه میکروکنترلر ، آنچه که از سرو موتور مشاهده می نماییم معمولا یک موتور DC جاروبک دار است که به کمک یک سری چرخدنده ( گیربکس ) به یک پتانسیومتر داخلی وصل شده است و خروجی گیربکس نیز از طرف دیگر خارج شده است. پتانسیومتر فقط وضعیت خروجی را کنترل می کند و کاری به وضعیت موتور ندارد.

در موتورهای سروو معمولا سیم نارنجی سیم ورودی پالس های موتور(Data) است و سیم قرمز تغذیه مثبت موتور و سیم قهوه ای GND موتور می باشد. در استانداردهای دیگر این موتور نیز سیم زرد به عنوان سیم دیتا و سیم قرمز تغذیه مثبت و سیم سیاه GND موتور می باشد.

yhst 62196343123315 2273 119349228

مشخصات کلی ماژول NRF

  • ولتاژ کاری : 3.3V
  • فرکانس کاری : 2.4GHz
  • نرخ انتقال داده : 2MBPS
  • جریان مصرفی : در حد mA
  • مدولاسیون:  GFSK
  • دارای کریستال 16MHz
  • ارتباط با ماژول های دیگر تا 6 ماژول و ایجاد شبکه محلی

کاربرد NRF

  • رادیو کنترل ها
  •  شبکه های سنسوری
  • VoiP
  • گجت های پوشیدنی

برای ایجاد یک سیستم ارتباطی بی سیم به یک فرستنده و گیرنده نیاز داریم. برای فرستنده از یک برد Arduino و یک ماژول NRF و در طرف گیرنده نیز از همین اجزا استفاده می کنیم و برای مشاهده داده های منتقل شده از Serial Monitor در نرم افزار Arduino استفاده می کنیم.

0003886 nrf24l01 24ghz wireless rf transceiver module 300

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

مشخصات پین های دیتا و تغذیه ماژول NRF

FANJM21J52QANJJ.LARGE

این ماژول با استفاده از رابط SPI ارتباط برقرار می کند. و نکته مهم در مورد تغذیه مورد استفاده برای این ماژول این است که پین های دیتا توانایی تحمل 5 ولت را دارا می باشند ولی توصیه می شود برای افزایش عمر ماژول و بهینه شدن ارتباط از ولتاژ 3.3 ولت استفاده شود. ولی تغذیه اصلی مدار به هیچ عنوان نباید بیشتر از 3.3 باشد و باید در محدوده 2 تا 3.3 قرار بگیرد در غیر اینصورت ماژول از کار می افتد.

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

کتابخانه NRF

شماتیک فرستنده کنترلر سرو موتور با استفاده از NRF و Arduino

FKKEV01J52QANJK.LARGE 1

شماتیک گیرنده کنترلر سرو موتور با استفاده از NRF و Arduino

sdccav

سورس کد برنامه فرستنده کنترلر سرو موتور با استفاده از NRF و Arduino

#include <SPI.h>
#include "RF24.h" 

int msg[1];

RF24 radio(5,10);                     //پایه های مربوط به انتقال داده ماژول

const uint64_t pipe = 0xE8E8F0F0E1LL; //آدرس دهی ماژول مورد نظر


void setup(void)
{
  radio.begin();                      //فعال کردن ماژول
  radio.openWritingPipe(pipe);        //تعیین خط خروجی دیتا
}

void loop(void)
{
  msg[0] =  map (analogRead(0), 0, 1023, 0, 179); 
  radio.write(msg, 1);
}

سورس کد برنامه گیرنده کنترلر سرو موتور با استفاده از NRF و Arduino

#include <Servo.h>
#include <SPI.h>
#include "RF24.h"

Servo myServo;

RF24 radio(5,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; 

int msg[1];

void setup()
{
  myServo.attach(3);                //پین مربوط به دیتای موتور
  radio.begin();                    //فعالسازی ماژول
  radio.openReadingPipe(1, pipe);   //تعیین خط ورودی دیتا
  radio.startListening();           //فعالسازی گرفتن دیتا
}

void loop()
{
  if(radio.available())
  {
    bool done = false;              //بازگردانی مقادیر مشخص به ازای داده های ارشال شده
    while (!done)
	{
      done = radio.read(msg, 1);
      myServo.write(msg[0]);
    }
  }
}

نوشته های مشابه

2 دیدگاه

  1. سلام. ممنون بابت پست خوبتون. توی این پروژه کلا از یک آردوینو استفاده میشه درسته؟ هم برای فرشتنده و هم گیرنده از همون یدونه استفاده کردین؟

  2. سلام.
    چطوری میتونم تعداد سروو متور رو بیشتر کنم؟
    میخوام سرعت دوتا موتور رو کنترل کنم.
    لطفا جواب بدین. کارم گیره…
    با تشکر.

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا