برای ساخت پروژه با آردوینو Arduino اولین قدم طراحی یک الگوریتم از روند اجرای پروژه است. در کارگاه آردوینو دیجی اسپارک هدف اصلی ما یادگیری تکنیک های نوشتن تا اجرای پروژه است که نیاز به یادگیری عمیق مطالب دارد. در این پروژه یک چراغ رومیزی با آردوینو کدنویسی خواهیم کرد که هر بار با فشردن کلید، لامپ روشن شده و با فشردن مجدد کلید لامپ خاموش شود. سپس یک ولوم برای پروژه طراحی میکنیم تا با تغییر ولوم شدت نور لامپ تنظیم شود. در ادامه ساخت چراغ رومیزی با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
استفاده از برد آردوینو Arduino
برای اجرای پروژه به یک میکروکنترلر نیاز داریم. آردوینو Arduino یک انتخاب مناسب است که با توجه به فضای قابل استفاده از مدل های UNO , NANO میتوانیم استفاده کنیم. آردوینو ترکیب نرم افزار و سخت افزار است که میتواند نقش یک فریمور را برای ما ایفا کند. پلتفرمی متن باز که قابلیت کدنویسی دارد و با استفاده از سینتکس ها و کتابخانه ها ایده های بسیار زیادی قابل اجرا است. بردهای آردوینو از مجموع پایه های دیجیتال و آنالوگ و تغذیه تشکیل شده است و تعداد این پایه ها مشخص کننده ی تعداد ورودی و خروجی متصل به میکروکنترلر است. زبان برنامه نویسی در محیط آردوینو Arduino IDE زبان سی پلاس پلاس ++C است. در این پروژه از برد آردوینو Arduino UNO و یا Arduino NANO میتوان استفاده کرد.
در صورتیکه تا به حال با آردوینو کار نکرده اید، سری آموزش های مقدماتی آردوینو را از لینک زیر دنبال کرده و مطالعه کنید.
روش استفاده از کلید Button
کلید به صورت صفر و یک عکل کرده و میتواند به عنوان ورودی عمل خاصی را انجام دهد. در پروژه چراغ مطالعه با آردوینو به کمک کلید اقدام به روشن و خاموش کردن چراغ مطالعه میکنیم. برای تازه کاران در ابتدا ممکن است کار با کلید با وجود سادگی بسیار پیچیده باشد. به عنوان مثال با یک بار فشردن کلید ممکن است آردوینو چند بار آن را دریافت کند و در خروجی مدام ۰ و ۱ ارسال کند که عملا ایجاد خطا در برنامه نویسی و عملکرد پروژه میکند که برای رفع مشکل بایستی از قابلیت دیبانسینگ در آردوینو استفاده کرد. با اتصال مستقیم بیزر به پایه های آردوینو ممکن است نتیجه ای که در خروجی مشاهده میکنید با وضعیت کلید درآن لحظه تفاوت داشته باشد که برای اینکار از یک مقاومت برای Pullup و Pulldown بیزر استفاده میشود. روش استفاده از کلید بسیار آسان است. در صورتیکه از کلید دو پایه استفاده میکنید یک پایه به صورت دلخواه به پایه دیجیتال آردوینو و پایه دیگر با یک مقاومت بین ۱ تا ۱۰ کیلو Pullup , pulldown به زمین GND و یا VCC متصل میشود. در صورتیکه از کلید های چهار پایه استفاده میکنید، فقط دو پایه متقارن استفاده میشود. در این تصویر پایه های کلید ۴ پایه مشخص شده است. پایه های ۱ و ۳ به هم متصل و پایه های ۲ و ۴ به هم متصل است.
- برای اتصال کلید به آردوینو پایه A را به یکی از پایه های دیجیتال برد آردوینو متصل کنید.
- پایه B را به GND متصل کنید.
- الزامی بین انتخاب پایه ها وجود دارد و برعکس هم میتوانید اجرا کنید.
روش استفاده از رله
رله نوعی کلید الکترونیکی عملگر است که به دو حالت خاموش و روشن میتوانید آنرا تغییر وضعیت دهید. توسط رله میتوانید جریان را عبور و یا قطع کنید. برای ساخت چراغ مطالعه با آردوینو از رله استفاده میکنیم. تمامی ماژول های رله در تعداد پایههای خروجی برابر است و مدلهای مختلفی مانند رله تک کانال، رله دو کانال، چهار کانال و هشت کانال در بازار موجود است. مشخصا اتصال پایههای سنسور به پایههای ورودی رله بسیار ساده است. پایههایی که با IN مشخص شده است مستقیم به پایههای برد میکروکنترلر متصل میشود. در برد آردوینو UNO, Meg2560 از پایه های دیجیتال برای اتصال به IN رله میتوان استفاده کرد. در برد Nodemcu و Wemos از GPIO ها مانند D1, D2 میتوان استفاده کرد. به همین ترتیب میتوانید اتصالات ورودی را انجام داده و تغذیه ۵ ولت و GND را از برد میکروکنترلر از جمله آردوینو، Nodemcu, Wemos تامین کنید. هر رله دارای سه پایه NO, COM و NC است.
- پایه COM: پایه مشترک Common است.
- پایه NC به معنای نرمالی کلوز یا همان پیش فرض بسته است و زمانی استفاده میشود که بخواهید رله به صورت پیش فرض بسته باشد. به این صورت که جریان در مدار وجود دارد و در صورت ارسال سیگنال از آردوینو مدار باز شده و جریان را متوقف میکند.
- پایه NO به معنای نرمالی اوپن یا همان پیش فرض باز است و به این معنی که رله همیشه باز است و مدار باز بوده و پس از ارسال سیگنال از آردوینو مدار بسته خواهد شد.
استفاده از ADC آردوینو
توسط پایه های آنالوگ در نقش ورودی میتوانیم مقادیر دریافتی از پایه را بخوانیم. برد آردوینو از یک مبدل ۱۰ بیتی آنالوگ به دیجیتال بهره میبرد که چند کاناله است! به این معنی که میتوانید ولتاژ ورودی را بین ۰ تا ولتاژ انتخاب شده که ۳ تا ۵ ولت است، نگاشت کنید و سپس مقادیر را در بازه ۰ تا ۱۰۲۳ در مبدل ۱۰ بیتی تغییر دهید. در این پروژه میخواهیم توسط یک قطعه میزان شدت نور لامپ را به صورت دستی تغییر دهیم. با چرخاندن شافت ولوم به چپ و راست شدت نور لامپ کم و زیاد شود. برای اینکار بهترین روش استفاده از ADC آردوینو است که میتواند رنج ۰ تا ۱۰۲۴ را برای تغییر شدت نور در اختیار ما قرار دهد. برای سهولت در کدنویسی از فرمول ریاضی هم استفاده خواهیم کرد تا دقت کد افزایش یابد. اکثر بردهای میکروکنترلر مانند آردوینو Arduino، برد ESP8266 از پایه های PWM پشتیبانی میکنند و امکان تولید پهنای باند PWM برای سرو موتور ها از طریق پایه های PWM فراهم است. بردهای آردوینو مانند Arduino UNO، Arduino Mega2560، Arduino NANO و بردهای ESP8266 مانند Nodemcu، Wemos d1 mini با سرو موتورها سازگاری داشته و توسط پایه های PWM قابلیت تست و راه اندازی دارد. توسط جدول زیر با توجه به نوع برد مورد استفاده پایه های PWM را تشخیص داده و سرو موتور را فقط به پایه PWM اتصال دهید.
پتانسیومتر همانند مقاومت متغیر عمل میکند. پتانسیومتر یک نوع مقاومت متغیر قابل تنظیم است و مقدار مقاومت با چرخش شافت پتانسیومتر در جهت ساعتگرد و پادساعتگرد تغییر میکند. پتانسیومتر از سه پایه VCC GND OUT تشکیل شده است. از قابلیت های خاص آن میتوان به انتخاب دلخواه افزایش و کاهش مقاومت اشاره کرد. به این صورت که اگر پایه سمت راست را به عنوان ۵ ولت در نظر بگیرید با چرخش در جهت ساعتگرد و راست مقاومت افزایش پیدا میکند و بالعکس. پایه وسط پایه مقاومت متغیر است و برای اتصال به بردهای میکروکنترلر مانند Arduino, Nodemcu , Wemos d1 mini از پایه های ADC آنالوگ Analog استفاده میکند. در این آموزش با چرخش شافت پتانسیومتر در جهت پادساعتگرد و ساعتگرد زاویه سرو موتور از ۰ تا ۱۸۰ درجه تغییر میکند.
اتصالات پروژه ساخت چراغ رومیزی
برای انجام اتصالات، از یک برد آردوینو، ال ای دی، پتانسیومتر استفاده میکنیم. مطابق با تصویر زیر اتصالات ساخت چراغ رومیزی را انجام دهید.
کد آردوینو چراغ رومیزی
برای کدنویسی پروژه ساخت چراغ رومیزی به سه قطعه نیاز داریم. یک کلید Button، ال ای دی LED, پتانسیومتر که به ترتیب کد برنامه به آردوینو متصل خواهیم کرد. در ادامه کد کامل برنامه نوشته شده است. آن را کپی و به Arduino IDE انتقال دهید.
const int led = 11; const int button = 3; const int pot = A1; unsigned long debounce = 20; unsigned long pretime = 0; int lastButtonState = HIGH; boolean ledon = LOW; void setup() { pinMode(led, OUTPUT); pinMode(button, INPUT_PULLUP); } void loop() { unsigned long currenttime = millis(); if (currenttime - pretime > debounce) { int buttonState = digitalRead(button); if (buttonState != lastButtonState) { pretime = currenttime; lastButtonState = buttonState; if (buttonState == HIGH) { ledon = ! ledon; } } } if (ledon) { int potvalue = analogRead(pot); int bright = map(potvalue, 0, 1023, 0, 255); analogWrite(led, bright); } else { digitalWrite(led, LOW); } }
تحلیل کد آردوینو
در قدم اول بایستی ورودی و خروجی ها و پایه های مورد استفاده در برد آردوینو را تعریف میکنیم. در برنامه نویسی آردوینو مشخص کردن وضعیت ورودی و خروجی برای عملکرد دقیق برنامه اهمین دارد. در این بخش با توجه به اینکه میخواهیم مدت زمان شروع به کار را محاسبه کنیم، بایستی زمان قبل و زمان بعد millis را فراخوانی کنیم. همچنین میتوانیم به صورت پیشفرض وضعیت ورودی و خروجی را در برنامه غیرفعال و یا فعال کنیم.
const int led = 11; const int button = 3; const int pot = A1; unsigned long debounce = 20; unsigned long pretime = 0; int lastButtonState = HIGH; boolean ledon = LOW; void setup() { pinMode(led, OUTPUT); pinMode(button, INPUT_PULLUP); }
تابع millis() در آردوینو مدت زمان شروع به کار را محاسبه کرده و عدد را بر حسب میکروثانیه برمیگرداند. از زمانی که برق به آردوینو متصل شده است تا زمانیکه قطع ارتباط شود، این زمان محاسبه شده و در نهایت پس از ۴۹ روز سرریز Overflow خواهد شد. تا این مرحله برای ایجاد تاخیر در برنامه از این اصطلاح استفاده شده است که یک مدت زمان مشخص تاخیر ایجاد شوذ میتوانیم از چه مدت زمان سپری شده است استفاده کنیم تا برنامه ها را در سطح حرفه ای تری اجرا کنیم. در این قسمت مشخص میکنیم اگر اختلاف زمان حاضر و زمان قبل از زمان دیبانس بیشتر باشد، داده را از ورودی خوانده و سپس مقدار آن را با آخرین باری که کلید تغییر وضعیت داده است، نامساوی و یا نقض کند. سپس هر بار کلید فشرده شود، ال ای دی تغییر وضعیت دهد. متغیر ledon برای تغییر وضعیت ال ای دی در برنامه مشخص شده است. برای مطالعه ی دقیق millis آموزش زیر را بررسی کنید.
unsigned long currenttime = millis(); if (currenttime - pretime > debounce) { int buttonState = digitalRead(button); if (buttonState != lastButtonState) { pretime = currenttime; lastButtonState = buttonState; if (buttonState == HIGH) { ledon = ! ledon; } } }
تا این قسمت فقط برنامه ای نوشته شده است تا هر بار با فشردن کلید، ال ای دی LED روشن شده و سپش با فشردن مجدد کلید ال ای دی LED خاموش شود. قسمت دوم برنامه استفاده از پتانسیومتر برای تنظیم شدت نور ال ای دی است. برای برنامه نویسی این بخش از تابع ریاضی map استفاده میکنیم. در تابع ریاضی map به داده های جدید و داده های قدیم نیاز داریم. حد پایین رنج فعلی، حد بالای رنج فعلی، حد پایین رنج جدید، حد بالای رنج جدید که در کد برنامه به صورت عددی جایگذاری میکنیم. map همان نگاشت بازه ها در هندسه است. برای مطالعه ی عمیق تر لینک زیر را بررسی کنید.
آموزش استفاده از توابع ریاضی مهم در آردوینو
if (ledon) { int potvalue = analogRead(pot); int bright = map(potvalue, 0, 1023, 0, 255); analogWrite(led, bright); } else { digitalWrite(led, LOW); } }
در قسمت نهایی کد، یک متغیر برای خواندن مقادیر آنالوگ از ورودی در کد تعریف میکنیم. سپس map را فراخوانی میکنیم. حد بالا و حد پایین رنج قدیم همان مقادیر ADC پتانسیومتر است که این عدد به دلیل ۱۰ بیتی بودن آردوینو بین ۰ تا ۱۰۲۴ است. مقادیر حد بالا و حد پایین رنج جدید داده های خروجی دیجیتال است که در اینجا برای ال ای دی بین ۰ تا ۲۵۵ متغیر است. با تغییر پتانسیومتر داده ها از ۰ تا ۱۰۲۴ بر روی ۰ تا ۲۵۵ نگاشت داده میشود. سپس بایستی تمامی این شرط ها در ledon که همان متغیر تغییر وضعیت خروجی ال ای دی است، اجرا شود.
روش اجرای پروژه چراغ رومیزی آردوینو
پس از آپلود کدهای ساخت چراغ رومیزی بر روی برد آردوینو و انجام اتصالات کد را تست کنید. کلید را فشار دهید تا ال ای دی روشن شود. سپس مجدد کلید را فشار دهید تا ال ای دی قطع شود. این بخش از برنامه نقش ورودی و خروجی را داشته و با هر بار اجرای این روند، خروجی لامپ بدون تاخیر و نویز خاموش و روشن خواهد شد. قدم بعدی تنظیم شدت نور است. یک پتانسیومتر به پروژه اضافه کنید. با چرخاندن شافت پتانسیومتر شدت نور در افزایش و کاهش مییابد و میتوانید شدت نور را تنظیم کنید.
وسایل مورد نیاز
چنانچه در مراحل نصب و راه اندازی این پروژه با مشکل رو به رو شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام
کد برنامه خیلی حرفه ای نوشته شده از شما ممنونم
با سلام
سپاس از همراهی شما کاربر گرامی
در مورد اینتراپت توضحیات بیشتری میشه بدید؟ به نظر وسایل استفاده شده سادست
اما کد نوشته شده پیچیده شده
ممنونم
با سلام
در این خصوص لینک زیر را مطالعه کنید.
آموزش اینتراپت در آردوینو