سنجش پارامترهای محیطی نیازمند سنسورهای مختلفی است. یکی از سنسورها پرکاربرد تشخیص شدت نور محیط است. این پارامتر در موارد مختلفی تاثیرگذار است. از جمله سلامت محیط کار، که وابسته به نوع کار و نوع محیط است. همچنین سلامت و پایش وضعیت گیاهان در گلخانهها به کمک سنسورهای نوری انجام میشود. سنسور نوری Light جهت اندازه گیری شدت نور محیط طراحی و در مدلهای مختلف عرضه شده است. سنسور سطح نور یا Light Level Sensor در سطحهای مختلف مقادیر نور محیط را اندازهگیری کرده و به صورت پارامتر Lux ارسال میکند. در ادامه به معرفی سنسور و کد آردوینو Arduino خواهیم پرداخت. در این آموزش با سنسور BH1750 شدت نور محیط را بر اساس لوکس به کمک آردوینو محاسبه میکنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
سنسور BH1750 شدت نور
سنسور BH1750 از خانواده سنسورهای فتو رزیستوری است. این سنسور شدت نور محیط را سنجیده و بر اساس پارامتر Lux به عنوان دیتا تبدیل میکند. مقادیر لوکس از ۰ تا ۶۵۵۳۵ واحد لوکس است. با سنسور BH1750 این مقادیر قابل اندازه گیری است. سنسور دارای ۴ پایه VCC, GND, SCL, SDA است. به تصویر زیر دقت کنید.
معرفی پایههای سنسور BH1750
- پایه VCC تغذیه سنسور است که بین ۲٫۴ تا ۳٫۶ ولت است.
- پایه GND زمین است و به زمینGND میکروکنترلر متصل میشود.
- پایه SCL پایه Serial Clock است و پالس کلاک را برای ارتباط I2C فراهم میکند.
- پایه SDA پایه Serial Data است و جهت ارسال دیتا در رابط I2C استفاده میشود.
- پایه ADDR پین آدرس است و برای زمانیکه بیش از دو ماژول متصل است جهت آدرس دهی استفاده میشود.
ویژگی سنسور شدت نور BH1750
- تعذیه: ۲٫۴ – ۳٫۶ ولت
- مصرف جریان در کمترین حالت: ۰٫۱۲ میلی آمپر
- رنج اندازه گیری: ۱ – ۶۵۵۳۵lx
- رابط: I2C BUS
- دقت اندازه گیری: +/-۲۰%
- مبدل A/D برای تبدیل مقادیر آنالوگ به دیجیتال
- تاثیر پذیری کم تابش IR
سنسور BH1750 در ساخت موبایل، چراغهای جلوی اتومبیل استفاده میشود. در مبحث اینترنت اشیا هم بسیار کاربردی است. خصوصا اینکه سنجش پارامتر نور محیط یکی از عوامل بسیار مهم برای پیاده سازی پروژههای اینترنت اشیا است. این سنسور از پروتکل I2C استفاده میکند تا استفاده از سنسور برای میکروکنترلرها سادهتر شود. پایههای SDA و SCL مختص پروتکل I2C است. شدت نور با میزان تابش نور به سنسور اندازه گیری میشود.
راه اندازی BH1750 با انواع میکروکنترلر
سنسور شدت نور BH1750 در مدل های مختلف وجود دارد. این سنسور با انواع میکروها از جمله آردوینو Arduino, Nodemcu, Wemos D1 mini قابل تست و راه اندازی است.
با توجه به نوع برد مورد استفاده اتصالات سنسور را انجام دهید. سنسور BH1750 با نرم افزار آردوینو Arduino قابل راه اندازی است. برای استفاده از آن در ابتدا به نصب کتابخانه نیاز داریم.
نصب کتابخانه BH1750
برای شروع برنامه نویسی سنسور به کتابخانه سنسور با تراشه BH1750 نیاز داریم. از منو Arduino/Tools/ Manage Libraries عبارت BH1750 را فیلتر و کتابخانه زیر که در تصویر مشخص شده است را نصب کنید.
جهت نصب بر روی install کلیک کرده و آخرین ورژن معرفی شده برای کتابخانه را نصب کنید.
کد آردوینو Arduino UNO , Mega2560
برای راه اندازی سنسور BH1750 با برد آردوینو از پایه های I2C استفاده میکنیم. پایه های I2C در برد آردوینو در اتصالات ضمیمه شده است. در این بخش کد آردوینو مربوط سری بردهای آردوینو ضمیمه شده است:
#include <Wire.h> #include <BH1750.h> BH1750 lightMeter; void setup(){ Serial.begin(9600); Wire.begin(); lightMeter.begin(); Serial.println(F("BH1750 Test")); } void loop() { float lux = lightMeter.readLightLevel(); Serial.print("Light: "); Serial.print(lux); Serial.println(" lx"); delay(1000); }
کد بردهای Nodemcu و Wemos
برای راه اندازی سنسور BH1750 با سری بردهای ESP8266 از پایه های I2C استفاده میکنیم. پایه های I2C در برد آردوینو در اتصالات ضمیمه شده است. در این بخش کد آردوینو مربوط سری بردهای ESP8266 ضمیمه شده است:
#include <Wire.h> #include <BH1750.h> BH1750 lightMeter; void setup(){ Serial.begin(9600); Wire.begin(D2, D1); lightMeter.begin(); Serial.println(F("BH1750 Test")); } void loop() { float lux = lightMeter.readLightLevel(); Serial.print("Light: "); Serial.print(lux); Serial.println(" lx"); delay(1000); }
تحلیل کد آردوینو Arduino
دیتای دریافتی از سنسور BH1750 به صورت عدد است که ما میتوانیم عدد اعشاری را انتخاب کرده و دیتا را بر حسب پارامتر لوکس Lux دریافت و مشاهده کنیم.
فراخوانی کتابخانهها
در این کدها از دو کتابخانه BH1750, Wire استفاده شده است.
#include <Wire.h> #include <BH1750.h>
معرفی متغیر برای سنسور
یک اسم مشخص برای معرفی متغیر تعریف میکنیم.
BH1750 lightMeter; دقت کنید که عبارت BH1750 بایستی با حروف بزرگ نوشته شود و به رنگ قرمز نشان داده شود.
تعریف Void Setup
جهت معرفی پایه های مورد استفاده و بادریت از Voidsetup استفاده میکنیم:
void setup(){ Serial.begin(9600); Wire.begin(D2, D1); ()OR Wire.begin lightMeter.begin(); Serial.println(F("BH1750 Test")); }
تعریف حلقه Loop
جهت نمایش و دریافت دیتا از دستوات حلقه استفاده میکنیم:
float lux = lightMeter.readLightLevel(); Serial.print("Light: "); Serial.print(lux); Serial.println(" lx"); delay(1000);
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
با سلام .بنده سنسور را راه اندازی کردم اما متاسفانه ۱ ثانیه ظول می کشد تا سنسور به تغییر شدت نور واکنش نشان دهد آیا راهی برای کاهش زمان واکنش نشان دادن سنسور وجود دارد؟
باتشکر
با سلام
این مورد را بایستی در دیتاشیت سنسورها و زمان تاخیر در واکنش بررسی کنید. اگر در دیتاشیت به زمان delay اشاره شده باشد، نمیتوانید کاری انجام دهید.
سلام
من برای اندازه گیری میزان تابش خورشیدی در گلخانه میخواستم از این سنسور استفاده کنم. آیا امکان پذیر است؟
مانند سنسور TES-1333R که در بازار وجود دارد.
با سلام
این سنسور مقادیر لوکس از ۰ تا ۶۵۵۳۵ محاسبه میکند. پیشنهاد میشود دیتاشیت سنسور را بررسی کنید.
سلام خسته نباشید
میشه صحفه نمایش هم گذاشت که درصد نور رو نمایش بده؟
و از چه صحفه نمایشی استفاده کرد
سلام
بله در این خصوص از نمایشگر OLED و یا LCD استفاده کنید.
ماژول نمایشگر OLED I2C با درایور SSD1306
ال سی دی کاراکتری LCD 2×16 با پین هدر مخصوص