Pull to refresh

Диплом специалиста ИБ. Часть №2 — Стационарное устройство SmartLight

Level of difficultyEasy
Reading time18 min
Views4.2K

Небольшое предисловие

Привет, Хабр!

Данная статья является второй в цикле “Диплом специалиста ИБ”, в рамках которого я рассказываю про свой опыт написания выпускной квалификационной работы на программе высшего образования “Компьютерная безопасность”. В предыдущей статье я описывал математическую модель и формирование методики обеспечения безопасности устройств Интернета вещей, использующих в качестве коммуникационного протокола технологию Bluetooth Low Energy.

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

Технологическая часть

В первой части цикла статей “Диплом специалиста ИБ” я уже рассказывал, что мне удалось разбить свою ВКР на 3 части:

  1. Исследовательская часть (BLE, IoT)

  2. Конструкторская часть (математическая модель, механизмы защиты, методика обеспечения безопасности)

  3. Технологическая часть (стационарное устройство, портативное устройство, мобильное приложение, НСД)

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

По сути это наиболее практическая сторона моего исследования. Для того, чтобы протестировать полученную методику (и продемонстрировать ее эффективность в рамках работы), я решил, что есть необходимость самому собрать несколько устройств Интернета вещей. Во-первых, я смогу поработать на прямую с железом (а я это просто обожаю). Во-вторых, я смогу наглядно продемонстрировать процесс реализации механизмов защиты из моей методики на этапе разработки устройства. Ну и в-третьих, я смогу продемонстрировать все вживую комиссии на защите ВКР (что я в итоге и сделал).

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

Устройства Интернета вещей

Разработка устройств Интернета вещей по версии нейросети DALL-E
Разработка устройств Интернета вещей по версии нейросети DALL-E

Я решил, что буду делать два IoT устройства: стационарное устройство без реализации механизмов защиты и портативное устройство с реализацией данных механизмов.

Моего креатива хватило на умный светильник и умный пульсометр. Чтобы долго не мучить себя выбором подходящих наименований данных устройств, решил назвать SmartLight (светильник) и SmartPulse (пульсометр).

В этой статье расскажу про разработку SmartLight, а в следующей про SmartPulse. Демонстрацию функционала обоих устройств я прикреплю в статье, посвященной написанию мобильного приложения для взаимодействия с ними посредством смартфона (и не прибегая к помощи приложений типа nRF Connect), так как не горю желанием дублировать один и тот же материал в разных статьях.

Стационарное устройство SmartLight

Когда я уже точно понял и принял факт того, что буду разрабатывать именно светильник и пульсометр, пришло осознание, что мне совершенно не хочется просто делать устройство, которое умеет светиться и ничего более. С пульсометром дела обстояли немного проще, так как в нем я планировал (и реализовал в итоге) механизмы защиты, что уже сделало его как минимум чуть более любопытным, нежели без них. А что можно было интересного воплотить в рамках “умного” (относительно умного) устройства, предназначение которого - светить?

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

Концепт светильника с электрохромной пленкой

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

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

В ручном режиме пользователь самостоятельно управляет светильником посредством мобильного приложения (которое на тот момент было только в планах). Я не хотел реализовывать только включение и выключение светового элемента. Это база, но это скучно. Поэтому к данному функционалу я добавил возможность управления электрохромной пленкой, которая могла бы рассеивать и фокусировать свет матрицы, а также несколько дополнительных особенностей: включение эффекта свечения светового элемента и отправку на него какого-либо текстового сообщения в виде бегущей строки. Смысла в этом особо нет, мне просто хотелось это сделать, а меня никто не пытался остановить.

В сухом остатке получилось следующее:

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

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

  3. Устройство должно работать в двух режимах: автоматическом и ручном

    1. В автоматическом режиме работы:

      1. Собирается информация об уровне освещенности

      2. Включается и отключается световой элемент в зависимости от уровня освещенности

    2. В ручном режиме работы:

      1. Пользователь включает и выключает световой элемент с помощью мобильного приложения

      2. Пользователь включает и отключает электрохромную пленку с помощью мобильного приложения

      3. Пользователь переключает эффекты свечения светового элемента устройства с помощью мобильного приложения

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

  4. Беспроводная технология передачи данных - BLE

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

Аппаратная часть

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

Электронный компонент

Функционал устройства

Микроконтроллер

Управление устройством, передача данных с помощью технологии BLE

Светодиодная матрица

Реализация функционала светового элемента

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

