آردوینو آموزش آردوینو پروژه های آردوینو

ساخت دنده هوشمند آردوینو و ماژول جوی استیک و سون سگمنت

smart-car-gear-shift-arduino-and-joystick-digispark
نوشته شده توسط سپهر شیخ الاسلامی

علاقه بشر به اتوماسیون و وسایل خودکار هر روزه رو به افزایش است؛ به همین دلیل وسایل زیادی در زندگی ما کاملا خودکار و اتوماتیک کار می کنند درحالی که شاید ۳۰ سال پیش به ذهن کسی هم خطور نمی کرد که این وسیله روزی کاملا اتوماتیک و خودکار عمل کنند. نمونه این وسیله جعبه دنده اتوموبیل‌ها است. هم اکنون بسیاری از سازندگان مطرح اتوموبیل به جعبه دنده اتوماتیک روی آورده اند. به همین دلیل در این آموزش قصد دارم تا ساخت دنده هوشمند آردوینو را با ماژول جوی استیک، سون سگمنت و شیفت رجیستر ۷۴HC595N به شما آموزش دهم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


ماژول جوی استیک


ماژول جوی استیک در واقع ترکیبی از دو پتانسیومتر در دو راستای متفاوت و یک کلید فشاری است.با توجه به موقعیت قرار­گیری اهرم ماژول، عددی بین ۰ تا ۱۰۲۳ برای راستای افقی(x) عددی برای راستای عمودی(y) گزارش می دهد؛ درضمن با فشردن اهرم ماژول در راستای(z)، پایه مربوط به کلید فشاری، HIGH می شود. در این پروژه من از ماژول جوی استیک به عنوان دنده برای کنترل مقدار نمایشی بر روی سون سگمنت استفاده می کنم؛ لازم به ذکر است از کلید فشاری ماژول نیز به عنوان کلیدی برای ریست آردوینو استفاده می کنم.

ماژول جوی استیک برای ساخت دنده هوشمند آردوینو - دیجی اسپارک


سون سگمنت و شیفت رجیستر


در بسیاری از پروژه ها دیده­اید که برای راه اندازی سون سگمنت، از پین های متعددی در آردوینو استفاده می شود؛ زیرا همانطور که می دانید سون سگمنت ها ۱۰ پایه دارند که ۲ تا از آن ها GND می باشد پس برای راه اندازی مستقیم، ۸ پین از آردوینو شما را اشغال خواهند کرد.حال اگر برای پروژه ای به تعداد بیشتری پین نیاز باشد چه باید کرد؟ یکی از راه حل های این مشکل استفاده از شیفت رجیستر میان سون سگمنت و آردوینو است.نحوه کار شیفت رجیستر ها از حوصله این مطلب خارج است و من قصد ندارم به آن بپردازم؛ ولی در کلی می توان گفت شیفت رجیستر رابطی میان آردوینو سون سگمنت است که راه اندازی این نمایشگر های کوچک دوست داشتنی را تنها با اشغال سه پین از آردوینو ممکن می سازد.به این منظور، پین Qa شیفت رجیستر به سگمنت a سون سگمنت،پین Qb به سگمنت b، پین Qc به سگمنت c و الی آخر.از طرف دیگر تنها پین های SER یا data، SRCLK یا clock و RCLK یا latch به آردوینو متصل می شوند.

شیفت رجیستر برای سگمنت - دیجی اسپارک

 


نحوه کار دنده هوشمند آردوینو


موقعیت قرار گیری اهرم ماژول جوی استیک تعیین می کند که چه عددی بر روی نمایشگر نمایش داده شود.به این منظور اگر اهرم در شش نقطه تعیین شده، که به شرح زیر است قرار بگیرد اعداد متناظر آن بر روی سون سگمنت نمایش داده می شود.

حالت دنده‌های خودرو - دیجی اسپارک

