Archives Mensuelles: novembre 2013

Timelapse … le retour

Vous le savez ça fait quelques temps que j’expérimente pour réaliser des timelapse. Après cette version de base j’avais réalisé une version plus sympa avec un écran LCD pour contrôler les paramètres.
Il s’avère que lors d’une prise de vue je n’ai pas toujours accès à une source de courant pour alimenter l’Arduino et l’appareil photo.

Or la partie Arduino est améliorable, en effet jusque là j’utilise le kit de base qui prends sa place et consomme du courant (la led d’alimentation par exemple en dépense pour rien). Certains articles parlent d’une consommation de 30mA (en 5V ?).

J’ai donc eu l’idée de remplacer l’arduino par un Attiny 45. Outre la consommation, cela me permettra de faire un circuit plus compact.
Dans mon cahier des charges je veux une consommation faible donc pas de led ou de LCD. Se pose le problème paramétrage du temps entre deux clichés.

Commutateur DIP

Commutateur DIP

J’ai utilisé un commutateur DIP pour le paramétrage. Pour éviter une dépense de courant inutile, je le lis au démarrage et je conserve la valeurs, il faut éteindre et allumer le montage pour changer la valeur
Le commutateur utilisé ayant 4 interrupteurs j’ai 16 combinaisons possibles (ah du binaire !). En associant une valeur d’attente à chacune d’entre elle j’ai plus que ce qu’il me faut pour mon interface. Il est sans doute possible d’utiliser un DIP à 3 interrupteurs pour simplifier le schéma.

4 3 2 1 Valeur (en secondes)
0 0 0 0 1
0 0 0 1 2
0 0 1 0 5
0 0 1 1 10
0 1 0 0 15
0 1 0 1 30
0 1 1 0 45
0 1 1 1 60
1 0 0 0 90
1 0 0 1 120
1 0 1 0 240
1 0 1 1 300
1 1 0 0 450
1 1 0 1 600
1 1 1 0 900
1 1 1 1 1800

Le montage

PCB Timelapse mini

PCB Timelapse mini

Le PCB réalisé est le suivant, il est surement possible de le réduire mais je ne suis pas un expert dans ce domaine, le fichier fritzing est disponible dans le repository projet.

Le Code


int buttons[4] = {1,2,3,4};

unsigned long tableDelais[ 16 ] = { 1000,2000,5000,10000,15000, 30000, 45000,60000,90000,120000,240000, 300000,450000,600000,900000,1800000 };
unsigned long waitingTime = tableDelais[0];

int trigger = 0;
int triggerTime = 200;

void setup()
{
  // make the pushbutton's pin an input:
  for (int i=0; i < 4; i++)
  {
    pinMode( buttons[ i ] , INPUT);
  }
  int index = (digitalRead( buttons[3] ) ? 0 : 8 )
                    + (digitalRead( buttons[2] ) ? 0 : 4 )
                    + (digitalRead( buttons[1] ) ? 0 : 2 )
                    + (digitalRead( buttons[0] ) ? 0 : 1 );

  waitingTime = tableDelais[ index ];
  
  pinMode( trigger , OUTPUT);
  
}

void loop()
{
  digitalWrite( trigger, HIGH);
  delay( triggerTime );  
  digitalWrite( trigger, LOW);
  
  delay( waitingTime  );        // delay in between reads for stability

                    
}

Le chargement se faisant sur un Attiny 45 je vous renvoie sur l’article adéquat pour réaliser cette étape.

Le montage final

Tiny Timelapse

Tiny Timelapse


Par rapport au PCB réalisé ci dessus j’ai rajouté un interrupteur pour l’alimentation.
Mes connecteurs vers l’alim et vers le câble de l’APN sont des plots à vis , je n’ai pas assez de boitier à pile ni de câble pour l’APN pour les souder durablement.

Consommation

Mon premier test de consommation a été encourageant en affichant un débit de 8.5mA sous 5.6V (4 piles AA rechargeables).

J’ai donc lancé un test en situation, il a tourné pendant 6 jours sans s’arrêter. a ce moment là il tournait toujours mais le pack de piles est descendu à 2.29V/

Améliorations

voir s’il est possible d’améliorer la consommation via le code (réduction de la fréquence, …). Une piste à explorer : http://electronics.stackexchange.com/questions/49182/how-can-a-let-my-atmega328-run-for-a-year-on-batteries
Pas d’urgence sur une telle évolution, le facteur limitant ne sera pas sur l’attiny (mais sur l’APN).

EDIT 22/11/2013 : Correction du code, je n’y avais pas fait attention mais un int sur Attiny n’est pas aussi grand que sur Arduino. Du coup les temps > 30s, lorsqu’ils sont convertis en millisecondes dépassent et ne donnent pas le résultat attendu.