My name is Brittany and I am a rising senior at Schreiber High School. Throughout my time at BlueStamp I built my starter project, an Exploding Star LightOrgan, and a GPS Buzzing Box. I chose to build this as a variation of the BuzzWolf collar because I wanted to build something that was more practical than a vibrating dog collar, but this collar seemed like a good starting place. This variation allows a person to track an important object, such as a laptop or a child, from anywhere in the world. When it is outside of a certain range, motors attached to the device vibrate and the person is able to use the GPS coordinates of the valuable object to locate it.
Before BlueStamp, I had some experience programming, but none with building my own projects. I had taken a college intro to programming course in Visual Basic and the AP Computer Science course in Java. Though my project did not involve programming in either of these languages, I was able to apply what I learned in these courses to create the code for my project. I became a much more confident programmer and I learned the syntax of a new language.
Since I had no experience with physically creating a project, I quickly had to learn many new skills to apply to building both of my projects. My starter project taught me the basics of soldering and circuitry, and my main project taught me about 3D modelling. While designing the encasement for my project, I learned that I found the software much more rewarding than creating the model. The most important thing I learned through my time at BlueStamp, however, was not these skills; rather it was how to be more confident in my work and my attempts at solving any problem I face.
FINAL PROJECT
My final project not only has the GPS wirelessly publish its coordinates to a web client via the Particle Electron, but it also receives the web client’s location and calculates the distance between the two sets of coordinates. When this distance is greater than a given distance, small motors attached to the Electron vibrate.
The biggest challenge I faced was writing the code to calculate the distance between two sets of coordinates because the earth is not flat and therefore there is no simple linear distance between two points. I had to use the Haversine formula to calculate the distance between the coordinates in kilometers and then convert it to miles and feet afterwards. This formula has many parts and it was difficult to keep track of the parenthesis and different functions within the formula. The syntax for the Particle also requires multiplying an expression twice instead of including a shorthand way to square it. The first few times when I was testing my code for the Haversine formula I ended up hundreds or thousands of miles away from the correct distance. After meticulous inspection, I was able to fix the code and have it accurately return the distance between two sets of coordinates.
After the issue of calculating the distance was solved, I was faced with the challenge of sending coordinates from the web client to the Electron. Even though the string sent to the Electron contained the web client’s coordinates, it was only receiving an empty string. When a string was manually inputted to send from the client to the Electron, the distance function correctly worked.
Schematic:
2nd MILESTONE
My second milestone is getting the GPS to publish coordinates to a web page via a Particle Electron. A Particle Electron is a microcontroller that is able to wirelessly relay information. A web client runs that displays the coordinates of the GPS connected to the Electron, giving people the ability to track their valuables from anywhere in the world. The web client sends a get request to the Particle Cloud using the Particle API plus the Electron’s device ID and access token to verify the user’s authenticity. The Cloud sends this request to the Electron, which returns the coordinates of the GPS to the web page via the Cloud.
One of the challenges I faced was that I had to familiarize myself with JavaScript in order to get the web page running, including the API and get and post requests. When the webpage was running, I discovered that there was an issue with the code uploaded to the Electron since it was only sending back zeros for the latitude and longitude, but the example code from the library was sending back the correct information. I also had to set a variable in my code that the web page could access, since it can’t access the GPS coordinates directly.
My final project will be able to send a post request from the web page to vibrate small motors attached to the Electron when the difference between the GPS coordinates and the coordinates of the web client is greater than a certain distance.
1st MILESTONE
My first milestone in my project is that I got my GPS unit to correctly transmit information to the serial monitor via an Arduino Uno. The way the GPS works is that it measures its distance from at least three satellites to calculate a set of coordinates and an elevation. Originally, the wires I was using as connectors to the Arduino were coming out in multiple strands, so I soldered the strands together in an attempt to get them to fit in the pins. However, the connections to the Arduino pins ended up being loose and the GPS couldn’t send information. When the problem was discovered, I soldered male headers onto the ends of the wires and covered the uninsulated connections with heat shrink. Once the connection issue was fixed, the GPS could convey the information, but only when it had an unobstructed view of the sky. This was another issue since I was working inside. To fix this we added longer wires to the ends of the wires I had and then taped the GPS to the end of some cardboard so I could suspend it out the window and get coordinates while I worked.
At the moment, the GPS coordinates are being displayed through the serial monitor on my computer. Next, I will switch out the Arduino for a Particle Electron since the Electron can wirelessly transmit information via GSM.
STARTER PROJECT
My starter project was the Exploding Star LightOrgan, which displays an animated exploding star effect via LEDs controlled by the beat of music. The way the project works is that the microphone has a variance capacitor in it which sends small, varying currents towards the rest of the circuit. The small signals sent through the circuit next reach transistors, which amplify the signal so that the changes in current are significant enough to affect the rest of the circuit. The 555 IC receives energy in pulses, activating a timer. The output from the 555 IC becomes the input for the 4017 IC, and the pulses activate a counter. As the counter increments, different pins are the ones that output current and therefore different parts of the circuit receive current. The next set of transistors are being used as switches to monitor the power flow to the different subsets of LEDs, which light up in a pattern based on the original sounds picked up by the microphone.
This project taught me a lot about electronics, specifically transistors and capacitors. Since I had mixed up two of the transistors, when I went back to fix the issue I researched what the differences between PNP and NPN transistors are so that I would know in the future. Prior to this project I had nearly no knowledge on electronics, but after assembling the LightOrgan I learned a lot about circuitry and the various components I used.