Complete project summary articles.

BigTrak jr browser based LOGO programming

View of the modified BigTrak robot with BeagleBone and ChipKit mounted on the back.

The Bigtrak Junior is a re-make of a classic toy apparently. I'd never seen one before, I remember school having a couple of floor turtles but I don't think I ever got to play with them (probably because I'd been messing around too much and not doing my work!). Basically the toy is a little programmable toy car that takes simple commands from a keypad with forward, back, turn left, turn right, pause etc. This is all very well but with only one memory location for storing your program between use and no editor only a "clear and start again" it's not much fun trying to get it to do things. Wouldn't it be better if it could be programmed from a web browser and you could actually use some sort of save/load program option to store your ingenious route design? The solution I've come up with could be argued to be over-engineered some what and quite expensive but I like to look at it as "expandable".

Primary: 

Basic Python webserver for the BeagleBone

The official Python logo

The BeagleBone comes with a basic webserver written in Javascript in the bonescript.js file. This is run by node.js which is a browser-less javascript engine. This took a bit of reading about to get my head around because the idea of javascript being used to write server side scripts was a bit odd, but the whole server seemed implausible. Unfortunately when I tried to make this do what I wanted to do for the BigTrak project, node.js wouldn't work and seems to be in some sort of version conflict but has to be maintained at this version for the Cloud9 IDE software. Instead I decided to write my own web page server in Python.


Primary: 

WiFi hotspot and DHCP from a BeagleBone

Overview of the fully assembled BigTrak project.

The BigTrak project had to be mobile, and that meant having a WiFi card attached. This looked simple on the face of it, a USB host socket on the board and a modern 32bit Linux kernel, however it became more complicated partly due to the lack of sources for the embedded system and partly because of my ambitions.


Primary: 

LOGO program interpreter

A snippet of logo code

I was wandering how to store and represent the programs for the BigTrak. I wanted to stick to the original spirit of the toy and make it programmable via the web so I naturally got to thinking of LOGO commands. Most of my experience with the language was in a program called "WinLogo" ironically running on an Acorn Archimedes not Windows at all.


Primary: 

Opto encoded motors with the ChipKit Uno

Overview of the BigTrak project with the upper hull removed

Having replaced the electronics in a BigTrak junior, I needed some way to control it from my BeagleBone. Initial experiments with driving the L293D directly from GPIO pins were quite successful but I quickly discovered the opto-encoders on the toy were extremely high resolution and needed some proper real-time interrupt based handling. Doing this from the high-level Linux based environment on the BeagleBone just sounded too much trouble to me so I looked around for something a bit lower level to handle the opto-encoder tick counting. I was torn between an Arduino Uno and the ChipKit Uno. In the end I went for the ChipKit for two reasons, the BeagleBone I/O is only 3.3V and not 5V tolerant at all. This would have meant level translators were required on any interface between the Arduino and BeagleBone, but the ChipKit is already 3.3V. The other reason was at full speed the motor encoder ticks come through about 1200 times a second, with two that means about 2500 interrupts a second. I've got no idea how big the interrupt overhead is for the Arduino but I thought if I handle 16 or 32 bit tick counters in the interrupt with that frequency it is going to get a bit close to the limits of available CPU cycles, the ChipKit is 32bit and has an 80MHz clock so plenty of time to do all I needed. The features I've used are all available on the Arduino, due to some pin function constraints you'll need to swap around the pin order a bit but the code should work okay on an Uno (provided it can keep up).

Primary: 

Pages