Artist Residency at Holy Innocents’ Episcopal School January 7-18


Designing and Laser Cutting

Limitations of the Glowforge

Designing the layout of panels and pixels for this project required more problem solving and working within limitations than my previous projects. The Glowforge has a cutting area of approximately 19.5” across by 11” deep, with a passthrough slot that allows you to use materials that are infinitely deep. The material has to be manually fed through the slot and aligned if cutting shapes larger than the cutting area.

Alignment was not always accurate, so for this large project I decided that the horizontal sides of the material should be cut with a table saw and just the vertical cuts and holes would be laser cut. Based on the 48”x96” standard acrylic sheet size, the least wasteful option seemed to be creating panels that were 16” wide (ended up being 15-⅞” to account for blade width)

Designing in Processing

The arrangement started out as a blank 960x480 canvas in Processing, 5 pixels per inch for the 192”x16” composition, drawing vertical lines every 80 pixels to show the 16” panel separations. I used several embedded for loops to procedurally calculate x and y positions and then draw a 3x3 pixel ellipse to mark where each ½” LED would be placed. I created a variable “led” and incremented it by one after each ellipse was drawn to be able to keep track of how many LEDs were used.

Given the short amount of time for the project, I planned the arrangement in clusters of 50 LEDs (the number of LEDs per strip) so we did not have to spend hours cutting custom lengths and soldering on new connections.

Converting to Vectors

I’ve previously been dumb and exported images that are scaled up 10x and Image Traced in Illustrator and then converted the almost perfect paths to circles, but before writing this I just tried the PDF export library and this works 100x better. (Laughing at that one time in 2017 spent 8 hours manually drawing circles in Illustrator) Once the file is in Illustrator, it’s just a matter of resizing to the actual size, making sure the holes are the appropriate size, and adding additional holes for the hardware that connects everything together.

Prepping these files for Glowforge

The files need to be saved as an .SVG and the Glowforge software creates layers based on different color paths. We’ve had issues using Black lines, so it’s best to avoid them. Each layer can be set to Cut, Engrave, or Ignore.

To avoid issues with files not coming in at the same place, I prepped all of our files to be enclosed in a 20”x12” rectangle the same size as the work area, so the file is always placed in the center. This rectangle is then set to be ignored.

We cut a guide (see photo below) with a 15-⅞” window for our material, and engraved a line at the top of the work area and 10” below. To keep our cuts aligned for the panels, we placed the top of the material at the top line and marked it at the bottom line. After the section was cut, we moved the bottom mark up to the top line and repeated the process.

Plywood Guide in Illustrator

Plywood Guide in Illustrator

Plywood Guide in Glowforge App

Plywood Guide in Glowforge App

