به نام خدا
آموزش پروژه محور آردوینو – جلسه چهارم
امروز میخواهیم ۸ ال ای دی را توسط آردوینو و البته بدون نیاز به ۸ پین در آردوینو ، کنترل کنیم .
با این که این ۸ ال ای دی را میتوانیم مستقیما به آردوینو وصل کنیم و کنترلشان کنیم اما این کار را نمیکنیم . زیرا پایه های زیادی از ال ای دی هایمان اشغال میشود و ما میخواهیم در این جلسه روشی را به شما ارائه بدهیم که از تعداد پایه های کمتری استفاده کنید تا اگر در پروژه های گسترده تر و پیچیده تری بخواهید از آردوینو استفاده کنید بتوانید روش هایی را مثل روش این جلسه به کار بگیرید تا پایه های آردوینو برای پروژه شما کم نیاید .
برای این کار از آی سی مبدل سریال به موازی ۷۴HC595 استفاده میکنیم . این آی سی دارای ۸ خروجی و ۳ ورودی میباشد .
قطعات مورد نیاز :
هشت عدد ال ای دی ۵ میلی متر
مقاومت ۲۷۰ اهم ( قرمز – بنفش – قهوه ای )
آی شیفت رجیستر ۷۴HC595
بردبورد
برد آردوینو UNO
تعدادی سیم
توضیحات مدار :
مطابق شکل زیر هشت عدد ال ای دی با هشت عدد مقاومت ۲۷۰ اهم به آی سی نام برده وصل شده اند .
پین شماره یک این آی سی پین بالا سمت چپ میباشد .(مطابق شکل بالا )
پین دیجیتال شماره ۴ آردوینو به پین شماره ۱۴ آی سی شیفت رجیستر وصل میشود .
پین دیجیتال شماره ۵ آردوینو به پین شماره ۱۲ آی سی شیفت رجیستر وصل میشود .
پین دیجیتال شماره ۶ آردوینو به پین شماره ۱۱ آی سی شیفت رجیستر وصل میشود .
همانطور که در مدار بالا میبینید خروجی های این آی سی شیفت رجیستر در سمت چپ آی هستند . پایه بلند تر ال ای دی ها یعنی پایه مثبا آن ها به مقاومت و از آنجا به آی سی شیفت رجیستر میرود و سر دیگر آن ها به منفی بردبورد میخورد .
قبل از این که سراغ کد های آردوینو برویم بریم سراغ عملکرد آی سی شیفت رجیستر ۷۴HC595 .
میشود گفت این شیفت رجیستر یک مکان حافظه ۸ بیتی دارد که هر کدام ازین بیت ها میتوانند ۱ یا ۰ باشند . برای مشخص کردن ارزش هر یک از این ها باید از دو پین Clock و Data در این آی سی استفاده کرد .
پین کلاک به پالس های هشتایی احتیاج دارد . اگر مقدار پالس High باشد مقدار ۱ شیفت رجیستر را هل میدهد! و در غیر این صورت عدد ۰ . پس از این که پالس های هشتایی دریافت شدند پین Latch فعال میشود و مقدار ۸ بیت شیفت رجیستر در رجیستر Latch کپی میشود . اگر این کار صورت نگیرد ال ای دی ها به ترتیب روشن و خاموش نمیشوند .
این آی سی یک پین OE دارد که برای فعال سازی یا غیر فعال سازی پین های خروجی استفاده میشوند . میتونیم این پایه رو به موج PWM وصل کنیم و توسط تابع analogWrite در آردوینو میزان شدت روشنایی ال ای دی ها را نیز کنترل کنیم . این پین موقعی خروجی ها را فعال میکند که صفر باشد یعنی به عنوان مثال برای فعال سازی خروجی ها میتوانیم این پین را به زمین مدارمان وصل کنیم .
کد های آردوینو :
آردوینو توابع مخصوصی که shiftOut نامیده میشوند دارد که این توابع مشخصا برای ارسال داده به شیفت رجیستر ها استفاده میشوند .
برای دانلود کد های برنامه بر روی لینک زیر کلیک کنید .
دانلود فایل
در ابتدای این کد ما سه پین را تعریف کرده ایم که این پین ها ، خروجی های دیجیتال آردوینو هستند که به پین های Latch ، Clock و Data آی سی ۷۴HC595 وصل میشوند .
int latchPin = 5; int clockPin = 6; int dataPin = 4;
بعد از آن ، یک متغیر به نام leds تعریف کرده ایم . این متغیر ، الگوی روشن و خاموش شدن ال ای دی ها را نگه میدارد . این متغیر از نوع بایت است که نشان دهنده مقدار بیت های هشتایی است . هر یک از این بیت ها میتواند یک شود یا صفر پس میتوانیم با آن ال ای دی های خود را روشن و خاموش کنیم .
byte leds = 0;
تابع setup فقط نام پین هایی که ما به عنوان خروجی استفاده کرده ایم را مشخص میکند .
void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); }
این تابع loop ابتدا همه ال ای دی ها را روشن میکند . این کار با دادن مقدار صفر به متغیر leds انجام میشود . سپس updateShiftRegister فراخوانی میشود تا الگوی متغیر leds را به شیفت رجیستر بدهد بنابراین همه ال ای دی ها خاموش میشود . این حلقه برای نیم ثانیه میایستد و سپس از ۰ تا ۷ برای حلقه for میشمارد این شمارش با متغیر i انجام میشود . در هر بار اجرای حلقه for (که با هر بار اجرا یک واحد به i اضافه میشود ) تابع bitSet اجرا میشود .
void loop() { leds = 0; updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) { bitSet(leds, i); updateShiftRegister(); delay(500); } }
تابع updateShiftRegister در ابتدا پین latchPin را low (صفر ) میکند . سپس قبل از این که پین latchpin یک ( high ) شود تابع shiftOut فراخوانی میشود . این تابع از چهار پارامتر استفاده میکند که دو تای اول آن مربوط به پین های Data و Clock است . پارامتر سوم مربوط به موقعیت شروع ال ای دی ها است که ما همان طور که در خطوط زیر میبینید از بیت های LSB شروع کرده ایم . پارامتر چهارم هم همانطور که گفته شد متغیری از نوع بایت برای مقدار دهی به شیفت رجیستر است .
void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
سلام دمت گرم خیلی ممنون از مطالبتون
سلام.
خیلی ممنون از انرژیتون... :)