Of course that's an overstatement that we start directly with the PCB design - but then again it's a great way to think about the project a few times. Have I remembered everything I need? Will the controller be able to handle all peripherals? will it fit and so on.
I usually use DesignSpark PCB which is a nice free CAD tool. I prefer it over EAGLE because the library management is more intuitive (to me). I've been using it since 2009 for my home projects so this was of course the first thing to fire up for designing the OpenJoust.
The OpenJoust is based on the Arduino Pro Mini design which suits the platform nicely. The ATmega168 is (should) be more than capable of running the player node and handle communication with the main node.
One of the first things to lock during the design is the pCB outline. Is there any special requirements for the outline - mounting holes or plugs that needs to be placed in a special way? For the OpenJoust there is not special thing. only the mounting of the system is to be considered. The player should be able to hold the node in his/her hand while being able to see the indicator light.
Just like the Opentilt I found a PVC pipe for the handle - the indicater will also light up a pingpong ball on the top of the pipe. Unlike the Opentilt and more like the Move controller, the pingpong ball will not fit inside the pipe but rather 'lay' on top of the pipe.
With the handle more or less thought out I now know the with of the PCB. The internal diameter of the pipe gives this. Any component that has a significant height (radio module and headers) should be located accordingly.
The processor, accelerometer, radio(header), indicator lights, charger and programming pins. okay - GO!
I quickly found the different pieces. It's already worth mentioning that the accelerometer was chosen because of its ability to generate interrupts. It should be possible to configure it for transient interrupts! perfect for the Joust game: just config the whole system for a player and then go to stand-by. the player is a live until the transient interrupt is triggered and BAM! update the player status to 'dead'. nice and simple. Of course we need to check in with the main unit to see if we're the only player left but we should be able to save quite some battery during the game here!
The indicator light quickly became two RGB LEDs. I want as much light as possible which means another thing - driving the diodes directly from the battery = transistors. I have chosen a normal MOSFET N-channel for this purpose. To further help the light spread evenly in the pingpong ball I have found a small package for the LED. This allows me to mount the LED on the edge of the board rather than on top and bottom. the light should spread nice inside that ball.
Okay, enough talking, let's order the PCB's and wait!
This is the result: