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

Датчик освещенности и приближения APDS-9930 (Trema-модуль v2.0)

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

Trema-модуль датчик освещённости и приближения APDS-9930 - это цифровой модуль на базе чипа APDS-9933, подключаемый по шине I2C (адрес 0x39), позволяющий получить текущие значения освещённости (лк) и приближения к препятствию. Еще одним применением данного модуля является определение пульсаций источников света.

Видео:

Редактируется

Характеристики:

  • Напряжение питания модуля: 3,3 или 5 В постоянного тока (поддерживаются оба уровня).
  • Потребляемый ток: настраивается до 100 мА во время измерений приближения.
  • Ток потребляемый ИК-светодиодом: 100 / 50 / 25 / 12.5 мА (устанавливается программно).
  • Ток потребляемый модулем (без учёта ИК-светодиода): до 3 мА.
  • Измеряемый диапазон освещённости: от 0 до 8191 лк.
  • Рабочая частота шины I2C: до 400 кГц.
  • Адрес модуля на шине I2C: 0x39.
  • Уровень логической «1» на шине I2C: до 3,3 В.
  • Рабочая температура: -30 … +85 °C
  • Габариты: 30x30 мм.

Все модули линейки "Trema" выполнены в одном формате

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

Модуль подключается к аппаратной или программной шине I2C Arduino. Логические уровни шины I2C не должны превышать напряжение питания.

Модуль удобно подключать 3 способами, в зависимости от ситуации:

Способ - 1: Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.

Способ - 2: Используя Trema Set Shield

Модуль можно подключить к любому из I2C входов Trema Set Shield.

Способ - 3: Используя проводной шлейф и Shield

Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

Способ - 4: Подключение к программной шине I2C

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

Питание:

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

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

Trema датчик освещённости и приближения APDS-9930 построен на базе одноимённого датчика APDS-9930, в состав которого входят: ИК-светодиод с программируемым драйвером, два фотодиода для определения общей освещённости (Ch0) и освещённости в ИК-диапазоне (Ch1), усилители с программируемым коэффициентом усиления, МК, АЛУ, АЦП, ОЗУ, контроллер шины I2C с адресом ведомого 0x39 и множество дополнительных блоков. Результаты освещённости в Lux выводятся с использованием эмпирической формулы для аппроксимации реакции человеческого глаза.

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

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

Примеры:

Вывод освещённости в люксах:

#include <Wire.h>                           //  Подключаем библиотеку Wire для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_APDS9930.
#include <iarduino_APDS9930.h>              //  Подключаем библиотеку  для работы с датчиком APDS-9930.
iarduino_APDS9930 apds;                     //  Определяем объект apds для работы с датчиком APDS-9930.
                                            //  Если у датчика не стандартный адрес, то его нужно указать: iarduino_APDS9930 apds(0xFF);
void setup(){                               //
    Serial.begin(9600);                     //  Инициируем передачу данных в монитор на скорости 9600 бит/сек.
    apds.begin(&Wire);                      //  Инициируем работу датчика, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
}                                           //  Функция возвращает значение true/false по которому можно судить об успехе инициализации.
                                            //
void loop(){                                //
    Serial.print( "Light=" );               //  Выводим текст.
    Serial.print( apds.getLight() );        //  Выводим освещённость.
    Serial.print( " lx. \r\n" );            //  Выводим единицу измерения, а так же символы конца и перевода строки.
    delay(100);                             //
}                                           //

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

#include <Wire.h>                           //  Подключаем библиотеку Wire для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_APDS9930.
#include <iarduino_APDS9930.h>              //  Подключаем библиотеку  для работы с датчиком APDS-9930.
iarduino_APDS9930 apds;                     //  Определяем объект apds для работы с датчиком APDS-9930.
                                            //  Если у датчика не стандартный адрес, то его нужно указать: iarduino_APDS9930 apds(0xFF);
