آردوینو نرم افزار

پروژه تشخیص حرکت آردوینو با نرم افزار متلب Matlab از طریق پورت سریال

arduino-and-matlab-srf-project-digispark
نوشته شده توسط مهدی تاج الدینی

از جمله راه‌های ارتباطی یک سیستم رایانه‌ای با سایر سخت افزارها پورت سریال است. پورت سریال در واقع یک رابط سری است که می‌تواند بیت‌های اطلاعات را در همان لحظه انتقال دهد. برد آردوینو هم به همین روش با یک رایانه ارتباط برقرار می‌کند. بنابراین سمت رایانه با نرم افزارهای مختلفی می‌توان به این برد جذاب فرمان داد. در نرم افزار آردوینو Arduino IDE به زبان C++ کد نویسی می‌کنیم. در این پست شیوه ارتباط برد آردوینو با نرم افزار متلب Matlab را آموزش خواهم داد. در ادامه این آموزش با مرجع آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

ارتباط برد آردوینو با متلب Matlab

اگر با برد آردوینو و برنامه نویسی این برد به مقدار اندکی آشنا باشید. شاید به موضوع پردازش روی داده‌های دریافتی از یک سنسور نظر شما را به خود جلب کرده باشد. تصور کنید اطلاعات یک سنسور مانند سنسور فاصله سنج آلتراسونیک SRF را به دست آورده‌اید. حال می‌خواهید روی آن پردازش تخصصی انجام دهید. مثلا داده سنسور فاصله سنج آلتراسونیک SRF را به صورت رسم نمودار، نمودار سه بعدی، تشخیص تعداد اعضا و… تبدیل کنید. نرم افزار متلب Matlab پردازش‌هایی تخصصی را روی اعداد انجام می‌دهد. لازم است بدانید که توسط ارتباط برد آردوینو با متلب Matlab با استفاده از پورت سریال آردوینو این امر امکان پذیر خواهد بود. سپس داده‌های بدست آمده از برد آردوینو را در نرم افزار متلب Matlab ذخیره کنید.

ارتباط آردوینو با نرم افزار متلب arduino and matlab - دیجی اسپارک

 

پروژه آلتراسونیک آردوینو و Matlab

در این پروژه با استفاده از مازول آلتراسونیک SRF04 و برد آردوینو، اطلاعات را از طریق رابط سریال به رایانه منتقل می‌کنیم. سپس از طریق نرم افزار متلب Matlab به برد آردوینو متصل می‌شویم. داده‌های دریافتی از سنسور فاصله سنج آلتراسونیک را در این نرم افزار تحلیل خواهیم کرد. برای شروع ارتباط آردوینو با نرم افزار متلب Matlab مانند تصویر زیر اتصالات ماژول آلتراسونیک SRF04 را به برد آردوینو برقرار کنید. لازم به ذکر است که پیش از این در پست اتصال ماژول آلتراسونیک تشخیص فاصله SRF05 به آردوینو اتصالات و کدنویسی توضیح داده شده است. در صورتی که نیاز به توضیحات بیشتری دارید به لینک معرفی شده مراجعه کنید.

 

کد ارتباط آردوینو با نرم افزار متلب

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

 

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

 

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

 

ارسال اطلاعات به نرم افزار متلب

در بالا ماژول فاصله سنج آلتراسونیک SRF04 راه اندازی شد. تابعی که در پایین نوشته شده کدمیکرو ثانیه را به سانتیمتر تبدیل می‌کند. حال اطلاعاتی که از ماژول HC-SR05 ارسال می‌شود به صورت مستقیم روی پورت سریال ارسال می‌شود. پس از اینکار بایستی توسط نرم افزار متلب Matlab این اطلاعات را از پورت سریال بخوانیم. کد بالا به دلیل وجود آموزش‌های فراوان در سایت تحلیل نشد. حال پس از باز کردن نرم افزار متلب به مسیر edit در Command window بروید. یک فایل متنی برای برنامه نویسی باز می‌شود. فرض بر این است که میخواهیم ۱۰۰ عدد از ماژول آلتراسونیک که روی پورت سریال است را خوانده، سپس نمودار آن را رسم کنیم. برای اتصال برد آردوینو با نرم افزار متلب Matlab از کد دستوری زیر استفاده می‌کنیم.

arduino=serial('COM11','BaudRate',9600);

