آموزش آردوینو تکنولوژی

آموزش جامع ارتباط سریال آردوینو -بخش اول

آموزش ارتباط سریال Arduino
نوشته شده توسط علیرضا قربانی

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

 

آموزش ارتباط سریال آردوینو بخش اول

تمام برد های آردوینو دارای حداقل یک عدد  پورت سریال می باشد که  اختصارا به آن ها UART ,USART گفته می‌شود. در آردوینو از پین‌های دیجیتال ۰ و ۱ برای راه اندازی پورت سریال استفاده می‌شود و میتوان به وسیله‌ی درگاه USB بر روی برد ،آردوینو را به کامپیوتر متصل نمود( پین ۰   RX(گیرنده اطلاعات)  و پین ۱   TX (فرستنده اطلاعات )می باشد).هنگامی که از پین های ۰ و ۱ به عنوان پروت سریال استفاده شود ، دیگر نمی‌توان از این پین ها به عنوان ورودی خروجی دیجیتال استفاده نمود.

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

ارتباط سریال آردوینو

ارتباط سریال آردوینو

 

پس از باز کردن این پنجره در قسمت boude rate ، مقداری که در هنگام استفاده از تابع begin وراد کرده اید را  در این قسمت وارد کنید( این قسمت به طور کامل در طول آموزش توضیح داده می‌شود). آردوینو Uno فقط دارای یک پورت ارتباط سریال می‌باشد که از پین های ۰ و ۱ برای این منظور استفاده شده است. آردوینو سری MEGA علاوه بر پورت سریالی که بر روی پین های ۰ و ۱ دارد ، دارای سه پورت سریال دیگر به نام‌های Serial1 , Serial2 , Serial3 می‌باشد.اگر شما قصد برقراری ارتباط آردوینو با کامپیوتر به وسیله‌ی این سه پورت ( Serial1 , Serial2 , Serial3) را دارید باید از یک مبدل USB TO Serial استفاده کنید.همچنین می‌توانید برای متصل کردن پورت‌های سریال آردوینو به کابل  DB9 ، مطابق مدار زیر از یک آی‌سی MAX232 استفاده کنید.

ارتباط سریال آردوینو

مدار ای سی max232 برای اتصال آردوینو DB9

ارتباط سریال آردوینو

کابل DB9

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

 

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

 

جهت دسترسی به این بخش، اشتراک اسپارکر پلاس تهیه کنید.

 

مثال:فرض می‌کنیم از این کد قطعه کد برای تنظیم کردن پورت  سریال  استفاده کرده ایم و قصد داریم کاراکتر رشته OK را با استفاده از پورت سریال به کامپیوتر منتقل کنیم:

این کد به این معناست که از بادریت ۹۶۰۰ و از مقدار SERIAL_8N1 به عنوان config   استفاده کرده ایم .

به این علت که کاراکتر O و K هر کدام ۸ بیت و همچنین در کانفیگ از  SERIAL_8N1  که به معنای ۸ بیت داده ، بدون بیت توازن  و ۱ عدد stop bit می‌باشد ، باید در ۲ بسته اطلاعات را  ارسال کنیم . هم اکنون به شرح ارسال کاراکتر O می‌پردازیم. کاراکتر O دارای کد اسکی ۷۹  می باشد و در مبنای دو دارای مقدار ۰۱۰۰۱۱۱۱ می‌باشد.

بنابراین نقشه ی ارسال کاراکتر O به صورت زیر می‌باشد.

آموزش ارتباط سریال آردوینو

نقشه‌ی ارسال کاراکتر O

 

 

end()

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

برای راه اندازی مجدد می‌توان از تابع Begin استفاده نمود.

 

 

print()

این تابع دیتا را به پورت سریال ارسال می‌کند.تابع print دارای فرم های مختلفی می‌باشد.این تابع اعداد صحیح  ، متن ، کاراکتر را به صورت رشته اعداد اعشاری را به صورت رشته  با دو عدد اعشار ارسال می‌کند.به مثال زیر توجه کنید:

 

این تابع دارای دو ساختار به صورت زیر می‌باشد:

 

val : دیتایی می باشد که می‌خواهیم آن را به پروت سریال ارسال کنیم

format : فرمت نمایش و تعداد ممیز اعشار نمایش داده را مشخص می‌کند.

 

برای ارسال اطلاعات به فرمت باینری ( مبنای ۲ )  از BIN ، مبنای ۸ از OCT ، مبنای ۱۰ از DEC و مبنای ۱۶ از HEX  استفاده می‌کنیم. توجه شما را به مثال زیر جلب می‌کنم :

 

 

همچنین می‌توان تعداد ممیز اعشار را توسط format تعیین نمود.برای این کار کافی است تنها تعداد اعشار مورد نیاز را به جای format قرار دهیم همانند مثال زیر:

 

 

 

 

println()

 

این تابع همانند تابع   print عمل می‌کند با این تفاوت که با هر بار ارسال اطلاعات دستور رفتن به خط بعد را نیز اجرا می‌کند.

به زبانی ساده تر دو نمونه کد زیر با هم یکسان می‌باشند:

 

 

 

