Experiencia Mistica program

arduino, processing, projects, tutorial

No Comments

Share this post

In an effort to document and archive the circuit and program of the experiencia mistica installation, I publish this circuit and code, in wich a PIR (infrared motion sensor) triggers a display of a RGB LED strip and 2 strobe lights. Additionally has a 12V input and a webcam. It runs in processing with different libraries, such as Arduino, processing.video and minim for the audio

import processing.serial.*;
import cc.arduino.*;
import ddf.minim.*;
import processing.video.*;
import gifAnimation.*;
Minim minim;
AudioPlayer player;
Arduino arduino; //creates arduino object
Capture cam;
Gif tunel;

//variables for PIR
int PIRPIN = 2;
int ledPin = 13;
int counter;

//Variables for RGB strip
int REDPIN= 5;
int GREENPIN= 3;
int BLUEPIN= 6;
int r, g, b;

//Variables for R L strobes
int LEFTPIN =9;
int RIGHTPIN=10;

float leftChannel;
float rightChannel;
float soundValLeft;
float soundValRight;

void setup(){
size(800, 600);
tunel = new Gif(this, "tunel.gif");
cam = new Capture(this, 160, 120);
arduino = new Arduino(this, Arduino.list()[0], 57600);
arduino.pinMode(PIRPIN, Arduino.INPUT);
arduino.pinMode(ledPin, Arduino.OUTPUT);
arduino.pinMode(REDPIN, Arduino.OUTPUT);
arduino.pinMode(GREENPIN, Arduino.OUTPUT);
arduino.pinMode(BLUEPIN, Arduino.OUTPUT);
arduino.pinMode(LEFTPIN, Arduino.OUTPUT);
arduino.pinMode(RIGHTPIN, Arduino.OUTPUT);

minim = new Minim(this);
player = minim.loadFile("mystica2.aiff", 1024); //or 2048


void draw(){
int pirVal = arduino.digitalRead(PIRPIN);

if(pirVal == Arduino.LOW){ //was motion detected
counter ++;
if (counter == 5){ // the sensor has to be triggered at least 5 times to detect strong motion
arduino.digitalWrite(ledPin, Arduino.HIGH);// send the siignal
background (255, 0, 0);


if(pirVal == Arduino.HIGH){ //was motion detected

arduino.digitalWrite(ledPin,Arduino.LOW );
background (0, 0, 0);


if ( !player.isPlaying() ){

if ( player.isPlaying() ){
for(int i = 0; i < player.bufferSize() - 1; i++) {
soundValLeft= player.left.get(i)*150;
soundValRight= player.right.get(i)*100;


int soundintL = int(soundValLeft); // int version of sound value
int soundintR = int(soundValRight);

image(cam, 322, 236);

if (g==255){ // loop for green variation
g=0;}else g++;

tint (g, 255, 255);

if (r==200){ // loop for red variation
r=0;}else r++;






0 Responses to this post
Add your comment