Определение уровня освещенности для дальнейшего включения/выключения светового элемента устройства в автоматическом режиме управления

Электрохромная пленка

Рассеивание и фокусирование испускаемого световым элементом света

Преобразователь напряжения

Преобразование постоянного тока в переменный ток с повышением напряжения для обеспечения работоспособности электрохромной пленки

Элементы питания типа АА

Дополнительное питание электрохромной пленки

Электромеханическое реле

Управление включением и выключением электрохромной пленки при повышенном напряжении

Светодиоды

Индикация подключения/отключения по BLE и переключения режимов управления устройством

Как видно из таблицы, некоторые компоненты необходимы исключительно для корректной работы электрохромной пленки (она же PDLC Film). Немного более подробно поясню этот момент.

Электрохромная пленка

Электрохромная пленка или же PDLC Film по сути представляет из себя слой жидких кристаллов, находящийся между двумя токопроводящими пленками, покрытыми изолирующим слоем с внешней стороны. Подробное определение PDLC и описание технологии опустим, этого предостаточно в интернете. Чтобы облегчить жизнь всем любознательным, прикреплю ссылку, где можно почитать об этом подробнее.

Устройство умного стекла на основе электрохромной пленки
Устройство умного стекла на основе электрохромной пленки

Дело в том, что электрохромная пленка, которая находилась в моем распоряжении, работала исключительно от переменного тока напряжением в 65 Вольт. Это было указано и в ее технических характеристиках, и проверено мной лично (потому что сначала делаем, а потом читаем инструкцию). При этом питание от сети было бы невозможным из-за того, что напряжение, необходимое для работы электрохромной пленки, убьет микроконтроллер, если использовать его кабель питания для этих целей. Я допускаю, что можно было придумать что-то значительно более умное и запитать микроконтроллер и электрохромную пленку через одну розетку, но на это у меня не хватило ни времени, ни знаний, ни опыта (буду благодарен, если кто-то подкинет идею, как это реализовать и не сжечь микроконтроллер). Поэтому в своей цепи я решил воспользоваться дополнительным питанием.

Здесь мне очень сильно помогли 2 элемента питания типа АА (в народе - пальчиковые батарейки). Проблема была только в том, что они давали всего 3 Вольта постоянного тока, а это немного не 65 Вольт переменного тока. Но проблема решилась в тот момент, когда я смог найти у себя повышающий DC/AC преобразователь, который отлично справился со своей задачей. Мультиметр показал мне нужные значения, чему я был несказанно рад.

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

Перейдем к световому элементу, а точнее к светодиодной матрице, реализующей его функционал.

Светодиодная матрица

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

Светодиоды

Для индикации переключения режимов работы устройства (автоматического и ручного), а также для отображения состояния подключения устройства (подключено устройство к смартфону по BLE или нет), я использовал обычные RGB светодиоды. Так как про индикацию добавить больше нечего, перейдем к самому “сладкому”, что я решил оставить напоследок. К микроконтроллеру.

Микроконтроллер

Проанализировав рынок и поняв, что с STM у меня не хватило бы времени разобраться, решил использовать ESP32, как один из наиболее проверенных вариантов для такого рода проектов. Выбрал отладочную плату NodeMCU-32 на базе чипа ESP-WROOM-32 под управлением 32 битного процессора Tensilica Xtensa LX6. В данный момент эта технология является устаревшей, но все еще активно используется.

Распиновка NodeMCU-32
Распиновка NodeMCU-32

Много говорить про саму NodeMCU-32, как и про ESP32, не вижу смысла, и как и в случае с электрохромной пленкой оставляю ссылку для интересующихся.

Моя версия ESP32 поддерживает спецификацию BLE 4.0, которая на данный момент уже достаточно сильно устарела, но тем не менее на рынке присутствует большое количество различных устройств, использующих данную версию Bluetooth Low Energy. В рамках дипломной работы это скорее является преимуществом, так как основная задача SmartLight - изобразить теоретически допустимое устройство IoT без механизмов защиты, а популярность BLE 4.0 дает возможность приблизиться к наиболее правдоподобному варианту того, что действительно можно приобрести в масс-маркете.

Схема подключения компонентов

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

Схема подключения электронных компонентов
Схема подключения электронных компонентов

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

Программная часть

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

Среда разработки и язык программирования

