КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Датчик освещенности, люксметр, i2c (Metro-модуль)

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

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

К одной шине I2C можно подключить более 100 модулей.

Модуль можно использовать в любых проектах где требуется датчик освещённости, например, в метеостанциях, в проектах умных домов (для открывания жалюзи или штор, включения освещения и т.д.), для наведения солнечных батарей на источник света, для создания роботов, для контроля освещённости при работе с фоторезистами и т.д. Модуль можно использовать для определения наличия и близости препятствий, что можно использовать в качестве сигнализации, бесконтактной кнопки, и т.д.

Видео:

Спецификация:

  • Напряжение питания: 5 В (постоянного тока)
  • Потребляемый ток: до 70 мА (во время измерений расстояния).
  • Диапазон измерений освещённости: от 0 до 8191 лк.
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
  • Уровень логической 1 на выводах ADR: 3,3 В (толерантны к 5 В).
  • Рабочая температура: от -40 до +85 °С.
  • Габариты: 35,56 х 25,40 мм (1400 x 1000 mil).
  • Вес: 4 г.

Подключение:

У модуля имеются две колодки выводов: IN (вход) - штыревой разъем и OUT (выход) гнездовой разъем. Все модули подключаются друг к другу соединяя выход предыдущего модуля со входом следующего, образуя состав из модулей Metro в котором первым «вагоном» является плата управления Metro Leonardo или Metro ESP.

Модуль не поддерживает горячее подключение: Подключайте модуль только при отсутствии питания и данных на шине I2C. В противном случае потребуется отключить питание при уже подключённом модуле.

Подключение к управляющей плате Metro Leonardo:

К плате Metro Leonardo можно подключить только датчики освещённости или чередовать их с другими модулями Metro в любой последовательности.

Подключение к управляющей плате Metro ESP:

К плате Metro ESP можно подключить только датчики освещённости или чередовать их с другими модулями Metro в любой последовательности.

Подключение к другим управляющим платам:

Вместо платы управления Metro Leonardo или Metro ESP можно использовать платы Arduino или Piranha, у которых будут задействованы 2 вывода шины I2C (SCL и SDA), 2 вывода питания (5V и GND) и один вывод установки адреса ADR, по умолчанию используется вывод D12 (можно менять в скетче).

При использовании аппаратной шины I2C (выводы SDA и SCL указаны на плате) для работы с шиной нужно подключить библиотеку Wire, которая уже предустановлена в Arduino IDE. А при использовании программной шины I2C (вы сами выбираете любые выводы которым будет назначена роль SDA и SCL), потребуется дополнительно установить и подключить библиотеку iarduino_I2C_Software.h. О том как выбрать тип шины I2C читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.

Питание:

Входное напряжение питания 5 В постоянного тока, подаётся на выводы 5V и GND модуля.

Модуль сохраняет работоспособность при снижении напряжения питания до 3,3 В.

Подробнее о модуле:

Модуль Metro - Датчик освещённости построен на базе датчика APDS-9930, микроконтроллера STM32F030F4 и снабжен собственный стабилизатором напряжения.

Модуль считывает значение с датчика и позволяет:

  • Определить текущую освещённость в лк.
  • Определить событие - освещённость изменилась на заданное значение.
  • Задать значение при изменении освещённости на которое установится событие - освещённость изменилась
  • Определить уровень близости препятствия.
  • Определить коэффициент пульсаций источника света в процентах.

Специально для работы с модулями Metro нами разработана библиотека iarduino_Metro, одна библиотека для всех модулей линейки Metro. Библиотека сама определяет наличие и тип модулей на шине I2C, присваивает им адреса и создаёт массив объектов для работы с найденными модулями. Стоит отметить что пользователю даже не обязательно знать адреса присвоенные модулям, так как для обращения к любому модулю достаточно знать его номер по порядку от платы управления Metro Leonardo или Metro ESP.

    Количество элементов массива Metro совпадает с количеством найденных модулей:
  • Metro[0] - объект для управления первым модулем (ближайшим к управляющей плате);
  • Metro[1] - объект для управления вторым модулем (следующим после первого);
  • Metro[2] - объект для управления третьим модулем (и т.д. до последнего модуля).

Подробнее про установку библиотеки читайте в нашей инструкции.

Примеры:

Вывод показаний освещённости:

