Use an Arduino to render a harmonograph image to a Waveshare 4.2" e-ink module
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Harmonograph Renderer

A small project I developed over xmas 2018 to produce this Arduino-based device:

device image

The code renders a harmonograph image to the screen as freqeuently as it can, which is around one image per minute on a standard Arduino Uno (the code is inefficient, but does the job).


  • harmonograph-sdl2: C++ software implementation of a harmonograph. Was developed against the target Arduino hardware (e.g. rendering into a bitbuffer), rather than being clean or fast. Put in this repo for archiving

  • harmonograph-arduino-uno: Arduino code for the device. Developed + uploaded through standard Arduino IDE (v1.8.8).


  • Arduino Uno (I used this kit one)

  • Waveshare 4.2 inch E-Ink Display Module (amazon)

  • ~8 jumper cables

  • A box (mine's a custom-made thing)


  • Wire the screen up to the Arduino according to standard manufacturer guide (see here)

  • Connect Arduino to computer

  • Upload harmonograph-arduino-uno project to the Arduino

  • Put it in a nice box

Known Limitations

  • Algorithm is unoptimized: takes ~1 min of constant computation to render an image

  • Because of the above, cannot run the device on a battery (too much drain to run it for multiple days)

  • Doesn't randomize the various harmonograph parameters (weightings, phases, etc.)