پس از اجرای این دستور، شماره پورتی که آردوینو به آن وصل است را وارد می‌کنید. لازم به ذکر است که میتوانید این com را از داخل برنامه arduinoIDE پیدا کنید. سپس سرعت تبادل اطلاعات را از شما می‌خواهد. این سرعت باید با سرعت تبادل اطلاعات برد آردوینو یکی باشد. بهترین سرعت برای تبادل اطلاعات بین برد آردوینو با نرم افزار متلب ۹۶۰۰ می‌باشد. سپس با دستور زیر پورت سریال را باز می‌کنیم.

fopen(arduino);

یکی از کاربردهای دستور fopen باز کردن پورت سریال است. به این علت که میخواهیم ۱۰۰ عدد از ماژول فاصله سنج آلتراسونیک را در نرم افزار متلب بخوانیم؛ با دستور زیر یک دنباله حسابی با جمله عمومی ۱ بین یک تا صد ایجاد می‌کنیم.

x=linspace(1,100);

 

نرم افزار متلب و آردوینو Arduino and matlab - دیجی اسپارک

حال با یک حلقه for به صورت زیر اطلاعات را از پورت سریال می‌خوانیم. سپس با دستور plot نمودار فاصله را چاپ می‌کنید. در این آموزش داده‌های برد آردوینو را به نرم افزار متلب Matlab فرستادیم.  سپس روی آن‌ها پردازش انجام دادیم. در آموزش بعدی به شما خواهم گفت که چگونه از نرم افزار متلب Matlab به برد آردوینو Arduino داده ارسال کنیم.

 

clear

clc



arduino=serial('COM11','BaudRate',9600);



fopen(arduino);



x=linspace(1,100);

  

for i=1:length(x)

        y(i)=fscanf(arduino,'%d');

    if (y(i)>2000)

       

        y(i)=0;

    end

end



plot(arduino,x);

 

سخت افزار مورد نیاز

برد آردوینو UNO

ماژول آلتراسونیک SRF04

 

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

 

پروژه و دریافت بن ارسال رایگان

برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

مهدی تاج الدینی