#include <Wire.h>                                // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                      // Подключаем библиотеку iarduino_Metro.
                                                 //
void setup(){                                    //
     iarduino_Metro_Start(&Wire);                // Определяем подключённые модули, указав ссылку на объект работы с шиной I2C (по умолчанию &Wire).
     Serial.begin(9600);                         // Инициируем связь с монитором последовательного порта на скорости 9600 бит/сек.
     while(!Serial){;}                           // Ждём готовность к работе аппаратной шины UART.
}                                                //
                                                 //
void loop(){                                     //
     Serial.print( "Освещённость "          );   //
     Serial.print( Metro[0].read( DSL_LUX ) );   // Выводим значение освещённости в лк.
     Serial.print( "лк.\r\n"                );   //
     delay(1000);                                // Ждём 1 секунду.
}                                                //

Данный пример демонстрирует вывод показаний освещённости в монитор последовательного порта.

Вывод освещённости при её изменении на заданное значение:

#include <Wire.h>                                // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                      // Подключаем библиотеку iarduino_Metro.
                                                 //
void setup(){                                    //
     iarduino_Metro_Start(&Wire);                // Определяем подключённые модули, указав ссылку на объект работы с шиной I2C (по умолчанию &Wire).
     Serial.begin(9600);                         // Инициируем связь с монитором последовательного порта на скорости 9600 бит/сек.
     while(!Serial){;}                           // Ждём готовность к работе аппаратной шины UART.
     Metro[0].set(100);                          // Задаём диапазон изменения освещённости в лк.
}                                                //
                                                 //
void loop(){                                     //
     if( Metro[0].read( DSL_CHANGED) ){          // Если освещённость изменилась на 100 лк, то ...
         Serial.print( Metro[0].read(DSL_LUX) ); // Выводим освещённость.
         Serial.print( "лк.\r\n"              ); //
     }                                           //
}                                                //

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

Вывод уровня близости препятствия:

#include <Wire.h>                                // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                      // Подключаем библиотеку iarduino_Metro.
                                                 //
void setup(){                                    //
     iarduino_Metro_Start(&Wire);                // Определяем подключённые модули, указав ссылку на объект работы с шиной I2C (по умолчанию &Wire).
     Serial.begin(9600);                         // Инициируем связь с монитором последовательного порта на скорости 9600 бит/сек.
     while(!Serial){;}                           // Ждём готовность к работе аппаратной шины UART.
}                                                //
                                                 //
void loop(){                                     //
     Serial.print( "Уровень близости "        ); //
     Serial.print( Metro[0].read(DSL_DISTANCE)); // Выводим уровень близости препятствия.
     Serial.print( ".\r\n"                    ); //
     delay(1000);                                // Ждём 1 секунду.
}                                                //

Данный пример демонстрирует вывод уровня близости препятствий (от 0 до 10) в монитор последовательного порта. Чем ближе препятствие, тем выше значение.

Вывод коэффициента пульсаций источника света:

#include <Wire.h>                                // Подключаем библиотеку Wire.
#include <iarduino_Metro.h>                      // Подключаем библиотеку iarduino_Metro.
                                                 //
void setup(){                                    //
     iarduino_Metro_Start(&Wire);                // Определяем подключённые модули, указав ссылку на объект работы с шиной I2C (по умолчанию &Wire).
     Serial.begin(9600);                         // Инициируем связь с монитором последовательного порта на скорости 9600 бит/сек.
     while(!Serial){;}                           // Ждём готовность к работе аппаратной шины UART.
}                                                //
                                                 //
void loop(){                                     //
   Serial.print( "Коэффициент пульсаций "     ); //
   Serial.print(Metro[0].read(DSL_COEFFICIENT)); // Выводим коэффициент пульсаций источника света.
   Serial.print( "%.\r\n"                     ); //
   delay(1000);                                  // Ждём 1 секунду.
}                                                //

Данный пример демонстрирует вывод коэффициента пульсаций источника света (0...100%) в монитор последовательного порта. Это значение показывает на сколько сильно мерцает свет.

Описание функций библиотеки:

В данном разделе описаны функции библиотеки iarduino_Metro для работы с датчиком освещённости, при работе с другими модулями те же функции могут иметь другое назначение.

Подключение библиотеки:

  • Если используется аппаратная шина I2C:
    При подключении к платам Metro Leonardo, Metro ESP, или шине I2C других плат.
