• Project: Digital NFC Chessboard

  • Back
 by 

While at Warwick Manufacturing Group (WMG), I worked on a chessboard that was capable of monitoring and checking moves via NFC. At the same time, the chessboard was able to communicate with other similar chessboards over the internet. This allowed two players to play against each other without being co-located. The design of the electronics was being handled by an external electronics company, which decided to put an Arduino in each chess square to handle lights and NFC operations. Each of these secondary Arduinos then communicated over SPI to a primary Arduino that handled the move checking and outside world communication.

The first task in the project was to test out the electronics configuration and communication protocol between primary and secondary Arduinos. This was required, to make sure the communication between Arduinos was stable even when the interference of the NFC readers was factored in. I approached this problem by first learning how to make an Arduino from bear bones parts. Next I got to grips with an Atmel in circuit programmer and using it in the Arduino IDE. Finally I connected up 24 of these bear bone Arduinos and programmed them. I chose 24 as that represented 3 rows of the chessboard. I deemed this to be enough to test piece moves and the software. The Arduinos were on a breadboard and connected using jumper wires. The reasoning being that if it worked with the excessive interference induced in this configuration, then it would work when correctly laid out in a circuit board.

The next task was to write the software for the chessboard. This coding was interesting as I decided to leverage an Arduino Yun for the primary Arduino. This was partly because it had Ethernet built in, but also because it has a more powerful chipset running embedded Linux. This chipset was most helpful for handling the chessboard to chessboard communication. Overall the project helped me to not only improve my electronics skills but also continue improving my Bash, C++ and Linux knowledge.