void setup(){                               //
    Serial.begin(9600);                     //  Инициируем передачу данных в монитор на скорости 9600 бит/сек.
    apds.begin(&Wire);                      //  Инициируем работу датчика, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
}                                           //  Функция возвращает значение true/false по которому можно судить об успехе инициализации.
                                            //
void loop(){                                //
    Serial.print( "Pulsation=" );           //  Выводим текст.
    Serial.print( apds.getPulsation() );    //  Выводим коэффициент пульсаций.
    Serial.print( " lx. \r\n" );            //  Выводим единицу измерения, а так же символы конца и перевода строки.
    delay(100);                             //
}                                           //

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

#include <Wire.h>                           //  Подключаем библиотеку Wire для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_APDS9930.
#include <iarduino_APDS9930.h>              //  Подключаем библиотеку  для работы с датчиком APDS-9930.
iarduino_APDS9930 apds;                     //  Определяем объект apds для работы с датчиком APDS-9930.
                                            //  Если у датчика не стандартный адрес, то его нужно указать: iarduino_APDS9930 apds(0xFF);
void setup(){                               //
    Serial.begin(9600);                     //  Инициируем передачу данных в монитор на скорости 9600 бит/сек.
    apds.begin(&Wire);                      //  Инициируем работу датчика, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
}                                           //  Функция возвращает значение true/false по которому можно судить об успехе инициализации.
                                            //
void loop(){                                //
    Serial.print( "Proximity=" );           //  Выводим текст.
    Serial.println( apds.getProximity() );  //  Выводим близость препятствий от 0 (нет препятствий), до 1023 (минимальное расстояние до препятствия).
    delay(100);                             //
}                                           //

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

В данном разделе описаны функции библиотеки iarduino_APDS9930 для работы с датчиком освещённости и приближения APDS-9930.

Библиотека iarduino_APDS9930 может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано ниже в разделе «Подключение библиотеки», а так же на странице Wiki - расширенные возможности библиотек iarduino для шины I2C.

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

  • Если используется аппаратная шина I2C:
#include <Wire.h>                  // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_APDS9930.h
                                   //
#include <iarduino_APDS9930.h>     // Подключаем библиотеку для работы с модулем.
iarduino_APDS9930 apds;            // Создаём объект apds, для работы с функциями библиотеки iarduino_APDS9930.
                                   //
void setup(){                      //
     ...                           //
     apds.begin(&Wire);            // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
     ...                           // Доступны объекты: &Wire, &Wire1, &Wire2...
}                                  //
  • Если используется программная шина I2C:
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_APDS9930.h
SoftTwoWire sWire(3,4);            // Создаём объект программной шины I2C указав выводы которым будет назначена роль линий: SDA, SCL.
                                   //
#include <iarduino_APDS9930.h>     // Подключаем библиотеку для работы с модулем.
iarduino_APDS9930 apds;            // Создаём объект apds, для работы с функциями библиотеки iarduino_APDS9930.
                                   //
void setup(){                      //
     ...                           //
     apds.begin(&sWire);           // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
     ...                           //
}                                  //
  • В обоих примерах сначала подключается библиотека для работы с шиной I2C. Для аппаратной шины библиотека Wire.h (предустановлена в Arduino IDE), а для программной шины библиотека iarduino_I2C_Software.h, с созданием объекта которому указываются выбранные вами выводы шины, в примере выводы (3-SDA, 4-SCL).
  • Далее подключается библиотека и создаётся объект для работы с модулем.
  • В коде Setup(), при инициализации работы с модулем указывается ссылка на объект работы с выбранной шиной I2C begin(&ШИНА). Остальные строки кода одинаковы для любой шины I2C.

Функция begin();

  • Назначение: Инициализация работы с датчиком.
  • Синтаксис: begin();
  • Параметры:
    • &ШИНА - Ссылка на объект для работы с шиной I2C на которой находится модуль.
      • Для аппаратной шины: &Wire, &Wire1, &Wire2..., если подключена библиотека Wire.h
      • Для программной шины: ссылка на объект библиотеки iarduino_I2C_Software.h.
      • Параметр является не обязательным, по умолчанию используется ссылка &Wire.
  • Возвращаемые значения: bool - результат инициализации (true или false).
  • Примечание: Функцию достаточно вызвать один раз в коде setup().
  • Пример:
