Introduction: Quiz-O-Tron 3000: Arduino Quiz Contestant Lockout System
If you have ever watched a TV quiz show you have probably seen contestants trying to press a button in order to win a chance to answer a question. The contestant’s quick reaction time results in some kind of light and/or sound indicating victory. This is a practical way to choose the next focus of the game’s activity and it adds a bit of excitement to the process. So when my company's holiday party planning committee decided to have a trivia contest I decided to build a quiz contestant lockout system to add an extra dimension of fun to the festivities. This would help the planning committee’s mission of creating some entertaining activities for the event.
The minimum requirements were to have a system with multiple buttons that contestants press for a chance to answer a question. The first one to press the button would lock out the other contestants. The system would need to have a simple way to quickly identify who pushed their button first. And finally the system would need to be reset for the next round.
Considering the venue of the holiday party (an upscale wine bar) I felt that the contestant buttons would be one of the most important features. They needed to be hefty and able to withstand abuse by hoards of “beverage enhanced” partygoers. Fortunately I had encountered a really good contestant button candidate while visiting the local office supply store. Staples’ “Easy Button”, as made famous in their humorous ad campaign, is available in their stores. This device is a palm sized button modeled after the one seen in the Staples commercials. It is battery operated with a speaker that says “That was easy” when the button is pressed. It is well made and the ideal shape and size for use by a quiz contestant.
Given that the button is a self-contained electronic device I was confident that I could open it up and extend the switch functionality to the system I was building. The $5 cost was reasonable for the quality of the item. Plus Staples is donating the proceeds from the sale of their Easy Buttons (up to $1,000,000.00) to the Boys and Girls Clubs of America. So, planning to build a system that would allow four contestants to play at once, I grabbed four of these and left the store feeling good about my purchase for a number of reasons.
Now that I had the contestant user interface worked out I needed to decide how to implement the system functionality. Due to time constraints this needed to be done with material I already had. This turned out to be an Arduino Uno, one of Adafruit’s Proto Shield kits and some miscellaneous parts. This intro section includes a picture of the completed system that I dubbed the “Quiz-O-Tron 3000” (QT3K for short).
Step 1: Tools and Materials
If you are new to microcontrollers or curious about controlling electronic devices with the Arduino, you may find this instructable helpful. In addition to some background info and explanations, I have included information in some of the steps that may provide you with techniques that can be used for other projects. I’ll discuss some alternate uses for the hardware built for this project later. But for now, here is a list of the tools and materials that were used to create the QT3K.
1 – Arduino ( http://www.arduino.cc )
1 – Adafruit Proto Shield for Arduino ( http://www.adafruit.com )
4 – Staples Easy Buttons
4 – Metal project boxes
1 – Plastic project box with aluminum panel
1 – 9V DC power source (battery, AC adapter, etc.)
20 – Red 5mm LEDs
21 – 3/16” rubber grommets
20 – Rubber feet
20 – 330 resistors
4 – 10k resistors
4 – 2.2k resistors
4 – PN2222A transistors
4 – 1.5k resistors
4 – 15k resistors
4 – 10uF electrolytic capacitors
4 – LM555 ICs
4 – 8 pin DIP sockets
4 – DB-9 female & chassis mount hardware
4 – DB-9 male & chassis mount hardware
4 – DB9 M-F cables with at least 4 straight through conductors
1 – panel mount momentary pushbutton switch
4 – perf boards
hookup wire
heat-shrink tubing
Velcro
solder
soldering iron
screw drivers
nut drivers
needle nose pliers
small hand files
Dremel tool
Dremel drill bits, cutting wheel and cutting bits
power hand drill
standard drill bit set
440 screws, nuts, washers
Step 2: Preparing the Buttons
Opening up the Easy Button was, well, easy. First I removed the batteries and the battery compartment cover. Removing the four small Phillips head screws (hidden under the rubber feet) on the bottom allow the three main parts of the switch to easily slide apart. The button face and the outer case ring lift off of the main assembly.
Upon close inspection of the main assembly we see the circuit board, switch mechanism, the speaker and the battery compartment. The first photo shows the disassembled Easy Button with some wires that were added to the proper points on the circuit board so that the switch could be connected to the QT3K.
After spending a few minutes with a multimeter I was able to locate the two points on the circuit board that could be tapped to access the momentary contact switch. The second photo shows a close up view of the button’s electronics and the locations that were tapped to extend the switch function outside the Easy Button case.
One side of a resistor was de-soldered to make room for the connection of the blue wire. The resistor was bent back a small amount to clear the area needed for soldering. This would allow for the re-installation of the resistor should I need the Easy Button’s original functionality reinstated. The yellow wire was connected to a solder pad that was unused. Both yellow and blue wires were routed out the bottom of the button via the open battery compartment so they could be connected to the QT3K master control circuitry. I then re-assembled the button making sure that the wires I added would not interfere with the mechanical operation of the button. This modification was repeated on the other three buttons.
[UPDATED Dec. 20, 2012]
Several people have contacted me about how to access the switch on a new version of the Easy Button that has a very different PC board layout. Thanks to Peter Hunt, Mark Samples and Layne Fielder for providing photos of the new Easy Button guts and working with me to develop and test a procedure to access the switch. Here are the results of our efforts.
The new version of the Easy Button has a part number of "T11A39" and a date in white lettering on the circuit board. See the third picture in this section. In this picture you can see that the mechanical part of the switch has been removed so you can see the circuit board traces with which the button mechanism makes contact to activate the circuit.
In order to extend the Easy Button switch functionality so we can connect it to the QT3K we have to tap into circuit board traces that connect to each side of the switch pad. This is more difficult to do on the new version of the Easy Button because one of the traces we need to tap into does not have an available thru-hole solder pad.
The next picture shows the switch pad on the circuit board (in the white circle) with the traces for each side of the switch pad highlighted; one side of the switch in red and the other side in blue. You can see that the blue side of the switch connects to a large trace that covers a large area of the board. While the red side of the switch pad has a narrow trace that runs a short distance and disappears under the black blob.
If you look near the black blob on the circuit board you will see that I have marked a blue circle around one of the thru-hole solder pads. This is where you can solder a wire to access the blue side of the switch pad. Just below that I have marked an "X" at the suggested connection point for the red side of the switch. The location of the "X" is just a suggestion. You can tap into this trace anywhere along it's run from the white circle around the switch pad to the "X". You just have to make sure you don't short anything or interfere with the mechanical part of the switch.
Making the connection to the red side of the switch is tricky. This is because the circuit board is covered in a coating that gives all the metal traces (and the other areas) a greenish tint. Before you can solder a wire to the narrow trace you must expose a small area of the metallic trace we are targeting. This can be done with a small curved knife blade or even some fine sand paper. Remember that the metallic trace that you are trying to expose is very thin. So take care not to remove much of the metal under the green coating. Once you have exposed enough of the metal trace to accept the wire you want to solder, apply some solder to the exposed area. This will help to clean up any remnants of the green coating and make it easier for you to solder a tinned wired to the trace.
One person reported that in order to get the switch working he had to break the connection between the red side of the switch and the black blob. This can be done with a knife by cutting across the trace running from the red side of the switch to the black blob. I marked the suggested location of the cut with a yellow line near the black blob.
When you solder a wire to the exposed trace it will not have a very good mechanical connection so you might want to run the wire for this connection in a way that provides some strain relief. Perhaps running the wire from the other side of the circuit board through one of the available holes would work.
If you are successful in making this modification and want to share your work with others let me know and we'll work out an email exchange. The last image in this section is from Layne Fielder who was successful in getting this mod to work.
Step 3: Building the Brains
Now that I had four contestant buttons it was time to create the brains of the Quiz-O-Tron 3000. This would detect the first button pressed and lock out the others for the appropriate time. It would also illuminate an LED to indicate which button was pressed first. There are a number of electronic methods that can be employed to accomplish these goals. I decided to use an Arduino since I was already working on some other Arduino projects and had parts readily available.
For those of you not familiar with the Arduino it is a microcontroller-based development platform and a wonder of the electronics age that reduced the time required to complete this project. Microcontrollers are relatively simple computers that interface with other electronic devices (sensors, switches, motors, lights, etc.) and, under software control, are able to interact with the real world. There are many different kinds of microcontrollers around today and you’ll find them almost everywhere. Automobiles, consumer electronics and hobby robots, to name a few, are big users of microcontrollers.
The Arduino is an “open source hardware” microcontroller development platform based on the Atmel line of microcontrollers. They are very powerful, relatively inexpensive, and made the creation of the Quiz-O-Tron 3000 easier since most of the critical functionality is developed in software.
The first photo shows the Arduino Uno, which, as of October 2010, is the latest version of the development platform. In the photo you can see the big integrated circuit which is the Atmel microcontroller chip. Surrounding that is a bunch of support circuitry designed for rapid hardware and software prototyping. This allows us to quickly add connections to external electronic components and upload software to the microcontroller. We can then interface to and control other devices (like our big buttons and LEDs).
The Arduino interacts with devices to which it has been connected via a number of input and output pins. The input pins can sense different voltages that are coming from interconnected hardware. And the output pins can send different voltages to interconnected hardware. These input and output voltages are within a range of 0 to 5VDC.
Connection to the microcontroller input and output pins are handled by the black jumper sockets located along the edges of the Arduino board. You can plug individual wires into these female headers or create a circuit board with male headers that mate up with the female headers on the Arduino board. The electronics that you want to control with the Arduino can be built on this mating circuit board. This creates what is referred to in the Arduino world as a “shield”.
The second photo shows the completed Quiz-O-Tron 3000 shield that is ready to be mated with an Arduino. The third photo shows what the shield looks like when mated with the Arduino Uno. Details on the electronic functionality that was implemented on this shield will follow.
Step 4: Let There Be Light!
Before getting to the details of the brains of the system I need to mention an enhancement that was added during the project’s development. Originally I thought that the system would light up one of four LEDs mounted on the master control console (MCC) to indicate the winning contestant. This eventually struck me as a bit boring. So the project experienced a little “feature creep”; a term that is very common in the electronics and software development worlds.
In order to give the contestants instant feedback when playing the game I wanted to add some blinking lights to the big buttons. I decided to mount each button on a metal box to accomplish two things. First, it gives the big button some weight. And second, it gives me plenty of space to mount LEDs and the related control circuitry.
The first photo shows a circuit that will blink 2 pairs of LEDs in a fast alternating pattern. This is done using one of the true “workhorses” of the electronics world – the 555 timer integrated circuit. By applying 9 volts to this circuit you get some mildly satisfying flashing lights. I mounted the circuit board in the big button box and drilled 4 holes to mount the LEDs around the big button.
You will notice in the first photo that half of the circuit board is unused. I plan to use this space for another feature that I wanted to add but did not have time to implement in this version. Here’s a hint: the Easy Button contains a speaker.
The second image shows the schematic diagram for the flashing LED circuit.
The third photo shows the completed contestant button. I drilled five holes in the top of the metal box; one for each of the four LEDs mounted around the button and one centered under the button. The wires that extend the Easy Button switch were routed into the box via this center hole. Note that the 5mm LEDs that I used are mounted inside 3/16” rubber grommets. I drilled the holes to fit these grommets and once those were installed I just inserted the LEDs. This made for a quick and easy way to mount them. I also installed a grommet in the hole under the Easy Button to protect the wires running through.
The forth photo shows the inside of the big button box. I used a Dremel rotary tool with a cutting wheel to notch out the mounting hole for the DB-9 connector on the side of the box. This allows for a cable to connect the button box to the Quiz-O-Tron 3000 master control console. The connector contains the 2 wires from the Easy Button switch and another 2 wires to carry DC power to the flashing LED board in order to activate the lights. Each big button box has these same 4 wires that are connected to the Quiz-O-Tron 3000 master control console brains (the Arduino shield). The Easy Button was secured to the top of the box with industrial strength Velcro as was the internal circuit board. As a final step for the button I added four rubber feet to the bottom of the box.
Step 5: Dissecting the Brains
Like I mentioned earlier the Quiz-O-Tron 3000 brains are implemented with an Arduino shield and an Arduino Uno microcontroller development platform. The shield contains the interface and control circuitry that connects to the four big button boxes and the Arduino Uno contains the software and input/output pins to make everything work. The brain’s shield is broken down into two main parts: the button switch input circuitry and the LED power control circuitry. Here’s a breakdown of what each main part of the brain’s Arduino shield does.
The switch input circuitry (one for each button) consists of a single resistor that connects one of the Arduino input pins to +5 volts. Then the same input pin is connected to ground via the Easy Button switch which is normally open. The Arduino software reads the voltage state of this input pin which is HIGH (+5V) until the button is pressed and then the state changes to LOW (ground/0V). This is how the Arduino program knows that a button is pressed and can then perform the programmed response to that event.
Once the Arduino senses that a button has been pressed we want to take the following actions: 1) light the winner’s LED on the master control console while flashing the LEDs on the triggering button’s box, 2) lock the other buttons out for 5 seconds before resetting for the next question.
Since we have a circuit that flashes the LEDs in the button’s box, all we need to do is send power to the LED circuit board in order to activate the lights. This is done with the power control circuitry (one per button) which is under the control of one of the Arduino’s output pins. The Arduino software controls the state of the output pin, whether it is HIGH (+5V) or LOW (0V). The Arduino output pin is connected to a transistor via a resistor.
In this configuration, the transistor becomes an electronic switch that controls the flow of power from the shield to the LEDs. When the Arduino software changes the state of the output pin to HIGH the transistor allows power to flow to one of the LEDs on the MCC and to the LED board in the associated big button box. The transistor does this by completing the power circuit’s connection to ground. The positive DC voltage for the LED power control circuit comes from the “Vin” pin of the Arduino. If we power the QT3K with 9 volts DC via the Arduino’s power connector we get the ideal voltage sent to our flashing LED circuit. The software then waits five seconds before changing the output pin’s state to LOW thus turning the transistor off and killing power to the LEDs.
We use transistors to control power to external devices because the Arduino output pins are limited to 5 volts at a maximum of 40 milliamps. The transistors allow us to control devices that require higher voltages and that draw higher currents. The transistors used in this project can handle up to 600 milliamps each. This allows for much more variety in the kinds of devices we can control with Arduino.
The first image shows the schematic diagram of the button input and LED power control circuitry that is implemented on the Arduino shield. This circuitry is repeated for each button with each one being connected to a different set of Arduino input and output pins.
The Quiz-O-Tron 3000 master control console includes the ability to report which button was pressed. This is done with the 4 LEDs mounted on the master control console. These LEDs are powered by the same circuit that is powering the blinking LED board in the big button box. You can see these LEDs in the second photo which shows the completed master control console.
The LEDs are arranged in the same pattern as the DB-9 connectors on the top of the console which is where the connection is made to the big button boxes. The red button next to the LEDs is used to reset the Arduino. It is connected to the “reset switch” area of the Adafruit Proto Shield. This comes in handy if you want to quickly clear the LEDs from flashing and prepare the buttons for the next question.
The case for the master control console needed to house the Arduino, shield, DB-9 connectors, LEDs and reset switch. I used a project case made of ABS plastic with a removable aluminum panel. I drew a template for the top of the case with the layout of the DB-9 connectors, the LEDs and the reset button. I checked the template for fit and made sure that the Arduino and shield would clear the DB-9 connectors when mounted on the removable panel. Once I was sure of my template I used see-through masking tape to completely cover and secure the paper template to the top of the case. I then used this as a guide for my Dremel rotary tool as I prepared the case for the hardware to be mounted there.
The Dremel tool made quick work of the case with a drill bit and a cutting bit. I then used a cutting wheel to cut the squared notches on the back side of the case which exposes the Arduino USB port and external power connector. Each was cut from the open side of the case (once the aluminum panel was removed) by making two parallel cuts up from the opening. I made the space separating the two cuts the width of each associated jack. I then scored a line between the two cuts at the appropriate “top” of each opening I was creating. Pliers were used to break off the two bits of plastic at the score lines to create the holes that would expose those connectors. Then a hand file was used to square and neaten each opening.
I also used the Dremel rotary tool to drill four mounting holes in the aluminum panel to hold the Arduino and shield securely in place. The third photo shows the bottom of the master control console where you can see the position of the Arduino mounting hardware. The forth photo gives you a peek inside the MCC. And the fifth show the Arduino mounted to the project box aluminum panel.
Step 6: The MCP
Now a bit about the Arduino software that ties all the hardware together and makes everything work as we would like. The Quiz-O-Tron 3000 Master Control Program (nod to TRON) continuously checks the state of the 4 input pins. When a state change is detected it then changes the state of the associated output pin (turning on the LEDs) and waits for five seconds. The output pin’s state is then reset (LEDs off) and the loop to check the state of the input pins repeats. From a programming perspective this is very simple processing. Here is a listing of the Arduino C programming code that performs these tasks.
/*
Quiz-O-Tron 3000 MCP
By Roy Rabey
Version 1.0 6-DEC-2010
*/
/*
Arrays to define the Arduino pin sets associated with the button boxes.
As defined below the first contestant button (element 0 from both arrays) uses pin 5 as input to detect a switch press and output pin 13 to drive the LED power control.
*/
int inputPins[4] = {5,4,3,2}; // The numbers of the switch pins.
int outputPins[4] = {13,12,11,10}; // The numbers of the LED pins.
// Some variables to control processing
int maxPins = 4; // Max number of pin sets
unsigned long WinDelayTime = 5000; // Number of milliseconds to light LEDs
void winner(int); // Function definition.
//
// Begin processing
//
void setup() {
/*
setup() is performed once when the Arduino is powered up or reset.
*/
// Initialize the LED pins.
// This tells the Arduino how the pins will be used.
for(int p=0; p< maxPins; p++) {
pinMode(inputPins[p], INPUT); // Make this an input pin.
pinMode(outputPins[p], OUTPUT); // Make this an output pin.
}
}
void loop(){
/*
The loop() function is executed after the setup() function completes.
As the name implies the loop() function loops forever or until the Arduino is reset.
*/
int val = HIGH; // Used to determine if an input pin's state has changed.
for(int p=0; p < maxPins; p++) {
// Read the state of each input pin.
val = digitalRead(inputPins[p]); // Reads value of the input pin.
if (val == LOW){
// If a pin goes LOW then someone pressed a button.
winner(p); // Call the winner() function with winning pin set.
}
}
}
void winner(int p){
// Set the output pin HIGH to send power to the button's LED circuit.
digitalWrite(outputPins[p], HIGH); // Turn the LEDs on
// Wait WinDelayTime milliseconds
delay(WinDelayTime);
// Set the output pin LOW to kill power to the button's LED circuit.
digitalWrite(outputPins[p], LOW); // Turn the LEDs off
}
One of the nice things about doing electronics with microcontrollers is that some of the project functionality is implemented in software; this makes it very easy to change. For instance, if I wanted to flash the LEDs on the big button boxes for 10 seconds I would just change the value of the "WinDelayTime" variable then compile/upload the new software to the Arduino and I’m done. This is much easier than having to recalculate values for electronic components used to do timing and then replace the associated hardware. While this project is a fairly simple Arduino application, you can do some amazing things with the Arduino. And if you’re interested in learning about electronics there are many Arduino-based projects that can help you. I would not have been able to build this project in the time I had available without the Arduino platform.
If you’re interested in learning more about this microcontroller development platform check out the Arduino project at http://www.arduino.cc.
Attachments
Step 7: The QT3K in Action
Here is how we did our trivia contest at our recent holiday party. As guests arrived they were each given one forth of a holiday card. One of their tasks during the evening was to find the people with the other matching pieces of that card. This randomized the attendees into groups of four. When it was time to start the trivia contest we set up three tables next to each other. The trivia contest host sat at the middle table with the Quiz-O-Tron 3000 master control console. We connected two buttons to the MCC and placed one on each of the other two tables, one for each competing team of four people.
We then brought up the first two teams to compete in a 5 question round of trivia. Once a question was asked, the first team to hit their button got to answer. We gave one point for a correct answer and -1 point for an incorrect answer so teams had to think carefully before hitting the button. Once the button was hit that team had five seconds to answer. Once their LEDs stopped blinking time to answer was up.
That game play dynamic made for some very entertaining rounds. If the round ended in a tie then we would have one tiebreaker question. If a team beat three teams in a row, that team would be retired to the championship round to compete against other champions. As it turned out we only had one team that was able to win three rounds in a row so they were declared the winners.
The holiday party trivia contest and associated game play turned out to be very fun and entertaining. Mission accomplished for the party planning committee!
Step 8: Final Thoughts
Earlier I mentioned alternate uses for the hardware built for this project. Here are some thoughts on that. The Arduino shield that was created can be viewed as a general purpose input/output controller board when you consider the following: 1) it has the ability to sense the state of four switches; 2) it can control voltages over the range compatible with the Arduino DC power input (7-12V); 3) it can handle 600mA of current draw for each of the output transistors when powered by a large enough DC power supply. This provides for a lot of possibilities.
With no changes to the Arduino shield as built in the project other than connecting it to different hardware, and changing the Arduino software, you can create many other cool projects. For example, you can build a robot with a couple of motors and bump sensors which could autonomously patrol your environment.
By moving one of the output transistors on the shield from pin 13 to pin 9 you would then have three of the transistors connected to PWM compatible Arduino pins. This allows you to do Pulse Width Modulation applications. For example, you could control strings of RGB LEDs and create rainbow colored lighting effects.
As you can see, the Arduino mixes well with your imagination and from an electronic hobbyist’s perspective is a blast to play with. I had a lot of fun building the Quiz-O-Tron 3000 and I’m planning some enhancements. I’ll be sure to update this instructable when those are implemented. In the meantime I look forward to any feedback you might have in the comments section. Happy tinkering!