هوشمند سازی منازل : قسمت چهارم (تشخیص شدت نور)
این بار میخواهیم با حسگر تشخیص شدت نور محیط رو بررسی کنیم. با توجه به قسمت های آموزش های قبلی کار با ماژول و حسگر های مختلف رو تا حدودی کار کردیم. طبق روال کار در این بخش از توضیح مجدد اتصال ماژول بلوتوث برای ارتباط صرفه نظر می کنیم.به طور کلی معمولا از این نوع حسگر ها می توان در پروژه های شخصی هوشمند سازی منازل استفاده کرد.
سخت افزار مورد نیاز و نحوه اتصال:
- حسگر LDR یا Photoresistor
- خازن ۱۰۰ کیلو اهم
- برد آردوینو uno
- Breadboard
کد های سمت آردوینو:
boolean flag3=false; int sensorPin = A5; // انتخاب پین برای دیتای ماژول LDR int sensorValue = 0; // متغیری برای ذخیره میزان شدت نور
flag 3 مانند برنامه های قبل به این منظور تعریف شده است که از زمان آغاز برنامه این حسگر در یک حلقه بی نهایت تا مدت بی نهایت کار کند.
void checklight() { flag3=true; sensorValue = analogRead(sensorPin); // خواندن میزان روشنایی از حسگر // تشحیص میزان روشنایی و چاپ آن if((sensorValue>650)&&(sensorValue<1000)) { mySerial.print("so,"); // میزان روشنایی زیاد } if((sensorValue>400)&&(sensorValue<650)) { mySerial.print("Bright,"); // میزان روشنایی معمولی } if((sensorValue>50)&&(sensorValue<399)) { mySerial.print("Glimmer,"); // میزان روشنایی کم } }
همچنین در این پروژه هم همچنین یک تابع جدا به نام ()checklight برای تشخیص شدت نور و روشنایی تعریف می کنیم. با یکبار اجرای این تابع مقدار flag3 به مقدار True تغییر می کند.
سپس تابع ()checklight را در تابع دیگری به نام ()checkreceive بر اساس رشته ورودی دریافت شده ،فراخوانی می کنیم.
void checkreceive() // تابع خواندن مقادیر ورودی {if(mySerial.available()>0) {delay(2); char c = mySerial.read(); switch(c) { case'1': mySerial.println("it is on,"); digitalWrite(LED_PIN, HIGH); break; case'2': digitalWrite(LED_PIN, LOW); mySerial.println("it is off,"); break; case'3': readSensor(); break; case'4': checkmotion(); break; case'5': checklight(); }}}
در نهایت ()checkrecieve را در Loop فراخوانی کرده و با true شدن flag3 مدت زمان کار حسگر ، در یک حلقه بی نهایت با تاخیر هر نیم ثانیه قرار می گیرید.
void loop(){ checkreceive(); if(flag==true) { delay(500); readSensor(); } if(flag2==true) { delay(500); checkmotion(); } if(flag3==true) { delay(500); checklight(); } }
بلاک های آندروید:
برای فعال سازی حسگر شدت نور نیاز داریم تا یک کاراکتر یا عدد که اینجا “۵” برای فعال سازی می باشد به آردوینو از طریق بلوتوث ارسال کنیم.
همانند آموزش های قبل ، حال نوبت به دریافت رشته یا مقادیری از اطلاعات از سمت آردوینو می باشد.هر رشته دریافتی بیانگر یک میزان روشنایی محیط است.
“SO – Bright – Glimmer” واژه های “تاریک،روشن،خیلی روشن” برای نمایش میزان روشنایی محیط می باشد.
برای نمایش بهتر میزان روشنایی در یک Label ، یک بلاک تایمر تعریف می کنیم.در این بلاک مشخص می شود هر چند ثانیه میزان روشنایی را نمایش و به روز رسانی کند. در نتیجه خروجی ۳ مقدار شدت روشنایی بر روی صفحه نمایش داده می شود.