Для меня вопрос выбора языка программирования и среды разработки был решен еще до того, как я определил все необходимые электронные компоненты. Я решил воспользоваться Arduino IDE с ее версией языка C++. В ситуации, когда сроки достаточно поджимают, нет необходимости переходить на уровень ниже (чего не скажешь про SmartPulse, но об этом в следующей статье), а все, что было задумано в части функционала, спокойно реализуется на условной Arduino Uno (кроме работы с BLE, так как Uno “из коробки” без дополнительных модулей такого не умеет), нет смысла усложнять себе жизнь и использовать что-то кроме данной среды разработки под подобные микроконтроллеры (имхо). Я понимаю, что в случае ESP32, такой средой является ESP-IDF, а не Arduino IDE, но на мой взгляд многие вещи значительно проще реализовать на C++ чем на C, если речь идет о вышеупомянутом в данной статье функционале устройства.

Описывать процесс подключения NodeMCU-32 через менеджер плат в среде разработки и загрузку прошивки на устройство я не стану, чтобы не раздувать статью, но для интересующихся оставлю ссылку на гайд. Перейдем сразу к разбору кода.

Прошивка

В данной статье я не вижу смысла полностью выкладывать всю прошивку. Если интересно, полную ее версию можно увидеть в приложениях к ВКР, а также на GitHub. Также я бы хотел заранее принести свои извинения тем, кого может оскорбить мой код. Времени его доработать и довести до ума у меня не было, так как помимо двух устройств нужно было еще написать мобильное приложение, провернуть НСД и все грамотно описать в дипломной работе. Поэтому если вдруг на мою статью наткнулся мощный специалист, который в качестве хобби реализует ООП на ассемблере, то искренне прошу более снисходительно отнестись к моей работе.

Весь код можно разбить на условные логические (структурные блоки).

Структурный блок

Назначение и функционал

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

Импорт библиотек для BLE и управления светодиодной матрицей.

Определение констант и переменных

Инициализация параметров устройства, включая пины и глобальные переменные, определение объектов для управления светодиодной матрицей.

Функционал светодиодной матрицы

Функции для отображения текста и создания визуальных эффектов.

Функционал BLE

Настройка BLE-сервера, создание сервисов и характеристик, обработчики событий BLE.

Интеграция датчика освещенности

Считывание и обработка данных с датчика освещенности для автоматической работы устройства.

Управление электрохромной пленкой

Функции для контроля электрохромной пленки.

Сценарий приветствия при загрузке устройства

Реализация приветственного сценария при включении устройства.

Основной цикл

Непрерывное выполнение функций устройства.

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

Для того, чтобы сразу показать основные "фичи" SmartLight на защите дипломной работы, я решил написать сценарий приветствия, который срабатывает после включения устройства (прописал его в void setup). В нем я задействовал включение электрохромной пленки, чтобы было видно содержимое текста приветствия в виде бегущей строки на светодиодной матрице.

matrix.begin(); 
matrix.setTextWrap(false); 
matrix.setBrightness(10); 
matrix.setTextColor(colors[0]); 
String HelloMsg = utf8rus("Привет! Меня зовут SmartLight. Меня собрал Максим. Рад вам светить!"); 

for (int i = 0; i <= matrix.width() + 6 * HelloMsg.length(); i++) { 
  matrix.fillScreen(10); 
  matrix.setCursor(x, 0); 
  matrix.print(HelloMsg); 
  if(--x < -410) { 
    x = matrix.width(); 
  } matrix.show(); 
  delay(80); 
} 
digitalWrite(PIN_RELAY, LOW);

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

В четвертом блоке кода стационарного устройства «SmartLight» осуществляется настройка и управление BLE, что позволяет устройству взаимодействовать с внешними BLE-устройствами, такими как смартфоны или другие умные устройства. Этот блок содержит определения классов и методов, отвечающих за работу BLE-сервера и обработку событий BLE. Так как в коде используется несколько сервисов и характеристик, разберем в качестве примера общую логику BLE, потому что во всех случаях она будет одинакова. Рассмотрим на примере передачи данных об уровне освещенности по BLE.

Для начала обозначим характеристику, в которой будет находиться значение уровня освещенности с фоторезистора.

BLECharacteristic* pLevelLightCharacteristic; // Указатель на характеристику BLE для уровня освещенности

Далее необходимо создать BLE сервер и задать имя устройству (оно будет отображаться при поиске доступных для подключения устройств). BLEDevice::createServer создает экземпляр сервера для обработки входящих подключений и коммуникации.

BLEServer* pServer; // Указатель на BLE сервер
BLEDevice::init("SmartLight"); // Инициализация BLE устройства с именем "SmartLight"
pServer = BLEDevice::createServer(); // Создание BLE сервера для обработки соединений и событий
pServer->setCallbacks(new MyServerCallbacks()); // Установка колбэков (обратных вызовов) для сервера, чтобы обрабатывать события сервера

