Wii Whiteboard test = NEC projector + Wii Remote + Linux

Just a first trial of using python-whiteboard with a stock Wii Remote (those things run on bluetooth) and a screen projector on a wall. As an infrared pen – a TV remote.

Sorry, but the video has been taken using a potato, my Eken H9R is still somewhere between China and me.

So, I grabbed one of the spare NEC V311W projectors from work and tried to do something creative with it – an interactive whiteboard. Those things can be constructed in a few ways, including one that does not involve spending 10h+ on designing your own PCBs and sourcing components – just buy a Wii Remote. Wii Remote is a brilliant, 10 year old thing. It consists basically of an accelerometer, gyro, some buttons, I2C communication, Bluetooth and … a 128×96 monochrome camera? What? That little? Well, the trick lies in a subpixel processing for tracking infrared points that is actually done onboard – the usable output is 1024×768.

Ok, some let us assume that you have a screen, a laptop, TV remote (as a cheap’n’dirty infrared source) and a Wii Remote, all set up in a room. What next? Time to download some software to calibrate and process the movement. I chose a pretty popular python-whiteboard, but for some strange reason I kept running into stupid problems with:

Traceback (most recent call last):
File "python-whiteboard-test", line 23, in 
if __name__ == '__main__': main()
File "python-whiteboard-test", line 20, in main
pywhiteboard.main()
File "/home/anil/wii/python-whiteboard/stuff/pywhiteboard.py", line 675, in main
mainWin = MainWindow()
File "/home/anil/wii/python-whiteboard/stuff/pywhiteboard.py", line 90, in __init__
conf = Configuration()
File "/home/anil/wii/python-whiteboard/stuff/configuration.py", line 124, in __init__
Configuration.__instance = Configuration.__impl()
File "/home/anil/wii/python-whiteboard/stuff/configuration.py", line 35, in __init__
version = self.getValueStr("version")
File "/home/anil/wii/python-whiteboard/stuff/configuration.py", line 53, in getValueStr
v = self.settings.value(name).toString()
AttributeError: 'NoneType' object has no attribute 'toString'

I tried fiddling with it, but a quick reverse to an earlier commit solved everything (well, I’m missing Qt5 for Qt4, but I don’t really care). So the route to getting it online:
make sure you have python-gattlib pybluez python-xlib numpy on your Slackware:

sbopkg -i "python-gattlib pybluez python-xlib"
sbopkg -i numpy

and download the python-whiteboard:

git clone https://github.com/pnegre/python-whiteboard
cd python-whiteboard/
git checkout e710a72
python python-whiteboard-test

That’s it 🙂

Leave a Reply