Temporisateur pour reflex numériques

Bonjour à tous les arduinistes ! Je viens de réaliser un temporisateur pour prendre des photos astronomiques avec un vieux Canon 20D ou un (vieux également) Sony Alpha 100. Je voulais également pouvoir faire de petites animations en accéléré (time_lapse in inglish) si besoin.
Ce montage a déjà été fait maintes fois avec plus ou moins de bonheur, mais soit ils ne me plaisaient pas, soit les fonctionnalités proposées ne me convenaient pas !
J'ai donc implanté sur une plaque pastillée un afficheur LCD (2x16), de quoi enficher un Arduino Uno, 7 BP dont 4 avec condensateurs pour aider l'anti-rebond), une prise jack femelle à trois contacts, deux opto coupleurs, quelque résistances, 2 potentiomètres (pour le rétro éclairage et le contraste du LCD ).
Ce système permet de choisir entre deux modes de prise de vue, Normal et Bulb.
1°) Si on choisi le mode "Bulb", l'impulsion envoyée à l'APN est maintenue le temps de la prise de vue (souvent plusieurs minutes en astronomie), afin de maintenir le miroir de l'APN ouvert pendant ce temps.
Quand la durée est écoulée, le miroir se ferme, la photo est enregistrée et on attend un poil pour la suivante. (NB : sur le Canon, si l'option "verrouillage du miroir est activée", le rideau ne s'ouvre qu'après deux secondes pour éviter les vibrations. Le Sony fait la même chose si on choisit la valeur 2 secondes pour le retardateur)
2°) Si on choisit le mode 'Normal", c'est l'appareil qui détermine le temps de pose, (ainsi que le diaphragme éventuellement). Dans ce cas, on envoie une brève impulsion (1/2 seconde est suffisant), d'abord sur la broche focus (pour que la mise au point ait le temps de se faire), puis une brève impulsion sur la broche de PDV( 1/10 sec est suffisante) pour prendre la photo cette fois.
Le minuteur attend cette fois pendant la durée programmée pour recommencer...
Je me suis aperçu récemment que L'Arduino disposait de 512 Octets de mémoire morte ]:D, ce n'est pas beaucoup mais largement suffisant pour mémoriser ces réglages pour ne pas avoir à les refaire à chaque fois. En fait je n'utilise que 3 octets pour l'instant, un pour la durée (maxi : 512 secs), un pour le nombre de photos (maxi : 512), et un pour le mode de PDV( 1 : bulb, 2 : normal)...pas besoin d'une carte d'extension de 16 Go !
Par la suite, je vais peut être ajouter quelques composants pour détecter quelque chose qui déclenchera l'APN, genre infra-rouge devant une mangeoire à oiseau..... :smiley:

Voili-voilà, ça fonctionne, et si ça peut interresser quelqu'un j'en serais heureux :P, mais mon programme est lourd, mal écrit et pas optimisé =(. J'ai bêtement utilisé la fonction delay(), au lieu de travailler avec les millis(), les durées ne sont pas critiques !
Je n'ai pas utilisé d'interruptions, car mal à l'aise avec cette fonction, et une fois que le cycle est enclenché, impossible d’arrêter sans faire un reset, ce qui n'est pas très élégant...bref, programmé avec les pieds....si une bonne âme charitable parmi les programmeur géniaux qui trainent sur ces forums voulaient y jeter un œil et formuler quelques critiques constructives, je ne m'en offusquerais pas du tout !
Salut à tous les arduineuses et arduineurs addict ! :stuck_out_tongue:

Tempo_photo_afficheur_lcd_EEPROM.ino (11.2 KB)

La photo de l'engin n'a pas l'air d'etre passée, je la joins donc a nouveau !