اگرچه برای اکثر پروژه‌ها، آردوینو یونو یا آردوینو مگا برای طراحی پروژه‌های سطح پیشرفته مانند ماشین‌های CNC، چاپگرهای سه بعدی و غیره کافی است. شرایطی پیش می‌آید که تنها آردوینو یونو یا آردوینو مگا یا هر برد آردوینو دیگری برای طراحی کافی نیست. پروژه خود را به مرحله تکمیلی برسانید، سپس در وضعیتی این چنینی می‌توانید چندین برد آردوینو را به صورت سریال متصل کنید.

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

 

معرفی پروتکل I2C و نحوه اتصال دو آردوینو

پروتکل Inter-Integrated Circuit یک پروتکل ارتباطی است که آنرا با نام‌های دیگری مانند IIC و I2C و… نیز نمایش می‌دهند. این پروتکل به طور گسترده در میکروکنترلرها کاربرد دارد. در این ارتباط Master ها و Slave ها از طریق دو سیم با هم در ارتباط هستند:

در پروتکل I2C دو نوع تجهیز برای اتصال دو آردوینو به باس I2C وجود دارد: Master و Slave. در این ارتباط هم می‌توان چند Slave متفاوت را به یک عدد Master مانند یک میکروکنترلر متصل کرد و هم می‌توان یک Slave را از طریق چند Master مختلف کنترل و مانیتور نمود اما در هر لحظه فقط یک Master می‌تواند فعال باشد.

هر Master می‌تواند انتخاب کند که با کدام یک از Slave ها می‌خواهد ارتباط برقرار کند. اتصال دو آردوینو از طریق آدرس‌های 7 بیتی Slave ها (در بعضی موارد 10 بیت) مشخص می‌شود. پس تقریبا می‌توان حدود 128 عدد تجهیز Slave  را به باس I2C متصل کرد. بنابراین هر Slave آدرس مخصوص خود را  دارد و در ضمن آدرسی برای Master ها اختصاص داده نشده است.

 

آموزش اتصال دو آردوینو

آموزش اتصال دو آردوینو

قبل از ورود به بحث چگونگی برقراری ارتباط I2C بین دو بورد Arduino، لازم است که اول کتابخانه‌های مربوط به wire را در IDE بررسی کنیم. کتابخانه‌ی wire.h که در کد استفاده می‌کنیم، برای استفاده از توابعی است که در ادامه می‌آیند.

(Wire.begin(address:

کاربرد: استفاده برای ایجاد ارتباط میان دیوایس‌های درگیر در ارتباط I2C. به این ترتیب دیوایس مورد نظر که آدرس آن مشخص می‌شود، برای پیوستن به I2C Bus مقداردهی اولیه خواهد شد.

آرگومان این تابع‌ یک آدرس ۷ بیتی است که همان‌طور که گفتیم مشخص کننده‌ی Slave‌هاست. چنانچه در فیلد آدرس چیزی ننویسیم، دیوایس مربوط به عنوان Master به باس ارتباط سریال ملحق خواهد شد.

    ()Wire.read:

کاربرد: برای خواندن بایت دریافت شده از سوی Master‌ یا‌ یکی از Slave‌ها. اگر داده از سوی slave به master ارسال شده باشد، قبل از این دستور، تابع ()requestFrom وجود دارد.

    ()Wire.write:

کاربرد: برای نوشتن داده در Master و ‌یا Slave؛ اگر Slave بخواهد در Master چیزی بنویسد، تابع ()Wire.RequestFrom در Master فراخوانی شده است.  اگر Master بخواهد در Slave چیزی بنویسد، ابتدا تابع ()Wire.beginTransmission فراخوانی می‌شود، سپس تابع ()Wire.write و پس از آن ()Wire.endTransmission خود تابع ()Wire.write می‌تواند به صورت‌های زیر نوشته شود. (Wire.write(value: مقدار value همان بایتی است که قرار است نوشته شود. (Wire.write(string: رشته‌ای از بایت‌های متوالی که ارسال و نوشته می‌شوند. (Wire.write(data, length: آرایه‌ای از داده‌ها به صورت بایت به بایت و length تعداد این بایت‌ها را مشخص می‌کند.

 (Wire.beginTransmission(address:

کاربرد: این تابع ارتباط I2C با Slave که برای اتصال دو آردوینو، آدرس آن مشخص شده است را آغاز خواهد کرد.

پس از آغاز ارتباط دیتایی که قرار است مبادله شود در صف ارسال قرار می‌گیرد و تابع ()write مورد استفاده قرار خواهد گرفت. در انتهای تبادل نیز تابع ()endTransmission فراخوانی خواهد شد. آدرس نیز همان‌طور که قبل‌تر هم گفتیم‌ یک آدرس ۷ بیتی است.

     ()Wire.endTransmission:

کاربرد: این تابع ارتباطی را که قبل‌تر توسط ()beginTransmission شروع شده است را خاتمه خواهد داد.

    ()Wire.onRequest:

کاربرد: کاربرد این تابع در اتصال دو آردوینو زمانی است که Master بخواهد از‌ یکی از Slave‌ها با استفاده از تابع ()Wire.requestFrom درخواست داده کند. Slave مذکور با استفاده از تابع ()Wire.write داده را ارسال خواهد نمود.

    ()Wire.onReceive:

کاربرد در اتصال دو آردوینو: زمانی که Slave از Master داده دریافت کرده باشد، فراخوانی می‌شود. برای خواندن داده‌ی دریافتی نیز از تابع ()Wire.read استفاده می‌شود.

    (Wire.requestFrom(address,quantity:

این تابع در Master و برای گرفتن داده از ‌یک Slave استفاده می‌شود. پس از دریافت داده‌ی مورد نظر با استفاده از تابع ()Wire.read خوانده خواهد شد. آدرس همان آدرس ۷ بیتی Slave مورد خطاب است و quantity تعداد بایت‌های مورد درخواست است.

 

قطعه‌های لازم برای اتصال دو آردوینو

 

کدنویسی برای اتصال دو آردوینو

برای درک هرچه بهتر اتصال دو آردوینو با استفاده از هر 2 بخش Master و Slave، کافی است که این کد را در پروژه خود اجرا کنید:

 

سخن پایانی

آردوینو، یک قطعه الکترونیکی تک‌بردی است که معمولاً برای هدایت سنسورها و تغییر اندازه در موتورها و سایر گجت‌های مورد استفاده قرار می‌گیرد. امکان اتصال دو آردوینو با استفاده از پروتکل I2C امکان و اجرای چندین کد اختصاصی امکان‌پذیر است. در این مقاله به نحوه اتصال دو آردوینو پرداختیم و انواع قطعات مورد نیاز برای این کار را معرفی کردیم.

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

 

فروشگاه
سایدبار
0 علاقه مندی
0 محصول سبد خرید
حساب کاربری من