BH1750. Датчик зовнішнього освітлення з шиною I2C.

BH1750. Датчик зовнішнього освітлення з шиною I2C.

BH1750. Датчик зовнішнього освітлення з шиною I2C.

BH1750 — це датчик навколишнього освітлення з достатньо високою роздільною здатністю та чутливістю. Він поводиться у видимому світлі так само, як і людське око, на нього не впливає інфрачервоне випромінювання та не залежить від колірної температури типу освітлення, тобто добре працює з природним освітленням і з різні види штучного освітлення. Він цифрово спілкується з мікроконтролером, з Шина I2C, тому він є стійким до перешкод, якщо його розмістити на певній відстані від схеми, яка його зчитує. Його час відгуку досить низький, менше 200 мс у найнесприятливіших обставинах.

Зміст

    BH1750 Датчик зовнішнього освітлення

    З електронної точки зору його реалізація дуже проста. Просто підключіть джерело живлення (від 2,4 В до 3,6 В) і Шина I2C. За бажанням можна змінити адресу шини для з’єднання двох пристроїв (з ADDR на низькому рівні це 0B0100011 або 0x23, а з ADDR на високому рівні – 0B1011100 або 0x5C), а лінію VDI можна використовувати для функції скидання за допомогою мікроконтролер.

    Щоб підключити BH1750 до Arduino, крім живлення від виходу 3,3 В, найправильніше використовувати додатково до перетворювача рівня підтягуючі резистори для Шина I2C. Хоча компонент буде підтримувати пряме підключення до шини Шина I2C Небажано визначати розмір схеми без урахування перетворення рівня.

    Датчик зовнішнього освітлення BH1750. Схема застосування

    Завдяки своїй популярності, яка пов’язана з дуже дешевою по відношенню до її точності, існує кілька модулів, таких як добре відомий GY-30, який можна побачити на фотографії на початку. Щоб підключити їх більш комфортно під час прототипування з мікроконтролером, вони зазвичай містять перетворювачі рівнів для Шина I2C і регулятори напруги для живлення їх вищою напругою (до 5 В) замість 3,3 В на виході Arduino.

    BH1750 має два режими зчитування, безперервний та індивідуальний, які відповідають двом станам: активному та низькому споживанню або сплячому режимі. Якщо використовується режим безперервного зчитування, BH1750 залишається активним після відбору проб, після виконання індивідуального вимірювання він автоматично переходить у режим сну та режим низького енергоспоживання. Перше зчитування в безперервному режимі займає максимум 180 мс, а наступні – від 16 мс до 120 мс залежно від роздільної здатності.

    Датчик здатний вимірювати з інтервалами (роздільна здатність) 4 люкс, 1 люкс і 0,5 люкс. У своєму паспорті BH1750 рекомендує використовувати роздільну здатність 1 люкс, що дозволяє розрізняти освітлення нижче 10 люкс (що відповідає сутінкам) і є більш стійким до шуму, який може вплинути на вимірювання.

    Роздільна здатність 1 і 4 люкс використовує 16 біт даних для представлення цілої частини, тому можна досягти максимального вимірювання 65535 люкс (сонячний день без прямого світла). У режимі 0,5 люкс використовується молодший біт для десяткової частини (вимірюється від 0,5 люкс до 0,5 люкс), тому з рештою 15 біт можна представити максимальне значення 32767 люкс (зовні без прямого освітлення)

    Теоретичне сонячне освітлення порівняно із середньою потужністю BH1750
    Теоретичне сонячне освітлення місця та дня написання статті (законний час, не сонячне) порівняно із середньою потужністю BH1750 при 1 люксі

    Зазвичай оптичне вікно, за яким вимірюється навколишнє освітлення, відповідає всьому видимому спектру, і мета полягає в тому, щоб досягти розподілу чутливості в ньому, порівнянного з розподілом чутливості людини. Якщо оптичне вікно зменшено (світло вимірюється в нижньому діапазоні довжин хвиль), чутливість BH1750 може бути збільшена (до 0,11 люкс) за допомогою режиму скасування регулювання впливу оптичного вікна шляхом збільшення відліку часу. пропорційно. Оскільки в цьому спеціальному (великому) режимі знімаються окремі показання, контекст повинен дозволяти це без особливої ​​зміни умов вимірювання (наприклад, датчик повинен залишатися дуже стабільним, він не повинен переміщатися в зону з різними умовами освітлення)

    Коди операцій BH1750

    Стан
    5>

    • 0B00000000 (0x00) Низьке споживання енергії або режим очікування.

    • 0B00000001 (0x01) Увімкнений.

    • 0B00000111 (0x07) Скинути. Очищає журнали даних BH1750.

    Роздільна здатність
    5>

    • 0B00010011 (0x13) Безперервне вимірювання з роздільною здатністю 4 люкси (від 16 мс до часу зчитування)

    • 0B00010000 (0x10) Безперервне вимірювання з роздільною здатністю 1 люкс (час зчитування 120 мс)

    • 0B00010001 (0x11) Безперервне вимірювання з роздільною здатністю 0,5 люкс (час зчитування 120 мс)

    • 0B00100011 (0x23) Вимірювання з роздільною здатністю 4 люкси (час зчитування 16 мс)

    • 0B00100000 (0x20) Вимірювання з роздільною здатністю 1 люкси (час зчитування 120 мс)

    • 0B00100001 (0x21) Вимірювання з роздільною здатністю 0,5 люкси (час зчитування 120 мс)

    Регулювання зміни оптичного вікна
    5>

    • 0B011MT [0,1,2,3,4] Молодший біт регістра MTREG (Measurement Time REGister).

    • 0B01000MT [5,6,7] Старший біт регістра MTREG.

    Прочитайте BH1750 від Arduino

    Для вимірювання навколишнього освітлення за допомогою BH1750 від Arduino використовується бібліотека Провід який керує зв'язками з Шина I2C. Процес є звичайним для цього типу комунікацій, спочатку вони активуються (один раз у програмі) за допомогою Wire.begin(), зв’язок із BH1750 починається з Wire.beginTransmission() і ваша адреса I2C (0x5C або 0x23 залежно від того, високий чи низький ADDR відповідно), він налаштовується шляхом надсилання відповідного коду з Wire.write() і автобус випускається с Wire.endTransmission()

    Якщо використовується один із режимів безперервного читання, Wire.beginTransmission() використовується для отримання даних з адресою I2C відповідно до доступу до BH1750, вам буде запропоновано ввести два байти (роздільна здатність 16 біт) з Wire.requestFrom() що читаються, використовуючи Wire.read()і завантажуються в ціле число без знака, повертаючи перший байт на 8 біт. Автобус згодом звільнено с Wire.endTransmission(). Кінцевий результат отримується шляхом ділення повернутого значення на коефіцієнт точності (1,2, якщо оптичне вікно не змінено)

    Якщо використовується режим індивідуальних зчитувань, BH1750 переходить в сплячий режим.Для повернення в активний режим можна надіслати конфігурацію (той самий режим зчитування або новий) або код увімкнення живлення (0x01). Код вимкнення (1750x0) можна використовувати для примусового переходу BH00 у режим сну.

    Важливо дотримуватися часу зчитування датчика, який залежить від роздільної здатності. Якщо очікування не є критичним, його можна об’єднати в значення для всіх випадків, яке може бути трохи більшим за очікуваний максимум, щоб забезпечити завершення читання.

    Щоб зробити написання коду для BH1750 більш комфортним у Arduino, найбільш відповідні коди операцій можна знайти в наступному документі заголовка.

    Наступний приклад коду показує найпоширеніший режим зчитування в датчику освітленості I2C BH1750. Роздільна здатність 1 люкс, режим зчитування безперервний. У прикладі показано використання послідовної консолі Arduino, кожен результат, отриманий на основі виміряного значення.

    Як я вже сказав вище, режими роздільної здатності 1 люкс і 4 люкс використовують 16 біт даних, щоб виразити вимірювання як ціле число. З іншого боку, у режимі 0,5 люкс останній біт представляє десяткову частину, тобто значення, яке вносить вклад у загальне вимірювання, зсувається на двійку вправо. У режимі 1 люкс або 4 люкс останній біт (ЛСБ) коштує 20, передостанній 21, наступні 22…в режимі 0,5 люкс останній біт (ЛСБ) коштує 2-1, передостанній 20, наступні 21...

    Згідно з цією структурою даних і з огляду на те, що необхідно виконати два зчитування I2C байта, щоб отримати 16-бітне значення, вам потрібно завантажити старші біти байта, перші для читання, і повернути їх на 8 біт вліво в режимі роздільної здатності 1 люкс і в режимі роздільної здатності 4 люкс, і лише 7 біт у 0,5 люкс. Щоб уніфікувати спосіб читання в режимі 0,5 люкс, ви можете завантажити старший байт у ціле число без знаку, повернути 8 біт вліво, завантажити молодший байт і повернути все ціле число без знаку на 1 біт вліво. вправо, зберігаючи значення десяткової частини, яка вказує на LSB (молодший значущий біт) щоб застосувати його пізніше.

    Логічно, що для режимів 1 люкс або 4 люкс необхідно використовувати цілі числа без знаку (unsigned int) для чого Arduino не резервуйте MSB (старший біт) для знака та мати можливість безпосередньо оперувати справжнім значенням вимірювання, а не від’ємним числом. в Arduino Duet не обов’язково, оскільки цілі числа використовують 32 біти, але ця сама програма також працюватиме, якщо її також використовувати unsigned int.

    Наступний код показує, як буде використовуватися режим 0,5 люкс

    Завантажте документи для прикладів вимірювання навколишнього освітлення за допомогою датчика BH1750 і Arduino.

    Дати коментар

    Можливо, ви пропустили