Building a Reverse Geocache Proposal Box

Josh Robertson
Oct 11 · 9 min read

How to propose to your partner in a stunning way. Learn how to make a box that will lead you to marriage……hopefully. 😉

Code, mockups, and assets found here:

A reverse geocache box has a built in GPS inside and will guide you to certain coordinates and instead of you looking for a geocache at those coordinates, you carry the box with you and it will unlock and open at a predetermined location. I created a scavenger hunt with this box and included two other locks that are only opened after certain criteria is met.

Materials needed:


  1. Design and model the final outcome using CAD software.(optional)
  2. Find or build a box to hold all the components
  3. Wiring, coding, and putting everything together.
  4. Test run.
  5. MARRIAGE!?!? 😳

Design and Model:

As beneficial as it was to have a design ahead of time, don’t let designing and modeling up your project take up more time or thoughts than necessary.

Attempting to build DIY Arduino hardware projects can be daunting. Even someone like me that has made many projects still gets a little intimidated at first. I’ve learned the trick is to do a little bit of research and planning before and then just do it™ ✔️. Yeah, you’ll encounter obstacles and challenges but they are the way. Don’t give up.

For the proposal box I 3d modeled out a rough idea of what I was envisioning in my head before I purchased components or started the building process. I used the 3d model as inspiration for the rest of the project but as it progressed I deviated from the original design. I’d recommend using SketchUp or even just a pen and paper to get your thoughts going. As beneficial as it was to have a design ahead of time, don’t let designing and modeling up your project take up more time or thoughts than necessary. It’s easy to get distracted and never get to actually building the item or completing the project.

Finding a Wine Box:

It’s important to remember to have fun and be creative when it comes to these projects. Your project doesn’t have to be a clone of mine and deserves your creative touch.

Fortunately my dad had an old wine box that was deep enough to hold all the components instead of making my own from scratch. The box had already been re-purposed as a grade school science project, so it had some random holes and usage but nothing I couldn’t work through.

My locking mechanism is by no means secure…….but it gets the job done and holds the lid down. If my girlfriend wanted to she could have just ripped open the box, but that wouldn’t have been fun and I would have second guessed marrying her 😂🤣🤣 Regardless, the way each lock is controlled is by a servo that has a dowel attached to it. The servo moves the dowel an inch or so while the box is closed and connects to an eyelet on the top of the box which holds the box down. I learned this locking method on youtube from Petr Cermak here:

I’m not giving specifics when it comes to measurements because of how custom this box was, but hopefully the general idea of how it was accomplished will help you. It’s important to remember to have fun and be creative when it comes to these projects. Your project doesn’t have to be a clone of mine and deserves your creative touch.

“The desire to create is one of the deepest yearnings of the human soul.”

— Dieter F. Uchtdorf

Components, wiring, and testing! :

There are no pictures of me putting the keypad and LCD screen in place but the important part is it stays on the box. It doesn’t really matter where your components are located on the box, but be aware of where you’ll be soldering them on. The wires can sometimes get in the way if you don’t place them in accessible spots.

Made some holes and super glued the potentiometers to the box. After putting them in place I soldered on some wires and got ready to connect them to the breadboard.

As you can see in the lower bottom right corner I’m using two Arduino Unos and two battery packs. This is because I ran out of inputs on the uno and the second battery pack is for the servos. Instead of buying a bigger board, I just bought another Arduino Uno and used the Master Reader/Slave Sender model(discussed below) to help handle the load. Here are the requirements and limitations I had to work with:

Not including power / ground LCD — 6 data pins
GPS — 2 data pins (clean and quiet power needed)
Servos(3x) — 1 data pin (external power source needed)
Keypad — 7 data pins
Potentiometers(8x) — 1 analog

1 Arduino uno has:
• 14 IO pins
• 6 analog inputs

Due to these limitations and requirements I structured my components like so:

Arduino 1 - Master ReaderLCD
Arduino 2 - Slave SenderKeypad
4 Potentiometers
3 Servos (separate external power source)

What is the Master Reader/Slave Sender model?

The master and slave model is a way for two or more boards to communicate with one another. They communicate via the I2C communication protocol. I2C is a serial communication protocol that transfers data bit by bit along a single wire(SDA line). The implementation details are outside of the scope of this blog post, but I’ll include a few articles in the footnotes that go more in depth.

When designing which components are connected to what, it’s important to note that the LCD screen needs to receive communication from the master and not the slave.

With all of that being said let’s figure out how our system will work!

The Master Arduino:

The master controller will initialize everything. The controller’s main tasks will be the GPS and LCD.

It’s a good idea to initialize the GPS right when things get turned on even if you aren’t going to be using it for awhile. In my case I was planning on having the GPS be the last clue, but I wanted it to get a reading on the location. Sometimes it takes awhile for the GPS to find the satellites and get locked on.

The controller’s task will also be to keep asking the sender for more bytes. The master will ask, ask, and keep ASKING until the sender finally says “YES! They solved and unlocked one of the clues!”. Once the master receives a message that they solved a clue we’ll go ahead and show a message on the LCD screen.

Showing messages on the screen, annoying the slave, and handling the GPS is the master’s job.

The Slave Arduino:

The slave’s job is to detect and unlock any locks after a clue is solved. Once a clue is solved it will unlock a lock(move the servo) and send a message to the master telling them “Hey, another lock was unlocked!”.

Finalizing Everything:

Last but not least let’s create all the clues and set up your scavenger hunt! My clues were:

  1. Unlock 1 lock using the keypad
8 7 3 4 5 0
·· ···· –·· · ··–· ·–

This one was a bit tricky, but all I did was print out a piece of paper with morse code on it. It was laminated so the weather wouldn’t impact it and it was kept outside taped to a tree. You had to figure out the letters that corresponded with the code and then figure out the numbers that were associated with the letters….oh and zero-based numbering. A == 0 😅

2. Unlock 1 lock using the 4 potentiometers

With this one they had to orient the potentiometers in the correct orientation. Mine was left, up, down, and right. It’s important the code has a bit of a buffer just in case they aren’t exactly on the number you’re looking for.

I hid a paper with a QR code that they scanned that took them to a website which then had an image of a map and other random items that were associated with a location.

They’d then have to figure out either west, east, north, and south!

Ended up being a lot of fun!

And finally #3

3. Take the box to the correct coordinates and it will unlock itself.

The box should tell you how far away you are to the coordinates. So as long as you keep walking it will either be getting further away or closer. Which will eventually take you to your destination and unlock the box!

And hopefully your partner says yes!!! (mine did 😳🎉)

Hope you enjoyed this build! If you have any questions about the design, implementation, or just want to chat you can reach me on twitter.

(Twitter — @hossman333)

Josh Robertson aka Hoss.

PS: If you want extra credit you can even go to the extent of inspecting the elements on the geocache website and printing out a fake geocache. That’s what I ended up doing and it completely surprised her when I popped the question. Here’s what it looked like:

Josh Robertson

Written by

Software Engineer @ Day One

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade