جلسه سیزدهم: ساخت دیمر
یکی از ویژگی های یک خانه هوشمند، تنظیم میزان روشنایی محیط خانه به انتخاب کاربر توسط است. به همین جهت در صنعت برق و تاسیسات برای تنظیم میزان روشنایی نور لامپ ها، از قطعه ای به نام Dimmer (دیمر) استفاده می شود. در حقیقت دیمر یک قطعه الکترونیکی است که بر روی آن یک ولوم (پتانسیومتر) نصب شده است که به واسطه چرخاندن آن می توان میزان روشنایی یک لامپ را تنظیم نمود. در این پروژه از مبحث آموزش آردوینو قصد داریم با استفاده از برد آردوینو یک دیمر ساده بسازیم. بعد از ساخت این دیمر ساده با آردوینو ، شما می توانید با چرخاندن پتانسیومتر متصل شده به برد Arduino، میزان روشنایی یک لامپ LED را که به برد آردوینو متصل شده است را کنترل نمائید.
لیست قطعات مورد نیاز
برد آردوینو Arduino UNO R3 مدل DIP | 1 عدد |
لامپ LED زرد سایز 5mm میلی متر مدل مات | 1 عدد |
مقاومت 220 اهم با توان 0.25 وات و تلرانس 1 درصد | 1 عدد |
ولوم 10kΩ | 1 عدد |
برد بورد (پروجکت برد) مدل GL | 1 عدد |
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی) | 1 عدد |
توضیحات پروژه ساخت دیمر ساده
برای آزمایش مدار و شروع برنامه نویسی ابتدا لازم است سخت افزار پروژه بسته شود، به همین خاطر ابتدا طبق نقشه شماتیک زیر، پایه وسط پتانسیومتر را از طریق یک تکه سیم به پایه A0 آردوینو متصل کنید. بعد از آن یکی از پایه های پتانسیومتر را به پایه GND و پایه دیگر پتانسیومتر را به پایه 5V بر روی برد آردوینو متصل کنید. در مرحله بعد، پایه مثبت لامپ ال.ای.دی را به یکسر مقاومت 220 اهمی اتصال دهید و سمت دیگر مقاومت را به پایه دیجیتال شمار 9 آردوینو متصل کنید. و در نهایت برای تکمیل مدار پایه منفی لامپ LED را توسط یک تکه سیم به یکی از پایه های GND بر روی برد آردوینو اتصال دهید.
برنامه پروژه ساخت دیمر ساده با آردوینو
در برنامه این پروژه، در دو خط شروع برنامه، توسط دو متغیر ثابت برای پایه ورودی آنالوگ A0 و خروجی دیجیتال شماره 9 ، دو نام تعریف کرده ایم. و بعد از آن در دو خط بعدی برنامه دو متغیر از جنس Int با نام sensorValue (جهت ذخیره سازی مقدار خوانده شده آنالوگ از پایه A0) و متغیر outputValue (جهت ذخیره سازی مقدار خروجی که باید بر روی پایه دیجیتال شماره 9 آردوینو اعمال شود) تعریف کرده ایم.
پیکربندی ارتباط پروتکل Uart در آردوینو
از آنجا که در این پروژه می خواهیم مقادیر ورودی و خروجی را در محیط ترمینال نمایش دهیم به همین خاطر توسط دستور Serial.begin() در عملکرد Setup() برای برقراری ارتباط، پروتکل Uart را پیکربندی و فعال می کنیم.
1 2 3 4 5 6 7 |
const int analogInPin = A0; const int analogOutPin = 9; int sensorValue = 0; int outputValue = 0; void setup() { Serial.begin(9600); } |
خواندن مقدار آنالوگ و تبدیل آن به دیجیتال در آردوینو
بعد از پیکربندی های اولیه برنامه وارد حلقه اصلی برنامه یعنی عملکرد loop() می شویم. در ابتدای حلقه توسط دستور analogRead() مقدار ورودی پایه آنالوگ A0 آردوینو را خوانده و آنرا در متغیر sensorValue ذخیره می کنیم.
1 2 |
sensorValue = analogRead(analogInPin); |
همانطور که در مثال های قبلی بارها ذکر شد مقدار آنالوگ می تواند بین 0 تا 1023 باشد و همچنین بازه عددی دیجیتال در خروجی می تواند بین 0 الی 255 باشد. به همین خاطر در برنامه باید فرمولی نوشت که عدد آنالوگ ورودی را گرفته و به عددی بین 0 تا 255 تبدیل نماید. شاید اولین فرمولی که به ذهن برسد، نوشتن یک شرط جهت دریافت عدد آنالوگ ورودی و تقسیم آن بر عدد 4 باشد، که فرمول درستی نیز است. اما در این مثال ما قصد داریم که یک دستور جدید را معرفی کنیم، که تنها با نوشتن یک خط کد عمل میانگین گیری را انجام می دهد و شما را از نوشتن دستورات شرط بی نیاز می کند.
گرفتن میانگین از متغیرهای ورودی
دستور map()، عملکرد این دستور به این شیوه است که 5 ورودی از شما می گیرد، ورودی اول مقدار ورودی یا همان عددی که قرار است از آن میانگین گرفته شود. ورودی دوم و سوم به ترتیب پایین ترین مقدار و بالاترین مقدار ورودی را نشان می دهند. و ورودی چهارم و پنجم که به ترتیب پایین ترین و بالاترین مقدار خروجی را که قرار است میانگین بر اساس آن گرفته شود را معرفی می کند.
1 2 |
outputValue = map(sensorValue, 0, 1023, 0, 255); |
ساخت پالس PWM (ولتاژ آنالوگ) در آردوینو
بعد از اینکه توسط دستور map() مقدار میانگین آنالوگ خوانده شده از پایه A0 آردوینو را بدست آوردیم، نتیجه آنرا در متغیری به نام outputValue ذخیره می کنیم. و سپس توسط دستور analogWrite() آنرا بر روی پایه دیجیتال شماره 9 آردوینو اعمال می کنیم.
1 2 |
analogWrite(analogOutPin, outputValue); |
چاپ و نمایش مقدار متغیر در محیط ترمینال
در انتهای برنامه، توسط دستور Serial.print() مقدار دو متغیر sensorValue و متغیر outputValue را در محیط ترمینال چاپ می کنیم.
1 2 3 4 5 |
Serial.print("sensor = "); Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); |
سورس کد برنامه در نرم افزار آردوینو
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
const int analogInPin = A0; const int analogOutPin = 9; int sensorValue = 0; int outputValue = 0; void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(analogInPin); outputValue = map(sensorValue, 0, 1023, 0, 255); analogWrite(analogOutPin, outputValue); Serial.print("sensor = "); Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); delay(2); } |
با سلام چطور می شود براب لامپ های خانه استفاده کرد؟
خواهش میکنم جواب بدید
سلام دوست عزیز
برای یافتن پاسخ سوال خود پیشنهاد می کنیم پروژه زیر را مطالعه فرمائید
کنترل توان مصرف کنندهای AC
سلام ببخشید چطوری میشه جلسات دیگه رو دانلود کرد؟؟؟؟
سلام دوست عزیز
همه جلسات آموزشی را می توانید از طریق لینک زیر مشاهده فرمائید:
آموزش پروژه محور آردوینو