You can download our e-book ‘Learn Arduino’ from this link
This project uses an I2C 128×64 OLED to display a tiny cellular automata powered by Arduino Nano.
- 2x half size breadboard (ebay) (or 1x standard)
- 1x Arduino Nano (ebay) (can be Uno as well)
- 1x OLED I2C 128×64 (ebay)
- 4x Jumper Wires (ebay)
During this tutorial I will assume that you know what an Arduino is (o_O) and you know how to use the IDE and upload simple sketches. I will also assume you know a little programming preferably C programming.
So lets get started!!
What is Cellular Automata? I will explain 1 type of cellular automata which is the Game of Life by John Conway. It is a grid or cells each having 2 states True of False/on or off/alive or dead. These cells are governed by 2 simple rules:
Rule 1: A cell which is dead and is surrounded by exactly 3 alive cells, will be born
Rule 2: A cell which is alive and has either 3 or 2 alive cells will remain alive, else it dies
So hook up the Arduino and OLED LCD to the breadboard and start wiring.
- Arduino —– OLED
- 3.3v ———— VCC (pay attention to your OLED voltage requirements)
- GND ———– GND
- A4 ————– SDA
- A5 ————– SCL
Then I attached both breadboards back to back and created a small TV 🙂
Programming the sketch
In order to facilitate (and make it possible) to play with the OLED display, we will be using 2 libraries from Adafruit. If you don’t know how to add libraries please visit https://www.arduino.cc/en/Guide/Libraries
- Adafruit GFX library which will be used to handle all graphics and text displayed on the OLED https://github.com/adafruit/Adafruit-GFX-Library
- Adafruit SSD1306 library which basically is the driver for our OLED. This library works only with OLED SSD1306 128×32 and 128×64 https://github.com/adafruit/Adafruit_SSD1306
The sketch can be downloaded from our github: https://github.com/klauscam/Arduino-Cellular-Automata/
On line 51 with code
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
the address, which is the 0x3C might be different. I searched for the most obvious and tried a few before getting it to work.
The visible horizontal lines are the result of refresh rates of the OLED and the camera.
If you require some help with the code or anything, please leave your comments in the comments section below.