Video. Confronted with a floor safe, I built an auto dailer with an Arduino, a stepper-motor shield, a stepper motor, and T-slot style tubing. I used a PVC end cap and some foam tape to connect to the dial. The microswitch that you see in the video detects when the stepper motor stalls (which means that the combination has been found). Old hard-drive magnets hold the contraption in place on the safe’s steel door.
The video shows the original version of the software, which attempted to dial every combination. After filming this, I updated the software to consider a model of the lock (having purchased and opened an identical lock mechanism from eBay). The new software aimed to move the internal wheels and would turn the dial only as much as necessary to get the wheels where they needed to be, one combination at a time. (So usually the third wheel was advanced one position without needing to redial the first two wheels.)
After about three days I returned home to discover no sound from the garage. The autodialer has succeeded! The actual three-digit combination was off by 1 in one or two places, and when I opened the lock’s mechanism, brass dust emerged, probably because the dial normally doesn’t get turned that much in ordinary use.
–EDIT–
Looking through the source code’s comments:
- I had correctly guessed from the dial that the lock mechanism is a Sargent and Greenleaf 6600/6700-series three-number mechanical lock.
- When computing the next trial combination, the second number changes in descending order, which is best for the lock class.
- S&G documentation says to avoid all-ascending combinations and all-descending combinations. Avoid combinations with consecutive numbers closer than 5. Also avoid setting the third digit to 0–20 or 90–99. The code assumes that the locksmith followed these instructions.
- The dialer's progress is stored in EEPROM in case power is lost. When power is reapplied, the dialer starts where it left off.
- The lock's "wheel pack" actually has seven moving parts: the dial, the three wheels, and three "flies" that connect the other four parts.
- The step_left() and step_right() methods simulate the effect of twisting the dial by one position. These are used by methods like wheel_2_left_to(x) which repeatedly calls step_left() until the second wheel is set to position x.