Stap 3: De Code schrijven
De Arduino IDE vanaf arduino.cc installeren als u niet reeds hebt. Open een nieuwe schets en plak deze code in. Compileren en uploaden testen.
/*
Lichtgevoelig en verstelbare dynamische Time-Lapse fotografie
Dit programma en het circuit zijn ontworpen om te controleren van time-lapse fotografie
dat is de gebruiker controleerbaar en inspelen op ambient lichtniveaus.
De verlichting op de zonsopgang en zonsondergang fotoshoots kan soms moeilijk zijn
te anticiperen, dus in plaats daarvan terecht te komen met honderden volledig zwart
foto's, een fotoweerstand zintuigen lichtniveaus en dienovereenkomstig stopt of begint
de fotografie. Een potentiometer kan de gebruiker de vertraging tussen instellen
foto's en een meerdere cijfers 7-segment display toont de huidige
vertragingswaarde.
Dit circuit is ontworpen om te worden gebruikt met een infrarood externe sluitertijd. Ik
Dit ontworpen voor een Nikon D3100, maar elke andere DSLR met een externe internetserver, moeten
net zo goed werken. In dit circuit fungeert een LED momenteel als een stand-in voor
de externe sluiter, maar aan te passen voor de sluiter is slechts een kwestie te omzeilen
de knop op de afstandsbediening en de controle van het met de Arduino. Sinds het
is moeilijk te zeggen wanneer een infrarood zender wordt geactiveerd,
de 7-segment display knippert telkens wanneer een foto is genomen om de
gebruiker van de voortgang.
Aangezien veel time-lapse liefhebbers ook geïnteresseerd zijn in het toevoegen van een dynamische element
aan hun foto's, die ik opgenomen functionaliteit voor een servo gestuurde rig
waardoor de camera te draaien of pan over een scène.
Het circuit:
* Het 7-segment display wordt gecontroleerd door pin 2-8 en 10-12. Het display
werken met behulp van elk cijfer als een grond en elk segment als een positieve inbreng.
Bijvoorbeeld, als u wilt weergeven een segment A op het cijfer 3, zou de Arduino ingesteld pin 2,
welke besturingselementen segment A op hoog, en pin 12, oftewel de grond voor het cijfer 3,
op laag.
* De LED, externe sluiter, is verbonden met pin 13 en GND.
* De servo is aangesloten op de 5V en GND en een signaal ontvangt van pin 9.
* De fotoweerstand gebruikt in een spanning-delende circuit in combinatie met een 10kΩ
weerstand, en het wordt gelezen door pin A0.
* De potentiometer wordt gelezen door pin A1
Met dank aan:
FireCGun de Instructables post op "Arduino 4 digit 7 segment display"
December 9, 2013
door Holden Leslie-Bole
Ik verklaar deze code openbaar.
*/
#include < Servo.h > / / de servo-bibliotheek
Servo cameraServo; Een servo-object aangeduid als cameraServo maken
Const int potPin = a1 worden verkregen; Analoge pincode A1 te lezen van de potentiometer instellen
Const int photoresistorPin = A0; Analoge pincode A0 te lezen van de photoresistor instellen
int potValue = 0;
Initialiseren van de potValue, de variabele die de waarde van de potentiometer slaat, op nul
int photoresistorValue = 0;
Initialiseren van de photoresistorValue, de variabele die de waarde van de fotoweerstand slaat, op nul
int shutterDelay = 0; Deze variabele slaat de gebruiker-ingevoerd vertraging tussen foto 's
lange lastPicTime = 0; Het moment waarop de laatste foto is genomen
lange lastServoTime = 0; De tijd waarop de servo laatst bediend
lange timeLapseDuration = 900000;
Voor de kalibratie van de servo - de verwachte duur van de shoot (in milliseconden)
int servoPosition = 0; De servo's positie in graden
Deze sectie toewijst pincodes aan verschillende items op het scherm
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; pin 13 zal de sluiter controleren
int num; Het nummer dat is ingevoerd door de potentiometer
int dig2Value = 0;
int dig3Value = 0;
int brightnessDelay = 3; Een vertraging van willekeurige hoeveelheid waarmee de helderheid van het display
Deze methode één keer uitvoeren wanneer Arduino begint
VOID Setup
{
cameraServo.attach(9); De servo toewijzen aan pin 9
cameraServo.write(0); Initialiseren van de servo op 0
Instellen van de display en de sluitertijd pennen voor uitvoer
pinMode (aPin, uitvoer);
pinMode (bPin, OUTPUT);
pinMode (cPin, OUTPUT);
pinMode (dPin, OUTPUT);
pinMode (ePin, OUTPUT);
pinMode (fPin, OUTPUT);
pinMode (gPin, OUTPUT);
pinMode (GND1, uitvoer);
pinMode (GND2, uitvoer);
pinMode (GND3, uitvoer);
pinMode (shutterPin, OUTPUT);
Serial.begin(9600); Dit is een nuttig beetje van code om in te houden voor het debuggen en testen
}
Deze methode continu draaien
void loop
{
unsigned long currentTime = millis(); Nagaan hoe lang de Arduino heeft geweest lopende
potValue = analogRead(potPin); Lees de potentiometer en sla het in potValue
num = kaart (potValue, 0, 1023, 99, 0); Het uitvoerbereik aanpassen aan de vertraging aanpassen
shutterDelay = num * 1000;
Aangezien de Arduino natuurlijke tijdmeting in milliseconden, zet dit num
in een vertraging tussen foto's in milliseconden
dig2Value = num / 10; Geheel getal PST-bestanden gebruiken om dig2Value de tientallen cijfer
dig3Value = num - (dig2Value * 10); Rekenkundige die levert de cijfers
De gronden ingesteld op hoog
digitalWrite (GND1, hoge);
digitalWrite (GND2, hoge);
digitalWrite (GND3, hoge);
Een d voor vertraging op cijfer één weergeven
digitalWrite (GND1, laag); Zet hem op
d(); Zie methode nietig d()
delay(brightnessDelay); Wachten tot 3 ms zodat je kunt zien
digitalWrite (GND1, hoge); Zwenking op vandoor
digitalWrite (GND2, laag);
Number(dig2Value); Zie number(int i) methode
delay(brightnessDelay);
digitalWrite (GND2, hoge);
digitalWrite (GND3, laag);
Number(dig3Value); Zie number(int i) methode
delay(brightnessDelay);
digitalWrite (GND3, hoge);
servoPosition = cameraServo.read();
Set de servoPosition wat is op dit moment is in graden
photoresistorValue = analogRead(photoresistorPin); Lees de photoresistor
if(photoresistorValue > 100)
Probeer verschillende waarden voor dit. Ik koos voor 100 alleen gebaseerd op experimenten.
{
Als (currentTime - lastPicTime > shutterDelay)
Beoordelen of de ontspanvertraging is verstreken sinds de laatste schermopname
{
De foto
digitalWrite (shutterPin, hoge);
lastPicTime = currentTime;
delay(200);
digitalWrite (shutterPin, laag);
}
Beoordelen van de servo-activiteit
Als (currentTime - lastServoTime > timeLapseDuration/180 & & servoPosition < 180)
{
servoPosition ++;
cameraServo.write(servoPosition); Verplaatsen van de servo
lastServoTime = currentTime;
}
}
}
Deze methode gebruikt switch/case notatie om te roepen de methoden voor de cijfers in antwoord op een geheel getal invoeren
VOID number(int i) {}
switch(i) {}
geval 1: one();
breken;
geval 2: two();
breken;
Case 3: three();
breken;
geval 4: four();
breken;
geval 5: five();
breken;
kast 6: six();
breken;
geval 7: seven();
breken;
geval 8: eight();
breken;
zaak 9: nine();
breken;
standaard: zero();
breken;
}
}
Deze methode geeft de d voor vertraging
VOID d()
{
digitalWrite (aPin, laag);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, hoge);
digitalWrite (ePin, hoge);
digitalWrite (fPin, laag);
digitalWrite (gPin, hoge);
}
Deze methode geeft de cijfers een
VOID one()
{
digitalWrite (aPin, laag);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, laag);
digitalWrite (ePin, laag);
digitalWrite (fPin, laag);
digitalWrite (gPin, laag);
}
Deze methode geeft het cijfer twee
VOID two()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, hoge);
digitalWrite (cPin, laag);
digitalWrite (dPin, hoge);
digitalWrite (ePin, hoge);
digitalWrite (fPin, laag);
digitalWrite (gPin, hoge);
}
Deze methode geeft het cijfer 3
VOID three()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, hoge);
digitalWrite (ePin, laag);
digitalWrite (fPin, laag);
digitalWrite (gPin, hoge);
}
Deze methode geeft het cijfer vier
VOID four()
{
digitalWrite (aPin, laag);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, laag);
digitalWrite (ePin, laag);
digitalWrite (fPin, hoge);
digitalWrite (gPin, hoge);
}
Deze methode geeft het cijfer vijf
VOID five()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, laag);
digitalWrite (cPin, hoge);
digitalWrite (dPin, hoge);
digitalWrite (ePin, laag);
digitalWrite (fPin, hoge);
digitalWrite (gPin, hoge);
}
Deze methode geeft het cijfer zes
VOID six()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, laag);
digitalWrite (cPin, hoge);
digitalWrite (dPin, hoge);
digitalWrite (ePin, hoge);
digitalWrite (fPin, hoge);
digitalWrite (gPin, hoge);
}
VOID seven()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, laag);
digitalWrite (ePin, laag);
digitalWrite (fPin, laag);
digitalWrite (gPin, laag);
}
Deze methode geeft het cijfer acht
VOID eight()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, hoge);
digitalWrite (ePin, hoge);
digitalWrite (fPin, hoge);
digitalWrite (gPin, hoge);
}
Deze methode geeft het cijfer negen
VOID nine()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, hoge);
digitalWrite (ePin, laag);
digitalWrite (fPin, hoge);
digitalWrite (gPin, hoge);
}
Deze methode geeft het cijfer nul
VOID zero()
{
digitalWrite (aPin, hoge);
digitalWrite (bPin, hoge);
digitalWrite (cPin, hoge);
digitalWrite (dPin, hoge);
digitalWrite (ePin, hoge);
digitalWrite (fPin, hoge);
digitalWrite (gPin, laag);
}