#include <Wire.h>                  // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_Metro.
#include <iarduino_Metro.h>        // Подключаем библиотеку для работы с модулями Metro.
  • Если используется программная шина I2C:
    При подключении к платам у которых нет шины I2C или нет возможности её использовать.
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_Metro.
SoftTwoWire sWire(3,4);            // Создаём объект для работы с шиной I2C, указав выводы которым будет назначена роль линий: SDA, SCL.
#include <iarduino_Metro.h>        // Подключаем библиотеку для работы с модулями Metro.

После подключения библиотеки iarduino_Metro создавать объекты не требуется, вместо этого необходимо однократно вызвать функцию iarduino_Metro_Start(&ШИНА,ADR); в коде setup. Эта функция принимает два необязательных параметра: ссылку на объект для работы с шиной I2C на которой находятся модули Metro (по умолчанию &Wire) и номер вывода к которому подключается вход ADR модуля Metro (по умолчанию вывод D12).

Функция обнаружит все модули Metro на указанной шине I2C, назначит им адреса и создаст массив объектов Metro, количество элементов которого будет совпадать с количеством найденных модулей Metro.

Определение подключённых модулей Metro:

  • Если используется аппаратная шина I2C:
    При подключении к платам Metro Leonardo, Metro ESP, или шине I2C других плат.
iarduino_Metro_Start();           // Найти все модули используя параметры по умолчанию (&Wire, 12).
iarduino_Metro_Start(&Wire);      // Найти все модули на основной аппаратной шине I2C (&Wire), используя вывод ADR по умолчанию (12).
iarduino_Metro_Start(&Wire,12);   // Найти все модули на основной аппаратной шине I2C (&Wire), используя 12 вывод для подключения к входу ADR.
iarduino_Metro_Start(12);         // Найти все модули на шине I2C по умолчанию (&Wire), используя 12 вывод для подключения к входу ADR.
iarduino_Metro_Start(&Wire1,10);  // Найти все модули на первой после основной аппаратной шине I2C (&Wire1), используя 10 вывод для подключения к входу ADR. Не подходит для Metro Leonardo и Metro ESP.
iarduino_Metro_Start(&Wire2,11);  // Найти все модули на второй после основной аппаратной шине I2C (&Wire2), используя 11 вывод для подключения к входу ADR. Не подходит для Metro Leonardo и Metro ESP.
i = iarduino_Metro_Start();       // Независимо от параметров функция возвращает количество найденных модулей Metro.
  • Если используется программная шина I2C:
    При подключении к платам у которых нет шины I2C или нет возможности её использовать.
iarduino_Metro_Start(&sWire);     // Найти все модули на программной шине I2C, используя вывод ADR по умолчанию (12).
iarduino_Metro_Start(&sWire,12);  // Найти все модули на программной шине I2C, используя 12 вывод для подключения к входу ADR.
i = iarduino_Metro_Start(&sWire); // Функция возвращает количество найденных модулей Metro.

После определения подключенных модулей станет доступен массив Metro, каждый элемент которого является объектом подключенного модуля Metro и предназначен для управления им.

    Например, если к управляющей плате подключено 3 любых модуля Metro, то массив Metro будет содержать 3 элемента:
  • Metro[0] - объект для управления первым модулем (ближайшим к управляющей плате);
  • Metro[1] - объект для управления вторым модулем (следующим после первого);
  • Metro[2] - объект для управления третьим модулем (дальним от управляющей платы).

Сторонние модули ша шине I2C: На шине I2C могут присутствовать сторонние модули* (не принадлежащие линейке Metro) со своими библиотеками. Это не повлияет на корректность обнаружения модулей Metro, не приведёт к присвоению неуникального адреса модулю и не нарушит очерёдность следования элементов массива Metro.
* Кроме сторонних модулей с адресом 0x09.

Функция read();

  • Назначение: Чтение освещённости.
  • Синтаксис: Metro[ индекс ].read( [ПАРАМЕТР] );
  • Параметры:
    • DSL_LUX - Вернуть текущую освещённость в лк, от 0 до 8191.
    • DSL_CHANGED - Вернуть true если освещённость изменилась, иначе вернуть false.
    • DSL_DISTANCE - Вернуть уровень близости препятствия, от 0 до 10.
    • DSL_COEFFICIENT - Вернуть коэффициент пульсаций источника света, от 0 до 100%.
  • Возвращаемые значения: Зависят от параметра функции.
  • Примечание:
    • Считается что освещённость изменилась если с момента её последнего изменения она увеличилась или уменьшилась на значение указанное функцией set (по умолчанию 1°С).
    • Препятствие определяется на расстоянии до 10 см (±2 см). Чем ближе препятствие, тем выше возвращаемое значение.
  • Пример:
