Grandbot is a robot grand-child for my parents. He's my my take on Mohit Bhoite's Chintoo.
- Grandbot is a generative, pattern-based MIDI arpeggiator
- He has different moods based on his self-esteem. These moods affect everything from his expressions, the color of his light, and the sounds he plays.
- To increase his self-esteem, it's important to give him plenty of attention. He currently can be interacted with using a "play" button; if you play with him, he feels better about himself and he gets happier.
- He doesn't like to be ignored though. If you don't play with him regularly, he starts to feel unimportant. If his self-esteem drops too low, he gets depressed.
- He uses a photoresistor to determine when to go to sleep and when to wake up.
- He has an onboard passive buzzer and uses it to make music. The music is mostly randomly generated and is influenced by his mood.
- He likes to set mood lighting using an RGB LED as another indicator of how he's feeling.
I had extra memory, so I decided to program Grandbot to play synths with me. He's now a chaotic, generative, pattern-based arpeggiator.
This requires the additional MIDI board for Grandbot.
The simplest use:
- Plug something that can send MIDI notes and a MIDI clock to Grandbot's MIDI input
- Plus Grandbot's MIDI out into a synth
- Start the MIDI clock and play some notes
- Press the button to generate a new sequence
There's endless potential just doing that. If you'd like more control, there are additional parameters that can be changed using MIDI CC or the optional Grandbot control board:
Description | MIDI CC | Display | Button |
---|---|---|---|
» Sequence Parameters | |||
Base note length | 20 | nL | |
Sequence length | 21 | SL | |
» Transposition Chance | |||
One octave up chance | 22 | o- | |
One octave down chance | 23 | o- | |
Two octaves up chance | 24 | o= | |
Two octaves down chance | 25 | o= | |
Fifth up chance | 85 | Ft | |
Random transposition chance | 86 | rn | |
Rest chance | 29 | rE | |
» Note Length Chance | |||
Double length chance | 26 | dL | |
Half length chance | 27 | HL | |
Ratchet (double note) chance | 28 | rA | |
Legato/slide chance | 31 | LE | |
Random length chance | 87 | rL | |
Note run chance | 30 | ru | |
» Post Generate | |||
Collapse notes | 19 | Co | |
» Generate / Slip | |||
Queue sequence generation | 118 | UP | |
Randomize sequence params | 9 | SHIFT + UP | |
Reset sequence params | 102 | SHIFT + RIGHT | |
Queue sequence slip | 116 | DOWN | |
Toggle drift (endless slip) | 3 | SHIFT + DOWN | |
Slip chance | 89 | SC | |
» Utilities | |||
Latch | 90 | LA | |
Swing (50-67%) | 115 | SG | |
Transpose | 103 | t | |
Note sort | 114 | So | |
Select MIDI channel in | 14 | In | |
Select MIDI channel out | 15 | ot | |
Toggle internal speaker for arp | 119 | SP | |
Clock: external or internal | 112 | CL | |
BPM for internal clock (73-200) | 113 | b | |
Panic / all notes off | 117 | AH | SHIFT + LEFT |
Play (internal clock) | FORWARD | ||
Stop (internal clock) | BACKWARD | ||
Enter menu | FORWARD + BACKWARD |
With the optional control board, six buttons are added for controlling the Arp settings.
Buttons:
˄
: UP˃
: RIGHT˅
: DOWN˂
: LEFT˃˃
: FORWARD (SHIFT)˂˂
: BACKWARD
When outside the menu:
- UP: queue sequence generation
- SHIFT + UP: randomize sequence settings
- DOWN: queue slip
- SHIFT + DOWN: enable drift (endless slip)
- LEFT: play with Grandbot (not related to the Arp)
- SHIFT + LEFT: panic
- SHIFT + RIGHT: reset sequence settings to default
- FORWARD: play (when using internal clock)
- BACKWARD: stop (when using internal clock)
- SHIFT + BACKWARD: enter menu
When inside the menu:
- UP: increment current setting
- SHIFT + UP: increment current setting (fast)
- DOWN: decrement current setting
- SHIFT + DOWN: decrement current setting (fast)
- LEFT: select current setting
- RIGHT: select current setting
- FORWARD: enter sub-menu
- BACKWARD: exit sub-menu
- SHIFT + BACKWARD: exit menu
Grandbot development is what I'm using to learn more about electronics and C++. I write about what I've been learning on my blog. Here are the Grandbot posts:
- Grandbot: Sleep
- Grandbot: Voice
- Grandbot: Play
- Grandbot: Light
- Grandbot: MIDI & Misc
- Grandbot: Arp
- Concurrent Arduino
- 4 Digit, 7 Segment Emoji
- Max7219 Emoji
One digit of an expression looks like B00000000. For the first four digits, it maps to:
- B: specifying it's binary
- 0: the decimal point (DP)
- 0: top horizontal line
- 0: top right vertical line
- 0: bottom right vertical line
- 0: bottom horizontal line
- 0: bottom left vertical line
- 0: top left vertical line
- 0: center line
The fifth digit:
- B: specifying it's binary
- 0: the center colon
- the reset are unused
The sixth digit:
- B: specifying it's binary
- 0: the top dot
- the reset are unused
This was originally built on a cheap Arduino Nano clone.
However I wanted to be able to support 8 bars of 32nd notes in the arpeggiator (the minimum base note length is 16th, but ratchets break that into 32nds) and the Arduino Nano didn't have enough memory. The Arduino Nano Every does! It's a different board with a similar name.