Klugephrase

My wife and I were getting bored of the word lists in Electronic Catchphrase. It claims it has “10000 words”, but we’ve definitely cycled through them.

My workplace is having an engineering showcase for Engineer’s Week, and as an organizer, I couldn’t show up empty handed, could I? Then Make decided to have a Make: Day at my local science museum, and they mentioned they were taking submissions for their showcase.

Enter Klugephrase!

Klugephrase

I made my own expandable “Klugephrase” handheld game. You turn it on, and it shows a list of categories. you pick a category, and it shows you a word from that category. It ticks periodically, signifying a time limit. You can go forward and back through words, and you can mark words as completed. The buzzing gets faster, and the pace quickens. *BUZZ*! Your round is over. Your completed word score is shown.

It uses an Atmega168 for the core, and it is Arduino compatible. It can be reprogrammed and it has a telnet and Python front end for easily adding new words through USB. All the source for both the device and the wordlist updater is available at github, so feel free to browse or make changes.

Features

  • Easily updated through USB
  • Can store more than 250 thousand characters
  • Larger screen than Electronic Catchphrase
  • Pause!
  • You can go forwards and backwards through the words
  • You can mark words completed
  • Flexible scoring

Updating

To update Klugephrase, use the Python command line script. If there’s any demand, I can make a graphical version. The Python script is located on github. It works on Linux and Macintosh, and should work on Windows. Download klugephrase.

klugephrase.py -h
Usage: klugephrase.py [options]
    
    Program attached klugephrase device with wordlists.
    
    Remember to format the wordlist with one word per line, with category
    headers enclosed in square brackets.  The maximum length of any word or
    category header is currently 15 characters.
    
    Example:
        [The Office]
        Jim Halpert
        Michael Scott
        ...
        [BSG]
        Starbuck
        Caprica
        Apollo
        Galactica

    Remember to hold down the programming buttons on the device after running
    this program to activate USB mode.

Options:
  -h, --help            show this help message and exit
  -f FILENAME, --file=FILENAME
                        read data from FILENAME
  -p PORT, --port=PORT  use serial port PORT
  -v, --verbose         
  -q, --quiet           
  --parse-only          Parse FILE only.  Do not connect or program
                        device.

There is a sample wordlist included with the script package.

Hardware Details

The microcontroller is an Atmega168. It uses the Adaboot bootloader.

Klugephrase uses a 256k i2c EEPROM, and a 16×2 black-on-green HD44780 character LCD. Klugephrase uses most of a Mintyboost boost regulator to power itself off of two AA’s.

A schematic will be posted.

Upgrades

  • The LCD has a backlight. It could be software controlled or detect ambient light.
  • The memory management of the eeprom isn’t great. It could increase word count dramatically if it was reworked.
  • I would like to add an options menu, where you can specify the number of rounds, number of teams, round length, pace of buzzer, and store this in the eeprom as well.
  • I would like to add a high score option with initials, like arcade games.
  • I would like to add a spaced repetition mode for practicing flashcards. It should store your progress and upload it back to the computer. It should be compatible with major spaced repetition program.
  • I would like to add a plugin so Wikipedia category pages can be parsed and loaded automatically.

Photos and Video

More photos and video are available at the Flickr set Klugephrase. You can see more details on how I built it and the testing steps involved.

How long did it take you?

Klugephrase took seven days and about 45 hours from the moment I ordered the LCD to the “release” on the internet.

Kit?

If folks are interested in me generating a kit and writing a tutorial on some “advanced” Arduino/AVR topics, like interfacing with EEPROMs over i2c, interrupts, state machines, and things like that, let me know.

Questions?

Feel free to contact me with any questions or comments.

I’m aware the C isn’t the prettiest šŸ™‚ This is me “releasing early,” and “releasing often.”

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.