رباتیک و هوافضا

آموزش پروژه محور آردوینو – جلسه چهارم

جلسه های آموزش پروژه محور آردوینو

به نام خدا

آموزش پروژه محور آردوینو – جلسه چهارم

امروز میخواهیم ۸ ال ای دی را توسط آردوینو و البته بدون نیاز به ۸ پین در آردوینو ، کنترل کنیم .

breadboard

با این که این ۸ ال ای دی را میتوانیم مستقیما به آردوینو وصل کنیم و کنترلشان کنیم اما این کار را نمیکنیم . زیرا پایه های زیادی از ال ای دی هایمان اشغال میشود و ما میخواهیم در این جلسه روشی را به شما ارائه بدهیم که از تعداد پایه های کمتری استفاده کنید تا اگر در پروژه های گسترده تر و پیچیده تری بخواهید از آردوینو استفاده کنید بتوانید روش هایی را مثل روش این جلسه به کار بگیرید تا پایه های آردوینو برای پروژه شما کم نیاید .

برای این کار از آی سی مبدل سریال به موازی ۷۴HC595 استفاده میکنیم . این آی سی دارای ۸ خروجی و ۳ ورودی میباشد .

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

هشت عدد ال ای دی ۵ میلی متر

 

red_led_5mm

 

مقاومت ۲۷۰ اهم ( قرمز – بنفش – قهوه ای )

R-270

 

آی شیفت رجیستر ۷۴HC595

74HC595

 

بردبورد

breadboard_half

 

برد آردوینو UNO

uno_r3

 

تعدادی سیم

jumpers_web

 

توضیحات مدار :

مطابق شکل زیر هشت عدد ال ای دی با هشت عدد مقاومت ۲۷۰ اهم به آی سی نام برده وصل شده اند .

circuit

 

پین شماره یک این آی سی پین بالا سمت چپ میباشد .(مطابق شکل بالا )

پین دیجیتال شماره ۴ آردوینو به پین شماره ۱۴ آی سی شیفت رجیستر وصل میشود .

پین دیجیتال شماره ۵ آردوینو به پین شماره ۱۲ آی سی شیفت رجیستر وصل میشود .

پین دیجیتال شماره ۶ آردوینو به پین شماره ۱۱ آی سی شیفت رجیستر وصل میشود .

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

بیشتر بخوانید...  ساعت دیجیتال همراه با هشدار با آردوینو

قبل از این که سراغ کد های آردوینو برویم بریم سراغ عملکرد آی سی شیفت رجیستر ۷۴HC595 .

 

shift_register

 

میشود گفت این شیفت رجیستر یک مکان حافظه ۸ بیتی دارد که هر کدام ازین بیت ها میتوانند ۱ یا ۰ باشند . برای مشخص کردن ارزش هر یک از این ها باید از دو پین 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);
    }

 

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

دیدگاه‌ها (2)

پاسخ دادن به Admin لغو پاسخ

*
*

    shahram مهمان خرداد 16, 1396 پاسخ

    سلام دمت گرم خیلی ممنون از مطالبتون

      Admin مدیر کل خرداد 17, 1396 پاسخ

      سلام.
      خیلی ممنون از انرژیتون... :)