Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
1 novembre 2018 4 01 /11 /novembre /2018 12:07

Cette année j'ai utilisé la base du montage de l'an dernier. En remplaçant le moteur électrique par de la fumée et une animation laser.

Ma machine à fumée n'étant pas pilotable en DMX, j'ai utilisé un relais branché en parallèle du poussoir de sa télécommande (Les LED témoins et le poussoir sont directement alimentés en 230V...bon elle n'était pas chère du tout cette machine à fumée, tout s'explique...).

Le projecteur laser est situé dans le coffre de ma voiture, piloté en DMX via un sketch Processing et cette interface. Sur réception d'une commande envoyée par l'Arduino MKR1000, le sketch lance la lecture d'un fichier ILDA stocké sur la carte SD du projecteur et le déplacement du faisceau. 

A toutes fins utiles, le voici (faudrait que je le mette sur mon Github un de ces jours):

import processing.net.*;
import opendmx.*;
OpenDmx openDmx = null;

Server srv;
Client client;
boolean pressed=false;

int universeSize=11; 
byte[] data = new byte[universeSize];
boolean initialized = false;

void setup()
{  
  frameRate(50);
  background(#dd0000);
          
  srv = new Server(this, 12346); 
  noStroke();
  
   try {
    openDmx = new OpenDmx(0);
    initialized = true;
    println("DMX Adapter found");
    } catch (FTDIException e) {
    initialized = false;
    println(e);
    // do something reasonable other than exit..
    println("LaserLess Mode");
  }
}

void draw(){ 
  //wait for a keypress or mousepress to trigger laser animation
 if (keyPressed == true && pressed == false) {
     mousePressed();
     pressed = true;
 }
 if(keyPressed == false){
   pressed = false;
 }
 
 //wait for an incoming TCP connection to trigger laser animation
 client = srv.available();
  if (client != null) {
      client.read();
      mousePressed();
      print("client.read()");
  }
  
}

void mousePressed()
{
  anim();
}

void anim(){
  println("animating laser");
  if (!initialized){
    println("Laserless mode on, skipping.");
    return;
  }
  int animationLength = 4000; //ms
  long t0 = System.currentTimeMillis();
  long t1 = 0;
  //prepare DMX Buffer
  for(int i=0;i<universeSize;i++){
    data[i] = 0;
  }
  data[0] = byte(150); //select manual DMX mode 
  data[2] = byte(130); //select 14th entry of PlayList.pla on SD CARD
  data[10] = byte(100); //zoom out a bit to make the bat smaller
  data[8] = byte(40);  //move beam to left
  
  openDmx.sendData(data, universeSize); 
   try{
      Thread.sleep(100);
    }catch(InterruptedException e) {}
  
  data[0] = byte(150); //select manual DMX mode 
  data[2] = byte(130); //select 14th entry of PlayList.pla on SD CARD
  
  data[8] = byte(140); //auto-translate to the right at medium speed
  data[10] = byte(100); //zoom out a bit to make the bat smaller
  
  //send DMX buffer for animationLength ms
  do{
    openDmx.sendData(data, universeSize);
    try{
      Thread.sleep(100);
    }catch(InterruptedException e) {}
    t1 = System.currentTimeMillis();
  }while(t1 - t0 < animationLength);    
}

Le système en action:

J'ai aussi fait un chaudron à bonbons, à l'aide d'un brumisateur comme celui-ci, placé dans un saladier.

J'ai fait une grille découpée au laser pour laisser passer le brouillard mais j'ai constaté qu'il se condense sur la grille. Il faut laisser libre le jet de brouillard sortant du brumisateur. L'effet est vraiment sympa, pour peu qu'on ait des bonbons water-proof. Ca chauffe aussi un peu alors faut pas laisser trop longtemps les chocobons dans le chaudron laugh.

La version améliorée de l'an prochain sera encore plus sympa.

 

Partager cet article
Repost0

commentaires