I read about this back in 2009 and thought it was a cool idea, even purchasing some parts for the reverse geocache, but I never got around to making it.
Fast forward to 2013, and upon seeing those parts left alone in a lone Sparkfun box, I decided to revive the project.
Behold, introducing the Reverse Andycache!
My GPS module was out of order and I was lacking a screen, but I definitely wasn't lacking in the number of Android phones I had thanks to friends who graciously gifted old Android phones. So why not repurpose one of these phones for this project? After all, a smartphone has GPS and a screen that I can use for free!
Hence, the Reverse Andycache (short for Reverse Android-Geocache) was born. But here's what sets it apart from all other reverse geocaches: it is a multipurpose box. It is currently set up as a reverse geocache, but because of how it is controlled and operated, it can also be used for other purposes without ever touching the firmware on the box.
(To clarify, you only need a spare Android phone if the person you're giving this to doesn't have an Android phone. In my case, the recipient has an iPhone.)
The source code for my app can be found here.
As I will be entering the Make-to-Learn Youth Contest, here are my answers to the four questions:
What did you make?
I made a reverse geocache box that uses an Android phone as the UI as well as the GPS. The box itself has no screen or GPS, a departure from traditional designs. The phone and box communicate via Bluetooth, and all programming logic is done on the phone (with data stored securely on an EEPROM chip inside the box). Otherwise, it currently acts as a standard reverse geocache box.
The beauty of this design is that because all programming logic is done on the phone, the box is modular and can be repurposed for other things (for example, a lockbox, or perhaps a very good alarm system that would hide a regular alarm clock inside the box >:D) by simply writing another app that uses the box's functionality in a different way.
The Reverse Andycache required quite an extensive list of materials and tools, such as the IOIO Mint, some assorted electronics bits and pieces, a servo, an old phone, and tools such as a drill, saw, and soldering iron.
How did you make it?
I had been inspired by the original design back in 2009 but never really had time to work on a box of my own. So when I was thinking of creative ways to ask someone to my senior prom (as it's my senior year of high school), I eventually thought of making one of these.
The electronics and programming were 100% designed, built and coded by me (with a little programming help from Ytai Ben-Tsvi, creator of IOIO). The mounting, drilling and other physical tasks required some assistance from my mom and uncle, who have a garage full of tools and supplies.
Where did you make it?
I worked on the box mostly at home, with a little bit of work done in my hotel room in San Diego. Over 100 hours were put into writing the code (which is admittedly rather rough in quality, but that's expected for writing so much code in so little time), and about 20 hours were put into planning the electronics, wiring them up, and building the box.
I figured that because I was going to ask to prom a member of another FIRST robotics team, a project like this one would go perfectly.
What did you learn?
Never expect to finish a huge undertaking like this in less than a week :P
Fortunately, when you're coming up with something like this for a prom proposal, I found there are always people who are willing to help! Many thanks to my friends who provided materials, feedback, phones, or just thought it was awesome and wanted to help in whatever way possible.
I learned how to use the IOIO platform with Android (and Ytai has done an awesome job in making it easy to use in Android development) as well as how to use SMS messaging (to an extent), block location spoofing in apps, and how to use servos.
A few pitfalls that I noted:
-The Galaxy S series of devices have issues with locking onto GPS (confirmed using GPS Test/GPS Status apps). Flashing new ROMs seemed to solve the issue.
-IOIO is only capable of a maximum 127-byte read operation over I2C (I was trying to read 256). Ytai pointed this quirk out in the IOIO firmware. My code now only does 64-byte reads at most.
-Android 4.2.2 implements whitelisting for Android Debug Bridge, and my laptop's USB ports are non-functional. I ended up having to manually transplant my laptop's RSA key onto my phone to whitelist it for wireless ADB.
-Servo locking mechanism is one of the trickiest parts of the physical build: the mechanism needs to ensure the box stays locked, it needs to be physically strong and resist forced attempts to open, and it needs to be reliably controllable. I went through 4 different locking mechanism ideas before settling on this one.
-Making a board from scratch is always a pain. I'd try to have a PCB etched next time.
I'm proudest of having finished this project in such a short period of time given the demands of school, scholarship applications, robotics, etc. Writing over 1500 lines of code (the bulk of my app) in 3 days is no easy feat. And the finished appearance of my Reverse Andycache is aesthetically pleasing, always a bonus.
If I had to do it again, I would spend more time making a better UI (I personally think I suck in making functional UIs) as well as writing cleaner code. In addition, I'd try to get a better soldering iron and use that (it's always a pain to use firestarters, but I didn't really have any other option for this project).