Датчик интенсивности света на ардуино

Измерение интенсивности света с помощью фоторезистора и Arduino

В настоящее время все больше людей интересуются технологиями умного дома, в которой домашние устройства включаются и выключаются автоматически. На нашем сайте подобные проекты можно найти по тэгу автоматизация дома.

В этой статье мы рассмотрим проект, который будет управлять светом в доме – когда на улице темно он будет включать свет, а когда на улице светло – он будет выключать свет. Для измерения интенсивности света на улице необходим какой-нибудь датчик освещенности – в этом проекте его роль будет выполнять фоторезистор, поэтому в данном проекте мы рассмотрим подключение фоторезистора к плате Arduino и управление с его помощью светом в доме.

Аналогичный проект на основе микроконтроллера AVR мы уже рассматривали на нашем сайте – автоматический свет на лестнице.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Фоторезистор (LDR — Light Dependent Resistor) (купить на AliExpress).
  3. Резистор 100 кОм (купить на AliExpress).
  4. Резистор 330 Ом (купить на AliExpress).
  5. Светодиод (купить на AliExpress).
  6. Модуль реле на 5 В.
  7. Электрическая лампочка (Bulb/CFL).
  8. Соединительные провода.
  9. Макетная плата.

Что такое фоторезистор

Фоторезистор – это резистор, сопротивление которого зависит от количества падающего на него света. Фоторезисторы изготавливаются из полупроводниковых материалов, благодаря этому они и приобретают чувствительные к свету свойства. Наиболее популярный материал для изготовления фоторезисторов – это сульфид кадмия. Фоторезисторы работают по так называемому принципу «фотопроводимости», то есть когда свет начинает падать на фоторезистор его проводимость увеличивается, соответственно, его сопротивление уменьшается. А когда количество света, падающего на фоторезистор, уменьшается, его сопротивление увеличивается.

Все проекты на нашем сайте, использующие фоторезистор, вы можете посмотреть по этой ссылке.

Работа схемы

Схема подключения фоторезистора к плате Arduino представлена на следующем рисунке.

Как видно из схемы, мы использовали делитель напряжения, состоящий из фоторезистора и резистора на 100 кОм. Выход делителя напряжения подключается к аналоговому контакту A0 платы Arduino, который считывает это значение напряжения и преобразует его в цифровое значение. То есть если интенсивность света увеличивается, то сопротивление фоторезистора уменьшается, следовательно, напряжение на выходе делителя напряжения увеличивается. И, наоборот, интенсивность света ↓ — сопротивление фоторезистора↑ — напряжение на аналоговом контакте↓ — свет включается.

В коде программы для Arduino мы смотрим, если значение на выходе АЦП контакта A0 упало ниже 700, мы считаем что это темно и поэтому включаем свет. Если же значение больше 700, то мы считаем это светло и поэтому выключаем свет.

Дальнейшим усложнением представленной схемы является использование лампочки вместо светодиода, в этом случае для управления цепью лампочки нам уже понадобится реле. Доработанная таким образом схема представлена на следующем рисунке.

И собранная конструкция нашего проекта в этом случае будет выглядеть следующим образом:

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же рассмотрим его наиболее важные фрагменты.

Сначала мы инициализируем контакты для подключения реле, светодиода и фоторезистора.

Источник

Подключение цифрового люксметра (датчика освещенности) BH1750 к Arduino

Для измерения освещенности отлично подходят модули Gy-30 и Gy-302 на базе сенсора BH1750. Сенсор предназначен для измерения фонового освещения, имеет высокую чувствительность, а спектр чувствительности совпадает с кривой чувствительности человеческого глаза. Подключается BH1750 к Arduino по распространенному I2C интерфейсу. Внутренняя логика BH1750 избавляет от необходимости каких-либо сложных вычислений, поскольку он напрямую выводит значимые цифровые данные в люксах (лк). С помощью BH1750 можно изготовить самодельный люксметр на Ардуино.

Установка библиотеки BH1750

Библиотеку можно установить из самой среды следующим образом:

  1. Скачиваем библиотеку BH1750 с github;
  2. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Добавить .ZIP библиотеку…
  3. Выбираем .ZIP архив и кликаем Open/Открыть.
  4. Библиотека установлена.

Подключение BH1750 к Arduino

Модуль модуль GY-302 оборудован пяти-пиновым разъемом стандарта 2.54мм:

  • VCC: Питание «+»
  • GND: Земля «-«
  • SCL: Линия тактирования (Serial CLock)
  • SDA: Линия данных (Serial Data)
  • ADDR: Выбор адреса

Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся:

Arduino Mega Arduino Uno/Nano/Pro Mini BH1750 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V VCC Красный
20 (SDA) A4 SDA Синий
21 (SCL) A5 SCL Зелёный
3.3V 3.3V ADDR Жёлтый

Схема подключения BH1750 к Arduino по I2C

На следующем рисунке показана схема подключения датчика внешней освещенности BH1750 к Arduino UNO. Вывод ADD можно оставить «висящим»:

но вы можете подключить его к 3.3 В. Это переведет вывод ADD в высокий логический уровень, и адрес ведомого I2C датчика внешней освещенности BH1750 станет 0x5C. Это важно в программировании. Если вывод ADD переведен в низкое логическое состояние путем подключения к земле, адрес ведомого устройства I2C датчика внешней освещенности BH1750 будет 0x23. Таким образом, два датчика внешней освещенности BH1750 могут быть подключены к одной шине I2C, где один вывод ADD имеет низкое логическое состояние, а другой вывод ADD высокое.

