Bon, après ce titre un peu pompeux, voici les éléments mis en place pour réaliser ces clichés.
Tout d'abord le côté électronique :
On y voit, l'écran LCD permettant d'afficher les valeurs des 3 potentiomètres. Le bouton poussoir sous l'écran servira à vidanger l'électro-vanne. L'autre bouton poussoir, sert à déclencher le système. Les trois potentiomètres serviront à faire varier, la durée d'ouverture de l'électro-vanne pour faire une goutte, le délai entre deux gouttes, et le délai jusqu'au flash qui va figer la photo.
Les fils jaune et orange sont reliés au flash, et les gris et blanc à l'appareil photo.
Pour l'électro-vanne, il n'y a bien que deux fils qui sont reliés au circuit, mais je n'ai pas modélisé ici son alimentation externe. L'électro-vanne a trois bornes, notées
DC,
R et
GND. Voici le schéma livré avec l'électro-vanne, incluant le nom des bornes :
La diode n'est pas sur le schéma électronique car je l'ai directement connectée aux bornes de l'électro-vanne.
Passons à la partie programmation. Voici le programme utilisé pour faire une photo :
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
const int p1Pin = A2;
const int p2Pin = A1;
const int p3Pin = A0;
const int purgePin = 12;
const int vannePin = 8;
const int apnPin = 9;
const int flashPin = 10;
const int photoPin = 11;
const int pausePostFlash = 100;
void setup() {
lcd.begin(16, 2);
pinMode(purgePin, INPUT);
pinMode(vannePin, OUTPUT);
pinMode(apnPin, OUTPUT);
pinMode(flashPin, OUTPUT);
pinMode(photoPin, INPUT);
}
void goutte(int dureeGoutte) {
digitalWrite(vannePin, HIGH);
delay(dureeGoutte);
digitalWrite(vannePin, LOW);
}
void takePhoto(int dureeGoutte, int intervalle, int delaiFlash) {
digitalWrite(apnPin, HIGH);
goutte(dureeGoutte);
delay(intervalle);
goutte(dureeGoutte);
delay(delaiFlash-intervalle);
digitalWrite(flashPin, HIGH);
delay(1);
digitalWrite(flashPin, LOW);
delay(pausePostFlash);
digitalWrite(apnPin, LOW);
}
void loop() {
int p1 = analogRead(p1Pin);
int p2 = analogRead(p2Pin);
int p3 = analogRead(p3Pin);
p1 = map(p1, 0, 1023, 0, 100);
p2 = map(p2, 0, 1023, 0, 100);
p3 = map(p3, 0, 1023, 100, 500);
if (digitalRead(photoPin) == HIGH) {
takePhoto(p1, p2, p3);
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("P1:");
lcd.print(p1);
lcd.setCursor(8, 0);
lcd.print("P2:");
lcd.print(p2);
lcd.setCursor(0, 1);
lcd.print("P3:");
lcd.print(p3);
lcd.setCursor(8, 1);
if (digitalRead(purgePin) == HIGH) {
lcd.print("ON");
digitalWrite(vannePin, HIGH);
}
else {
lcd.print("OFF");
digitalWrite(vannePin, LOW);
}
delay(50);
}
}
Les valeurs pour les potentiomètres sont mappées pour que les deux premiers donnent une valeur entre 0 et 100 et le troisième entre 100 et 500. Il faut se méfier en modifiant ces valeurs, car pour simplifier mes tests je fais une pause entre la deuxième goutte et le flash d'une durée de
delaiFlash-intervalle. Si cette valeur devient négative, le système paraîtra bloqué...
Voilà... C'est tout pour le moment. Je ne sais pas quand je recommencerais, mais je pense que les prochaines séances seront plus faciles à mettre en place !