STM Урок 90. Датчик освещённости VL6180X. Часть 1



 

Урок 90

 

Часть 1

 

Датчик освещённости VL6180X

 

Сегодня мы познакомимся с датчиком, который измеряет освещённость. Это датчик VL6180X производителя ST Microelectronics.

Наряду с измерением освещённости датчик очень прекрасно измеряет и расстояния до объекта. Прекрасно, потому что используется для этого в нём современная технология измерения расстояния ST FlightSense, согласно которой измеряется время пролёта световых импульсов от передатчика к приемнику, а не как раньше — с помощью измерения интенсивности отражённого света. Но как видно из названия урока, мы будем использовать данный датчик только для измерения освещённости, так как измерение расстояний на бытовом уровне мало кого интересует, да и работа с измерением расстояния в данном датчике реализована не очень просто. Также диапазон измеряемых расстояний простирается максимум до 20 сантиметров, поэтому я пока не знаю, где это можно применить. Поэтому я пока не стал заморачиваться с этим. Хотя есть пример на сайте ST Microelectronics, где это всё реализовано и работает отлично. Так что если у вас есть желание, то можете поизучать самостоятельно.

Теперь по поводу измерения освещённости.

Микросхема VL6180X для этих целей имеет встроенный датчик освещённости (Ambient Light Sensor или ALS). Данный датчик работает в спектре, соответствующем спектру дневного освещения, что позволяет использовать данный датчик для многих целей. У меня была задумка использовать его для измерения силы света бытовых ламп, которые мы приобретаем для освещения определённых комнат. Как рассчитать силу света, зная расстояние до источника света и освещённость, я думаю знают многие. Пусть это приблизительно, но все равно это позволит нам неплохо судить о качестве ламп. Мы измеряем показание освещённости лампы, записываем его, Затем измеряем то же самое, только через какой-то определённый период, например через год и сравниваем эти показания, насколько они изменились, что позволит нам определить, насколько лампа стала светить слабее, так как обычно все лампы этим грешат. Но только какие-то больше, а какие-то меньше. И нас уже не будет волновать цветовая температура свечения лампы, она как правило не меняется, хотя по-хорошему длину волны тоже нужно учитывать, так как датчик работает всё-таки в определённом спектре и отклонение будет. Но это не важно. Нам же нужно изменение показаний, а не сравнение силы свечения лампы с холодным катодом и с тёплым.

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

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

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

Управление и работа с датчиком осуществляется с помощью шины I2C. Также имеются два программируемых вывода GPIO, как правило один из которых используется для отслеживания определенных прерываний, а второй — для выбора чипа, так как если мы подключим несколько датчиков, а адреса у них будут одинаковые, то без этого раздельно ими управлять не получится.

Данный датчик у меня имеется в виде оценочной платы X-NUCLEO-6180XA1, которая, хоть и стоит недёшево, но она очень неплохо сконфигурирована. Помимо датчика на ней находится четырёхразрядный светодиодный индикатор, подключенный с помощью микросхемы-преобразователя STMPE1600 и управляемый по интерфейсу I2C, что позволяет нам сэкономить очень немало ножек, так как датчик также управляется по этой же шине. С помощью данного индикатора мы можем в реальном времени следить за показаниями датчика, написав соответствующий код, что очень удобно, так как освобождает нас от подключения терминальных програм, что неудобно, если мы хотим измерить освещённость в не очень доступном месте. Я например беру повербанк, подключаю его коротким проводом Mini-USB к плате, на которой установлена оценочная плата и процесс измерения освещённости становится очень удобным. Также на оценочной плате установлен преобразователь уровней, так как датчик питается от 2,8 вольт, а уровни наших плат — 3,3 вольта. Помимо всего этого на плате имеются разъёмы для установки трёх сателлитов с такими же датчиками, управляемыми так же от той же платы, что позволяет отслеживать различные движения и жесты. Ну и ещё плата имеет удобный разъём типа Arduino UNO, позволяя подключить её ко многим современным отладочным средствам.

Данную плату расширения мы по старой традиции подключим к отладочной плате  Nucleo STM32F401RE.

Получится вот такая незатейливая конструкция

 

index00

 

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

 

 

Давайте немного отвлечёмся от теории и создадим проект. Проект мы создадим новый в проектогенераторе Cube MX, выбрав контроллер STM32F401RETx.

Включим тактирование от кварцевого резонатора, установленного в ST-Link

 

index01

 

Подключим программатор

 

index02

 

Некоторую отладочную и другую информацию мы будем пока отслеживать с помощью терминальной программы, поэтому включим USART2, который у нас работает через ST-Link

 

index03

 

Также включим таймер, он нам нужен будет для многих целей

 

index04

 

Ни и самое главное — I2C, так как практически всё исследуемое оборудование у нас работает именно через данную шину

 

index05

 

Переопределим ножки на следующие, так как именно через них происходит управление через разъём Arduino

 

index06

 

Также включим на выход ножку порта, отвечающего за упраление зелёным светодиодом

 

index16

 

Теперь переходим в «Clock Configuration» и устанвим там следующие настройки частот (нажмите на картинку для увеличения изображения)

 

index07_0500

 

 

Переходим теперь в «Configuration» и настроим сначала шину I2C

 

index08

 

Затем настроим USART

 

index09

 

И настроим таймер приблизительно на частоту 1 килогерц (период 1 милисекунда)

 

index10

 

Также для таймера включим прерывания

 

index11

 

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

Ну вот, вроде бы и всё с настройками.

Зайдём в настройки проекта, выберем там в качестве компилятора Кейл, а также присвоим проекту имя ALS_VL6180

 

index13

 

Сохраним настройки, сгенерируем проект, откроем его в Keil, настроим программатор на авторезет и для оптимизации установим первый уровень

 

index14

 

Попробуем, как всегда, собрать проект, и, если всё нормально, то начнём кодить.

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

 

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Техническая документация:

Документация на датчик VL6180X

Документация на микросхему STMPE1600

Руководство пользователя на оценочную плату X-NUCLEO-6180XA1

 

 

Отладочную плату можно приобрести здесь Nucleo STM32F401RE

Оценочную плату можно приобрести здесь X-NUCLEO-6180XA1

 

 

Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)

STM Name

 

Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)

STM Name

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

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

*