Arduino Time lapse V2

Le système que j’avais précédemment réalisé n’était pas très pratique à utiliser.
J’ai donc décidé d’ajouter deux potentiomètres afin de pouvoir régler l’intervalle de déclenchement sans avoir besoin d’ordinateur.

J’ai également sorti trois fils (5v, GND, A2) afin de pouvoir ajouter un capteur externe.
Dans mon exemple j’ai choisi un capteur de présence type PIR. Cela permet de déclencher une rafale de 10 photos lorsque quelqu’un passe devant celui-ci. Attention toutefois ce type de capteur est très lent, il peut prendre jusqu’à 60s pour passer d’un état haut à un état bas.
Mais il est possible d’utiliser n’importe quel capteur TOR 5v ou analogique.

Schéma:

schemav2

Le premier potentiomètre permet de régler l’unité (sec, min, heures, jour, ou déclenchement sur capteur).
Le second permet de régler la valeur (1-60 sec/min, 1-24 h/j).
En déclenchement sur capteur il permet de régler le seuil (seuil bas, 0-5V, seuil haut).

 

Code Source

/*
 ArduinoTimeLapse V2.0
 */
long intervale=1;               // intervale de temps en sec
int focus = 4;
int decl = 5;
int capteur=0;
int nbShoot=0;
                                // the setup routine runs once when you press reset:
void setup() {
                                // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
                                // initialize the digital pin as an output.
  pinMode(focus, OUTPUT); 
  pinMode(decl, OUTPUT);  
}

void shoot()
{
   digitalWrite(focus, HIGH);   // start focusing
  delay(80);                    // wait
  digitalWrite(decl, HIGH);     // start shooting
  delay(60);                    // wait 1/2 sec
  digitalWrite(decl, LOW);      // stop shoot
  delay(50);                    // wait for a second
  digitalWrite(focus, LOW);     // release the focus 
}

void shootCapt()
{
   digitalWrite(focus, HIGH);   // start focusing
  delay(300);                   // wait
  digitalWrite(decl, HIGH);     // start shooting
  delay(60);                    // wait 1/2 sec
  digitalWrite(decl, LOW);      // stop shoot
  delay(1000);                  // wait for a second
  digitalWrite(focus, LOW);     // release the focus
  nbShoot++;                    //incrémente le nombre de déclenchement
}

// the loop routine runs over and over again forever:
void loop() {
                                // read the input
  int potU = 1023- analogRead(A0);
  delay(10);
  double potV =1023- analogRead(A1);
  if(potV<1) potV=1;
  
  /*======== SECONDE ========*/
  if(potU<15)                  //unitée en seconde
  {
    intervale=60*potV;
    intervale=intervale/1023;
    if(intervale<1) intervale=1;//on décale afin d'avoir au minimum un décalage de 1 unitée
    shoot();
    delay(intervale*1000);
  }
  
  /*======== MINUTE ========*/
  if(potU>=15 && potU<256)    //unitée min
  {
    intervale=3600*potV;
    intervale=intervale/1023;
    if(intervale<60) intervale=60;
    shoot();
    delay(intervale*1000);
  }
  
  /*======== HEURE ========*/
  if(potU>=256 && potU<512)  //unitée heure
  {
    intervale=86400*potV;
    intervale=intervale/1023;    
    if(intervale<3600) intervale=3600;
    shoot();
    delay(intervale*1000);
  }
  
  /*======== Jour ========*/
  if(potU>=512 && potU<990)  //unitée jour
  {
    intervale=2073600*potV;
    intervale=intervale/1023;    
    if(intervale<86400) intervale=86400;
    shoot();
    delay(intervale*1000);
  }
  
  /*======== CAPTEUR ========*/
  if(potU>=990)              //declenchement via capteur
  {
    capteur = analogRead(A2);
    
    if(potV<=15)             //declenchement sur ETAT BAS
    {
      if(capteur<150 && nbShoot<10)
      {
         shootCapt();
      }
      if(capteur>=150)
      {
         nbShoot=0; 
      }
    }
    
    if(potV>=990)            //declenchement sur ETAT HAUT
    {
      if(capteur>750 && nbShoot<10)
      {
          shootCapt();
      }
      if(capteur<=750)
      {
         nbShoot=0; 
      }
    }
    
    if(potV>15 && potV<990)
    {
      if(capteur>potV && nbShoot<10)  //déclenchement si capteur superieur au seuil potV
      {
          shootCapt();          
      }
       if(capteur<=potV)
      {
         nbShoot=0; 
      }
    }
  Serial.println(nbShoot);
    delay(1000);
  }
  // print out the value you read:
  //Serial.println(intervale);
}
ArduinoTimeLapseV2

j’ai mis le système dans une boite en laissant dépasser les trois fils du capteur et un câble USB que je relie à une batterie de secours de téléphone.