Let's Make Robots! | RobotShop

Steve Grand’s "Creatures" Neurons simulated on Arduino Uno

Hey everyone, it’s me again.

So today I’ve been working on a project: recreating Steve Grand’s artificial neural networks from the old “Creatures” games on Arduino. Why, you ask?

Well, I honestly think that the game’s namesake Creatures are one of the closest things we have to a “true” digital AI, in my opinion, along with the fact that these neurons might work for Arduino, having been rapidly simulated on older computers. While Franklin’s LIDA might be the number one “true” AI (it is claimed to display some aspects of consciousness,) it is not available for just anyone to use (and with no way it would ever fit on an Arduino). That’s where this AI comes in.

The code will be made available soon. I plan to make a Creatures-esque AI out of these neurons, with improvements. However, it will not be for sale, due to it possibly being copyrighted by Gameware- but it will be open source, for non-commercial use only (again, the neural model might be copyrighted).

And in case you’re wondering,.. This program uses only 6% of program storage space and 2% dynamic memory.

Thank you for reading!

Edit: Had to include a text file of the sketch because it wouldn't accept the .ino file... Just copy and paste it into your Arduino IDE of choice, wire it up, and run it! :-)

Update: Looked over and modified my code, and realized that the neurons were printing the same value. Nothing was actually really doing anything (except making a servo move). I think I'll just use a more "modern" spiking neural network. Oh, well... The idea was nice, and it worked really well in Creatures. Bummer.

Neural_Servo_Control.txt4.4 KB

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

This is pretty neat.  I'm looking forward to seeing more.  I am especially interested in the neurons.  I had never heard of Steve Grand or his work.  Do you have a reference  or references that you worked from?  I Googled some but my results didn't give much.

Thank you so much for your interest!

This page was my main resource:


It’s a very old website, and I can understand how difficult it is to find- I did several web searches for it and nothing came up!

The site, though left unfinished, will likely contain everything you need to know about Steve Grand’s artificial brain.

That should provide me some good reading this weekend.  I hope to get a chance to try out your code as well as read up on the subject.

Thanks for posting. I loaded and looked at the code. The following lines (around line 103) make no sense to me:

         if (stw[sw] == ltw[lw]) {

            stw[sw] = ltw[lw];


Those lines just mean “ when stw[sw] and ltw[lw] become the same, make them stay the same” (I read some things about that in my reference). Otherwise, the final “weight” just wouldn’t exist.

In other words, I just copied how Steve Grand did it. Still, thank you for your help- it is greatly appreciated!

They only stay the same if they are already the same. I suspect a good compiler would optimize the code away. I only mention because is it a logic error that looks like a typo to me. I make them all the time!!!!


We’ll have to agree to disagree. But thank you for your help.

You don't mention connecting anything to the analog pins, but in your code you do an analogRead on pins 0, 3, 5, and 9.  Can you explain what's going on there?  Am i missing something?


I actually just used a reading of the bare pins to give the neurons some “inputs” since I wanted to simulate “real-world” values without having to connect any actual sensors... which I know sounds strange. Thank you so much for catching pin 9, though- that’s being used for the servo! I’ll try to modify the code to make more sense and re-upload it.