In a world where COVID-19 prevails, phrases like "Stay 6 feet apart" (or 1+ meter apart for metric countries) and "No entry without masks" have been plastered all over the walls of health facilities, educational institutions, public buildings, and grocery stores. Preventative measures against this virus has become the norm, whether people like it or not. As businesses are reopening with specific guidelines for COVID-19, people are finding it difficult to properly and accurately distance themselves. In situations where people are forced to be in contact with each other, but still want to practice safe social distancing, our app, Stay Away From Me, can arguably be a life saving tool.
What SAFM does
The Stay Away From Me (SAFM) app is a diffusion tool that works similar to molecules in a solution to create a uniform gradient. Using this app, people would efficiently move to positions that optimize the "safe distance" between each other. The app utilizes Bluetooth technology to find signal strengths (Received Signal Strength Indicator: RSSI) and uses that to measure the distance between a user and the nearest mobile device. SAFM has a responsive indicator gauge that will change colors based on that distance with red indicating that you are getting nearer to someone. To support a diverse set of users, SAFM has support for the 7 most common languages on campus.
- Cross platform: works on iOS and Android
- Bluetooth technology
- Linear progression distance gauge with visual feedback using RSSI
- Multi-language support: English, Spanish, Chinese, Russian, Hindi, Arabic, and French
View the source code:
🔨 SAFM is built with:
- Affinity Design
- Final Cut Pro (for demo video)
Challenges we ran into
- Bluetooth technology is not directional (yet) and finding the exact location of the nearest device requires triangulation. However, there might be some issues relating to privacy if we were to explore this challenge more.
- Material objects like a wall or a protective screen is not integrated in to Bluetooth's scanning capabilities. A user can be within another user's safe space, but protected by a wall or a screen.
- Emulators do not support Bluetooth technology and ensuring that both devices are supported, the app had to be deployed on a physical device.
- Setting up framework, IDE, and environment packages were longer than expected, consuming a lot of time that could have been used for debugging. Thankfully, all team members were accommodating and understanding.
- App deployment to debug and test Bluetooth technology was limited to one member.
Accomplishments that we're proud of
- We were able to quickly create an app with members from varying skill levels!
- The liquid linear progress indicator implementation was particularly exciting, as one could see in realtime how changing physical distance can change its colors and "progress level."
- Supporting different languages other than English was something we wanted to include to support a diverse number of users.
- Learning together as a team created an exponential growth of programming skills. Some might even say that it was better than traditional learning.
What we learned
We were all coming from different levels of experiences, so each individual had their own notes:
August: I learned how to install Flutter and Dart extensions on VScode and Android Studio. I learned how to deploy an app using Xcode and Flutter. I learned how to push/pull/merge with git. I learned about how user friendly VScode is and how Flutter's hot reload and hot restart makes everything much easier to debug and test. I learned how to comment on a pull request (while attempting to review/approve a pull request) and then I learned to review/approve and merge a pull request from a collaborator on github! I learned that installation and setting up the environment is 3/4s of the battle.
Ryan: The biggest thing I learned was how to properly utilize git and github. Until now, I had only ever developed large projects by myself or an occasional partner. Having now worked with 3 others on a project, each of us updating our own code, I can see how hectic it would get without proper version control. I also learned a good deal about deploying to iOS and how annoying it can be, in regards to coordinating compatibility for iOS, macOS, Xcode, Flutter packages, etc. Finally, I am now better at researching and understanding the documentation of third-party packages that give you the ability to use features that my not be native to your platform.
Anj: This project introduced me to the process of app development, which I had no prior experience with. With the help of my teammates I learned how to install and use flutter/dart to create a user interface, how to collaborate on software projects using github, and how to clone and manipulate github repositories on Xcode in order to work on sections of the app independently. In addition to technical skills, I also got a general feel for the app building workflow and all that goes into environment set up.
Micah: It was great getting to work with a team of people, as my work and school projects are often solo. I had some prior experience with Flutter and Dart, and this project helped me to dive a bit deeper into Flutter and enhance my mobile development skills to create a very exciting project. I learned how to change data into a form that can be visualized through a progress meter, learned how to add support for various languages, and got to practice with responsive design, app preferences, streaming data and Bluetooth technology. I also got to take a deeper dive into managing state across the app, to make sure only the correct widgets are rebuilt when the app state changes.
What's next for Stay Away From Me
- Due to the variability of BLE signals, our current formula for calculating distance from RSSI values could use some work. Spikes and dips in signal strength can lead to sudden changes in distance that aren't accurate. Though we tried to mitigate that by taking an average of recent RSSI values, there is definitely room for improvement. Additionally, there may be differences in signal strength between different devices that could be measured and accounted for within our distance formula.
- While we are proud that we were able to internationalize our app through translated text, we would also like to add semantic markup to improve accessibility.