И задать класс обратных вызовов для него.

// Класс для обработки событий BLE сервера
class MyServerCallbacks : public BLEServerCallbacks {
  void onConnect(BLEServer* pServer) { // Функция, вызываемая при подключении устройства к BLE серверу
    deviceConnected = true; // Установка флага, указывающего на то, что устройство подключено
  };
  void onDisconnect(BLEServer* pServer) { // Функция, вызываемая при отключении устройства от BLE сервера
    deviceConnected = false; // Сброс флага, указывающего на то, что устройство подключено
  }
};

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

BLEService* pLevelLightService = pServer->createService(BLEUUID((uint16_t)0x170D)); // Создание Bluetooth сервиса с указанным UUID (0x170D) - сервис уровня освещенности
pLevelLightCharacteristic = pLevelLightService->createCharacteristic(BLEUUID((uint16_t)0x2A31), BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY); // Создание характеристики для сервиса с указанным UUID (0x2A31) и установка ей свойств READ и NOTIFY
BLEDescriptor* pDescriptor = new BLEDescriptor(BLEUUID((uint16_t)0x2902)); // Создание дескриптора для характеристики с указанным UUID (0x2902)
pLevelLightCharacteristic->addDescriptor(pDescriptor); // Добавление дескриптора к характеристике

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

Схема структуры пакета BLE
Схема структуры пакета BLE

Свойств определено всего три:

  1. PROPERTY_READ (чтение значения характеристики)

  2. PROPERTY_WRITE (запись значения в характеристику)

  3. PROPERTY_NOTIFY (подписка на уведомления об изменениях значения, при котором мы сможем получать каждый раз новое значение характеристики, когда оно меняется)

Как можно видеть из предыдущего фрагмента кода, для характеристики pLevelLightCharacteristic используется свойства PROPERTY_NOTIFY и PROPERTY_READ, так как данные по уровню освещенности не будут являться статичными.

Далее запустим сервис

pLevelLightService->start(); // Запуск сервиса уровня освещенности

После запуска сервиса необходимо настроить сервер для рассылки пакетов характеристики pLevelLightService и задать параметры рассылки. BLEDevice::startAdvertising() запускает рассылку пакетов, для возможности подключиться к устройству и прочитать данные этих пакетов

BLEAdvertising* pAdvertising = pServer->getAdvertising(); // Получение объекта Advertising из BLE сервера
pAdvertising->addServiceUUID(pLevelLightService->getUUID()); // Добавление UUID (уникальных идентификаторов) сервиса уровня освещенности
pAdvertising->setScanResponse(false); // Установка параметра Scan Response в false - отключение сканирующего ответа
pAdvertising->setMinPreferred(0x06); // Установка минимального предпочтительного интервала для сканирования
pAdvertising->setMinPreferred(0x12); // Установка максимального предпочтительного интервала для сканирования
BLEDevice::startAdvertising(); // Видимость для других устройств

Далее реализуем условие, при котором передаем данные по уровню освещенности с датчика в значение характеристики, если было зафиксировано подключение к устройству. Также в данном фрагменте кода обозначена реализация изменения цвета светодиода-индикатора подключения к SmartLight по BLE.

if (deviceConnected) { // Проверка, подключено ли какое-либо устройство по BLE
  pLevelLightCharacteristic->setValue(lightValue); // Установка значения характеристики с освещенностью
  pLevelLightCharacteristic->notify(); // Передача данных по уровню защищенности в виде уведомления
  digitalWrite(LED1_2, 255); // Переключение светодиода подключения на зеленый цвет
  digitalWrite(LED1_3, 0);
} else { // Если устройство не подключено
  digitalWrite(LED1_2, 0);
  digitalWrite(LED1_3, 255); // Светодиод подключения светится синим
  BLEDevice::startAdvertising(); // Видимость для других устройств
  }

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

// Класс для обработки записи в характеристику BLE, отвечающую за "бегущую строку"
class RunLineCharacteristicCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic* pCharacteristic) { // Функция, вызываемая при записи значения в характеристику
    std::string value = pCharacteristic->getValue(); // Получение значения, записанного в характеристику
    if (value.length() > 0) { // Проверка длины полученного значения
      Msg = value.c_str(); // Преобразование полученного значения в строку и сохранение в переменную Msg
      showType = 4; // Установка типа анимации на "бегущую строку"
      startShow(showType); // Запуск анимации
      showType = 2; //Выключение матрицы
      startShow(showType); //Запуск режима
    } else { // Если значение не было записано (пустая строка)
        showType = 2; //Выключение матрицы
        startShow(showType); //Запуск режима
      }
  }
};

