Pages: [1]   Go Down
Author Topic: PIR sensor+Arduino+Processing HELP !  (Read 895 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 :DBonjour les p'tits génis !

Voilà je suis en train de découvrir les joies du monde Arduino, Processing & Cie.
  Je suis étudiante aux Beaux-Arts en espagne actuellement et j'ai un proget d'istallation intéractive avec un sensor PIR, une lumière et une vidéo et une photo sur un ordinateur.
  Si tout marche un jour l'idée est que lorsque quelqu'un s'approche du sensor la lumière s'éteigne et la vidéo (qui le reste du temps est en boucle) s'arrête et passe à une photo.
Mon sensor Pir je l'ai programmé via Arduino avec le sketch suivant piqué sur internet :

* The sensor?s output pin goes to HIGH if motion is present.
* However, even if motion is present it goes to LOW from time to time,
* which might give the impression no motion is present.
* This program deals with this issue by ignoring LOW-phases shorter than a given time,
* assuming continuous motion is present during these phases.
*
*/

/////////////////////////////
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;      

//the time when the sensor outputs a low impulse
long unsigned int lowIn;        

//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;

boolean lockLow = true;
boolean takeLowTime;

int pirPin = 3;    //the digital pin connected to the PIR sensor's output
int ledPin = 13;


/////////////////////////////
//SETUP
void setup(){
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(1000);
      }
    Serial.println(" done");
    Serial.println("SENSOR ACTIVE");
    delay(50);
  }

////////////////////////////
//LOOP
void loop(){

     if(digitalRead(pirPin) == HIGH){
       digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state
       if(lockLow){
         //makes sure we wait for a transition to LOW before any further output is made:
         lockLow = false;          
         Serial.println("---");
         Serial.print("motion detected at ");
         Serial.print(millis()/1000);
         Serial.println(" sec");
         delay(50);
         }        
         takeLowTime = true;
       }

     if(digitalRead(pirPin) == LOW){      
       digitalWrite(ledPin, LOW);  //the led visualizes the sensors output pin state

       if(takeLowTime){
        lowIn = millis();          //save the time of the transition from high to LOW
        takeLowTime = false;       //make sure this is only done at the start of a LOW phase
        }
       //if the sensor is low for more than the given pause,
       //we assume that no more motion is going to happen
       if(!lockLow && millis() - lowIn > pause){
           //makes sure this block of code is only executed again after
           //a new motion sequence has been detected
           lockLow = true;                      
           Serial.print("motion ended at ");      //output
           Serial.print((millis() - pause)/1000);
           Serial.println(" sec");
           delay(50);
           }
       }
  }

Basiquement ça ça marche quand je passe devant mon capteur la LED s'allume !

Mon soucis viendrais plutôt de Processing où je n'arrive pas à écrire un sketch pour faire que ma vidéo tourne en boucle jusqu'à ce que le sensor capte un mouvement et arrête la vidéo pour afficher ma photo. Le seul sketch que j'ai pu écrire c'était en contrôlant tout ça avec ma souris soit le fameux "MousePressed" ! Voilà mon sketch :

import processing.video.*;
Movie myMovie;
PImage pfc;

void setup() {
  size(1680, 1050,P2D);
  pfc = loadImage("photofc.jpg");
 
  myMovie = new Movie(this, "Pou.mov");
  myMovie.loop();
  background(0);
}

void draw()
{
   if  (mousePressed == true) {
     loadImage("photofc.jpg");
     image(pfc,0,0);
  
  
   } else {
     background(0);
     image(myMovie,480,237);
    
   }

}

void mousePressed() {
  myMovie.pause();
}

void mouseReleased() {
  myMovie.loop();
}


Je suis plus que novice dans tout ça j'ai pas le langage encore bien formé ! ET je n'arrive pas à comprendre comment faire parler mon Arduino à mon processing en résumé... Tout ce qui concerne le serialport le serialevent avec un sensor PIR j'ai beau décortiquer tout ce qu'il y a sur le net je ne m'en sort pas.
Alors si il y a un génie bienfaiteur qui pouvait m'aider au plus vite je m'engage à lui être extrêmement reconnaissante de la manière qu'il choisira !!! (dans la mesure du faisable ! lol:P)
D'avance merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiii !!!big_smile
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

Il faut utiliser une communication série. Côté Arduino

Code:
void setup()
{
   Serial.begin(9600);
}

void loop()
{
   if ( ... TEST DU PIR ... ) {
       Serial.print("O");
       delay(3000); // on reste au minimum 3 secondes en fixe
   } else {
       Serial.print("N");
   }
   delay(500); // on ne teste que toutes les 1/2 secondes
}

et sur Processing :

Code:
import processing.serial.*;

Serial port;      

void setup()
{
   // affiche tous les ports série disponibles
   println(Serial.list());
   // remplacer 0 par le bon port série dans la liste
   port= new Serial(this, Serial.list()[0], 9600);
}

void draw()
{
    if (port.available() > 0)
   {
        if (port.read() == 'O')
        {
            // couper la vidéo
         } else {
            // rallumer la vidéo
         }
   }
}

Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'avais pas vu la fin du post sur la reconnaissance : être crédité dans la documentation du projet ("Julien de l'Association Pobot") et être tenu au courant du projet (site web, photos, vidéos) me suffiront.

Pour une collaboration à plus long terme, les inscriptions au club sont ouvertes smiley
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ben alors, pas de réaction ? ça a marché ou pas ?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voui ça marche mais grace à l'aide d'un autre forum ki m'avais répondu plus rapidement. Il s'agit de codelab.com. :smiley Je n'ai pas essayé avec tes conseils mais merci quand même. Mon installation est exposée au mois de juillet à Valence en Espagne dans le cadre de l'Exposition MI.MO. Mais dans l'été je vais travailler sur mon site web et je consacreré une partie aux installations intéractives où je référencerai les forums.
Encore merci smiley-wink
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour l'info, je ne connaissais pas Codelab (et c'est .fr pas .com je pense).

++
Logged

Pages: [1]   Go Up
Jump to: