When it comes to building a neural network to simulate complex behavior, Arduino isn’t exactly the first platform that springs to mind. But when your goal is to model the behavior of an organism with only a handful of neurons, the constraints presented by an Arduino start to make sense.
It may be the most important non-segmented worm you’ve never heard of, but Caenorhabditis elegans, mercifully abbreviated C. elegans, is an important model organism for neurobiology, having had its entire nervous system mapped in 2012. [Nathan Griffith] used this “connectome” to simulate a subset of the diminutive nematode’s behaviors, specifically movements toward attractants and away from obstacles. Riding atop a small robot chassis, the Arduino sends signals to the motors when the model determines it’s time to fire the virtual worm’s muscles. An ultrasonic sensor stands in for the “nose touch” neurons of the real worm, and when the model is not busy avoiding a touch, it’s actively seeking something to eat using the “chemotaxis” behavior. The model is up on GitHub and [Nathan] hopes it provides an approachable platform for would-be neuroroboticists.
This isn’t the first time someone has modeled the nematode’s connectome in silico, but kudos to [Nathan] for accomplishing it within the constraints an Arduino presents.
This is very well done, a great accomplishment!
great work, Sir
Why “connectome” and “chemotaxis”, instead of connectome and chemotaxis, dear HaD “editor” ?
Really cool project, thanks for posting! Not sure this is related to the OpenWorm project as I believe that focuses on implementing C. Elegans on a PC; either way I’m a big fan of anything that pulls more neuro into the electronics realm.
Can I find the software for the Lego Mindstorm EV3 version somewhere?
Not sure — Mindstorms isn’t really my world, sorry.
It’s notable that 300 neurons is actually a substantial amount of C elegans: the entire worm is only just over 1000 cells. I think this is pretty neat, and I’m impressed that the maker has managed to fit 300 spiking neurons into the relatively meagre computing resources of an Arduino. I think I need to dig into the code over the weekend and see how it was done – inspirational, perhaps :)
From the description on Github, he has copied the whole nematode brain. Does that mean if he builds another one they’ll try to reproduce?
Probably any signalling chemicals they’d use would be treated as absent; I bet you’d need to add various I/O peripherals for that behavior.
I haven’t looked at the code yet, but most ce neurons are graded. 302 Boltzmann binary units would still be impressive on an ‘duino though.
The big question: If C. Elegans is considered alive, and you replicate all its neurons and functionality, is the result also alive?
There are a couple of interesting looking neural network libraries for MCUs on github, worth checking out. It is surprising how much intelligence you can get out of something so simple, once you have trained up the network on a more substantial piece of hardware. Some may ask what is the point when you can just use an ESP32 or RPi and they’d have a point worth considering, however a set of tiny MCUs can act as the semi autonomous parts of a larger system and use less power. Not unlike how the nervous system of more complex organisms works anyway, you think “pick up cup” but the kinematics of actually making your body do it is handled by a different and lower level of your brain that is much older (in evolutionary terms) than the cerebral cortex.
thats pretty much what James Bruton does with his robot builds
I wonder what the update rate of the neuron network is on a 16 Mhz atmega328 that this is designed for.
It’s is not mentioned anywhere.
The lookup table for the neuron connections is too big to fit in RAM, so it is stored in the program flash instead.
The flash is slower to read than RAM, how much impact would that have on performance?
The Arduino M0 and Arduino Zero have a ATSAMD21 ARM processor with 32Kb of RAM. You
could fit the table in RAM completely.