آموزش‌های کاربردیبایگانی مطالبپروژه‌های Arduino

استفاده از Arduino به همراه سنسور سنجش شدت نور BH1750

BH1750 یک نوع سنسور سنجش شدت نور 16 بیتی است. در این مقالۀ آموزشی، بهتون نشون می‌دیم که چجوری می‌شه از این سنسور در بورد Arduino استفاده کرد. این سنسور با استفاده از پروتکل ارتباطی 12C با میکروکنترلر ارتباط برقرار می‌کنه. در این مقاله، نحوۀ سیم‌کشی سنسور به بورد Arduino، نصب کتابخانه‌های مورد نیاز و استفاده از یک sketch ساده برای نمایش مقادیر سنسور در سریال مانیتور رو یاد با هم مرور می‌کنیم.


معرفی سنسور سنجش شدت نور 16 بیتی BH1750

BH1750 یک نوع سنسور سنجش شدت نور 16 بیتی است که با استفاده از پروتکل ارتباطی 12C ارتباط برقرار می‌کنه. این سنسور میزان شدت نور رو بر حسب lux (یکی از واحدهای اندازه‌گیری روشناییِ SI ) خروجی می‌ده. حداقل و حداکثر شدت نوری که این سنسور می‌تونه اندازه‌گیری کنه به ترتیب 1 و 65535 lux است.

این سنسور ممکنه در بوردهایی با اشکال مختلف عرضه بشه (تصویر زیر). هر دو تصویر زیر سنسور BH1750 رو نشون می‌دن.

انواع مدل های سنسور BH1750


مشخصات فنی BH1750

در ادامه، فهرستی از مشخصات فنی سنسور BH1750 تهیه کردیم. برای کسب اطلاعات بیشتر دیتاشیت سنسور Bh1750 رو بررسی کنین.

  • رابط 12C bus


  • کیفیت طیفی اون تقریبا با چشم انسان برابری می‌کنه


  • مبدل شدت روشنایی به دیجیتال


  • رنج اندازه‌گیری اون 1 تا 65535 lux است


  • جریان پایین به کمک تابع PowerDown


  • تابع حذف نویز نوری 50Hz/60Hz


  • می‌شه دو تا 12C slave-address مختلف انتخاب کرد


  • واریانس کم در اندازه‌گیری (+/-20%)


  • تأثیر مادون قرمز خیلی کمه


  • پشتیبانی از حالت اندازه‌گیری پیوسته


  • پشتیبانی از حالت اندازه‌گیری یکباره


حالت‌های اندازه‌گیری

این سنسور از دو حالت مختلف اندازه‌گیری پشتیبانی می‌کنه: حالت پیوسته و یکباره. هر کدوم از این حالت‌ها از سه حالت رزلوشن مختلف پشتیبانی می‌کنن.

حالت‌های اندازه‌گیری سنسور BH1750

حالت پیوسته : سنسور به طور مداوم مقادیر نور محیط رو اندازه‌گیری می‌کنه.


حالت یکباره : سنسور فقط یکبار مقدار نور محیط اندازه‌گیری می‌کنه و بعد خاموش می‌شه.


برخی از مهمترین کاربرد های سنسور BH1750

برخی از مهمترین کاربرد های سنسور BH1750

BH1750 یک نوع سنسور سنجش شدت نور است و به همین دلیل می‌شه در پروژه‌های زیادی ازش استفاده کرد. برای مثال:

  • برای تشخیص روز و شب


  • برای خاموش/ روشن کردن یا تنظیم نور LED بر طبق نور محیط


  • برای تنظیم میزان روشنایی LCD و صفحه‌های نمایش


  • برای تشخیص روشن بودن LED


  • و …


کارکرد پین‌های BH1750 بشناسید

پین‌های BH1750 به شرح زیر است:

پین‌های BH1750

