Jump Awake
Jump Awake is an IoT solution that gets you physically active in the morning, winning the Best Use of Google Cloud Platform and Best IoT Hack prizes at XdHacks 2019.
Created by
Problem
Too many people are stuck in their beds, some also choose to repeatedly snooze their alarms, and many people want exercise but need that initial encouragement!
Solution
Starting the day off early improves your physical health and heightens your alertness.
Our IoT device is an alarm that requires you to do physical exercise routines such as jumping jacks, squats, burpees, sit ups in order to shut off the alarm.
To add additional motivation, we’ve gamified this experience to provide social motivation for users who’re striving to wake up early by implementing:
- A live Competition mode for real-time activity tracking against an opponent
- A dashboard to show statistics for your activities
- A Google Home companion application to schedule your fitness alarm
How does it work?
- User has the IoT device (with webcam and screen attached) in their bedroom.
- They set an alarm by saying
Okay Google, tell Master Exercise to challenge me at 8:00am - At 8:00am, the alarm activates and the user will have to do jumping jacks to disable the alarm.
Screenshots of what’s displayed on the IoT devices’ screen:

Technology Used
Here’s a rough picture of our architecture:

Our IoT devices include a Qualcomm DragonBoard 410c and Raspberry Pi 3 with webcams and monitors attached to them. They run machine vision algorithms to detect the user’s motions such as jumping jacks.
We implemented our activity detection using 2 different algorithms:
- OpenCV Haar Casscades on low-compute devices such as our IoT devices
- Caffe Based Face Detector which uses a Deep Neural Net algorithm that detects more accurately for devices with more compute such as a laptop
Our web service uses web-sockets for real-time communication, leveraged Vue for frontend and Flask for the backend.
Finally, we leveraged Google’s services by using
Google Compute Engineto host our web serviceFirebase Real-time Databaseto store alarm times, statistics and time series data for physical activityGoogle Cloud Functionsto run workloads such a scheduling alarmsGoogle Dialogflow Agentto facilitate interactions withGoogle AssistantGoogle Assistantto control the device via voiceGoogle Home Minias the hardware runningGoogle Assistant
Development
Running the services locally
Running the server locally requires the Firebase admin credentials firebase-sa-secret.json to interact with the database.
# Install the dependencies if you haven't
pipenv install
# Run the app on localhost:5000 with hot reload and debug
pipenv run ./app.py
# Developing for the frontend
cd frontend
# Install the dependencies if you haven't
npm install
# Run the frontend on localhost:8080 with hot reload and proxying to localhost:5000
npm run serve
# Requires Firebase CLI, you can install via: npm install -g firebase CLI
# Requires login: firebase login
# Then you can serve the Google cloud function locally, see CLI output for the URL
firebase serve
Deploying the web service to Google Cloud Platform
# Initialize terraform once
terraform init
# Create resources for the demo
terraform apply
# Package the frontend to be statically served via the backend
./frontend/create_build.sh
# Transfer production files to the Google Compute virtual machine
./sync.sh
# SSH into the Google VM and start the server
./remote_start_server.sh
# Clean up Google resources after the demo to avoid paying $
terraform destroy