لازم به ذکر است که حرف R را نمی توان بر روی سون سگمنت نمایش داد پس از حرف P به معنای پارک به جای R استفاده خواهیم کرد.اگر اهرم ماژول در هر کدام از موقعیت های بالا قرار گیرد عدد متناظر آن بر روی سون سگمنت نمایش داده می شود ولی اگر در مکانی تعیین نشده قرار بگیرد سگمنت های a,b,c,d,e,f به ترتیب روشن و خواموش می شوند و یک نمایش کوچک را به وجود می آورند.

شبیه سازی دنده با جوی استیک - دیجی اسپارک

 


اتصالات دنده هوشمند با جوی استیک


اتصالات شیفت رجیستر به سون سگمنت:

اتصالات شیفت رجیستر و سون سگمنت - دیجی اسپارک

 

* ممکن است سون سگمنت به دلیل جریان ورودی بالا، دچار سوختگی شود؛ پس بهتر است تا میان پایه GND سون سگمنت و GND آردوینو یک مقاومت ۲۲۰ اهم برای کنترل جریان قرار دهیم.

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

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

اتصالات برد آردوینو جوی استیک دنده هوشمند آردوینو - دیجی اسپارک

 


اتصالات شیفت رجیستر به آردوینو


از آنجایی که نیاز داریم تا وضعیت خواندن یا نوشتن شیفت رجیستر را مشخص کنیم، پس پینRCLK  را به یکی از پین های دیجیتال آردوینو متصل می کنیم.برای فرستادن اطلاعات از آردوینو به شیفت رجیستر نیز از پین SER استفاده می کنیم.کلاک شیفت رجیستر نیز باید توسط آردوینو تعیین شود پس پین SRCLK نیز به یکی از پین های دیجیتال آردوینو متصل می شود.اگر پین SRCLR در وضعیت LOW گیرد، شیفت رجیستر ریست خواهد شد پس برای اطمینان از ریست نشدن شیفت رجیستر این پین را به ۵V متصل می کنیم.پین OE درست برعکس پین SRCLR عمل می کند؛ به این معنی که اگر این پین در وضعیت HIGH قرار گیرد، خروجی شیفت رجیستر را غیر فعال می کند پس برای اطمینان از خروجی پایدار و بدون قطعی شیفت رجیستر، این پین را به GND متصل می کنیم.

اتصالات شیفت رجیستر به برد آردوینو - دیجی اسپارک

 


اتصالات ماژول جوی استیک به آردوینو


از آنجایی که خروجی های ماژول جوی استیک عددی بین ۰ تا ۱۰۲۳ است، پس نیاز است تا به صورت آنالوگ خوانده شوند.به این منظور، خروجی های آنالوگ ماژول جوی استیک به پین های A0 و A1 که جزو ورودی های آنالوگ آردوینو محسوب می شوند، متصل خواهند شد.از کلید فشاری ماژول نیز برای ریست کل آردوینو استفاده می شود که البته ضروری نیست.اگر قصد انجام این کار را دارید کافیست تا پین SW ماژول را به پین RST یا RESET آردوینو متصل کنید.

اتصالات جوی استیک به برد آردوینو - دیجی اسپارک

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

شماتیک مدار شیفت رجیستر با سگمنت و برد آردوینو - دیجی اسپارک

 


وسایل و قطعات مورد نیاز


وسایل ساخت دنده هوشمند آردوینو با جوی استیک - دیجی اسپارک

 


کدهای پروژه دنده هوشمند آردوینو


کدهای زیر را کپی کرده و در نرم افزار آردوینو IDE وارد کنید. سپس اقدام به آپلود کدها کنید. چنانچه در این مورد اطلاعی ندارید به آموزش کار با Arduino IDE مراجعه کرده و یا از بخش نظرات با من در ارتباط باشید.

 

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

 

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

 


توضیحات کد آردوینو


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

//Defining Shift-Register Pins
#define dataPin 2 
#define latchPin 3

حال پین های مربوط به ماژول جوی استیک را تعیین می کنیم

//Defining Joy Stick Pin
#define vrxPin A0
#define vryPin A1

