341
edits
m (→Demonstration) |
|||
Line 4: | Line 4: | ||
[[File:all_rules.png|800px]] | [[File:all_rules.png|800px]] | ||
----- | |||
==Schematic== | ==Schematic== | ||
To keep the controls simple, the only inputs used are two potentiometers and a button. for the LED matrix a preassebled 8x8 matrix with a MAX7219 controller are mounted through the back to make it shine through the PCB. Thus five holes have to be added for the five pins of the MAX7219 have to be added. | To keep the controls simple, the only inputs used are two potentiometers and a button. for the LED matrix a preassebled 8x8 matrix with a MAX7219 controller are mounted through the back to make it shine through the PCB. Thus five holes have to be added for the five pins of the MAX7219 have to be added. | ||
[[File:Schematic.PNG|800px]] | [[File:Schematic.PNG|800px]] | ||
----- | |||
==PCB== | ==PCB== | ||
Line 13: | Line 17: | ||
After a rough layout in PCBnew, I went to Inkscape, traced an old GameBoy and began to make outlines for the edge-cuts and silkscreen layer. After importing the general shape, I layouted all the mounting holes and pins and began to wire everything on the backside of the PCB. I left a window in the mask-layer, where the LED matrix is going to be mounted to and surrounded every component with a symbolic outline in the silkscreen-layer. | After a rough layout in PCBnew, I went to Inkscape, traced an old GameBoy and began to make outlines for the edge-cuts and silkscreen layer. After importing the general shape, I layouted all the mounting holes and pins and began to wire everything on the backside of the PCB. I left a window in the mask-layer, where the LED matrix is going to be mounted to and surrounded every component with a symbolic outline in the silkscreen-layer. | ||
[[File:pcb_new.PNG|800px]] | [[File:pcb_new.PNG|800px]] | ||
----- | |||
===Generation=== | ===Generation=== | ||
To fill the general outline with texture, a 1-dimensional cellular automata was used with random inputs and the infamous rule 30. I upscaled the resulting texture and imported it into Inkscape. The texture was then masked to exclude the immediate surroundings of the components. It was then once used for the silkscreen (just around the screen) and once for the front copper for the rest of the PCB. | To fill the general outline with texture, a 1-dimensional cellular automata was used with random inputs and the infamous rule 30. I upscaled the resulting texture and imported it into Inkscape. The texture was then masked to exclude the immediate surroundings of the components. It was then once used for the silkscreen (just around the screen) and once for the front copper for the rest of the PCB. | ||
[[File:rule30.png|600px]] | [[File:rule30.png|600px]] | ||
----- | |||
==Final Design== | ==Final Design== | ||
[[File:3d-back.png|800px]] | [[File:3d-back.png|800px]] | ||
[[File:3d-front.png|800px]] | [[File:3d-front.png|800px]] | ||
----- | |||
==Programming== | ==Programming== | ||
Line 28: | Line 38: | ||
===MIDI=== | ===MIDI=== | ||
To send the state of the simulation using MIDI the library MIDIUSB (https://github.com/arduino-libraries/MIDIUSB) was used. The state of the simulation is mapped to chrods of a selected scale that are hardcoded in memory and can be send all at once or as an arpeggio. To map to the scales the state of the automata is interpreted as an 8-Bit number that is then mapped to the tone. The speed or time of the interval is controlled by the shield. | To send the state of the simulation using MIDI the library MIDIUSB (https://github.com/arduino-libraries/MIDIUSB) was used. The state of the simulation is mapped to chrods of a selected scale that are hardcoded in memory and can be send all at once or as an arpeggio. To map to the scales the state of the automata is interpreted as an 8-Bit number that is then mapped to the tone. The speed or time of the interval is controlled by the shield. | ||
----- | |||
==Parts== | ==Parts== | ||
Line 35: | Line 47: | ||
* MAX7219 8x8 LED Matrix-Modul | * MAX7219 8x8 LED Matrix-Modul | ||
* Arduino Micro | * Arduino Micro | ||
----- | |||
==Build== | ==Build== | ||
Line 47: | Line 61: | ||
[[File:ezgif-6-46dbab99ab2a.gif|360px]] | [[File:ezgif-6-46dbab99ab2a.gif|360px]] | ||
(GIFs, click to play) | (GIFs, click to play) | ||
----- | |||
==Usage== | ==Usage== | ||
Line 62: | Line 78: | ||
* '''Hold Left & Hold Right''' (Longer than 500ms): '''Start/Stop playing''' | * '''Hold Left & Hold Right''' (Longer than 500ms): '''Start/Stop playing''' | ||
* '''Hold Left & Hold Right''' (Longer than 2000ms): Reset everything''' | * '''Hold Left & Hold Right''' (Longer than 2000ms): Reset everything''' | ||
----- | |||
==Demonstration== | ==Demonstration== | ||
{{#ev:youtube|7doCJ39owTw|735}} | {{#ev:youtube|7doCJ39owTw|735}} | ||
----- | |||
==Further Reading:== | ==Further Reading:== |
edits