apds.begin();                               //  Инициируем работу датчика без проверки.
if(apds.begin()){Serial.println("OK!" );}   //  Инициируем работу датчика и выводим сообщение «OK!» при успехе.
else            {Serial.println("ERR!");}   //  Если инициализация провалилась, то выводим сообщение «ERR!».

Функция reset();

  • Назначение: Перезагрузка модуля.
  • Синтаксис: reset();
  • Параметры: Нет
  • Возвращаемые значения: bool - результат перезагрузки (true или false).
  • Примечание: Результат перезагрузки идентичен результату инициализации.
  • Пример:
apds.reset();                               //  Перезагружаем датчик без проверки.
if(apds.reset()){Serial.println("OK!" );}   //  Перезагружаем датчик и выводим сообщение «OK!» при успехе.
else            {Serial.println("ERR!");}   //  Если перезагрузка не выполнена, то выводим сообщение «ERR!».

Функция getLight();

  • Назначение: Чтение освещённости в люксах.
  • Синтаксис: getLight();
  • Параметры: Нет.
  • Возвращаемые значения: uint16_t - уровень освещённости от 0 лк до 8191 лк.
  • Примечание: Чем выше коэффициент пульсаций источника света, тем выше будет разброс значений возвращаемых данной функцией.
  • Пример:
uint16_t i;                                 //  Объявляем переменную i.
i = apds.getLight();                        //  Читаем освещённость в переменную i.

Функция getPulsation();

  • Назначение: Чтение коэффициента пульсаций источника света в %.
  • Синтаксис: getPulsation();
  • Параметры: Нет.
  • Возвращаемые значения: uint8_t - коэффициент пульсаций от 0% до 100%.
  • Примечание: Выполнение функции занимает около 100 мс.
  • Пример:
uint8_t i;                                  //  Объявляем переменную i.
apds.getPulsation();                        //  Читаем коэффициент пульсаций в переменную i.

Функция getProximity();

  • Назначение: Чтение близости к препятствию.
  • Синтаксис: getProximity();
  • Параметры: Нет.
  • Возвращаемые значения: uint16_t - уровень близости к препятствию, от 0 (нет препятствий), до 1023 (минимальное расстояние до препятствия).
  • Примечание: Уровень близости нелинеен по отношению к расстоянию и зависит от цвета препятствия.
  • Пример:
uint16_t i;                                 //  Объявляем переменную i.
apds.getProximity();                        //  Читаем уровень близости препятствий в переменную i.

Функция setCurrentDiode();

  • Назначение: Функция задаёт ток протекающий через светодиод датчика. Светодиод используется в импульсном режиме для определения близости препятствий.
  • Синтаксис: setCurrentDiode( [ ТОК СВЕТОДИОДА ] );
  • Параметры: ТОК СВЕТОДИОДА - задаётся одной из констант:
    • APDS9930_DIODE_100 - установить ток через светодиод в 100 мА.
    • APDS9930_DIODE_50 - установить ток через светодиод в 50 мА
    • APDS9930_DIODE_25 - установить ток через светодиод в 25 мА
    • APDS9930_DIODE_12 - установить ток через светодиод в 12,5 мА
  • Возвращаемые значения: bool - результат применения новых настроек (true или false).
  • Примечание:
    • По умолчанию задан ток в 25 мА.
  • Пример:
apds.setCurrentDiode(APDS9930_DIODE_50);    //  Установить ток через светодиод в 50 мА.

Применение:

  • Получение данных для метеостанций.
  • Проверка осветительных приборов на наличие пульсаций.
  • Проверка уровня освещённости в помещениях.
  • Используя чтение близости, модуль можно превратить в:
    • Бесконтактный тахометр.
    • Счетчик объектов прошедших по конвейеру.
    • Датчик препятствий.
    • Датчик линии.

Ссылки:




Обсуждение

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