راه اندازی Gy-80 با آردوینو -بخش دوم{اتصال ماژول و تست آن}

دوستان سلام.

توی بخش قبل ماژول GY-80  رو معرفی کردیم که میتونید از اینجا اون مطلب رو بخونید.توی این قسمت میخوایم نحوه اتصال این ماژول به برد arduino و همچنین کدنویسی اون صحبت کنیم.با ما همراه باشید. 

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


اتصال ماژول GY-80 به arduino:

اگه قسمت اول این نوشته رو خونده باشید گفتیم که میتونیم این ماژول رو با دو پروتکل I2C و SPI راه اندازی کنیم.ما در اینجا برای راه اندازی این ماژول از پروتکل I2C استفاده میکنیم.
این پروتکل دو تا سیم اصلی داره.یکی SDA که برای دیتا هست و اون یکی هم SCL که برای کلاک به کار میره. نمایی از این پروتکل رو در شکل زیر میبینید:

راه اندازی Gy-80 با آردوینو

 

پس با این حساب برای اتصال ماژول به برد آردوینو به 4 سیم نیاز هست.دو تا مربوط به تغذیه و دو تا سیم هم مربوط به پروتکل I2C که توی شکل زیر مشخص شده.

راه اندازی Gy-80 با آردوینو

پین VCC_IN (سیم قرمز رنگ) که باید وصل بشه به 5 ولت برد.پین GND(سیم مشکی) که باید وصل به GND برد .پین SCL (سیم زردرنگ)که باید وصل بشه به پایه A5 (برای برد UNO ) یا پایه 21 برای برد Mega  و پایه SDA (سیم نارنجی رنگ)که باید وصل بشه به A4 برای UNO یا 20 برای Mega

نکته 1 :
میتونید به جای استفاده ازپایه VCC_IN از پایه VCC_3.3V استفاده کنید که در این صورت باید اون رو حتما به ولتاژ 3.3 ولت روی برد وصل کنید.
نکته 2:
روی ماژول GY-80  هیچگونه led وجود نداره که به شما وضعیت برد رو نشون بده.مثلا یه Led سبز رنگ باشه که نشون بده ولتاژ ولتاژ وصل شده بهش.(بر خلاف ماژول های دیگر مثل GY-521  که یه Led روی خودش داره که وضعیت اتصال ولتاژ رو نشون میده)

چک کردن اتصالات و سالم بودن برد:

برای این که چک کنیم ببینیم ماژولمون سالم هست یا نه و این که به طور کامل به برد وصل شده از یک نمونه کد استفاده میکنیم که معروف هست به I2C Scanner.

 

I2C Scanner چیه و به چه دردی میخوره؟
این نمونه کد برای چک کردن و فهمیدن این که چه قطعات و سنسورهایی از طریق I2C به بردمون وصل هستن و روی سریال مانیتور هم بهمون نشون میده که یه قطعه با فلان آدرس به بردمون وصل هست(توی پروتکل I2C هر سنسور و قطعه یه آدرس داره که به وسیله اون آدرس با برد در ارتباطه و داده ها رو رد و بدل میکنه.)

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


کد I2C Scanner

توصیح خطوط برنامه:

[php]#include<Wire.h>;
 
 
void setup()
{
 Wire.begin();
 
 Serial.begin(9600);
 while (!Serial); // Leonardo: wait for serial monitor
 Serial.println("\nI2C Scanner");
}[/php]

 

در  خط اول که کتابخونه Wire.h به برنامه معرفی میشه که این کتابخونه برای پروتکل i2c به کار میره.

توی تابع Setup  هم پروتکل I2C شروع به کار میکنه و ارتباط سریال هم برقرار میشه و  بادریت اون روی 9600 تنظیم میشه سپس در پنجره سریال عبارتI2C Scanner نوشته میشه.

[php]void loop()
{
 byte error, address;
 int nDevices;
 
 Serial.println("Scanning...");
 
 nDevices = 0;
 for(address = 1; address < 127; address++ )
 {
 // The i2c_scanner uses the return value of
 // the Write.endTransmisstion to see if
 // a device did acknowledge to the address.
 Wire.beginTransmission(address);
 error = Wire.endTransmission();
 
 if (error == 0)
 {
 Serial.print("I2C device found at address 0x");
 if (address<16)
 Serial.print("0");
 Serial.print(address,HEX);
 Serial.println(" !");
 
 nDevices++;
 }
 else if (error==4)
 {
 Serial.print("Unknow error at address 0x");
 if (address<16)
 Serial.print("0");
 Serial.println(address,HEX);
 } 
 }
 if (nDevices == 0)
 Serial.println("No I2C devices found\n");
 else
 Serial.println("done\n");
 
 delay(5000); // wait 5 seconds for next scan
}[/php]

 در تابع Loop دو متغیر از نوع بایت به اسم های error, address تعریف میشه همچنین یک متغیر هم از نوع int تعریف میشود که در ادامه میفهمید این  متغیرها برای چی تعریف شدن.

 خط بعدی روی پورت سریال عبارت …Scannig نوشته میشه.که یه جورایی داره نشون میده برنامه در حال اسکن سنسورهایی هست که به میکرو از طریق I2C وصل هست.

