WORKS / Bonome, Arduino-based RGB monome clone

Date: 2008-06-01
Technology: Arduino, Eagle PCB, Python, Max5
Role: designer, programmer

Creative Commons License

making a monome clone
making a RGB monome clone

THE BONOME controller features:

– 8×8 buttons
– 8×8 rgb leds
– arduino diecimilla based (Atmega8)
– customized serial protocol based on monome 40h
– MIDI or OSC through a specific python server for RGB handling



I’m using Ableton Live software since several years. IT IS the only software I used which provides a real interface to play intuitive music performance.

I own a BCR2000 that I use for volume,fx & mute. The only thing I’m watching on my screen during music live performance is : clips matrix.

I found guys that hacked some python scripts provided with Ableton Live. You can find it here. It seems to be work in progress too, but it works fine with Ableton Live 7.0.1, OS: XP SP2.

This little backdoor provides some controls & feedback that aren’t reachable via the native GUI (Graphical User Interface).

For my use, the main interesting feature is : feedback about the clip matrix and control of the clips. It sends informations about clips presence, clip type and receive start/stop triggering.

I found my way to avoid the using of the screen!

But I needed a big matrix of buttons (for sending data to software) & leds (for receiving data from software) as I use about 5 or 6 scene per song.

At the beginning, I would like to inspire me from the big MONODECK II made by Robert Henke.

I explore the BIG and powerful community and the shop site associated, and I found a website about a very pretty and powerful interface: monome.

But the monome was only a monochromatic leds & buttons matrix.

I decided to build my own hardware: multicolored monome clone called [bon]ome.

Buttons + Leds are linked on PCBs: LEDs blink inside these pretty silicon button. I wanted to use them because of the compactness of the concept.

There are 2 different protocols used by the original monome:

For any questions, please post on monome’s forums.



This part has to be updated.

Indeed, I discovered and involved myself in the Tom’s project called monome-pages

It replaces the max/msp part and provides a genius interface with pages concept.

A page is a kind of little application. A lot of pages are already provided and you can code your own pages using java

if you need 5 pages or more or less, you just have to use it. During live performance, you easily switch the page you want to use directly on the monome.


I want to thanks Devon Jones, Brad HillBrian Durocher and his VERY powerful spi interface, Steffensen,Owen Vallis & Jordan Hochenbaum & Ben, melka, bitbutterBroHogan

I harrassed them to much in order to understand how I could do that.


A list of VERY precious links:

 1/ MAKING A MONOME CLONE (monochromatic,40h protocol family) ^ back to top ^

I wanted to stay VERY close from the monome protocol because of the useful monomeserial router. This piece of software is an interface between the serial world and the MIDI or OSC worlds.
For firmware and router, I followed the way if Arduinome (Jordan & Ben : here on sourceforge)

This project provides two special piecies: the arduino firmware & his little companion the serial router called Arduinome Serial
The protocol used is 40h. I don’t understand why they didn’t code directly the 64/128/256 protocol.
By the way, I coded mine and included the rgb support (watch further).

==> I don’t provide here the monochrome version of mine with 64/128/256 protocol but if someone want it, I could send it via email.

The firmware is a piece of code looped by your hardware (here: the arduino board).
The board is programmed using C++ language inside the arduino environment (do bonownloadable here)

You code something, you save it, you upload it on the board linked by usb cable and voila! You can disconnect the board, the code stays inside and is running

I won’t explain anything about coding. Arduino’s forums are VERY useful and a lot of experts are there and could answer VERY BETTER than I can do!

Parts used (be careful: some prices in €, some others in $):

Code used:

This is the last version of the code of the Arduinome project
You need to download the Arduinome Firmware here. 

The schematic
This is a very big schematic that represents ALL the components and all the wires.
It could be simplier and different but it is the one I use and it works. Feel free to transpose it in order to fit closer your mind.
[BE CAREFULI didn’t draw the 1N4148 diodes in order to simplify it. Indeed, the PCB part have been redrawn because they didn’t exist as EAGLE object]


The only important thing is to consider the header on rows & columns of each PCBs.


 Downloading the last version of Arduinomeserial router

You need to download and install the .NET Framework 3.5 : download it here

You need to download and install the Arduinome Serial router: download it here. (last version: 3.1.1)

Flashing the arduino

The following was written by Melka on the Arduino forums but freely modified to use with the last version of code.

you have to install Mprog and the D2XX drivers from FTDI (your arduino will still work with the arduino development environement with these drivers !!) 

MProg 3.0 >

D2XX Drivers > 

1/ Install both, then run Mprog

2/ Launch Mprog, then click on Device / Scan. You should see something like this appearing in the box down.

Number Of Blank Devices = 0  Number Of Programmed Devices = 1

3/ Click on Tools > Read and Parse. This will fill the boxes.

4/ Check the “use fixed serial number” box and change the value below.

To have your board recognized as a monome by monome serial, you have to enter something like a40h-xxx (I’m using : a40h-001)

5/ Click on File > save as

6/ Once saved, click on the flash icon ( or Ctrl+P).

7/ Unplug / plug back your board from the usb port.

7/ Run Arduinomeserial, you should see something appear on the devices list.

Testing your pretty* arduino-based monome clone

Download this zip file built by folks of monome (link)

1/ Launch Arduinomeserial and choose OpenSound Control, down cable orientation.

2/ Launch the max/msp patch called monome_test.maxpat

3/ Test your stuff




Parts used (be careful: some prices in €, some others in $):

special considerations about the Sparkfun backpack

The backpack is a little PCB made by Sparkfun Electronics and sold with little or big 8×8 led matrix.

I bought it because it is a stable/working fine RGB led driver, even if the little led matrix wasn’t interesting for my application.

It involves an SPI interface between the Arduino and the backpack.

The circuit is here:

It involves:

– 3x 595s
– 1 Atmega8
– 1 transistors array
– resistors
– 2 big headers


here the datasheet of the backpack.

here the datasheet of the little RGB led matrix sold with the backpack (useful to understand the numbering of pins of backpack)

But I did the job for you … you’re welcome!

ROW are … rows.

1G, 2R … means Green rail for column 1, Red rail for column 2 and so on …



The prototype of the PCB I ordered and I’m waiting for:



Download it : [download id=”2″]

A lot of explanation in the commented header


I have 3 alternatives as I wrote on my big framework schematic up above:

– Python-twisted server (Download & Install: Python & Twisted)

– ArduinomeSerial Visual Studio sources customization (adding /ledrgb function, 64/128/256 protocol etc … work in progress but near of the end !)

– include rgb support in a little java server (work in progress based on monomic router 40h coded by Jesse Kriss).

I don’t know which one of them could be the most stable, fast & efficient

I’m currently testing the 3 to find the fastest/stablest etc

* specific instruction for python serial/osc router

Download & Install: Python & Twisted

Download & Install: PySerial too

Download the router here: [download id=”2″] (2 versions, one for windows, another for the other OS)

To launch the router, open a cmd.exe prompt, and type “C:/<your python directory>/Python.exe tinctsvrW32″

…it may work after that. (becareful, if you have 2.5 version, the exe is probably Python25.exe… adapt it)