View of Undrinkable Water Sources
Testing Spectrometer with Crude Oil
Select Contaminant Type
Machine Learning Sample
Blank Calibration of Spectra
Our application is built to solve the problem that many people don't have access to clean water. This is either because they don't know where to find it, or don't know how to tell what water sources near them are cleanest.
What it does
Our application lets users crowd-source water quality data. Users use our cheap spectrometer (constructed out of a phone + $10 of materials) to identify the presence of contaminants in water sources. The results of every test are uploaded to an AWS database that lets users who do not have access to a spectrometer look up water quality in their area. To do this we leveraged Mapquest, AWS lambda functions, DyanmoDB, and the AWS API gateway.
More info for those who are interested:
How we built it
Hardware: We built a spectrometer using the iPhone's camera. At one end, we have an LED source that emits light at a wavelength of 405 nm. We then direct this light so that it passes through a broken CD and then into the iPhone camera's lens. The broken CD acts like a prism, and splits the light into its component wavelengths (basically a rainbow). This allows the camera to easily see what wavelengths of light are being emitted at the source.
So far what I've described just tells us what the wavelength of the light being emitted is. The next step is to make the light pass through the liquid we want to identify. As we know, water lets all wavelengths of light pass through it equally. On the other hand, contaminants (bacterial or otherwise) found in water both attenuate different wavelengths of light in unique ways, and fluoresce (re-emit the light at different, lower energy wavelengths). These attenuation/fluorescence 'fingerprints' mean that the wavelengths of light that reach the camera are unique based on the liquids that we've placed in our spectrometer.
Software: The software consists of two main parts:
Front end: The front end is an iOS phone app that uses MapQuest and GPS information to display water quality information near the user's location. It queries our backend through an AWS API that returns the crowdsourced water quality information. If people have access to a homemade spectrometer (like the one we created), they can contribute to our water-quality database by taking water quality readings with the application. These readings are automatically uploaded to the database.
Back end: The back end of our application consists of two AWS lambda functions and a DynamoDB database. The lambda functions take care of adding and retrieving water-quality information to/from the database. To determine whether the water is drinkable, we implemented a machine learning algorithm.
Challenges we ran into
Going into this Hackathon, none of us had much Swift development experience. We ran into all sorts of issues because of this. In addition, we had never used AWS, and had never built a spectrometer, so it was a great learning experience for us all. I won't enumerate all of the specific challenges we ran into because there would be too many to list.
Accomplishments that we're proud of
Everything we built! We are happy to have a mostly working spectrometer that lets people cheaply detect the presence of contaminants in their water supply. We are also very happy that this information is crowdsourced so that people know where to go to find the cleanest water without having to take tens of readings themselves.
What we learned
Swift, DynamoDB, AWS lambda functions, AWS API gateway, and how to cheaply build a spectrometer
What's next for AquaSource
We are hoping to flesh out our MVP so that it will be more scalable and can actually be used on a large scale.