I framed but never really specified and could never
predict. One example I like is the idea I mentioned at the
beginning of this article of an emergent language: Over
time, a robot could map different sensations to different
prototypes. These prototypes would then be assigned
random combinations of phonemes as names, gradually
developing into a very primitive vocabulary. A processor
like the Parallax Propeller with an established vocal tract
library makes this project a bit easier to tackle. Imagine,
your robot telling you all about its feelings in its own
invented language! Well, maybe that is a project for a
future article ...
The CCS PIC C microcontroller code and a coordinating
applet from this article are available on the SERVO
Magazine website. The microcontroller code implements
a simple Self-Organizing Map which uses an analog
temperature sensor and an analog light sensor as input.
This should work with any two analog sensors you choose.
The circuit collects data from the sensors every 30 minutes
for 24 hours and outputs the samples in a distinct format
out the serial port. If you want to speed up the data
collection process, just change the timing loop. Once the
data collection period is over, the circuit goes through a
learning phase and then moves into an infinite loop where
it outputs its categorization of new input to one of four
LEDs and prints the sensor data.
The applet is written in Processing, an easy to use
front end for Java. The applet has two modes: first, it just
collects data from the microcontroller (over the serial port)
and displays a time vs. sensed values graph of the data.
It saves an image of this graph as ‘ data.png.’ Then the
application switches into a different mode and displays
a plot of the accumulating input data and the prototype
vectors dynamically updating over time. Press the ‘e’ key
to exit the application and save an image file of the
graph (‘ SOM.png’), as well as a text file (‘ capture.png’) of
all the data.
You will need to tweak the Processing code to use the
right serial port for your computer if you aren’t using COM1.
Also, if you change the number of prototypes in the PIC
code, you will need to update the coordinating variable in the
Please drop me a line and let me know if you use these
ideas or code for any of your own projects. I would love to
hear about them! SV
CONTACT THE AUTHOR
Heather Dewey-Hagborg can be contacted via email at
70 SERVO 01.2008