Serial.print  ( "Освещённость: "       );
Serial.print  ( Metro[0].read(DSL_LUX) ); // Выводим текущую освещённость.
Serial.println( " лк."                 );

Функция set();

  • Назначение: Функция задаёт значение определяющее факт изменения освещённости.
  • Синтаксис: Metro[ индекс ].set( ОСВЕЩЁННОСТЬ );
  • Параметры:
    • ОСВЕЩЁННОСТЬ - Целое количество лк (от 1 до 255) на которое должна увеличиться или уменьшиться текущая освещённость, чтоб функция read() с параметром DSL_CHANGED вернула true.
  • Возвращаемые значения: Нет.
  • Примечание:
    • Если функцию set() не вызывать, то будет использовано значение по умолчанию: 100 лк.
  • Пример:
    Metro[0].set(50); // Задаём диапазон освещённости.
if( Metro[0].read(DSL_CHANGED) ){ Serial.println("Освещённость изменилась на 50 лк"); }

Переменная address:

  • Тип: uint8_t.
  • Данные: Адрес модуля на шине I2C.
  • Примечание: Адрес формируется и присваивается во время определения модулей функцией iarduino_Metro_Start(); Не меняйте адрес, так как он используется библиотекой.
  • Пример чтения адреса модуля:
Serial.print  ( "Адрес модуля на шине I2C = " );
Serial.println( Metro[0].address              );

Переменная model:

  • Тип: uint8_t.
  • Данные: Идентификатор типа модуля.
  • Примечание: Тип модуля считывается во время определения модулей функцией iarduino_Metro_Start(); Не меняйте тип модуля, так как он используется библиотекой.
  • Пример определения типа модуля:
switch( Metro[0].model ){
    case MOD_KEY: Serial.println( "кнопка"                         ); break;
    case MOD_RGB: Serial.println( "светодиод"                      ); break;
    case MOD_RES: Serial.println( "потенциометр"                   ); break;
    case MOD_BUZ: Serial.println( "звукоизлучатель"                ); break;
    case MOD_DHT: Serial.println( "датчик влажности и температуры" ); break;
    case MOD_DSL: Serial.println( "датчик освещённости"            ); break;
    case MOD_8X8: Serial.println( "светодиодная матрица 8х8"       ); break;
    default:      Serial.println( "неизвестный модуль"             ); break;
}

Переменная version:

  • Тип: uint8_t.
  • Данные: Версия прошивки модуля.
  • Примечание: Версия прошивки считывается во время определения модулей функцией iarduino_Metro_Start(); Изменение значения переменной не изменит версию модуля и не повлияет на работу модуля, и библиотеки.
  • Пример чтения версии прошивки модуля:
Serial.print  ( "Версия прошивки модуля = " );
Serial.println( Metro[0].version            );

Переменная size:

  • Тип: uint8_t.
  • Данные: Объем памяти ОЗУ в байтах, используемый библиотекой для данного модуля.
  • Примечание: Библиотека создаёт массив объектов Metro с помощью функции iarduino_Metro_Start(); в коде setup (при старте скетча), значит и память ОЗУ для работы с модулями выделяется там же, а не во время компиляции скетча. Зная объем выделенной памяти можно определить объем свободной и рассчитать, какое количество модулей Metro ещё можно подключить. Изменение значения переменной не изменит объём выделенной памяти и не повлияет на работу модуля, и библиотеки.
  • Пример чтения объема памяти ОЗУ выделенного для работы с модулем:
Serial.print  ( "Для работы данного модуля выделено " );
Serial.print  ( Metro[0].size                         );
Serial.println( " байт памяти ОЗУ."                   );

Применение:

Модуль Metro - Датчик освещённости можно использовать в любых проектах где требуется люксметр, например, в метеостанциях, в проектах умных домов (для открывания жалюзи или штор, включения освещения и т.д.), для наведения солнечных батарей на источник света, для создания роботов, для контроля освещённости при работе с фоторезистами и т.д.

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями