Fjärrutlösare Canon DSLR Video (4 / 5 steg)
Steg 4: Arduino kod
Här är koden för Arduino att göra hela köra.Kredit för IR fjärrkontroll koden går till Martin Koch http://controlyourcamera.blogspot.com/ med hans tack till http://www.doc-diy.net/photo/rc-1_hacked/index.php för att räkna ut IR koden.
Koden är väl kommenterade, men detta är den allmänna idén:
-SWITCH pin har till öppen ingång tillstånd av hög, detta är stiftet RF utlösaren är kopplad till.
-Tillståndet för Power LED är inställd på hög och slingan klockor för en förändring inte kör till körs. Om detta inträffar den LED blinkar (även om video är att bli skjuten), och vice versa, när inspelningen, LED återvänder till solid.
-Arduino ser ut för SWITCH stift dras låg, som anger har tryckt på avtryckaren.
-När detta inträffar bränder det Start/stopp videosekvensen att IR-LED.
-Video löpning är aktiverat eller deaktiverat.
-Piezo summern Piper (en gång för start, två gånger för stopp)
Enkelt är det.
LED blinkar koden är skriven från ett urval av koden jag hittade som gör att lampan blinka utan att använda delay(); funktion så att inga knapptryckningar är missa under en fördröjning i slingan. En liten försening är skriven i piezo summern funktionen eftersom detta bränder omedelbart efter inspelningen stoppar eller startar och inte köras kontinuerligt.
Jag har inte en AVR programmerare, så jag använde min Arduino för att skriva koden till atmega328 chip hade jag helt enkelt genom att dra den lager chipet bort min Arduino, infoga chip jag med för detta projekt, skriver koden till det och byta ut igen.
Här är koden (också bifogat i en. TXT-fil, Byt namn till .pde):
/* Modifierad av JustinHerx för ta emot indata från en fjärrkontroll (trådbundna/trådlösa) och vrida den CONST int irLED = 11; unsigned int pulseDuration = 10; mikrosekunder unsigned int foto = 7330; En 7330 mikrosekunder fördröjning mellan skurar skjuter ett foto. void setup() { } void loop() {//run igen och igen
Baserat på Arduino skiss för att simulera en Canon RC-1 IR-fjärrkontrollen för att starta och stoppa videoinspelning på en Canon 5 D Mark II eller 7D
2010, Martin Koch
http://controlyourcamera.blogspot.com/
Stort tack till http://www.doc-diy.net/photo/rc-1_hacked/index.php för att räkna ut IR koden.
utgång till en IR kommando aktiverar/avaktiverar video inspelningen på en Canon 5D MII, 7D, 60D, etc.
Delar som behövs:
-Arduino
-Power LED (eller växla med Powerled, jag använder en belyst tryckknapp växel från RadioShack # 275-0009)
-Piezo summern (RadioShack #273-059)
-2,5 mm-uttag koppla kamera avtryckare
-IR LED att utlösa kameran
-Motstånd för LED
*/
CONST int SWITCH = 7.
CONST int buzzPin = 8;
CONST int powerLED = 4;
Boolean kör = false;
int ledState = hög; ledState används för att ange LED
lång previousMillis = 0; kommer att lagra förra gången LED uppdaterades
långa intervall = 200. intervall som blinka (millisekunder)
Det krävs 15 mikrosekunder pulseDuration fungerade inte eftersom digitalWrite förbrukar lite extra tid
thats lägger till pulseDuration värde. 10 till 12 mikrosekunder fungerade för mig.
unsigned int video = 5360; En 5360 mikrosekunder fördröjning mellan skurar startar/stoppar video inspelning.
Serial.BEGIN(9600); ta bort kommentar för felsökning
pinMode (irLED, produktionen);
pinMode (SWITCH, indata);
pinMode (buzzPin, produktionen);
pinMode (powerLED, produktionen);
digitalWrite (SWITCH, hög); Aktivera interna 20 k pullup motstånd så öppen ingång staten är hög.
digitalWrite (buzzPin, låg);
digitalWrite (powerLED, hög);
om (kör == true) / / denna del av slingan är att testa om kameran har varit igång för att spela in
och blinkar makt ledde under inspelning.
{
Serial.Print("Running"); ta bort kommentar för felsökning
Serial.println();
osignerade långa currentMillis = millis();
om (currentMillis - previousMillis > intervall) {
spara den senaste gången du blinkade lysdioden
previousMillis = currentMillis;
om lysdioden är stänger den på och vice versa:
om (ledState == låg)
{
ledState = hög;
}
annat
{
ledState = låg;
}
Set LED med ledState av variabeln:
digitalWrite (powerLED, ledState);
}
}
om (digitalRead(SWITCH) == låg) {//read switch input
Shoot(video); starta eller stoppa videoinspelning
om (kör == false) //detect statligt av inspelning och Invertera det
{
kör = sant;
}
annat
{
kör =! kör;
digitalWrite (powerLED, hög);
}
piezoBeep(); beep summern som anger att inspelningen har börjat eller slutat
Delay(500);
}
}
void shoot (unsigned int delayBetweenBursts) {//sends IR signal
Skicka första 16 skurar
för (int jag = 0; jag < 16; i ++) {
digitalWrite (irLED, hög);
delayMicroseconds(pulseDuration);
digitalWrite (irLED, låg);
delayMicroseconds(pulseDuration);
}
delayMicroseconds(delayBetweenBursts);
Skicka andra 16 skurar
för (int jag = 0; jag < 16; i ++) {
digitalWrite (irLED, hög);
delayMicroseconds(pulseDuration);
digitalWrite (irLED, låg);
delayMicroseconds(pulseDuration);
}
hemkomst.
}
void piezoBeep() {//beeps piezo Summer, en gång för start av inspelning, två gånger för slutet av inspelningen
om (kör == true)
{
digitalWrite (buzzPin, hög);
Delay(250);
digitalWrite (buzzPin, låg);
}
annat
{
digitalWrite (buzzPin, hög);
Delay(250);
digitalWrite (buzzPin, låg);
Delay(100);
digitalWrite (buzzPin, hög);
Delay(250);
digitalWrite (buzzPin, låg);
}
}