Giter Club home page Giter Club logo

fraqture's Introduction

fraqture

An interactive art framework that takes inputs from social media, maps them to the interactive parts of a drawing, and renders the art. The platform consists of a 50" TV display driven by Clojure's Quil library outlined with 540 DotStar LEDs driven by a Teensy 3.2.

installation-pic

Exhibitions

Come see fraqture live!

You can find Fraqture today in the 21C storefront window in downtown Durham, NC.

textify

Usage

lein run <drawing name>

For examples of what each of the drawings does, check out the gifs in examples.md. Start by trying lein run cycle.

Hardware

The Fraqture Project uses two custom-build LED panels with 270 individually addressable LEDs each to extend our canvas out from the screen. We are using a Teensy 3.2 to receive commands over a serial connection and use them to refresh the panels. The sections below discusses how to connect and issue commands to the panels.

Reset Communications

The LED serial communication is a basic state machine. When a device connects to the panel driver, it is impossible to know whether it is in the default state or not. To reset the state machine of the panel driver, simply wait 2 seconds in between messages and the state will be reset.

LED Commands

All LED panel commands follow the same structure, where the payload is strictly packed and all numbers larger than 8 bits are packed little endian.

1 BYTE        0-7 BYTES
+------------+-----------------+
| COMMAND ID | COMMAND PAYLOAD |
+------------+-----------------+

New commands can easily be added using the terminal_attach(terminal_t *term, terminal_cmd_t *cmd) function found in arduino/strobe/terminal.c.

Refresh Pixels

This command will refresh the LED array. This allows you to do multiple paint operations without eating the cost of refreshing the array after each one.

Command ID: R

Clear Pixels

This command will clear the LED arrays. This command has no payload.

Command ID: S

Window Pixels

This command will paint a window of pixels.

Command ID: W

Payload (in order):

  • u8 row-start: the starting row for the window
  • u8 col-start: the starting column for the window
  • u8 row-end: the starting row for the window
  • u8 col-end: the ending row for the window
  • u8 r: the brightness of the red LED in the pixel
  • u8 g: the brightness of the green LED in the pixel
  • u8 b: the brightness of the blue LED in the pixel

Set Pixel

This command will set an individual pixel.

Command ID: S

Payload (in order):

  • u16 index: the index of the pixel. The top left is pixel 0, and then it reads like a book.
  • u8 r: the brightness of the red LED in the pixel
  • u8 g: the brightness of the green LED in the pixel
  • u8 b: the brightness of the blue LED in the pixel

Requirements

System Setup

The overall diagram of how the LED controller, LED panels, power supply, and Mac Mini all interact can be seen below:

Since LED data is a serial stream, it originates by the Mac Mini's program sending data to the LED controller, which then sends it out to the 540 LEDs using SPI. The individual wires that need to be connected can be found below.

For the panel connections, the diagram shows a closeup of the screw terminals found on the backs of the panels. The panels should be positioned so that the screw terminals are in the lower-left of each panel. A legend for these connectors is below:

Line - Wire to another component.
X - Internal panel connection; leave connected.
N/C - No connection.

LED Controller


Panel 1 (Top)


Panel 2 (Bottom)


Power Supply Unit (PSU)

fraqture's People

Contributors

brandonmathis avatar dkniffin avatar sweetmandm avatar tylerrockwell avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

brandonmathis

fraqture's Issues

Improve tweetreader

We would like to make two improvements to the tweetreader image:

  • Instead of fading to the SB logo, it should draw in the photo attached to the text.
  • It runs a bit long. Exit criteria should be added.

Create a universal Arduino interface

Right now, every sketch that uses an Arduino will attempt to connect to the Arduino during its setup phase. When we begin cycling these drawings, the second drawing will crash because the port will already be open. I'd like to make a serial interface that:

  • Asks the user what port they would like to connect to upon opening the program. You can use list-ports from our serial library to enumerate their options.
  • Opens the serial once during global set up, then puts the serial resource in the options hash being passed in to the sketches.
  • Update all sketches that use the serial port to use this new interface.

Clean up the Readme

Our readme has a couple of broken images and could be more descriptive and helpful.

Create a Night Cycle

Change the cycle drawing so that during the day it uses live camera feed + seeds content in the main glitch cycle, but at night it uses more subtle generative art.

Add a test suite

A simple test suite could run each of the drawing commands (eg lein run drag) and kill it after 30 seconds or so, just to make sure each one runs without error. It could also look for stack-traces.

Add exit function to tweetreader

The tweetreader function needs an exit condition. I'd like for it to be 1-2 minutes after the textify animation starts, but am open to suggestions.

Add protections in the C code

Right now, if a drawing writes outside of the 18 rows and 30 columns, it is possible to crash the application. Some bounding would be great.

Write a script that will use a camera to put a picture in /images

As a jumping off point for adding live content, we can first find some way to utilize our current infrastructure by having a module in Clojure that can take a picture and place it in the images folder or have Clojure call out into a script in some other language that does so.

Split image sources into logos and rasters

Some glitches work better on logos, and others on rasters. If we split the folders in two, we can replace stream/get-image with stream/get-logo and stream/get-raster.

Improve the swap algorithm

We would like to make two minor changes:

  • Use colors from the image when filling in
  • Make the size of the squares being swapped roughly equal to the LED squares.

Pixelate image takes too long

The pixelate image starts too granular; it isn't until several rounds in (over a minute) that people understand what it is doing.

Live Camera Integration

The goal is to integrate a live camera feed into the Storefront Installation.

Features:

  • includes a countdown
  • captures a live image
  • runs the image through one of the glitch algorithms
  • transitions between live camera & seeded content

Rework drag drawing

Rework the drag drawing so that:

  • Not all columns trickle at the same time.
  • Columns trickle in from the top using the LEDs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.