از پین ADD برای انتخاب آدرس سنسور I2C استفاده می‌شه. اگر ولتاژ این پین کمتر از 0.7VCC باشه (پین شناور می‌مونه یا به GND وصل می‌شه) آدرس I2C برابر با 0x23 خواهد بود. اما اگر ولتاژ بالاتر از 0.7xVCC باشه (پین به VCC وصل می‌شه) آدرس 0x5C خواهد بود. به طور خلاصه:

  • پین ADD اگر شناور باشه یا به GND وصل باشه، آدرس برابر با 0x23 است.


  • پین ADD اگر به VCC وصل باشه، آدرس برابر با 0x5C خواهد بود.

فایل ورد برای این متن بالا چک بشه تا تغییرات رنگی اعمال بشه .


رابط I2C سنسور BH1750

رابط I2C سنسور BH1750

سنسور BH1750 از رابط I2C پشتیبانی می‌کنه. شما می‌تونین سنسور BH1750 رو با استفاده از پین‌های پیش‌فرض I2C به بورد Arduino وصل کنین ( این پین‌ها برای Arduino UNO هستن، اگر از مدل دیگه‌ای استفاده می‌کنین، یه نگاهی به پین‌های I2C بندازین)


حالا که با سنسور BH1750 آشنا شدین می‌تونیم ازش استفاده کنین. در این بخش، قصد داریم یک پروژه ساده بسازیم که نور محیط رو بخونه و اون رو در سریال مانیتور Arduino IDE نشون بده.


قطعات مورد نیاز

قطعات مورد نیاز برای اندازه گیری شدت نور با بورد Arduino و سنسور BH1750

لیست قطعات مورد نیاز

  • سنسور BH1750


  • Arduino UNO (کلیک کنید)


  • برد بورد (اختیاری)


  • سیم‌های جامپر (اختیاری)


طرح کلی اتصال BH1750 به Arduino

سنسور Bh1750 رو به پین‌های Arduino I2C سیم‌کشی کنین. برای انجام این کار می‌تونین طبق طرح زیر عمل کنین.

طرح کلی اتصال BH1750 به Arduino

از جدول زیر هم می‌تونین کمک بگیرین.

وصل نکردن پین ADD به این معنیه که آدرس 0x23 رو انتخاب کردیم. برای انتخاب آدرس 0x5C باید اون رو به 3.3V وصل کنین.


نصب کتابخانۀ BH1750

چندین کتابخانه برای خواندن اطلاعات از سنسور BH1750 وجود داره. ما از کتابخانۀ BH1750 استفاده می‌کنیم که کریستوفر لاز تهیه کرده. این کتابخانه با ESP3 ،ESP8266 و Arduino سازگاره. Arduino IDE رو باز کنین و به  Sketch > Include Library > Manage Libraries برید. Library Manager باید باز بشه. سپس در نوار جست‌وجو BH1750 رو سرچ کنین و کتابخانۀ BH1750 از Christopher Laws رو نصب کنین.

نصب کتابخانۀ BH1750 در Arduino


BH1750 کد مربوط به خواندن اطلاعات سنسور

کد زیر رو در Arduino IDE کپی کنین. این کد اطلاعات مربوط به نور محیط رو بر حسب lux جمع‌آوری می‌کنه و مقادیرش رو در سریال مانیتور نشون می‌ده. این یک نمونه کد از کتابخانۀ BH1750test است (برای دسترسی به این مقاله به File > Examples > BH1750 > BH1750test برید).

Example of BH1750 library usage.
This example initialises the BH1750 object using the default high resolution continuous
mode and then makes a light level reading every second.
*/

#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;

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

  // Initialize the I2C bus (BH1750 library doesn't do this automatically)
  Wire.begin();
  // On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);
  // For Wemos / Lolin D1 Mini Pro and the Ambient Light shield use Wire.begin(D2, D1);

  lightMeter.begin();

  Serial.println(F("BH1750 Test begin"));
}

void loop() {
  float lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
}

کارکرد کد

کارمون رو با اضافه کردن کتابخونه‌ها شروع می‌کنیم. کتابخانۀ Wire.h برای استفاده از پروتکل ارتباطی I2C و کتابخانه BH1750.h برای خواندن اطلاعات سنسور.