Прототип устройства

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

Недолго думая, я решил попробовать поместить все “железо” в нее.

SmartLight в корпусе из коробки
SmartLight в корпусе из коробки

Результат получился удовлетворительным, но мне не хотелось останавливаться на макете устройства в картонной коробке. Хотелось уйти от DIY и подручных материалов к чему-то более продуманному и логичному. В тот момент я понял, что хочу видеть свое устройство в пластмассовом корпусе.

Разработка корпуса

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

Набросок корпуса SmartLight
Набросок корпуса SmartLight

Корпус я решил сделать разборным для того, чтобы упростить себе процесс сборки устройства в нем. Он состоит из трех частей:

  1. Передняя крышка (в данной части корпуса находится квадратное отверстие для размещения электрохромной пленки и реализации главной функции светильника - светить)

  2. Рамка (размещение светодиодной матрицы, датчика освещенности, индикаторов и кабеля питания устройства)

  3. Задняя крышка (фиксирование микроконтроллера, реле, батареек, преобразователя)

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

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

Когда я окончательно понял, как именно будет выглядеть корпус снаружи и внутри, мне нужно было четко обозначить все масштабы, по которым я бы смог создать 3D-модель корпуса для его дальнейшей печати. Я хотел видеть чертежи всех частей корпуса.

В данном процессе мне очень сильно помогла моя девушка, Аня (@ShabrovaAS), которая предложила свою помощь и по сути сама сделала абсолютно большую часть работы на этапе проектирования и подготовки финальной версии чертежей.

Чертежи составных частей корпуса SmartLight
Чертежи составных частей корпуса SmartLight

По данным чертежам были подготовлены модели каждой из трех частей корпуса в Autodesk Inventor для их дальнейшей печати на 3D-принтере. Оригиналы моделей корпуса так же есть в публичном репозитории проекта на GitHub.

3D-модель корпуса в разборе
3D-модель корпуса в разборе

После подготовки моделей я распечатал их в лаборатории. Выбирая между PLA-пластиком и ABS для печати, остановился на последнем, потому что он больше подходит для корпусов различных устройств.

Результат печати можно увидеть на фотографиях. К сожалению, своего 3D-принтера у меня в распоряжении нет, хотя в будущем планирую приобрести (был бы благодарен, если бы знающие люди в комментариях посоветовали хорошие и доступные варианты для домашнего использования).

Распечатанный корпус SmartLight в разобранном и собранном состояниях
Распечатанный корпус SmartLight в разобранном и собранном состояниях

Финальная сборка устройства в корпусе

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

Устройство перед монтажом компонентов и после
Устройство перед монтажом компонентов и после

Как уже упоминалось ранее в этой статье, здесь не будет продемонстрирован сам функционал устройства в процессе его работы. Данная часть будет раскрыта в статье, посвященной написанию мобильного приложения для взаимодействия с обоими устройствами Интернета вещей (SmartLight и SmartPulse). Но фотографии включенного устройства с эффектом градиентного свечения с включенной и выключенной электрохромной пленкой считаю необходимым показать уже сейчас.

SmartLight в режиме "Цветовой градиент" с включенной и выключенной электрохромной пленкой
SmartLight в режиме "Цветовой градиент" с включенной и выключенной электрохромной пленкой

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

Я благодарен всем, кто уделил время для прочтения данной статьи. Было бы безумно круто получить фидбек в виде комментариев, чтобы улучшать качество материала.

В следующих частях...

Так как дипломная работа получилась достаточно объемной, я решил разбить ее на несколько связанных статей: 
1. Диплом специалиста ИБ. Часть №1 - Методика обеспечения безопасности устройств Интернета вещей 
2. Диплом специалиста ИБ. Часть №2 - Стационарное устройство SmartLight 
3. Диплом специалиста ИБ. Часть №3 - Портативное устройство SmartPulse 
4. Диплом специалиста ИБ. Часть №4 - Мобильное приложение Smart Connect 
5. Диплом специалиста ИБ. Часть №5 - Несанкционированный доступ к IoT-устройствам с BLE

С оригиналом ВКР можно ознакомиться тут

Tags:
Hubs:
Total votes 12: ↑11 and ↓1+10
Comments10

Articles