Точный измеритель уровня освещенности — люксметр.

TinyOneWireNet

В статье представляю новое устройство с сетевым интерфейсом TinyOneWireNet - точный люксметр на базе микросхемы BH1750.

Предыдущая статья     Навигация по рубрике     Следующая статья

Общее описание.

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

  • Люксметр рассчитан на измерение части спектра видимого диапазона.
  • Уровень освещенности 1…65535 люкс.
  • Обеспечивается подавление шума частотой 50/60 Гц.
  • Время измерения – 200 мс.

Принципиальная схема и конструкция датчика.

Микросхема BH1750 имеет интерфейс I2C с уровнями логических сигналов 3,3 В. Поэтому главная проблема при разработке устройства – это согласование уровней сигналов напряжением 3,3 В с 5-вольтовой логикой PIC-контроллера. Появление 5 В на выводах микросхемы BH1750 недопустимо.

Я подошел к решению этого вопроса строго. При любом варианте программного управление напряжение 5 В на BH1750 попасть не должно.

Схема люксметра

Диоды VD1 и VD2 не пропускают 5 В от PIC-контроллера. Вывод RA3 может работать только как вход. От него беды ждать не приходится. Перемычку U1 необходимо замыкать при программировании PIC-контроллера непосредственно в устройстве.

Для проверки собрал макет.

Люксметр

Но для следующего устройства с 3-вольтовым интерфейсом I2C разработал печатную плату и корпус.

Люксметр

Макет люксметра

Макет люксметра

С небольшими доработками в эту плату можно установить и BH1750. Возможно, будет сделана универсальная плата для I2C устройств с питанием 3,3 В.

Работа с люксметром в системе Ардуино.

Подключил датчик к выводу 2 платы Ардуино, задал адрес.

окно типа устройства

Для работы с люксметром в библиотеке TinyOneWireNet.h есть 3 традиционные функции.

uint8_t startMeasurement_LuxMeter(uint8_t adr); // запуск измерения люксметра

uint8_t readCode_LuxMeter(uint8_t adr, uint16_t * code); // чтение результата измерений люксметра (код)

uint8_t readLux_LuxMeter(uint8_t adr, uint16_t * lux); // чтение результата измерений люксметра (люкс)

Последовательность операций также привычная.

  • Запустить измерение.
  • Выдержать паузу не менее 200 мс.
  • Считать результат.

Скетч для вывода результатов работы датчика через монитор последовательного порта похож на аналогичные программы для датчика температуры DS18B20 и датчика освещенности на фоторезисторе.

// измерение освещенности (люксметр)
#include <TinyOneWireNet.h>

#define NET_PIN 2 // вывод данных сети
#define BETWEEN_COM_TIME 2 // пауза между командами (мс)

TinyOneWireNet sens(NET_PIN);
uint16_t lx;

void setup() {
  Serial.begin(9600);
  sens.onLine(10);
}

void loop() {
  if( sens.startMeasurement_LuxMeter(47) == 0 ) {
    delay(1000);
    if( sens.readLux_LuxMeter(47, & lx) == 0 ) {
      Serial.print("Light= ");
      Serial.print(lx);
      Serial.println(" lx");
    }
    else Serial.println("Error");
  }
  else {
    Serial.println("Error");
    delay(1000);
  }
  delay(BETWEEN_COM_TIME);
}

Результаты измерений

Следующая статья об измерителе температуры и влажности воздуха с использованием сенсора AHT10.

Предыдущая статья     Навигация по рубрике     Следующая статья

0

Автор публикации

не в сети 1 день

Эдуард

280
Комментарии: 1936Публикации: 197Регистрация: 13-12-2015

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".