دانشجوی مهندسی برق-بعضی از زمینه های فعالیتم در زبان های برنامه نویسیC-C++-Arduino-AVR-Matlab

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۵ دیدگاه

  • سلام و خسته نباشید
    از اینکه متلب هم به آموزش های دیجی اضافه شد بسیار خوشحالم من در دوران دانشگاه با متلب کار کردم و الان مدت زمان زیادی از یادگیریش گذشته سوالی که دارم
    کد fopen arduino را کجا باید وارد کنم؟

    • سلام.از توجه شما سپاس گذارم،تابع fopen(arduino) برای باز کردن پورت سریال استفاده می شود.این کد را باید در نرم افزار متلب بعد از باز کردن یک برنامه جدید در قسمت ادیتور وارد کنید.توجه کنید که پورت سریال Arduino و متلب همراه با هم نباید باز باشد.در صورت باز بودن با Eror خطای ارتباطی رو به رو می شوید که در صورت رو به رو شدن با این مشکل برنماه متلب را یک بار کامل ببندید.

  • سلام خسته نباشید. ممنون بابت اموزش های خوبتون.
    تمام مراحلی که گفتید انجام دادم اما این وارنینگ ها رو دریافت میکنم.
    Warning: Unsuccessful read: A timeout occurred before the Terminator was reached..
    Warning: Unsuccessful read: The input buffer was filled before the Terminator was reached.
    البته از ماژول SRF05 استفاده کردم. ممکنه از اون باشه؟

    • با سلام.چک کنین آیا آردوینو به PC وصل شده یا خیر،اگر وصل نشده به این معنی هست که دو پورت سریال آردوینو و متلب به صورت هم زمان باز است.توجه کنید که این دو پورت سریال (آردوینو و متلب) نباید با هم باز باشند.کاری که شما باید انجام دهید این است که ابتدا نرم افزار متلب را به طور کامل بسته.سپس چک کنید که پروت سریال آردوینو باز نباشد،حال متلب را باز کرده سپس برنامه متلب را Run کنید در هنگام Run شدن مدتی زمان می برد که صد داده اول از ماژول UltraSonic گرفته شود.(خطای شما به این دلیل است که به دلیل باز بودن پورت سریال آردوینو و متلب با هم برنامه COM اصلی را وصل نمی کند(تا Arduino IDE کد را آپلود کند.)،پس در هنگام کار اصلا پورت سریال آردوینو را باز نکنید.)

  • سلام
    بابت مطلبتون ممنونم اون قسمت که گفتید ۱۰۰ سنسور التراسونیک را محاسبه میکنیم. یعنی حتما باید ۱۰۰ تا ماژول را به نرم افزار متصل کنیم؟ بعد چطوری قرار هست که این ۱۰۰ تا سنسور از یک آردوینو دیتا بفرستند؟

    • با سلام.گفته شده که صد «عدد» از ماژول اولتراسونیک دریافت می شود(به بیان بهتر از برد آردوینو دریافت می شود.) و به متلب ارسال می شود.

  • با سلام ممنون از اموزش کامل و دقیقتون
    برای انجام این پروزه به جز دو سخت افزار اردینو و التراسونیک به چ چیزایی دیگه ای احتیاج هست ک سفارش بدم؟
    مثلا LCDکاراکتری یا برد برد یا…

    • سلام برای این آموزش بله ولی توصیه میکنم شما که می خواهید ارتباط آردوینو با متلب را یاد بگیرید چند تا سنسور دیگه که این جا میگم رو تهیه کنین چون آموزش های بعدی که در مورد ارتباط با متلب قرار میدم به این شرح هست:
      ۱-ساخت نمایشگر میزان نور به صورت مستقیم به صورت نموداری روی متلب با تغییرات آنی در واحد زمان
      (سنسور فتوسل مقاومت های ۱۰ کیلو یک کیلو ۱۰۰ اهم برا آردوینو)
      ۲-ساخت دزد گیر لیزری با نرم افزار متلب(سنسور گیرنده نور لیزر و سنسور فرستنده نور لیزر Buzzer)
      ۳-کنترل سرعت موتور DC با نرم افزار متلب و ماژول L298(موتور DC و L298)
      ۴-پروژه تشخیص خط سیاه و سفید با ماژول گیرنده فرستنده مادون قرمز(ماژول گیرنده فرستنده مادون قرمز)
      ۵-ساخت رابط گرافیکی GUI برای کنترل Stepper Motor در متلب (استپر موتور)
      ۶-پروژه motion detection برای جابه جایی(همان ماژول گیرنده فرستنده)

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

  • سلام وقت بخیر
    ممنون از اطلاعاتی که در اختیار دیگران قرار دادید.
    یه سوال. آیا مثل محیط برنامه نویسیی آردوینو امکانش هست کدی که توی متلب نوشته شده(m فایل) رو مستقیم روی آردوینو آپلود کرد و بدون استفاده از متلب یا pc از آردوینو استفاده کرد؟ حالا یا با تبدیل به فرمت آردوینو یا هر روشی. میدونم که رسم نمودارها یا بعضی امکانات متلب رو آردوینو نمیتونه انجام بده، منظورم همون کاری هست که توی C نوشته میشه و روی آردوینو آپلود میشه .
    متشکر

    • سلام . از توجه شما سپاس گذارم .خیر این امکان وجود ندارد(کد مورد استفاده در آردوینو به صورت مستقیم در متلب در حال پردازش است و به صورت مستقیم روی برد آپلود نشده این ویژگی بوت لودر متلب می باشد.) ، شبیه سازی با متلب کاربرد های خاص خود را دارد و برنامه نویسی برد آردوینو در محیط Arduino IDE بسیار ساده تر است و کار هایی که با IDE میتوان انجام داد نیازی نیست که در محیط متلب انجام شود.

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

  • سلام وقت بخیر.
    تو پروژم قصد دارن یه عدد بفرستم به آردوینو و مدام داده ها رو که از آردوینو میاد رو نمایش بدم.بخش اول رو که باید عدد بفرستیم کاملا درست انجام دادم ولی بخش نمایش فقط یک بار fscanf انجام میشه.خواستم بدونم چطور باید برنامه نویسی شه این بخش از چه حلقه ای استفاده کنم .لطفا راهنمایی کنید
    Gui:
    function TXD_Callback(hObject, eventdata, handles)
    global s;
    global tx;
    tx=get(handles.Input,’string’);
    s=serial(‘COM4′,’BaudRate’,9600);
    fopen(s)
    rpm1=fscanf(s,’%f’)
    set(handles.indicate,’string’,num2str(rpm1));
    fprintf(s,tx);

    fclose(s);
    delete(s);

  • سلام من این برنامه رو نوشتم ولی این خطا رو میگیرم:
    Warning:Unsuccessful read:Matching failuture in format..
    subscripted assignment dimension
    mismatch.
    (‘y(i)=fscanf(arduino,’%d