Friday, May 13, 2011

Kit review – nootropic design Hackvision

Hello readers

Time for another kit review – the nootropics design Hackvision a nice change from test equipment. The purpose of the Hackvision is to allow the user to create retro-style arcade games and so on that can be played on a monitor or television set with analogue video input. Although the display resolution is only 128 by 96 pixels, this is enough to get some interesting action happening. Frankly I didn’t think the Arduino hardware environment alone was capable of this, so the Hackvision was a pleasant surprise.

Assembly is quick and relatively simple, the instructions are online and easy to follow. All the parts required are included:

The microcontroller is pre-loaded with two games so you can start playing once construction has finished. However you will need a 5V FTDI cable if you wish to upload new games as the board does not have a USB interface. The board is laid out very clearly, and with the excellent silk-screen and your eyes open construction will be painless. Note that you don’t need to install R4 unless necessary, and if your TV system is PAL add the link which is between the RCA sockets. Speaking of which, when soldering them in, bend down the legs to lock them in before soldering, as such:

Doing so will keep them nicely flush with the PCB whilst soldering. Once finished you should have something like this:

All there is to do now is click the button covers into place, plug in your video and audio RCA leads to a monitor, insert nine volts of DC power, and go:

Nice one. For the minimalist users out there, be careful if playing games as the solder on the rear of the PCB can be quite sharp. Included with the kit is some adhesive rubber matting to attach to the underside to smooth everything off nicely. However only fit this once you have totally finished with soldering and modifying the board, otherwise it could prove difficult to remove neatly later on. Time to play some games… in the following video you can see how poor my reflexes are when playing Pong and Space Invaders:

... the Hackvision also generates sounds, however my cheap $10 video capture dongle from eBay didn't come through with the audio ... ]

Well that takes me back. There are some more contemporary games and demonstration code available on the Hackvision games web page. For the more involved Hackvision gamer, there are points on the PCB to attach your own hand-held controls such as paddles, nunchuks and so on. There is a simple tutorial on how to make your own paddles here.

Those who have been paying attention will have noticed that although the Hackvision PCB is not the standard Arduino Duemilanove-compatible layout, all the electronics are there. Apart from I/O pins used by the game buttons, you have a normal Arduino-style board with video and audio out. This opens up a whole world of possibilities with regards to the display of data in your own Arduino sketches (software). From a power supply perspective, note that the regulator is a 78L05 which is only good for 100mA of current, and the board itself uses around 25mA.

Question – Who invented the video game Pong?

To control the video output, you will need to download and install the hackvision-version arduino-tvout library. Note that this library is slightly different to the generic arduino-tvout library with regards to function definitions and parameters. To make use of the included buttons easier, there is also the controllers library. Here is a simple, relatively self-explanatory sketch that demonstrates some uses of the tvout functions (download):

/* nootropics Hackvision display demo two > kit reviews John Boxall 13 May 2011 | CC by-sa */  #include #include #include #include #include   int x,y=0; int d=500; // used for various delays // declare screen resolution #define W 136 #define H 98  // create instance of TV TVout tv;  void setup()  {  // If pin 12 is pulled LOW, then the PAL jumper is shorted. pinMode(12, INPUT); digitalWrite(12, HIGH);  if (digitalRead(12) == LOW) { tv.begin(_PAL, W, H); // Since PAL processing is faster, we need to slow the game play down. } else { tv.begin(_NTSC, W, H); } randomSeed(analogRead(0)); }  void randomPixels() { tv.clear_screen(); // clears the screen for (int a=0; a<500; a++) { x=random(128); y=random(96); tv.set_pixel(x,y,1); // 1 for white, 0 for black, 2 for inverse of current colour at that location delay(10); } }  void randomLines() { tv.clear_screen(); // clears the screen for (int a=0; a<128; a++) { tv.draw_line(a,1,a,96,1); // x,y to x,y, colour 1 = white delay(50); } }  void rectangles() { tv.clear_screen(); // clears the screen for (int a=0; a<30; a++) { x=random(128); y=random(96); tv.draw_box(x,y,x+10,y+10,1,0,0,1); // top-left x,y, length, width, colour, fill (0 = no, 1 = yes) delay(50); tv.draw_box(x,y,x+10,y+10,1,1,0,1); // top-left x,y, length, width, colour, fill (0 = no, 1 = yes) delay(50); } }  void circles() { tv.clear_screen(); // clears the screen for (int a=0; a<30; a++) { x=random(128); y=random(96); tv.draw_circle(x,y,a,1,0,1); // x,y coordinates, radius, line colour, fill delay(50); tv.draw_circle(y,x,a,1,1,1); delay(50); } }  void loop() { randomPixels(); delay(d); randomLines(); delay(d); rectangles(); delay(d); circles(); delay(d); }

And the resulting video demonstration:

I will be the first to admit that my imagination is lacking some days. However with the sketch above hopefully you can get a grip on how the functions work. But there are some very good game implementations out there, as listed on the Hackvision games page. After spending some time with this kit, I feel that there is a lack of documentation that is easy to get into. Sure, having some great games published is good but some beginners’ tutorials would be nice as well. However if you have the time and the inclination, there is much that could be done. In the meanwhile you can do your own sleuthing with regards to the functions by examining the TVout.cpp file in the Hackvision tvout library folder.

For further questions about the Hackvision contact nootropic design or perhaps post on their forum. However the Hackvision has a lot of potential and is an interesting extension of the Arduino-based hardware universe – another way to send data to video monitors and televisions, and play some fun games. The Hackvision is available from Little Bird Electronics. If you are looking for a shield-based video output device, perhaps consider the Batsocks Tellymate.

As always, thank you for reading and I look forward to your comments and so on. Furthermore, don’t be shy in pointing out errors or places that could use improvement. Please subscribe using one of the methods at the top-right of this web page to receive updates on new posts, follow me on twitter or facebook, or join our Google Group for further discussion.

High resolution images are available on flickr.

[Note - The kit was purchased by myself personally and reviewed without notifying the manufacturer or retailer]

Otherwise, have fun, be good to each other – and make something! 

No comments:

Post a Comment