Requirements
Primary
- Able to magnetically move pieces for an opponent player
- Identify illegal moves and notify the user
- Connects to a server to communicate moves
- Identify when a player ends their turn through an input on the board
Secondary
- Identify each piece and its position on the board
- Identify improper board setup and correct it
- A timer for player moves
- Shut itself off after long idle period to save power
- Poll the server occasionally to check for game updates
Technical Specifications
Hardware
- Primary Parts
- Arduino Mega 2560 R3
- 2 SparkFun EasyDriver Stepper Motor Drivers
- 2 Stepper Motors
- 2.5 kg Electromagnet
- 64 Reed Switches
- Ethernet Shield
- Magnetic Chess pieces
- GLK-19264-7T-1U-GW LCD display and inputs
- Parts List
Software
- Chess game handler for server and client
- Algorithm to move pieces, move other pieces out of the way if necessary
- Algorithm to update board state from reed switches
Protocols
- Ethernet - communication between chess board and rest of Internet
- TCP - insure that dropped packets are recommunicated
Risks & Mitigation Strategies
- Magnet range too wide
- Make the chessboard's squares larger relative to the chess pieces.
- Difficulties with moving parts
- Recruit the help of Mechanical Engineering majors.
- Collisions while moving pieces
- Make the chessboard's squares larger relative to the chess pieces.
- Unreliable internet connection
- Have reliable protocol that acknowledges receiving of data.
- Magnets fail to move a piece
- Have the board piece positions after every move to ensure correct movement.
- Piece isn't aligned to square and signals incorrect move
- Adjust magnet range on pieces to ensure detection is reasonable compared to each square's detection range.
- High power usage resulting in overheating from board and electromagnet.
- Attaching heat sinks and writing the code to limit the time parts such as the electromagnet are on to allow as much time as needed to cool.
- Magnet is pulled up towards magnets on pieces
- Built motor carriage to hold down magnet stably