- Вступ до цифрового модуля датчика світла BH1750
- Ардуїно
- Програмування Arduino для взаємодії датчика світла BH1750
Коли ви берете телефон на сонячне світло або при сильному освітленні, він автоматично регулює яскравість відповідно до умов освітлення. У більшості дисплейних пристроїв, що складаються вже кілька днів, будь то телевізор або мобільний телефон, всередині є датчик зовнішнього освітлення для автоматичного регулювання яскравості. Сьогодні в цьому навчальному посібнику ми використаємо один такий датчик BH1750 модуль датчика світла та підключимо його до Arduino і покажемо значення Люкс на РК-дисплеї 16x2.
Вступ до цифрового модуля датчика світла BH1750
BH1750 - це цифровий датчик освітлення навколишнього середовища або датчик інтенсивності світла, який можна використовувати для автоматичного регулювання яскравості дисплея в мобільних, РК-дисплеях або для ввімкнення / вимкнення фар в автомобілях залежно від умов зовнішнього освітлення.
Датчик використовує протокол послідовного зв'язку I 2 C, що полегшує використання з мікроконтролерами. Для зв'язку I2C він має виводи SDI та SDA. Висновок датчика зовнішнього освітлення BH1750 показаний нижче:
Вихід датчика вказано в LUX (lx), тому він не потребує подальших розрахунків. Люкс - це одиниця виміру інтенсивності світла. Він вимірює інтенсивність відповідно до кількості світла, що потрапляє на певну область. Один люкс дорівнює одному люмену на квадратний метр.
Датчик працює на напрузі від 2,4 В до 3,6 В (зазвичай 3,0 В) і споживає струм 0,12 мА. Цей датчик має широкий діапазон та високу роздільну здатність (1-65535lx), крім того, варіація вимірювань також невелика (приблизно +/- 20%). Він також може працювати самостійно без будь-яких зовнішніх компонентів.
Хоча датчик LDR також може використовуватися для управління пристроями залежно від умов освітлення, але це не так точно. Ми використовували датчик LDR для створення багатьох додатків з контролем світла:
- Схема датчика світла Arduino з використанням LDR
- Темний детектор за допомогою LDR і 555 IC таймера
- Проста схема LDR для виявлення світла
- Кольорова змішувальна лампа Arduino з використанням RGB LED та LDR
Ардуїно
Схема підключення датчика освітленості BH1750 до Arduino показана нижче.
Висновки зв'язку I2C SDA та SCL BH1750 підключені до виводів Arduino A4 та A5 відповідно для зв'язку I 2 C. Як ми знаємо, робоча напруга датчика становить 3,3 в, тому VCC і GND BH1750 підключені до 3,3 В і GND Arduino. Для РК-виводів даних (D4-D7) підключені до цифрових виводів D2-D5 Arduino, а виводи RS і EN - D6 і D7 Arduino. V0 РК-дисплея підключений до горщика, а 10-канальний - для управління яскравістю РК-дисплея.
Програмування Arduino для взаємодії датчика світла BH1750
Частина програмування для використання цього датчика LUX з Arduino дуже проста. Хоча для цього датчика є бібліотека, але ми можемо використовувати його і без цього.
По-перше, ми включили файли заголовків для РК-дисплея та протоколу I 2 C.
#включати
У функції налаштування ми ініціалізували як РК-дисплей, так і датчик та надрукували повідомлення про відкриття на РК-дисплеї.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Датчик інтенсивності"); затримка (2000); }
Тут BH1750_Read і BH1750_Init функція використовується для читання і запису значень Lux відповідно. Функція Wire.beginTransmission () використовується для початку передачі, а функція Wire.requestFrom (address, 2) використовується для читання регістрів, де 2 вказує кількість регістрів.
Далі Wire.endTransmission () використовується для завершення передачі, а функція Wire.write () використовується для переходу до потрібного реєстру, ввівши в нього адресу цього реєстру.
int BH1750_Read (int адреса) { int i = 0; Wire.beginTransmission (адреса); Wire.requestFrom (адреса, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); return i; } void BH1750_Init (int address) { Wire.beginTransmission (address); Wire.write (0x10); Wire.endTransmission (); }
У функції циклу ми друкуємо значення люкс у реальному часі на РК-дисплеї. Спочатку порівняйте значення, що повертається з функції BH1750_Read, з 2, а потім починайте друкувати значення Lux, якщо воно дорівнює 2. Тут значення порівнюються з 2, оскільки функція BH1750_Read повертає значення кількості регістрів, і ми читаємо лише 2 регістри. Отже, коли воно досягає 2, програма починає друкувати LUX значення інтенсивності світла.
Потім використовується формула, щоб отримати значення з обох регістрів і розділити їх на 1,2, що є точністю вимірювання.
void loop () { int i; значення uint16_t = 0; BH1750_Init (BH1750address); затримка (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Інтенсивність в LUX"); lcd.setCursor (6,1); lcd.print (значення); } затримка (150); }
Нарешті увімкніть Arduino і завантажте програму в Arduino. Як тільки програма завантажується, РК-дисплей починає відображати інтенсивність світла в одиницях LUX. Ви також можете змінювати значення, змінюючи інтенсивність світла навколо датчика, як показано у відео нижче.