Пример скетча

В скетче мы каждые 1000 мсек считываем с датчика BH1750 показания освещённости в люксах и выводим эти данные в последовательный порт.

Результат

Открыть монитор последовательного порта можно сочетанием клавиш Ctrl+Shift+M или через меню Инструменты. В мониторе последовательного порта побегут значения освещённости с нашего датчика BH1750.

Сравнение BH1750 и TSL2561

Спектр видимого света колеблется от 380 нм (фиолетовый) до 780 нм (красный) (в вакууме). Короче говоря, BH1750 просто измеряет это. TSL2561, помимо видимого спектра, также измеряет инфракрасное излучение. Он имеет два диода, один для видимого, а второй для инфракрасного. На мой взгляд, BH1750 соответствует большинству требований, тогда как TSL2561 предлагает более широкий спектр, большую чувствительность и большую точность.

Для сравнения, оба датчика были размещены параллельно в макете, один рядом с другим. Таким образом, можно получить практически одинаковое излучение на оба датчика.

Более подробно о том, как работать с TSL2561 в Ардуино, можете найти в отдельной статье Подключение цифрового датчика освещенности TSL2561 к Arduino.

Схема подключения TSL2561 и BH1750 к Arduino по I2C

На следующем рисунке показана схема подключения датчиков внешней освещенности TSL2561 и BH1750 к Arduino UNO.

Пример скетча

Результат

По результатам TSL2561 и BH1750 дают практически идентичные показатели в одинаковых условиях. Это говорит о том, что сами датчики идут откалиброванными с завода.

Источник

Подключение датчика освещенности BH1750 к Arduino

Автор: Сергей · Опубликовано 19.02.2022 · Обновлено 16.02.2022

В этой статье расскажу о цифровом датчике освещенности BH1750 (GY-30), с помощью которого можно измерять интенсивность света сразу в люксах.

Технические параметры:

► Функция спящего режима: есть;
► Фильтрация световых шумов: 50/60 Гц;
► Рабочее напряжение питания: 3.3 — 5 В;
► Ток потребления: 120 мкА;
► Ток потребления в спящем режиме: 0.01 мкА;
► Чувствительность: 65536 градаций;
► Точность в режиме высокого разрешения: 1 Лк;
► Точность в режиме низкого разрешения: 4 Лк;
► Период измерения в режиме высокого разрешения: 120 мс;
► Период измерения в режиме низкого разрешения: 16 мс;
► Встроенный АЦП;
► Шина данных: I2C;
► Габариты: 18 х 14 х 2 мм;
► Вес: 5 грамм.

Общие сведенья

Основная микросхема модуля GY-30 — это датчик H1750FVI (производится компанией ROHM semiconductor) со встроенным 16-разрядным аналого-цифровой преобразователем, который может выдавать цифровой сигнал сразу в люксах в отличие от фотодиодов и других датчиков. Связь с микроконтроллером осуществляется с помощью интерфейса I2C, по умолчанию адрес устройства 0x23, но его можно изменить на 0x5С, для этого необходимо вывод AD0 подтянуть к питанию.

Датчик BH1750 способен измерять освещенность в двух режимах: непрерывном и однократном. В непрерывном режиме датчик непрерывно измеряет интенсивность света, а во втором режиме измерение осуществляется один раз и датчик выключается. Так же, можно выбрать чувствительность измерение для обоих режимов. Самое низкое разрешение 4 люкса, измеряется примерно за 16 миллисекунд, далее 1 люкса измеряется за 120 миллисекунд, а самое высокое разрешение 0.5 люкса измеряется за 120 миллисекунд.

Назначение контактов:
GND, VCC — Питание модуля 3.3 … 5 В;
AD0 — Выбор адреса модуля на шине I2C, выход притянут к массе и адрес модуля 0x23, если на AD0 подать логическую единицу, адрес будет 0X5C.
SDA, SCL — Выходы интерфейса I2C

Подключение датчика освещенности H1750FVI к Arduino

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Датчик освещенности BH1750FVI, GY-30 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Описание:
В примере покажу, как подключить датчик освещенности BH1750FVI к Arduino UNO R3, так же покажу пример программы и потестируем датчик в различных условиях, все показания будем передавать в мониторинг порта.

Подключение:
Первым делом, необходимо подключить датчик BH1750FVI к Arduino UNO. Так как модуль работает по I2C, нам понадобится всего четыре провода, вывод AD0 не используем. Сначала подключаем интерфейс I2C, выводы A4 и A5 (Arduino UNO) подключаем к выводам SDA и SCL (BH1750FVI), далее подключаем питание питание GND к GND и VIN к 5V, схема собрана, теперь надо подготовить программную часть.

Установка библиотеки:
Существует много библиотек, для работы датчиком BH1750FVI, но проще всего использовать библиотеку BH1750, скачать ее можно через менеджера библиотек. Переходим в Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «BH1750», найдите библиотеку «BH1750 by Christopher Laws» жмем установить.

Программа:
Схема и библиотека установлена, можно приступить к программой части. Открываем среду разработки Arduino IDE и копируем скетч ниже и загружаем его в Arduino UNO

Источник

Adblock
detector