Being at Penn far away from home many of us began to feel homesick and wanted to know where home was for comfort. Additionally, a friend of ours is very poor with directions and in the first few weeks of school became lost on campus itself many times and didn’t know how to get home as such we built luminary shoes.
What it does:
Our thinking began on the basis that there is no better way to show directions to a person on foot than utilizing their shoes since they can easily be seen while walking. So, we proceeded to build a system capable of activating LEDs to display directionality directly on shoes, thereby creating Luminary Shoes. Interpreting the output of Luminary Shoes is no difficult task: As you move around, a light located on the peripheral of your shoe will activate to show the direction of your house relative to your current location and orientation. Whatever direction the light points is the direction of your house. For example, if the light on the right side of your shoe is currently lit, your house is to your right. If you want to get back home, simply orient yourself so that the LED at the front tip of your shoe is lit and walk in that direction.
How we built it
There are two main components of the project: the GPS vector and the orientation vector. We hardwired the address of our “home” into our code as latitude/longitude coordinates. This sets a base from which your current GPS location is compared to. This is stored in the form of two doubles: latitudeHome, longitudeHome.
We use a Arduino shield called 1shield to use all of the phone sensors and incorporate them into Arduino. This shield connects with Bluetooth with the Android phone. 1sheeld has an application that is downloaded from the play store. From there you pick the 1sheeld from a list of available devices to pair with over Bluetooth. Once the specific 1sheeld is selected, you are brought to the home screen of the application. There is a list of all the different shields available to use. From the list select the GPS shield. Then in the top right of the application window press the shield button and be taken to the screen opening the GPS shield. After you press the lock button in the bottom left corner you will see your current GPS coordinates in longitude and latitude. Within the code it was very difficult to actually read the data from the 1sheeld. Since it was the first time anyone in ESE was using the 1sheeld it had to be completely debugged. In the documentation online getters were provided in order to access the data from the 1sheeld but they initially would not work. With the help of a grad TA, we were able to figure that that instead of using Serial.print we had to add a new library to print out the results differently. At the top of our code we included all of our libraries and the specific shields we were using. We stored the current longitude and latitude in two doubles. In addition the 1sheeld did not just provide the values. It also provided a string of garbage values that we were not able to remove. We changed the baud rate many times and tried to troubleshoot the issue but could not find a solution. It did not impact the functionality, but when printing the data it showed up on the moniter. We used 9 degrees of Freedom sensor (9dof) to find the orientation of the shoe. It provides the x,y,z axis acceleration as well as compass data. We removed the code provided for the acceleration data and only looked that the compass data. The compass data provided us with heading off of north. We could access the data with simple getters which we printed out to the Serial port to understand. The sensor was very accurate when it was pointing directly north. We checked this with the compass built in on the iPhone. As we turned the sensor around the inaccuracies increased. At 180 degrees, the sensor was off by around 20-30 degrees. This may have been due to the significant interference from the tools in Detkin lab or that the sensor was not properly calibrated with the temperature. We saved the heading off north in a double. Now that we have all of the data we can manipulate it in order to create our final vector. We converted all units to degrees. For the longitude/latitude data this can be done with a series of sine and cosine additions. For the orientation, the data was given in degrees already. Once the data was all in the same units, we subtracted the orientation angle from the GPS vector to provide us with our final vector in terms of an angle off of north. In terms of Hardware we had 8 LEDs each pointing in 45 degree sweeps offset by 22.5 degrees around the shoe. For example, the LED pointing front went from -22.5 degrees to 22.5 degrees. The second LED went from 22.5 degrees to 67.5 etc. Around the bottom of the shoe soles along the side a wire goes around that is constant ground. We stripped sections of the wire in the middle to prevent short circuits while allowing all the LEDs to connect to one ground to make the product more aesthetically appealing. Each LED had an individual power supply so that they can be controlled individually. The LED’s also had a conditional so that they only changed if the angle changed by more than 10 degrees. This was so that the lights wouldn’t flicker back and forth between the LEDs. There are a series of if and else if statements to control each light. Challenges We ran into Debugging the 1shield took a significant portion of time as I mentioned earlier. We could not receive the data or get rid of the garbage values. Accomplishments that We're proud of Debugging an entire new technology that had not been used in ESE yet.
Promo Video: https://youtu.be/49U8cimsVMI