Skip to content

Дипломная работа C++, специализация "Разработка умных вещей"

Notifications You must be signed in to change notification settings

netology-code/cppiot-diplom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

Дипломный проект «Умное устройство на ESP32/Arduino: система событийного мониторинга»


Рекомендации по работе над дипломом

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

Описание

Создайте симуляцию умного устройства на ESP32 или Arduino Uno в среде Wokwi.
Устройство выполняет:

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

Пример сценария: при превышении температуры выше 30°C или фиксации движения устройство генерирует запись, сохраняет её в журнал и позволяет пользователю запросить события по типу или уровню важности.


Архитектура устройства

  • Аппаратная модель:

    • ESP32 или Arduino Uno
    • Датчики: PIR (движение), DHT (температура/влажность), LDR (освещённость)
  • Программная модель:

    • два потока (std::thread)
    • общий контейнер std::vector<Event>
    • синхронизация через std::mutex
  • Взаимодействие с пользователем:

    • ввод запросов через Serial Monitor
    • вывод до 10 последних найденных событий

Многопоточность и синхронизация

  1. В setup() создаются два потока:

    • sensorThread — циклически опрашивает датчики каждые 2 секунды, анализирует данные и формирует события;
    • commandThread — обрабатывает команды пользователя, ищет события в журнале и выводит результаты.
  2. Для защиты общего ресурса (журнала) используется std::mutex и std::lock_guard.


Сбор и индексация событий

  1. Журнал событий хранится в std::vector (или кольцевом буфере) на 100 записей.

    • При переполнении удаляются самые старые записи (FIFO).
  2. Каждое событие описывается структурой:

    struct Event {
        std::string time;
        std::string type;     // TEMPERATURE, MOTION, LIGHT
        std::string level;    // LOW, MEDIUM, HIGH
    };

Пример записи

[12:30:05] Тип: TEMPERATURE, Уровень: HIGH


Классификация событий

  • Температура > 30°C → HIGH
  • Движение → MEDIUM или HIGH
  • Освещённость < порога → LOW

Поиск по журналу

Пример запроса пользователя (Serial Monitor):

search TEMPERATURE HIGH

Действия потока команд:

  1. Захватывает мьютекс.
  2. Ищет совпадения в журнале.
  3. Сортирует результаты по важности (HIGH → MEDIUM → LOW).
  4. Выводит до 10 последних событий.

Пример результата:

[12:30:05] Тип: TEMPERATURE, Уровень: HIGH

[12:28:01] Тип: TEMPERATURE, Уровень: HIGH


Конфигурация

Пороговые значения температуры, освещённости и интервал опроса задаются в коде.
Рекомендуется вынести их в отдельный файл config.h:

const int TEMP_THRESHOLD = 30;
const int LIGHT_THRESHOLD = 200;
const int POLL_INTERVAL = 2000; // мс

Что является итогом работы

  1. Рабочая симуляция в Wokwi (ESP32/Arduino + датчики).

  2. Исходный код на C++ с комментариями.

  3. Публичный репозиторий GitHub с:

    • исходниками,
    • ссылкой на проект Wokwi,
    • инструкцией по запуску.

Этапы реализации проекта

  1. Создание проекта в Wokwi и подключение датчиков.
  2. Настройка pthread в wokwi.toml.
  3. Реализация структуры Event и журнала событий.
  4. Написание потоков sensorThread и commandThread.
  5. Добавление синхронизации (std::mutex).
  6. Реализация поиска и сортировки.
  7. Тестирование и финальная отладка.

Техническое задание

  1. Создать проект ESP32 с датчиками PIR, DHT, LDR в Wokwi.
  2. Добавить в wokwi.toml: libraries = ["pthread"]
  3. Реализовать два потока:
    • void sensorThreadFunc() — опрос датчиков каждые 2 секунды;
    • void commandThreadFunc() — обработка команд вида search <тип> <уровень>.
  4. Использовать std::vector для хранения событий.
  5. Защитить доступ к журналу через std::mutex.
  6. Добавить сортировку результатов поиска по уровню важности.
  7. Код должен быть читаемым и содержать комментарии.

Критерии оценки

  1. Два потока (sensor + command) работают параллельно.
  2. Журнал хранит до 100 событий (FIFO).
  3. Поиск выполняется и сортирует по важности.
  4. События классифицируются по типам и уровням.
  5. Реализована синхронизация через std::mutex.
  6. Код читаемый, содержит комментарии.
  7. В репозитории есть README и ссылка на проект Wokwi.

Полезные материалы

Wokwi Documentation

Arduino Reference

ESP32 Arduino Core

C++ Threads

STL Algorithms

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

Как задавать вопросы руководителю по дипломной работе

  1. Сформулируйте вопрос чётко и по пунктам.
  2. Сперва попробуйте найти ответ самостоятельно.
  3. Прикладывайте скриншоты и указывайте проблемное место.
  4. По возможности оставляйте вопросы в комментариях к коду.

Будьте терпеливы: руководитель может отвечать не сразу.

About

Дипломная работа C++, специализация "Разработка умных вещей"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published