To prep the files for Glowforge, I had to recolor the cuts in the panels in 10” sections. Because the actual cut area is closer to 11”, any holes that were on the edge spilled over into the next section instead of being broken up. Each colored section was then aligned to the top and numbers were added as a reference. I didn’t know before cutting what order the layers would come in, but doing further research on the Glowforge Forum they are sorted by ascending hexadecimal values. See here: (https://community.glowforge.com/t/custom-inkscape-illustrator-coreldraw-and-affinity-designer-color-palettes-for-ordering-operations-in-gfui/7346)

Adding guides every 10” and recoloring each section of cuts between them

Adding guides every 10” and recoloring each section of cuts between them

Finished file for one panel with every section lined up in the top and labelled

Finished file for one panel with every section lined up in the top and labelled

Preview in Glowforge App with only the first layer set to cut

Preview in Glowforge App with only the first layer set to cut

The process for cutting was to set all layers to Ignore but Cut 1, move the material through the Glowforge, then Ignore 1 and Cut 2, and repeat!

Some of our first cuts!

Some of our first cuts!

Temporary ventilation solution until the air filters are delivered

Temporary ventilation solution until the air filters are delivered

Lining up mirrored acrylic pieces with the plywood

Lining up mirrored acrylic pieces with the plywood


Mapping and Wiring

Similar to how I exported an image to convert to vectors in Illustrator, I exported another version of the layout that instead of drawing ellipses, the index of “led” was drawn in it’s place. I then drew on top of this image to determine the path that the LED strip should follow.

Section of LED index map

Section of LED index map

Wiring Paths for the Installation

Wiring Paths for the Installation

2 Teensys x 8 LED strips x 400 LEDs per strip, Processing and the Teensys think we are sending data to 6400 LEDs, but we are only using 4500. We need to remap the LEDs because we are skipping some and they are not being wired in the order they were drawn in Processing.

Using the wiring map above, I created a table to find the new index of each LEDs, adding the index of each strip and the position of the LED in each strip. I downloaded the table and used it in Processing to set the position of LED[] to the positions where each ellipse in the design was drawn (xpos[],ypos[]). Later in the code, the pixel color at LED[]’s x and y position is what is sent to the Teensys.

To send the data to the LEDs we used two Teensy 3.2 microcontrollers. The OctoWS2811 Library divides the pixel data and sends it to eight pins on the board. To make things easier, I decided to just have one pin per panel, so 12 pins would be used and there would be 4 left unused. Each panel has 350 or 400 LEDs, so I just made the LEDs per strip value 400 for all. It does not matter if the amount of data being sent is longer than the strip of LEDs.

  table = loadTable("HIES.csv", "header");

  for (TableRow row : table.rows()) {
    LED[row.getInt("New Index")].set(
        xpos[row.getInt("Processing Position")], 
        ypos[row.getInt("Processing Position")]);
  }

Framing and Mounting

IMG_8106.jpeg

This step was challenging and resulted in a lot of revisions. The original plan was to cover the back with a second layer of plywood, vertical 1x3s would connect each panel, and a french cleat made from 2x4s would be attached horizontally to the 1x3s and on the wall. It would be all connected as one piece.

Because of the limitations of the Glowforge laser cutter, the alignment of our mirror acrylic and plywood pieces were slightly off, resulting in our material being bowed and bolts not going through straight, making it extremely difficult to get the plywood and 1x3s through the bolt holes. We ended up deciding to just mount panels in pairs, with the 1x3 running completely down the middle. and the side 1x3s just in the top section to support the 2x4 french cleat. Many unruly bolts were cut in the process.

Bye bye bolts!

Bye bye bolts!

One of several 7am-7pm days working on this project..

One of several 7am-7pm days working on this project..

These changes were so helpful later on because there were wiring issues that needed to be fixed while the work was on the wall which the additional plywood would have prevented access. There was also room to reach behind panels. The french cleat system allowed us to easy hang 5 of the pieces with space in between, slide the pieces together when they were finished, and hang the 6th piece at the end.


Coding

switch(studentSelected) {
  case 0:
    ty_draw();
    break;
  case 1:
    michael_draw();
    break;
  case 2:
    amanda_draw();
    break;
  case 3:
    caroline_draw();
    break;
  case 4:
    garrett_draw();
    break;
  case 5:
    chad_draw();
    break;
  case 6:
    maggie_draw();
    break;
  case 7:
    hayden_draw();
    break;
  case 8:
    lilly_draw();
    break;
  case 9:
    robby_draw();
    break;
  case 10:
    william_draw();
    break;
  }

My favorite part about this project was providing an opportunity for the students in the Coding for Art class to each be able to code their own interactive experience to be shown on the LEDs. I worked with the Computer Science teacher, Dan Forrestal, to organize this code neatly so allow for easy updates and for other classes in computer science and math to potentially create work for the display as well.

We decided the best way to organize this code was to create a tab for each student, so if they even need to update their code a new .pde can be added to the installation sketch folder. Each student’s Processing sketch was renamed from void setup() and void draw() to void firstName_setup() and void firstName_draw() which were placed in a switch statement.


To do:

**insert screen shot of processing sketch with tabs for each student

**insert section about touch screen display

**insert section about Camera Shader

**insert section about Kinect Skeleton Tracking