A medium sized box that requires the user to succeed in a game of hang man in order to gain access to the contents of the box.  Great gift Idea!!!

my Arduino sketch will be included in this instructible

sorry for the poor quality pictures!
and keep in mind this is my first instructable,
and I forgot to take pictures of the build in process,
all of these pics are from the completed project.

If you have any questions send me an email and I will get back to you asap, NOI7734@gmail.com

I "borrowed" a lot of code from Dan Wagoner over at www.nerdybynature.com, you can find his "hangmamduino" project there as well, and Dan Wagoner if you somehow stumble upon this "ible", thanks for sharing your code, also I would recommend getting a copy of the "truerandom" library and incorporate that into your code as I did, as the native random function is "psuedorandam".

Step 1: Parts

I am not supplying instruction for the servo lock construction as the parts I used may not be easy to find, its ok just look at the pics below and you will devise something probably a lot better and cleaner ;-)

Parts needed:
1 - wooden box
1 - Arduino board with atmega 328
1 - 16x2 LCD display (get a good price at adafruit.com)
2 - 10k potentiometer (if you got your LCD from adafruit it comes with 1 so you only need 1)
1 - knob for potentiometer
2 - normally open momentary contact switch (button)
1 - servo
2 - 10k resistors
1 - speaker
1 - main power switch
1 - LED with built in mount and resistor
2 - plastic project boxes
1 - 9volt battery and battery strap
lots of wire and solder/soldering iron
parts to make the mechanical lock(I used random hardware I had laying around, see pic)
hot glue gun
dremel tool and drill

If you are going to take the atmega328 out of the arduino board to use the board with other projects later you will also need:

1 - piece of printed circuit board (PCB) or perf board
1 - atmega328
1 - 28 pin MCU socket
1 - 16mhz crystal
2 - 22pf capacitors
1 - 5 volt regulator
1 - 10nf capacitor
1 - 22uf capacitor (use radial lead not axial lead, non-polarized will not work)

<p>Thanks for you replay</p><p>oke i will try, I'll let you know if its works</p>
<p>Hai</p><p>I have the same problem, who can help, I use Arduino Uno a have a error </p><p>secretWord = guessWord.getChars();</p><p>Have also Arduino Mega or Mega 2560 tried</p><p>Kind Regards</p>
<p>change parts of the code into this:</p><p>const char letterVal[] = &quot;_abcdefghijklmnopqrstuvwxyz&quot;;</p><p>char guessLetter;</p><p>char guessLast;</p><p>char guessed[25];</p><p>const char* secretWord;</p><p>int guessedCount = 1;</p><p>int wordSize;</p><p>int gotOne = 0;</p><p>int alreadyGuessed = 0;</p><p>int showAsterisk = 0;</p><p>int buttonState;</p><p>int hangman = 0;</p><p>int totalRight = 0;</p><p>long lastDebounceTime = 0;</p><p>Servo lock; //create a servo object called lock</p><p>int button2on; //integer for button inside box</p><p>LiquidCrystal lcd(12, 11, 2, 7, 8, 9, 10);</p><p>String guessWord = String(42);</p><p>// hangman graphic characters</p><p>byte topleft[] = { 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };</p><p>byte topright[] = { 0x1C, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 };</p><p>byte bottomleft[] = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x1F, 0x1F };</p><p>byte bottomright[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };</p><p>byte head[] = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x00, 0x00, 0x00 };</p><p>byte topbody[] = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x04, 0x04, 0x04 };</p><p>byte bottombody[] = { 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };</p><p>byte rightarm[] = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x05, 0x06, 0x04 };</p><p>byte leftarm[] = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x15, 0x0E, 0x04 };</p><p>byte rightleg[] = { 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 };</p><p>byte leftleg[] = { 0x04, 0x04, 0x0A, 0x0A, 0x11, 0x00, 0x00, 0x00 };</p><p>byte leftarrow[] = { 0x10, 0x18, 0x1C, 0x1E, 0x1E, 0x1C, 0x18, 0x10 };</p><p>byte rightarrow[] = { 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x07, 0x03, 0x01 };</p><p>void setup()</p><p>{</p><p> lock.write(160); //set lock servo to locked position before it is attatched to prevent servo from moving to 90 degrees on startup</p><p> lock.attach(4); // Connected to servo to control lock</p><p> Serial.begin(9600);</p><p> pinMode (POTPIN, INPUT);</p><p> pinMode (BUTTONPIN, INPUT);</p><p> pinMode (SPEAKERPIN, OUTPUT);</p><p>// pinMode (servon, OUTPUT);</p><p> pinMode (button2, INPUT);</p><p> lcd.begin(16, 2);</p><p> lcd.clear();</p><p> lcd.setCursor(1,0);</p><p> lcd.print(&quot;CACHE&quot;);</p><p> lcd.setCursor(1,1);</p><p> lcd.print(&quot;NAVN&quot;);</p><p> delay(5000);</p><p> // pick a random word using analog 5 for random data</p><p> //randomSeed(analogRead(4));</p><p> newWord();</p><p> //draw the board</p><p> draw_board();</p><p>// digitalWrite(servon, HIGH);</p><p> lock.write(160);</p><p> delay(1000);</p><p>// digitalWrite(servon, LOW);</p><p>}</p><p>void newWord(){</p><p> //pick a random word from the list</p><p> int pick = TrueRandom.random(NUMWORDS);</p><p> const char* pickWord = words[pick];</p><p> guessWord = pickWord;</p><p> secretWord = guessWord.c_str();</p><p> wordSize = guessWord.length();</p><p> Serial.println(guessWord); // print the word to serial for cheaters like me ;) ...or for testing purposes.</p><p>}</p>
<p>hmm.... can't get it to work, could it be that it wont work with arduino uno?</p>
<p>The servo keeps living its own life, and when i connect a button to digital 6, the game automaticly Wins......</p>
It's always nice to see someone &quot;borrow&quot; code. Thanks for the credit...and the random library tip. When I was writing the code I never guessed someone would use it for a lock. Hopefully you also included more words in the dictionary. :)
yes I found a list of the 42 hardest words for hangman, so I used those words, I think my father will be pleasantly surprised with the challenge to get to his fathers day gift, :-P.

About This Instructable


10 favorites


More by NOI7734: Arduino powered hangman giftbox/lockbox
Add instructable to: