Inspiration
We all started playing volleyball about a year ago. As we continued to play, we tried our best to improve without any outside coaching, just by watching videos and trying new things. Eventually, we all reached a point where improvement came down to the small details in our technique that couldn't be evaluated efficiently. We decided to build DAVE to evaluate ourselves to further our improvement and enjoyment of the sport.
What it does
We built an evaluator for volleyball form, currently it only supports the spike. It uses 2 IMU's and an ESP32 connected to the body via an athletic sleeve. It uses the 2 IMU's to get the position data at two points, the forearm at the wrist, and the upper arm just above the elbow. By using this data, you can approximate the arm as two lines which allows you to evaluate metrics such as elbow angle, wrist jerk, and more valuable stats! It passes the information to an ML backend that uses a Random Forest to evaluate how good your swing was on a scale of 0-100%. This is then passed, along with processed data that evaluates and interpolates the swing, to the front end. The front end includes a Gemini Chat window and a 3D matrix of how your swing looked in space to our ML and preprocessing. The Gemini 3.5-Flash API will process the RF decision, and then decide which supporting information to use which contributed to the evaluation the most. The Gemini 3.5-Flash agent will then tell you how you can improve the most off of this, and then recommend ways to get better. You can continue chatting to probe further in.
How we built it
Hardware - Using SolidWorks we 3D modeled custom mounts for our ESP32, battery, and IMUs. The electronics are all connected using jumper wire, and the mounts are connected on a sleeve worn on the athlete's arm and attached the main components to the back mount. To get accurate data from the IMU we use Mahony filter, which returns absolute positions and orientations of the arm. The IMU data is sent to the server through a HTTP POST to be processed.
Software - The system combines embedded hardware, machine learning, backend processing, and a web interface. A Python backend built with FastAPI and Uvicorn receives the JSON payload from the microcontroller and runs preprocessing that synchronizes timestamps, filters sensor noise, reconstructs arm geometry, and calculates motion features such as elbow angle, angular velocity, acceleration, wrist speed, and timing differences. NumPy and scikit-learn support the numerical pipeline and a 300-tree random-forest classifier, while Joblib stores the trained model artifact. The frontend uses Next.js, React, and TypeScript, with Three.js, React Three Fiber, and Drei providing an interactive 3D replay. Finally, the Google Gemini API receives compact motion data and the classifier’s score to generate concise, personalized volleyball coaching feedback.
Challenges we ran into
Integration - Our biggest challenge by far was integration. We had split into three different groups, front-end, ML back-end, and hardware/embedded. We planned out how each system would interface together beforehand, but that didn't fully stop integration issues from arising. When we were initially attempting to send the data from the hardware to our ML back-end, the data took over a minute to process and send due to it's very large size. We optimized sending the data by batching it.
Time - Naturally, due to the shorter hackathon time length, time was a big challenge as well. We had big plans and achieved most of them, but we did have to sacrifice some features. Mainly we had planned to have tracking of both arms. While we made the hardware for both arms, we had ran out of time to integrate the second arm tracker to grade other type of volleyball moves like sets and bumps.
Memory Management - Due to the limited memory of we were unable to serialize an entire swing for the HTTP Post without crashing the microcontroller. To solve this we precalculated the HTTP content length using a custom serialization algorithm. This allowed us to measure the byte size in microseconds and stream the 150+ KB payload safely over the network without crashing the ESP32.
Accomplishments that we're proud of
Full Hardware Assembly & Integration - We successfully engineered, assembled, and integrated a fully functional and wearable arm sleeve motion tracker within the hackathon time limit. Working with two IMUs and working with networking on a micro controller was a difficult engineering challenge.
Gemini integration - We took the raw, high-frequency data from the IMUs and translated them into a format Gemini could provide meaningful and actionable feedback on the user's volleyball form. This was a merger between lol-level hardware and high-level AI analysis.
What we learned
Embedded Networking - We found establishing the Wi-Fi connection was not where networking challenges ended. We learned how to bypass local DHCP assignments and how ASGI servers drop messed up chunked HTTP streams.
The Importance of Integration Planning - We found that planning out our data formats that would be sent between systems beforehand helped immensely reduce the integration pains.
What's next for DAVE - Dynamic Acronym Volleyball Evaluator
We hope to expand it's capability with different kinds of action forms and be able to correct movement on the court with more full-body tracking.
Built With
- gemini
- platformio
- python
- solidworks
- typescript

Log in or sign up for Devpost to join the conversation.