I've built a somewhat simplified prototype of one of my boards. It uses 5 of the MCP23016 expanders to monitor 16 of my IR sensors and control 64 white LEDs. All of the expanders are on a single I2C bus, but soon I'll be testing the control of multiple busses with one PIC (shouldnt cause too much of a problem I think, I just have to write a wrapper for my i2c methods that switches between buses).
Right now, I'm using a glass baking dish to simulate the glass that I'll be using for the tables surface. I seem to have found a happy medium of sensitivity with the IR detectors; they are not set off by the ambient light in the room, only by items placed on the surface. However, some items are more responsive than others. For instance, a black roll of electrical tape absorbs most of the IR light so it doesnt trigger the detectors, but anything white or shiny does. The human hand seems to trigger the sensors as well, but not as well as I'd like.
Also, good news on the power consumption issue. The LEDs that I've got seem to be relatively bright regardless of the amount of current. If I put the full 25-30mA through them, they are visibly brighter, but not by much. Right now I'm actually running them at around 5mA and they are surprisingly bright. This means that each slave board draws a max of about 1.5 amps (the IR LEDs on the other hand need approx 30mA each). This means that my entire table should draw approximately 12 amps at 5 volts giving approximately 60 Watts when fully illuminated. The same as an average lamp.
I've taken a really crappy video of my prototype which can be seen here: **broken link removed** (~8mb). I used the video mode on my 3 megapixel digital camera to film this.
My next step will be to add some mosfets so that I can PWM the brightness of the LEDs and also to experiment with multiple busses. I've also been starting to play around with using the 64 LEDs as a scrolling message board. I will also test out my ability to control the I/O expanders on multiple i2c buses. Another issue that I need to fix is to add in some debouncing so that a sensor has to be triggered for a millisecond or two before being considered active/deactive (you'll notice some flickering in my video). Finally, I need to refine my software a bit so that the sensors are read primarily by interrupts, but a global poll as well every once in a while. Once I'm satisfied with the way my prototype is working, I'll go ahead and order my PCBs. I may also need to come up with some kind of PCB or free-form prototype for the IR sensors which consist of the LED, the IR transistor and two resistors (the LED and transistor have to be carefully aimed/positioned so that they work correctly.)