Electric Foosball Table
Want to create a mini foosball table? This foosball table has an automatic score keeper.
Make Platform
Cut a 24x13 inch wood board
Wood board should be less than half an inch thick.
Cut 24x7 inch wood plank x2
This will be the long sides. Make sure to have two of these planks.
Cut a 2" by 2" hole on the bottom corners of the long planks.
These will be the outlet for the chute.
Cut 14x7 inch wood plank x2
This will be the short sides. Make sure to have two of these planks.
Drill three screws 3 1/4 " high from the bottom, equidistant on the horizontal axis.
Do this on the lengthier planks(i.e. the 24x7 inch wood boards).
Do this for both sides. The screws should be pointing into the base. They will be used to hold up the actual field (i.e. the playing surface).
Drill six 9/32" holes 1 1/4" from the "top" of the longer boards.
These will be the holes for the rods of the players.
Screw the four planks together.
The 14x7 have an extra inch than the actual field. This is to compensate for the thickness of the walls. Place the shorter planks on the ends of the longer ones, like bookends.
Set Up the People
Cut a "goal hole" into both short ends of the 24"x13" board
This will be the playing field. After cutting the holes, place the board into the " box" that is the main structure of the table.
Cut 2' rods from 1/4" 2 count thread (steel all-thread) x 6
These will hold the players to hit the ball.
3D print 8 people for each team x 2
These will be the players.
Make sure that they have a hole 1/4" wide so they can slide onto the rods.
The people should be about 3 inches tall, with the hole for the rod above 2" with 1" left on top.
Fix the people into position
Each team has three rods, alternating starting from the teams defending side. The farthest back rod (defense) should have two players spaced evenly; the middle and front rods, three. Spacing is up to your discretion.
Use one nut on either side of each player to fix it into place after sliding the rods into the holes.
Tape the ends to prevent stab-based injury.
Set Up the Electronics
Necessary Materials:
- 1x Arduino uno
- 1x lcd monitor (16x2)
- 1x potentiometer
- 1x button
- 2x flex sensor
- 40 pin cobbler breakout set
- around 20 wires
- 2x 330 ohm resistor
Set up configuration
It's a mess, so just look at the picture and try to follow aight.
The Ball Chute and Score Counter
Cut two melamine boards 2" by 15"
These will be the bottom of the chute
Cut two melamine boards 2" by 13" (ish)
These will be the barriers of the chute to prevent the ball from slipping. I say ish because they will need to be a bit longer than thirteen so you can wedge them in.
Drilling the screws (both sides)
Drill one screw into the short plank just below the playing field and far away from the ball outlet. Drill another about 1 1/2" below the goal hole.
Cut 2" by 3" planks x6
Wood glue the planks into two C-shaped cuffs.
These will stop the ball as it comes down the chute.
Wood glue the cuffs as covers over the ball outlets.
Open faces should face up, down, and into the outlet.
Wedge the long melamine boards under the first and far screw, then over the second screw, then under the far face of the cuff.
Wedge the short melamine boards lengthwise just pass the chute base
Tape or glue the bend sensors partially extending into the ball outlets
These should pick up the ball passing through the chute and add one to the respective score.
Tidy Up Those Wires
Velcro the breadboard and arduino to the inside of the box
Use zip ties and velcro to tie up any loose wiring and prevent any interruptions to the game
Code It Upp
Upload this to the board.
#include
LiquidCrystal lcd(12,11,10,9,8,7,5,4,3,2);
//idk, this was in some example code... :// const int flexpin1 = 0; const int flexpin2 = 1; const int resetButtonPin = 1;
//for player 1 and player 2 int score1 = 0; int score2 = 0;
void setup() { Serial.begin(9600); pinMode(resetButtonPin, INPUT); lcd.clear(); lcd.begin(16,2); lcd.print("Blue: 0"); lcd.setCursor(0,1); lcd.print("Red: 0"); }
void loop() {
int flexposition1; int flexposition2; int button1State; button1State = digitalRead(resetButtonPin);
//analog must be in A0 flexposition1 = analogRead(flexpin1); flexposition2 = analogRead(flexpin2);
Serial.print("sensor1: "); Serial.println(flexposition1); Serial.print("sensor2: "); Serial.println(flexposition2);
if (flexposition1 >= 725 || flexposition2 >=760) { if (flexposition1 >= 725) { score1+=1; } else if (flexposition2 >= 760) { score2+=1; }
lcd.clear(); lcd.setCursor(0,0); lcd.print("Blue: "); lcd.print(score1); lcd.setCursor(0,1); lcd.print("Red: "); lcd.print(score2); Serial.print("Blue: "); Serial.println(score1); Serial.print("Red: "); Serial.println(score2); delay(3000); }
if (button1State == LOW) { score1 = 0; score2 = 0; lcd.clear(); lcd.setCursor(0,0); lcd.print("Blue: "); lcd.print(score1); lcd.setCursor(0,1); lcd.print("Red: "); lcd.print(score2); Serial.print("Blue: "); Serial.println(score1); Serial.print("Red: "); Serial.println(score2); } delay(100); }