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

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

آموزش ارتباط سریال 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

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

برنامه نویسی

 

 

begin()

 

begin اولین تابع مورد نیاز برای برقراری ارتباط سریال می‌باشد.توسط این تابع نرخ (سرعت)انتقال دیتا که اصطلاحا به آن باد ریت می‌گویند  میان دستگاه ، ماژول و یا کامپیوتری که قصد برقرای ارتباط با آن را دارید مشخص می‌شود. سرعت های استاندار برای برقراری ارتباط سریال ۳۰۰, ۶۰۰, ۱۲۰۰, ۲۴۰۰, ۴۸۰۰, ۹۶۰۰, ۱۴۴۰۰, ۱۹۲۰۰, ۲۸۸۰۰, ۳۸۴۰۰, ۵۷۶۰۰ و ۱۱۵۲۰۰ می‌باشند.البته توجه داشته باشید که شما میتوانید از اعداد دیگری برای بادریت استفاده کنید ، برای مثال ممکن است با ماژولی کار کنید که آن ماژول دارای بادریت استاندار نباشد  و شما نیز باید از بادریتی که در دیتاشیت ماژل ذکر شده است استفاده کنید.

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

ساختار اول دارای یگ آرگمان ورودی می‌باشد که نرخ انتقال دیتا را مشخص می‌کند و بسیار ساده می‎‌باشد.

در مورد ساختار دوم ، آرگمان اول (speed) بادریت را مشخص می‌کند .

آرگمان دوم (config) مربوط به تنظیمات تعداد بیت داده، بیت توازن  و استاپ بیت (stop bit یا بیت پایانی ) می‌باشد.برای فهم بهتر مطلب به توضیح بیت توزان و stop bit می‌پردازیم:

تعداد بیت داده چیست؟

هر وقت بخواهیم دیتایی از سمت فرستنده به گیرنده ارسال کنیم ، دیتای ما به بسته های  ۵ ، ۶ ، ۷ ، ۸ یا ۹ بیتی تقسیم میشود و سپس ارسال اطلاعات صورت می‌گیرد..در بیشتر کاربرد ها از داده ۸ بیتی استفاده می شود . در بیشتر طرح های ارتباط سریال ابتدا بیت کم ارزش ارسال می گردد .

استارت بیت(start bit) جیست؟

هنگام ارسال اطلاعات  یک بیت ۰ برای آگاه سازی از ارسال بسته به گیرنده ارسال می‌شود که به آن استارت‌بیت  ( start bit) می‌گویند.

stop bit چیست؟

همانطور که در بالا گفته شد برای ارسال دیتا ، دیتا را به بسته های   ۵ ، ۶ ، ۷ ، ۸ یا ۹ بیتی تقسیم بندی میکنیم.  حال برای اینکه گیرنده را آگاه سازیم که بسته‌ی داده‌ی ما به طور کامل ارسال شده است یک یا دو بیت درپایان دیتا ارسال می‌کنیم و گیرنده را از به پایان رسیدن بسته آگاه می‌سازیم.

بیت توازن چیست؟ 

بیتی است که برای نشان دادن زوج یا فرد بودن تعداد بیت هایی که ۱ می باشند به بیت های داده اضافه می شود.در مفهومی بسیار ساده بیت توازن برای مشخص کردن خطای کد و از دست نرفتن داده به کار می‌رود.دو نوع بیت توازن داریم : ۱- توازن زوج ۲- توزان فرد

۱-توزان زوج : به بیانی بسیار ساده ، یعنی به کدمان نگاه میکنیم ، اگر تعداد ۱ ها فرد باشید یک عدد ۱ به کد اضافه میکنیم که تعداد ۱ ها زوج شود.

۲-توازن فرد:  یعنی به کدمان نگاه می‌کنیم، اگر تعداد ۱ ها زوج باشد ، یک عدد ۱ به کد اضافه می‌کنیم که تعداد ۱ ها فرد شود.

***برای مثال فرض کنید کد ما۱۰۰۱۰۱ باشد ، چون تعداد ۱ ها فرد می‌باشد ، یک عدد ۱ به کدمان اضافه می‌کنیم ، کد ۱۰۰۱۰۱۱ حاصل می‌شود.پس با این کار کدی که  ما به سمت گیرنده میفرستیم همیشه تعداد ۱ های آن زوج می‌باشد. حال اگر در طرف گیرنده تعداد ۱ ها فرد باشد ، متوجه می‌شویم که کد دچار خطا شده است.

هم  اکنون به توضیح آرگومان config می‌پردزایم.این آرگمان دارای مقدار پیش فرض SERIAL_8N1  می باشد .به آرگمان config نیز می‌توان مقادیر زیر را نسبت داد:

  • SERIAL_5N1
  • SERIAL_6N1
  • SERIAL_7N1
  • SERIAL_8N1   به صورت پیش فرض از این گزینه استفاده شده است
  • SERIAL_5N2
  • SERIAL_6N2
  • SERIAL_7N2
  • SERIAL_8N2
  • SERIAL_5E1
  • SERIAL_6E1
  • SERIAL_7E1
  • SERIAL_8E1
  • SERIAL_5E2
  • SERIAL_6E2
  • SERIAL_7E2
  • SERIAL_8E2
  • SERIAL_5O1
  • SERIAL_6O1
  • SERIAL_7O1
  • SERIAL_8O1
  • SERIAL_5O2
  • SERIAL_6O2
  • SERIAL_7O2
  • SERIAL_8O2

سوالی که حتما برای شما پیش می آید ، این است که این مقادیر به چه معنا هستند ؟! به عنوان نمونه به توضیح SERIAL_8N1 می‌پردازیم.

در مقدار های نسبت داده شده به config  ؛ O مخفف کلمه odd  به معنای بیت توازن زوج ، E مخفف کلمه ی Even به معنای بیت توزان فرد و N مخفف کلمه None به معنای عدم استفاده از بیت توازن می‌باشد. عدد۱ تعداد stop بیت می‌باشد و عدد ۸ تعداد بیت داده می‌باشد.

مثال:فرض می‌کنیم از این کد قطعه کد برای تنظیم کردن پورت  سریال  استفاده کرده ایم و قصد داریم کاراکتر رشته 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 را برمی‌گرداند و برنامه وارد شرط شده و عملیاتی را انجام می‌دهد.برنامه همچنان ادامه پیدا می‌کند و اگر در بافر سریال اطلاعی برای خواندن وجود داشت ، دوباره برنامه وارد شرط می‌شود.توصیه می‌شود در برنامه نویسی حتما از این تابع استفاده کنید.

 

 

 

 

 

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

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

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

۴۱ دیدگاه

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