Étape 3: Écrire le Code
Installer l’IDE Arduino de arduino.cc si vous ne l’avez déjà. Ouvrir une nouvelle esquisse et collez ce code dans. Compiler, téléchargez-le et testez-le.
/*
Photographie en accéléré dynamique sensible à la lumière et réglable
Ce programme et les circuits sont conçus pour contrôler la photographie en accéléré
C’est l’utilisateur contrôlable et adapté aux niveaux de lumière ambiante.
L’éclairage de shootings de lever et coucher du soleil peut parfois être difficile
pour anticiper, donc au lieu de se retrouver avec des centaines de complètement noir
photos, une photorésistance détecte les niveaux d’éclairage et en conséquence s’arrête ou démarre
la photographie. Un potentiomètre permet de régler le délai entre
photographies et un afficheur 7 segments de chiffres multiples indique le courant
valeur de délai.
Ce circuit est conçu pour être utilisé avec un déclencheur à distance infrarouge. J’ai
conçu pour un Nikon D3100, mais tout autre DSLR avec une télécommande doit
fonctionner tout aussi bien. Dans ce circuit, une LED agit actuellement comme un stand-in pour
le déclencheur à distance, mais son adaptation pour l’obturateur n’est qu’une question de contourner
le bouton de la télécommande et de contrôle avec l’Arduino. Étant donné qu’elle
est difficile de dire quand un émetteur infrarouge est activé,
l’afficheur 7 segments clignote chaque fois qu’une photo est prise à informer le
utilisateur de ses progrès.
Puisque de nombreux amateurs de Time-lapse sont intéressés par l’ajout d’un élément dynamique
à leurs coups, j’ai inclus des fonctionnalités pour une plate-forme asservie
qui pourrait permettre à la caméra tourner ou déplacer dans une scène.
Le circuit :
* L’afficheur 7 segments est contrôlée par broches 2-8 et 10-12. L’affichage
œuvres en utilisant chaque chiffre comme un motif et chaque segment comme une contribution positive.
Par exemple, pour afficher un segment A le chiffre 3, l’Arduino fixerait broche 2,
qui contrôle le segment A élevé et axe de 12, qui est le motif pour le chiffre 3,
à la basse.
* Le LED ou déclencheur à distance, est connecté à la broche 13 et GND.
* Le servo est relié au 5V et GND et reçoit un signal de broche 9.
* La photorésistance utilisée dans un circuit de division de tension en conjonction avec un 10kΩ
résistance et il est lu par broches A0.
* Le potentiomètre est lu par broche A1
Remerciements :
Instructables de FireCGun post sur « Affichage de Arduino 4 chiffres 7 segments »
9 décembre 2013
par Leslie-Bole Holden
Je déclare ce code public domain.
*/
#include < Servo.h > / / inclure la bibliothèque de servo
Servo cameraServo ; Créer un objet de servo appelé cameraServo
const int potPin = A1 ; Mettre broche analogique A1 à lire le potentiomètre
const int photoresistorPin = A0 ; Mettre broche analogique A0 lire la photorésistance
int potValue = 0 ;
Initialiser le potValue, la variable qui stocke la valeur du potentiomètre, à zéro
int photoresistorValue = 0 ;
Initialiser le photoresistorValue, la variable qui stocke la valeur de la photorésistance, à zéro
int shutterDelay = 0 ; Cette variable stocke le retard utilisateur-saisies entre les photos
long lastPicTime = 0 ; L’heure à laquelle la dernière photo a été prise
long lastServoTime = 0 ; L’heure à laquelle le servo dernière exploité
timeLapseDuration longue = 900000 ;
Pour l’étalonnage du servo - la durée prévue de la pousse (en millisecondes)
int servoPosition = 0 ; Position du servo en degrés
Cette section attribue un numéro de broche pour différents éléments à l’écran
const int aPin = 2 ;
const int bPin = 3 ;
const int cPin = 4 ;
const int dPin = 5 ;
const int ePin = 6 ;
const int fPin = 7 ;
const int gPin = 8 ;
const int GND1 = 10 ;
const int GND2 = 11 ;
const int GND3 = 12 ;
const int shutterPin = 13 ; broche 13 contrôlera l’obturateur
int num ; Le numéro entré par le potentiomètre
int dig2Value = 0 ;
int dig3Value = 0 ;
int brightnessDelay = 3 ; Un retard de quantité arbitraire qui contrôle la luminosité de l’affichage
Exécuter cette méthode une fois au démarrage de Arduino
void setup()
{
cameraServo.attach(9) ; Assignez le servo à broche 9
cameraServo.write(0) ; Initialiser le servo à 0
Définir l’affichage et obturateur épingles à la sortie
pinMode (aPin, sortie) ;
pinMode (bPin, sortie) ;
pinMode (RCIP, sortie) ;
pinMode (dPin, sortie) ;
pinMode (ePin, sortie) ;
pinMode (fPin, sortie) ;
pinMode (gPin, sortie) ;
pinMode (GND1, sortie) ;
pinMode (GND2, sortie) ;
pinMode (GND3, sortie) ;
pinMode (shutterPin, sortie) ;
Serial.Begin(9600) ; Il s’agit d’un utile peu de code à maintenir pendant le débogage et le test
}
Exécuter cette méthode en continu
void loop()
{
unsigned long currentTime = millis() ; Trace de combien de temps l’Arduino a été runnign
potValue = analogRead(potPin) ; Lire le potentiomètre et stockez-la dans potValue
num = carte (potValue, 0, 1023, 99, 0) ; Ajuster la plage de sortie pour s’adapter à du retard
shutterDelay = num * 1000 ;
Étant donné que la mesure du temps naturel de l’Arduino est en millisecondes, cela convertit num
dans un délai entre les photos en millisecondes
dig2Value = num / 10 ; Utiliser la troncature entier pour faire dig2Value les dizaines à chiffres
dig3Value = num - (dig2Value * 10) ; Arithmétique qui fournit les chiffres
Définir les motifs à haute
digitalWrite (GND1, élevé) ;
digitalWrite (GND2, élevé) ;
digitalWrite (GND3, élevé) ;
Affichez un d du retard sur chiffre un
digitalWrite (GND1, basse) ; Mettre en marche
d() ; Voir méthode d() Sub
Delay(brightnessDelay) ; Attendez 3 ms de sorte que vous pouvez le voir
digitalWrite (GND1, élevé) ; Mettez-le hors tension
digitalWrite (GND2, basse) ;
Number(dig2Value) ; Voir la méthode number(int i)
Delay(brightnessDelay) ;
digitalWrite (GND2, élevé) ;
digitalWrite (GND3, basse) ;
Number(dig3Value) ; Voir la méthode number(int i)
Delay(brightnessDelay) ;
digitalWrite (GND3, élevé) ;
servoPosition = cameraServo.read() ;
Jeu de la servoPosition pour tout ce qui est actuellement est en degrés
photoresistorValue = analogRead(photoresistorPin) ; Lire la photorésistance
if(photoresistorValue > 100)
Essayez différentes valeurs pour cela. J’ai choisi 100 juste basé sur l’expérimentation.
{
Si (currentTime - lastPicTime > shutterDelay)
Déterminer si le délai de l’obturateur s’est écoulé depuis la dernière capture
{
Prendre la photo
digitalWrite (shutterPin, HIGH) ;
lastPicTime = currentTime ;
Delay(200) ;
digitalWrite (shutterPin, basse) ;
}
Évaluer l’activité de servo
Si (currentTime - lastServoTime > timeLapseDuration/180 & & servoPosition < 180)
{
servoPosition ++ ;
cameraServo.write(servoPosition) ; Déplacer le servo
lastServoTime = currentTime ;
}
}
}
Cette méthode utilise la notation de switch/case pour appeler les méthodes pour les chiffres en réponse à un nombre entier d’entrée
void number(int i) {}
{Switch(i)}
cas 1: one() ;
rupture ;
cas 2: two() ;
rupture ;
case 3: three() ;
rupture ;
case 4: four() ;
rupture ;
cas 5: five() ;
rupture ;
case 6: six() ;
rupture ;
cas 7: seven() ;
rupture ;
cas 8: eight() ;
rupture ;
case 9: nine() ;
rupture ;
par défaut : zero() ;
rupture ;
}
}
Cette méthode affiche le d du retard
d() Sub
{
digitalWrite (aPin, faible) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, HIGH) ;
digitalWrite (fPin, faible) ;
digitalWrite (gPin, HIGH) ;
}
Cette méthode affiche le chiffre un
Sub one()
{
digitalWrite (aPin, faible) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, faible) ;
digitalWrite (ePin, faible) ;
digitalWrite (fPin, faible) ;
digitalWrite (gPin, basse) ;
}
Cette méthode affiche le chiffre deux
Sub two()
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, faible) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, HIGH) ;
digitalWrite (fPin, faible) ;
digitalWrite (gPin, HIGH) ;
}
Cette méthode affiche le chiffre trois
Sub three()
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, faible) ;
digitalWrite (fPin, faible) ;
digitalWrite (gPin, HIGH) ;
}
Cette méthode affiche le chiffre quatre
Sub four()
{
digitalWrite (aPin, faible) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, faible) ;
digitalWrite (ePin, faible) ;
digitalWrite (fPin, HIGH) ;
digitalWrite (gPin, HIGH) ;
}
Cette méthode affiche le chiffre cinq
Sub five()
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, basse) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, faible) ;
digitalWrite (fPin, HIGH) ;
digitalWrite (gPin, HIGH) ;
}
Cette méthode affiche le chiffre six
Sub six()
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, basse) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, HIGH) ;
digitalWrite (fPin, HIGH) ;
digitalWrite (gPin, HIGH) ;
}
Sub seven()
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, faible) ;
digitalWrite (ePin, faible) ;
digitalWrite (fPin, faible) ;
digitalWrite (gPin, basse) ;
}
Cette méthode affiche le chiffre huit
Sub eight()
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, HIGH) ;
digitalWrite (fPin, HIGH) ;
digitalWrite (gPin, HIGH) ;
}
Cette méthode affiche le chiffre neuf
Sub nine()
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, faible) ;
digitalWrite (fPin, HIGH) ;
digitalWrite (gPin, HIGH) ;
}
Cette méthode affiche le chiffre zéro
zero() Sub
{
digitalWrite (aPin, HIGH) ;
digitalWrite (bPin, HIGH) ;
digitalWrite (RCIP, HIGH) ;
digitalWrite (dPin, HIGH) ;
digitalWrite (ePin, HIGH) ;
digitalWrite (fPin, HIGH) ;
digitalWrite (gPin, basse) ;
}