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

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

create-hard-reset-for-arduino-boards-with-relay-digispark
نوشته شده توسط معین صابری

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

 


ریست نرم افزاری و سخت افزاری


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

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

 

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

 


ریست سخت افزاری آردوینو


در کنار روش ریست نرم افزاری، روش دیگر برای ریست میکروکنترلر وجود دارد. این روش که تحت عنوان روش ریست سخت افزاری مشهور است، عملکردی متفاوت با روش نرم افزاری دارد. حتما کلید ریست را روی بردهای آردوینو نظیر آردوینو UNO یا MEGA دارید. این کلیدها به پایه ریست میکروکنترلر متصل بوده و سبب ریست برد می شوند.

ریست سخت افزاری آردوینو - دیجی اسپارک

 

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

 


تفاوت ریست نرم افزاری و سخت افزاری


پس از بررسی ریست سخت افزاری و نرم افزاری، نوبت به بررسی تفاوت این دو روش می رسد. در روش ریست نرم افزاری به کمک وقفه WatchDog، پس از سر ریز تایمر، برنامه از ابتدا اجرا می شود. در حقیقت این روش شبیه به این است که یک label در ابتدا برنامه تعریف کنیم. سپس با تعریف تایمر و سر ریز آن، به label پرش کنیم. در این روش متغیرها و دستورها در حافظه می توانند بمانند و پاک شوند. اما در روش ریست سخت افزاری، متغیرها از حافظه پاک شده و برنامه از ابتدا آغاز می گردد. این روش در زمان هایی کاربرد دارد که برنامه دچار مشکل حافظه شده باشد؛ به عنوان مثال حفره های حافظه ای زیاد شده یا Memory Leak در برنامه رخ داده باشد. در این حالت با قطع موقت برق میکروکنترلر، کلیه داده ها از حافظه SRAM پاک شده و برنامه از آغاز اجرا می گردد.

 


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


برای اجرای ریست سخت افزاری، از یک رله استفاده می کنیم. این رله بین پایه RESET و GND قرار می گیرد. از طرف دیگر ورودی رله به یکی از پایه های GPIO میکروکنترلر متصل می گردد. ما در اینجا از برد آردوینو UNO استفاده می کنیم، اما این روش برای تمام بردهای این خانواده قابل استفاده است. نخست به تصویر زیر که اتصالات را نمایش می دهد، دقت کنید.

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

مطابق تصویر فوق، اتصالات را به شیوه زیر اجرا می کنیم.

  • اتصال پایه VCC ماژول رله به پایه ۵V آردوینو
  • اتصال پایه GND ماژول رله به GND آردوینو
  • اتصال پایه IN ماژول رله به پایه A0 آردوینو
  • اتصال پایه COM رله به GND آردوینو
  • اتصال پایه NO  رله به پایه RESET آردوینو

 


کدهای پروژه ریست آردوینو


پس از پیاده سازی مدار ریست سخت افزاری، به کدهای آن می پردازیم. در این برنامه هر ۱۰ ثانیه یکبار، برد به شیوه سخت افزاری ریست می شود.

void setup() {
  Serial.begin(115200);

}

void loop() {
  for (int i = 0; i < 10; i++) {
    Serial.println(i);
    delay(1000);
  }
    pinMode(A0, OUTPUT);   //به محض تعریف پایه به عنوان خروجی، یک پالس تولید می شود. این پالس به رله اعمال شده و برد ریست می کند.


}

 

 پس از آپلود و اجرای کدهای فوق، برد هر ۱۰ ثانیه یکبار ریست می گردد.

 


تحلیل پروژه ریست آردوینو


در این پروژه قصد داریم تا هر ۱۰ ثانیه یکبار، برد را به صورت سخت افزاری ریست کنیم. در بخش سخت افزار، از یک ماژول رله استفاده کرده ایم. این ماژول رله به شکل کلید، در مسیر پایه RESET و GND قرار می گیرد. هرگاه از سوی میکروکنترلر فرمان فعال سازی دریافت شود، دو پایه RESET و GND به هم متصل شده و برد ریست می گردد.  از طرف دیگر، پایه فرمان رله به یکی از پایه های خروجی میکروکنترلر متصل است.

 


لوازم مورد نیاز


لینک خرید انواع برد آردوینو، کلیک کنید

لینک خرید ماژول رله، کلیک کنید

 


جمع بندی


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

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

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

۱۲ دیدگاه

  • سلام. یک سوال داشتم.
    سوالم اینه که چرا ما مستقیما پایه A0 میکرو را به reset میکرو وصل نکنیم. لزوم استفاده از رله چیه ؟؟
    ممنون از مطلب مفیدتون

    • متوجه منظور شما نشدم. در این جا با یک تریگ نیاز داریم تا میکرو را ریست کنیم. این تریگ به پایه RESET میکرو اعمال می شود. لطفا منظور خو را کمی بیشتر بیان کنید تا راجع به آن صحبت کنیم.

      • سلام مجدد.
        شما در این آموزش با استفاده از یک رله، یک پالس به پایه reset میکرو اعمال میکنید. به طور مشخص تر با فعال سازی پایه A0 بوبین رله تغییر وضعیت میدهد و آردوینو ریست می شود. سوال من اینه من اگر از رله استفاده نکنم و پایه A0 میکرو با سیم به پایه reset میکرو وصل کنم، آیا میتونم اردوینو ریست کنم؟؟ به طور خلاصه میخوام بپرسم ایا امکانش هست با خود میکرو به تنهایی دستگاه را reset سخت افزاری کرد؟؟
        ممنون از توجهتون

        • سلام
          خیر، این امکان وجود ندارد. باید یک پایه بین پایه ریست و زمین قرار گیرد تا ریست شود.

  • با سلام و درود
    Sketch uses 924 bytes (3%) of program storage space. Maximum is 30720 bytes.
    Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
    avrdude: ser_open(): can’t set com-state for “\\.\COM4”
    Failed uploading: uploading error: exit status 1
    این ارور مربوط به چیه

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

  • سلام ببخشید
    شما می تواند با اردینو نانو کاری کنید که وقتی دکمه ای ۲ثانیه نگه داشته میشه رله رو به مدت ۱ثانیه روشن کنه و بعد هم خاموش میشه با کد کامل ارسال کنید

    • سلام
      در آموزش های سایت سرچ کنید، این مورد را مشاهده م یکنید. البته این مورد را باید خود شما هم برنامه نویسی کنید.

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