available()

 

به وسیله‌ی این تابع تعداد کاراکتر هایی که آماده خواندن از پورت سریال می‌باشند مشخص می‌شود.همچنین این تابع این امکان را فراهم می‌کند که ۶۴ بایت در بافر دریافت کننده ی پورت سریال ذخیره شود. این تابع تعداد کاراکتر های موجود در بافر را بر می‌گرداند. ساختار کلی تابع به صورت زیر می‌باشد:

 

 

به مثال زیر توجه کنید:

 

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

 

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

علیرضا قربانی

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

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

۶۶ دیدگاه

    • آردوینو ابزاری است برای تولید کامپیوترهایی که نسبت به کامپیوتر شخصی شما، مقدار بیشتری از دنیای فیزیکی را احساس و کنترل می کنند. این ابزار، یک پلت فرم محاسباتی فیزیکی open-source است که بر اساس یک برد میکروکنترلر ساده تهیه شده، و نیز یک محیط توسعه برای نوشتن نرم افزار جهت کار با برد می باشد.

      آردوینو می تواند جهت ایجاد اشیای تعاملی، گرفتن ورودی از تعداد زیادی سوییچ و حسگر، و کنترل تنوعی از لامپ ها، موتورها، و سایر خروجی های فیزیکی به کار گرفته شود. پروژه های آردوینو می توانند مستقل باشند، و یا با نرم افزاری که روی کامپیوتر شما در حال اجراست(مثل Flash ، Processing، MaxMSP)، ارتباط برقرار کند. شما می توانید بردها را به طور دستی مونتاژ کنید و یا به صورت از پیش مونتاژ شده، خریداری کنید؛ محیط برنامه نویسی open-source را می توانید به صورت رایگان دانلود کنید.

      زبان برنامه نویسی آردوینو، یک پیاده سازی از Wiring(یک پلت فرم محاسباتی و فیزیکی مشابه) است، که بر اساس محیط برنامه نویسی چندرسانه ای Processing کار می کند.

      پیشنهاد می کنم یک عدد تهیه کنید و شرع به یاد گرفتننش کنین

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

  • سلام تو مثالی که زدین من if رو متوجه نمیشم مخصوصا اونجاش که نوشته ;gt&

    لطفا اگه ممکنه بیشتر تویضح بدین ممنون

  • با سلام
    بسیار تشکر دارم از آموزشهای خوب و کاملی که در سایتتان قرار میدهید
    بنده نیازی دارم در مورد نوع ارتباط با ای سی یو های خودرو توسط اوردینو اطلاعاتی کسب نمایم
    گویا اوردینو میتواند در ارتباط با پروتکلهای خوردوریی برای نمایش کدهای خطا و یا همان دیاگ مورد استفاده قرار گیرد
    منتها میخواستم بدونم برای این کار به چه اطلاعاتی نیازمندیم .
    آیا این پروتکلها مانند OBD , OBD2 , ALDL , I2C , 1Wire , Handshake , جزو زیرمجموعه های پروتکلهای ارتباط سریال می باشند . و توسط تابع های سریال این پروتکلها را میتوان برنامه نویسی کرد ؟
    لطفا در این مورد و نحوه ی راه اندازی این نوع پروتکلها به طور کامل آموزش بگذارید
    البته این مورد در وب سایت و انجمن رسمی اوردینو مورد بحث و حتی به صورت پروژه انجام شده است . اما به دلیل انگلیسی بودن مقداری سخت است . در صورتیکه توسط شما و به فارسی آموزش داده شود راه اندازی این بخش راحت تر انجام میشود
    با تشکر

          • با سلام
            بسیار تشکر دارم از آموزشهای خوب و کاملی که در سایتتان قرار میدهید
            بنده نیازی دارم در مورد نوع ارتباط با ای سی یو های خودرو توسط اوردینو اطلاعاتی کسب نمایم
            گویا اوردینو میتواند در ارتباط با پروتکلهای خوردوریی برای نمایش کدهای خطا و یا همان دیاگ مورد استفاده قرار گیرد
            منتها میخواستم بدونم برای این کار به چه اطلاعاتی نیازمندیم .
            آیا این پروتکلها مانند OBD , OBD2 , ALDL , I2C , 1Wire , Handshake , جزو زیرمجموعه های پروتکلهای ارتباط سریال می باشند . و توسط تابع های سریال این پروتکلها را میتوان برنامه نویسی کرد ؟
            لطفا در این مورد و نحوه ی راه اندازی این نوع پروتکلها به طور کامل آموزش بگذارید
            البته این مورد در وب سایت و انجمن رسمی اوردینو مورد بحث و حتی به صورت پروژه انجام شده است . اما به دلیل انگلیسی بودن مقداری سخت است . در صورتیکه توسط شما و به فارسی آموزش داده شود راه اندازی این بخش راحت تر انجام میشود
            با تشکر

      • سلام
        آقا لطفا ما رو تحویل بگیرید . ممنون میشم بتونید راهنمایی کنید
        من همچنان منتظر راهنمایی شما هستم
        با تشکر

  • سلام ضمن تشکر فراوان میخواستم بدونم آیا جهت ساخت آبنمای حروف میتوان از مطالب گفته شده شما استفاده کرد؟ آیا نرم افزاری که بتواند حرو را بصورت کد اسکی یا درمبنای ۲ یا هر شکل دیگری به آردوینو بفرستد و تبعا آردوینو نیز به شیربرقی ها فرمان دهد آیا چه نرم افزاری مناسب این کار هست؟

  • سلام به همه دوستان.
    من میخواستم بدونم راهی هست که بردهای آردوینو رو با هم به وسیله usart ارتباط داد ،به طوری که یک برد که به کامپیوتر وصل است به عنوان master باشه و بقیه بردها slave باشند،و برد های slave دارای یک آدرس ۱۰ بیتی باشند که برای master قابل شناسایی باشه،و تعداد slave ها چند تا میتونه باشه ،با تشکر از دوستان

  • سلام
    ببخشید من وقتی وقتی می خواهم برنامه ای روی آردوینو آپلود کنم ارور میدهد در صورتی که کامپایل می شود
    نگاه که کردم د=دیدم در قسمت tools منوی portغیرفعال است
    و هر کار کردم نتوانستم فعالش کنم
    چکار باید بکنم؟

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

  • سلام حامد جان من هم روی این موضوع کار میکنم خوشحال میشم با هم تبادل نظر کنم. اگه میشه باهم در تماس باشیم

  • سلام . میشه لطفا برای ارتباط بین آردوینو due و Mega2560 راهنماییم کنید؟
    مسئله من اینجوره که متغیری رو از due به mega میفرستم و بالعکس.
    تغییر سطوح ولتاژ از ۵ به ۳٫۳ رو هم با تقسیم مقاومتی و هم با مبدل سطح منطقی انجام میدم اما نمیدونم مشکل کجاست؟

  • سلام میشه لطف کنی ارتباط بین برد آردوینو با نرم افزار لب ویو رو توضیح بدی یا اگه مرجعی داره که یاد بگیرم برام ایمیلش کنی ممنون مهندس.

    • با سلام
      ضمن تشکر از توجه شما، لطفا دقیق تر بیان کنید که برای چه منظوری میخواهید این کار را انجام دهید، تا توضیحات ارایه شود.

  • با سلام
    ممنون از مطالب مفیدی که میذارین
    من یه کد لازم دارم که یه عدد ۵ رقمی رو بتونم تو سریال مانیتور وارد کنم و روی ال سی دی نمایش بده

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

  • سلام.آیا روشی هست که بشه به وسیله ی اون باند سریال یک برد رو پیدا کرد؟
    چون اون برد ارتباطش سریال هست ولی هیچ اطلاعاتی ازش ندارم که از چه باندی استفاده میکنه یا…..

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

  • سلام من از اردوینو پرو میکرو استفاده میکنم
    دوتا ماژول دارم که هردو نیاز دارن که به پین های rx و tx متصل بشن
    چطوری اینارو متصل کنم؟در صورتی که یک جفت بیشتر وجود نداره؟
    ماژول ها (df player,Voice Recognition)

    • سلام
      این مورد تست نشده است ولی باید از کتابخانه SoftwareSerial Library و نحوه ی فراخوانی Serial استفاده کنید.

  • سلام
    ممنون از اطلاعات خوبتون
    یه سوال داشتم؟
    میخواستم بپرسم چگونه میشه بین آردوینو و ماژول nodemcu ارتباط برقرار کرد به نحوی که اطلاعات بدست آمده از سنسورهای متصل به آردوینو به روی وای فای رفته و در سریال و وای فای قابل مشاهده باشد؟؟لازم به ذکره که سیستم یک طرفه است و فقط از آردوینو اطلاعات را بخونه و روی وای فای رفته و مشاهده بشه
    به دلیل محدودیت هایی که وجود داره (مثلا تعداد ۴ عدد ورودی آنالوگ در آردوینو) نمیتونم از خود nodemcu بصورت تنها استفاده کنم
    ممنون

  • با سلام من این برنامه و چند برنامه ی دیگر را تست کردم ولی در سریال مانیتور عبارت OK دریافت نمیشود. از طریق ماژول USB به UART دیتاهای ارسالی و دریافتی به ماژول قابل مشاهده است و کاملا صحیح ارسال و دریافت میشود. ولی در نرم افزار آردویینو به داده های دریافتی از ماژول ESP دسترسی ندارم.( نه به عبارت OK دسترسی دارم و نه به دیتایی که از طریق نرم افزار سوکت پروتکل به ماژول میفرستم)
    لطفا راهنمایی کنید

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

  • سلام،من برنامه ای در آردوینو نوشته ام که از یک سنسور دیتا می گیرد،میخواهم بدانم چطور میتوان دیتاها را روی کامپیوتر ثبت کرد، روی سریال مانیتور دیتاها را میبینم ولی میخواهم آنها به صورت یک فایل داشته باشم.

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

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

    • با سلام
      کاربر گرامی این مورد توسط بنده تست نشده است. از دیگر کاربرانی که در این مورد اطلاعاتی دارند، تقاضا میکنم در بحث شرکت کنند.