سه متغیر از نوع byte تعریف می کنیم که به ترتیب مسئولیت نگه داری مقدار دسیمال وضعیت پین های سون سگمنت، نگه داری مقادیر HEX اعداد ۱ تا ۵ و حرف P و نگه داری مقدار HEX هرکدام از سگمنت های سون سگمنت برای اجرای نمایش در هنگام قرار گیری اهرم ماژول جوی استیک در محل تعیین نشده.

byte Display 
byte data[] = {0x73 , 0x06 , 0x5B , 0x4F , 0x66 , 0x6D , 0x7D} ;    
byte segments[] = {0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20};

دو متغیر از نوع int تعریف می کنیم که وظیفه نگه داری مقادیر آنالوگ خوانده شده از ماژول جوی استیک را بر عهده دارند.

int vrxState ; //تعیین متغیری برای نگه داری مقادیر خوانده شده از محور X ماژول جوی استیک
int vryState ; //تعیین متغیری برای نگه داری مقادیر خوانده شده از محور Y ماژول جوی استیک

در این سه خط تمام سه پین مربوط به شیفت رجیستر را به عنوان خروجی تعریف می کنیم.

pinMode(dataPin , OUTPUT);
pinMode(latchPin , OUTPUT);
pinMode(clockPin , OUTPUT);

در این دو خط پین های مربوط به ماژول جوی استیک را به عنوان ورودی تعریف می کنیم.

pinMode(vrxPin , INPUT);
pinMode(vryPin , INPUT);

در این دو خط مقدار خوانده شده از پین های ماژول جوی استیک را در متغیر های متناظرشان قرار می دهیم.

vrxState = analogRead(vrxPin); //قرار دادن مقدار خوانده شده از پین VRX جوی استیک در متغیر vrxState
vryState = analogRead(vryPin); //قرار دادن مقدار خوانده شده از پین VRY جوی استیک در متغیر vrySta

در این خط به برنامه می گوییم که تابعی به نام correction() که در ادامه به آن خواهم پرداخت را انجام دهد.

correction(); //تثبیت مقادیر خوانده شده از ماژول جوی استیک

 

تعویض دنده هوشمند آردوینو با جوی استیک - دیجی اسپارک

 

تابع correction()

از آنجایی که برای تطبیق مکان اهرم ماژول جوی استیک با مکان های از قبل تعیین شده از دستور switch … case استفاده کردم و دستور switch … case فقط اعداد دقیق را قبول می کند، مجبور شدم تا تابعی بنویسم که مقدار خوانده شده از پین های ماژول جوی استیک را ایزوله و ثابت کنید و اگر اعداد در بازه خاصی بود آن ها به عدد نزدیک تر تقریب بزند.کار این تابع به این صورت است:

  • اگر مقدار خوانده شده از راستای افقی کوچکتر از ۱۰ بود، آن را به ۰ تبدیل می کنم.
  • اگر مقدار خوانده شده از راستای عمودی کوچکتر از ۱۰ بود، آن را به ۰ تبدیل می کنم.
  • اگر مقدار خوانده شده از راستای افقی عددی بین ۵۰۵ تا ۵۲۰ بود، آن را به ۵۱۲ تبدیل می کنم.
  • اگر مقدار خوانده شده از راستای افقی عددی بین ۵۰۵ تا ۵۲۰ بود، آن را به ۵۱۲ تبدیل می کنم.
  • اگر مقدار خوانده شده از راستای افقی بیشتر از ۱۰۰۰ بود، آن را به ۱۰۲۳ تبدیل می کنم.
  • اگر مقدار خوانده شده از راستای عمودی بیشتر از ۱۰۰۰ بود، آن را به ۱۰۲۳ تبدیل می کنم.

 

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

 

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

 


جمع بندی دنده هوشمند آردوینو


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

پروژه دنده هوشمند آردوینو با جوی استیک - دیجی اسپارک

 

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

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

سپهر شیخ الاسلامی

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

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

۲ دیدگاه

  • با عرض سلام وخسته نباشید .. میخواستم یه راهنماییم بکنین ممکنه به جای جویساستیک از کلید استفاده کرد و اینکه زمانی که مثلا دنده خلاص هست خط تیره (G) سون سکمنت حالت چشمک زن داشته باشه؟