در خط بعدی مقدار متغیر nDevices برابر 0 قرار داده میشه.(این متغیر مربوط به تعداد سنسور و ماژول هایی هست که به برد وصل شده و به طور پیش فرض برابر صفر قرار داده میشه)

در خط بعد یه حلقه for تعریف میشه که توی این حلقه مقدار address از 1 تا 126 تغییر میکنه و هر دفعه یکی بهش اضافه میشه.  با استفاده از این خط مقدار متغیر adress با استفاده از پروتکل I2C فرستاده میشه تا هر Device و سنسوری که روی خط هست و این آدرس رو داره دریافت کنه.

خط بعد مربوط به پایان ارتباط I2C هست و کسی که این آدرس رو داره یه بایت به میکروکنترلر میفرسته و میگه که من این این آدرس رو دارم.این بایت همون متغیر error هست که در ادامه خیلی باهاش سر و کار داریم.

سوال:این 1 تا 126 از کجا اومده؟ پروتکل I2C به طور همزمان میتونه از 128 آدرس مختلف پشتیبانی که که آدرس ها از 0 تا 127 هستند که میشه 128 تا آدرس ولی معمولا آدرس های اول و آخر این بازه یعنی 0 و 127 قرار داده نمیشه پس بازمون میشه 1 تا 126

در اینجا دو حالت پیش میاد:

اگر آدرسی که میکرو میفرسته روی خط موجود باشه در این صورت مقدار صفر توی متغیر error نوشته میشه  و میکرو میفهمه که این آدرس روی خط موجود هست و اگر اون آدرس روی خط موجود نباشه هم مقدار 4 در متغیر error نوشته میشه.

اگر آدرس روی خط موجود باشد(حلقه if ):
در این صورت برنامه وارد حلقه if اول میشود و طبق آن ابتدا روی پورت سریال عبارت I2C device found at address 0x نوشته میشود.پس از اون اگه این آدرس کوچکتر از 16 باشه ابتدا روی پورت سریال مقدار 0 نوشته میشه و بعد آدرس رو مینویسن و اگه نباشه هم مستقیم آدرس رو به صورت هگز روی پورت سریال مینویسن.

اگر آدرس روی خط موجود باشد(حلقه else if):

در این صورت برنامه وارد حلقه else if میشود و طبق آن ابتدا روی پورت سریال عبارت Unknow error at address 0x نوشته میشود.پس از اون اگه این آدرس کوچکتر از 16 باشه ابتدا روی پورت سریال مقدار 0 نوشته میشه و بعد آدرس رو مینویسن و اگه نباشه هم مستقیم آدرس رو به صورت هگز روی پورت سریال مینویسن.

 

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

در پایان کد هم تعداد Device هایی که به برد وصل هستند رو نشون میده که این مقدار، عدد مربوط به  متغیر nDevices هست.(نیاز به توضیح بیشتری نداره.همه چیزش مشخصه)

آخرین خط برنامه هم مربوط به یه تاخیر 5 ثانیه ای هست که باعث میشه این عمل Scan هر 5 ثانیه یک بار انجام بشه.

خوب دوستان فک میکنم برای این جلسه هم کافی باشه.ایشالا جلسه سوم که جلسه پایانی باشه میریم سر کدهای اصلی سنسورها و تک تک اون ها رو راه میندازیم.

برای دریافت آخرین مطالب سایت  و همچنین مطالب منحصر به فرد دیگر که در سایت منتشر نمی شوند میتوانید در کانال تلگرام ما عضو شوید و یا در اینستاگرام ما را فالوو کنید:

 

 

 

 

 

 

 

اشتراک گذاری:
مطالب زیر را حتما بخوانید

6 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

    • با سلام. به دلیل استفاده بیش تر از سنسورهای MPU تصمیم بر آن شد که بخش IMU و ترکیب داده های مربوط به سنسورها (sensor fusion) با سنسورهای MPU پیش رویم و تاکنون راه اندازی سنسورهای MPU6050 و MPU9150 انجام شده است. البته بخش اصلی GY-80 نیز از سنسور MPU6050 تشکیل شده است و که آموزش آن قبلا منتشر شده و میتوانید از این آموزش ها برای راه اندازی GY-80 استفاده کنید. لینک آموزش های مربوط به این سنسور در زیر آوزده شده است:
      آموزش راه اندازی MPU6050
      موف باشید.

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

    • سپاس از شما. حدود 2 هفته آینده بخش سوم این مطلب منتشر خواهد شد.
      موفق باشید.

  • خیلی عالی بود مرسی
    اگه میشه جلسه پایانی رو زودتر بزارید مرسی

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