#include <Wire.h>
#include <BH1750.h>

حالا یک شی BH1750 به نام lightMeter ایجاد می‌کنیم.

BH1750 lightMeter;

در ()setup، سریال مانیتور رو در baud rate 9600 مقداردهی می‌کنیم.

Serial.begin(9600);

حالا پروتکل ارتباطی I2C رو مقداردهی می‌کنیم. در نتیجه ارتباط I2C روی پین‌های پیش‌فرض I2C میکروکنترلر آغاز می‌شه. اگر می‌خواهید از پین‌های مختلف I2C استفاده کنین، اونا رو مثل Wire.begin(SDA, SCL) به متد ()begin منتقل کنین.

Wire.begin();

با استفاده از متد ()begin در شی BH1750 (lightMeter) سنسور رو مقداردهی کنین.

lightMeter.begin();

در ()loop ، یک متغیر به نام lux ایجاد می‌کنیم که مقادیر روشنایی رو ذخیره می‌کنه. برای دریافت مقدار کافیه تابع ()readLightLevel در شی BH1750(lightMeter) رو فراخوان کنین.

float lux = lightMeter.readLightLevel();

در آخر باید اطلاعات رو در سریال مانیتور نشون بدیم.

Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");

در حالت فعلی می‌تونین هر ثانیه یک reading جدید دریافت و پرینت ‌کنین.

delay(1000);

حالا می‌تونین کد رو در بورد بارگذاری کنین. در مرحلۀ اول، بورد رو به کامپیوترتون وصل کنین. بعد به Tools > Board برید و بورد Arduino رو انتخاب کنین. حالا به Tools > Port برید و پورت COM که بوردتون بهش وصله رو انتخاب کنین. و در آخر کلید upload رو بزنین.

بعد از بارگذاری کد، سریال مانیتور رو با baud rate 9600 باز کنین.

پس از انجام همه این مراحل، اطلاعات مربوط به روشنایی باید در سریال مانیتور پرینت بشن.


سایر کارکردهای سودمند

کتابخونه‌ای که به همراه سنسور BH1750 استفاده کردیم شامل نمونه‌های دیگه‌ای هم هست که مشخصات و کارکردهای سودمند دیگه‌ای داره. این نمونه‌ها رو از این لینک می‌تونین چک کنین.


راه‌اندازی حالت اندازه‌گیری

کتابخونه به طور پیش‌فرض از حالت اندازه‌گیری پیوسته رزولوشن بالا استفاده می‌کنه، اما با انتقال حالت اندازه‌گیری مورد نظرتون به متد ()begin در هنگام مقداردهی سنسور می‌تونین اون رو تغییر بدین. برای مثال:

lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)

برخی از حالت‌های موجود عبارتند از:

  • BH1750_CONTINUOUS_LOW_RES_MODE

  • BH1750_CONTINUOUS_HIGH_RES_MODE(default)

  • BH1750_CONTINUOUS_HIGH_RES_MODE_2

  • BH1750_ONE_TIME_LOW_RES_MODE

  • BH1750_ONE_TIME_HIGH_RES_MODE

  • BH1750_ONE_TIME_HIGH_RES_MODE_2

جمع‌بندی

در این مقالۀ آموزشی، نحوۀ استفاده از سنسور BH1750 به همراه Arduino Uno رو یاد گرفتین. استفاده از این سنسور خیلی آسونه. این سنسور از پروتکل ارتباطی I2C استفاده می‌کنه که باعث می‌شه سیم‌کشی به راحتی انجام بشه و کتابخانه‌ هم متدهایی داره که با استفاده از اونا به راحتی می‌شه اطلاعات رو دریافت کرد.

 

این مقاله چطور بود ؟
+1
1
+1
3
+1
1
مشاهده بیشتر

محمد حسنی

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

نوشته های مشابه

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

دکمه بازگشت به بالا