Introduction: Bingo Number Board

About: I graduated college with an associates of technical sciences degree in Aerospace Electronics. I currently work for Westport Yachts as an Electrical Sub Assembler. (I build electronic components for megayacht…

The PTO (Parent-Teacher-Organization) at my local school hosts a Bingo night twice a year, but they were missing one important thing...the numbers! I began designing and building a Bingo number board for them so they would have a more involving Bingo experience.

This project uses 3 Arduino MEGA controllers, I2C communication, and a bit of programming.

Components:

75 each: Normally-open push buttons. I used EowPower 7mm mini SPST Pushbuttons.

75 each: 100 ohm 1/8-watt resistors.

75 each: 10k ohm 1/8-watt resistors.

75 each: White LED's. I used Jameco Valuepro 8,000mcd 3mm White LED's.

4 each: Arduino MEGA controllers

About 500 feet of 18awg stranded wire (Red, Black, Yellow, Blue)

About 250 feet of 24awg solid-core hookup wire.

78 to 80 terminal blocks (I got mine from junk at work)

Heat shrink

Liquid Electrical Tape (optional, but works really well)

1/2" thick wood, screws, 1/8" particle-board panels, corrugated plastic (sign material)

Step 1: The Button Box.

I ordered this box from Amazon. It is a Saim ABS Plastic Waterproof Electronic Project DIY Junction Box Enclosure Case 263mm x 182mm x 60mm. Enclosure Box.

I started by drilling 75 holes spaced 5/8" apart. 15 holes across by 5 holes down. The top row is drilled across at about the middle of the box lid.

Step 2: Install Buttons.

After the holes have been drilled, install the buttons into the holes.

NOTE: Align the terminals of the buttons as in the picture. This will make it easy to run a positive bus wire between all buttons.

Step 3: Install Arduino, Bus Wire, and Begin Wiring.

Place the Arduino in a convenient location at the top left of the inside of the lid. Drill holes into the lid and use #4 screws and nuts through the mounting holes provided on the Arduino to attach it to the lid. Conversely, you can construct a mounting board with stand-offs.

The Bus Wire: The bus wire is a 24awg hookup wire with all the insulation stripped off. It makes contact with, and is soldered to, one terminal of every switch.

Buttons are wired directly from the open terminal of a button to an open terminal on the Arduino.

B1=2, B2=3, B4=4, etc. Write yourself a button map so you remember which button went to which pin.

Leave pins 20 and 21 open for I2C connections later.

Step 4: Diode Bank???

What's this diode bank shown in the picture? Why didn't you say anything about diodes??? What are you trying to pull here?

I'm sorry. Should have mentioned this in the beginning, but I didn't because this is my first instructable and I really don't know what I'm doing...but it's fun.

So, the diode bank is wired to divide the signal from 2 buttons, in order for the Arduino to distinguish between them. This proved to not work properly, and I had to abandon it after my board was complete. When B1 was pressed, B1 would light up on the display, but when I16 was pushed (the pair button) both B1 and I16 would light because I didn't build in a debounce feature. So, instead of the diodes, I installed a second Arduino Mega.

Let's continue...

Step 5: Spaghetti!

Okay, so I'm not the best at tucking my wires in neatly. Again, disregard the diodes and replace them with another Arduino.

At the bottom of this picture you can see a row of resistors. These are 10k ohm resistors tied to ground. Solder a wire from each button terminal (the same one that leads to the Arduino) and connect to a resistor. Each button gets a resistor tied to ground. This ensures that when a button is not pushed, the Arduino will register a definite no.

In other words, without the pull-down resistor, the Arduino may not register if the button has been released once it is pressed.

Step 6: Light Box

Build your light box to your own specifications. Mine was 4 feet by 2 feet, but proved to be too small when viewed from a distance. The white separators inside the box are constructed from corrugated plastic panels (sign material), but you can use whatever tickles your fancy.

Separate the box in a way to where there is space to mount and wire 2 Arduino Mega's and a terminal bar. You do not have to use a terminal bar, but it makes making connections easier.

Each individual box gets an LED and a wire leading toward the Arduino. I used 18awg stranded wire. Connect each wire to the positive side of the LED.

The negative side of each LED is tied to a ground wire. Daisy chain the ground wire between every LED, just as you did with the positive bus wire in the button box.

Step 7: Final Connections

All of the LED's are wired to the terminal strip. From the terminal strip to the Arduino, solder in a 100 ohm resistor on each connection.

The output of the Arduino is 5 volts and up to around 40mA, which is fine for the resistors I used in this project, however, when all LED's are lit, it pulls too much power on the Arduino, causing it to heat up. Adding the resistors will dim the LED's just slightly, but will reduce the amount of draw on the Arduino.

Step 8: The Numbers

The face panel of the Bingo board is what people will see. Each LED must align with each number, so take good measurements when setting up your face panel.

I used 2 1/4" holes and painted the face panel flat black. I then attached thin pieces of plastic (1/16" Lexan works, but I used bits of plastic I scrounged from trash at work) and painted numbers on them. I then painted the entire back side of the face panel with frosted spray paint to diffuse the light.

Step 9: Programming.

Using i2c from the Arduino Master Reader website, I linked the master and slave Arduinos together. This is a snippet of the code I used and augmented for my purposes.

On the master:

#include
void setup() { Wire.begin(8); // join i2c bus with address #8 Wire.onRequest(requestEvent); // register event }

void loop() {

void requestEvent() { if (digitalRead(2) = HIGH); Wire.write("B1 ");


#include <Wire.h>; void setup() {
Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial for output }

void loop() { while (Wire.available()) { // slave may send less than requested

if (Wire.read = 1) digitalWrite(2, HIGH); //B1 LED if (Wire.read = 2) digitalWrite(3, HIGH); //B2 LED if (Wire.read = 3) digitalWrite(4, HIGH); //B3 LED }

delay(500); }