Цей проєкт є повноцінною IoT системою для моніторингу та аналізу рухів в реальному часі, розробленою спеціально для лучників. Вона використовує дані з акселерометра та гіроскопа, отримані з мікроконтролера ESP32, для оцінки стабільності та динаміки рухів під час тренувань зі стрільби з лука. Система надає інструменти для візуалізації сенсорних даних та визначення стану спокою/активності, допомагаючи покращити техніку та ефективність тренувань.
- Збір даних: Зчитування даних акселерометра та гіроскопа з мікроконтролера ESP32.
- Реальний час: Передача сенсорних даних у реальному часі від ESP32 до сервера та веб-клієнтів за допомогою WebSockets.
- Аналіз стабільності: Бекенд-сервер аналізує потокові дані для визначення стану системи (спокій "REST" або активний рух "ACTIVE") на основі дисперсії показників.
- Веб-інтерфейс: Інтерактивний веб-дашборд для візуалізації графіків акселерації та гіроскопа в реальному часі та відображення статусу системи.
- Дистанційне керування: Можливість надсилання команд (наприклад, "START", "STOP") з веб-інтерфейсу на ESP32.
- Хмарне розгортання: Інфраструктура сервера розгорнута на Digital Ocean, забезпечуючи доступність та масштабованість.
- Сторінка калібрування: Окрема веб-сторінка для потенційного калібрування датчиків пристрою.
Система побудована за принципом "клієнт-сервер" з вбудованим пристроєм:
- ESP32 (Embedded Device): Збирає дані з акселерометра та гіроскопа, а потім надсилає їх у бінарному форматі на бекенд-сервер через WebSocket з'єднання
/esp. Також приймає команди від сервера. - FastAPI Backend Server: Побудований на Python (FastAPI). Він виступає в ролі центрального хаба:
- Приймає дані від ESP32 та розпаковує їх.
- Виконує аналіз стабільності руху.
- Пересилає оброблені дані та статус стабільності на підключені веб-клієнти через WebSocket з'єднання
/ws. - Пересилає команди від веб-клієнтів до ESP32.
- Використовує асинхронне логування.
- Веб-клієнт (Frontend): Розроблений з використанням HTML, CSS та JavaScript. Підключається до бекенду через WebSocket
/ws:- Відображає потокові дані акселерометра та гіроскопа у вигляді графіків за допомогою Chart.js.
- Показує поточний стан системи (REST/ACTIVE).
- Дозволяє користувачеві надсилати команди "START" / "STOP" на ESP32.
- Має адаптивний дизайн для різних розмірів екранів.
- Вбудоване ПЗ (Firmware):
- Мікроконтролери: ESP32
- Мова програмування: C++
- Бекенд:
- Мова програмування: Python
- Веб-фреймворк: FastAPI
- Веб-сервер (ASGI): Uvicorn
- Протоколи: WebSockets
- Додатково:
struct(для розпаковки бінарних даних),numpy(для аналізу стабільності),logging(для системного логування)
- Фронтенд:
- Мови розмітки/стилів: HTML, CSS
- Мова програмування: JavaScript
- Бібліотеки: Chart.js (для візуалізації даних)
- Хмарні платформи:
- Digital Ocean (для розгортання сервера)
- AWS (якщо використовували конкретні сервіси, наприклад, AWS IoT Core або EC2)
Для повного розгортання та запуску проєкту необхідно налаштувати три основні компоненти: прошивку ESP32, бекенд-сервер та фронтенд.
- Клонуйте репозиторій:
git clone https://github.com/NazikMGE/Acceleration-and-Gyroscope-Analyzer.git - Відкрийте проєкт ESP32: Використовуйте PlatformIO у VS Code.
- Налаштуйте Wi-Fi: Вкажіть ваші облікові дані Wi-Fi.
- Вкажіть IP-адресу сервера: Переконайтеся, що ESP32 знає IP-адресу вашого розгорнутого сервера Digital Ocean.
- Прошийте ESP32: Завантажте скомпільовану прошивку на ваш мікроконтролер ESP32.
- Перейдіть до директорії бекенду:
cd aws_side/src - Створіть віртуальне середовище:
python -m venv venv - Активуйте віртуальне середовище:
- Windows:
.\venv\Scripts\activate - Linux/macOS:
source venv/bin/activate
- Windows:
- Встановіть залежності:
pip install fastapi uvicorn numpy. - Запустіть сервер:
uvicorn fast_api:app --host 0.0.0.0 --port 5000(для локального тестування). - Розгортання на Digital Ocean: Ви можете розгорнути цей сервер на Droplet Digital Ocean, використовуючи Uvicorn з Nginx як проксі-сервер для керування трафіком та забезпечення HTTPS.
- Розміщення файлів: Файли
index.html,calibration.htmlта папкаstatic(зcssтаjsфайлами) повинні бути доступні через веб-сервер (наприклад, Nginx, який проксує запити до FastAPI, або окремий веб-сервер). У вашому FastAPI проєкті ці файли, ймовірно, подаються як статичні файли або шаблони. - Доступ: Після запуску бекенд-сервера, відкрийте веб-інтерфейс у браузері, перейшовши за адресою сервера (наприклад,
http://ваша_ip_адреса_digital_ocean:5000/абоhttp://ваша_ip_адреса_digital_ocean/якщо використовується Nginx).
- Підключення ESP32: Після прошивки ESP32 автоматично спробує підключитися до вашого сервера. Статус підключення буде відображатися на веб-дашборді.
- Перегляд даних: На сторінці "Home" ви побачите графіки акселерації та гіроскопа, що оновлюються в реальному часі. Статус системи ("Система: Спокій" або "Система: Активна") буде відображатися нижче графіків.
- Керування: Використовуйте кнопки "START" та "STOP" для надсилання команд на ESP32.
- Калібрування: Перейдіть на сторінку "Calibration" для доступу до функцій калібрування (якщо реалізовано в прошивці та JS).
- Збереження даних: Інтеграція з базою даних (наприклад, PostgreSQL, MongoDB) для зберігання історичних даних сенсорів.
- Розширений аналіз: Впровадження більш складних алгоритмів аналізу рухів (наприклад, розпізнавання пострілу, аналіз траєкторії лука).
- Авторизація користувачів: Додавання системи реєстрації/авторизації для індивідуальних профілів лучників.
- Мобільний додаток: Розробка нативного мобільного додатку для зручнішого моніторингу та керування.
- Конфігурація через веб-інтерфейс: Можливість змінювати порогові значення стабільності або інші параметри ESP32 без перепрошивки.