DIY motoriserade glidande timelapse kamera dolly med Arduino (6 / 7 steg)
Steg 6: programvara
Så, när du dra i spaken i en riktning på den andra och om kameran inte har utlöst motsvarande reed switch kameran börjar flytta och ta bilder. Om du trycker på knappen under förflyttning, startar kameran rör sig snabbt, för felsökning ändamål. Om du trycker på knappen medan 3-state avlång knapp strömbrytare är i middle(-off) finns det också en panorama funktion. Möjligheterna av rörelser kombinera servo och dc motor är oändliga.
#include < AFMotor.h >
#include < Servo.h >
#include < SoftwareSerial.h >SoftwareSerial mySerial (A3, A2); RX, TX
AF_DCMotor motor(4); skapa motor #4, 64KHz pwm
Servo servo;int swDirFor = 2; framåt-knappen
int swDirBack = 3; Bakåt knappen
int swStopBeg = 10; stop1 knappen
int swStopEnd = A1; stop2 knapp
int swPhoto = 11; SW relä för foto
int servoPin = 9; servopin
int steg = 100; steg längd 1200 fotos
int servoPos = 96. mittläget av servo
int servoStart = 20; startposition för servo
int servoStop = 155; slutposition för servo
int servoPot = A0; stift av servo potten
int noOfSteps = 0; räkna antalet steg
int swFast = A5; SW för snabba rörelser
int jag = 0; //for loopvoid setup() {
mySerial.begin(9600);
Serial.BEGIN(9600); Ställ in följetong bibliotek på 9600 bps
servo.attach(servoPin); servopin
motor.setSpeed(200); som hastigheten till 200/255
pinMode(swDirFor,INPUT);
pinMode(swDirBack,INPUT);
pinMode(swStopBeg,INPUT);
pinMode(swStopEnd,INPUT);
pinMode(servoPin,OUTPUT);
pinMode(swPhoto,OUTPUT);
pinMode(servoPot,INPUT);
pinMode(swFast,INPUT);
digitalWrite(swPhoto,LOW);
servoMove(servoPos);
}
///////////////////////////////////////////////////////////////
void loop() {
om (mySerial.available()) {
mySerial.write('a');
mySerial.print ("knappen stop slutet:");
mySerial.println(digitalRead(swStopEnd));
}
Serial.Print ("knapp för:");
Serial.println(digitalRead(swDirFor));
Serial.Print ("knappen staten tillbaka:");
Serial.println(digitalRead(swDirBack));
Serial.Print ("knappen stop Beg:");
Serial.println(digitalRead(swStopBeg));
Serial.Print ("knappen stop slutet:");
Serial.println(digitalRead(swStopEnd));
Serial.Print ("servo pot:");
Serial.println(analogRead(servoPot));
Serial.Print ("snabb switch:");
Serial.println(digitalRead(swFast));
servoPos=map(analogRead(servoPot), 0,1024,1,180);
servoMove(servoPos);
förflyttning framåt
medan ((digitalRead(swDirFor)==1)) {
om (digitalRead(swStopEnd)==0) {
Serial.println ("BREAK stopEnd");
bryta;
} //if Stäng
samtidigt (digitalRead(swFast)==1) {
Serial.println("FF");
runMotor(0,1000);
} //while swFast Stäng
noOfSteps ++;
runMotor(0,steps);
fördröjning (750); //final delay(2k-1hour)
takeFoto();
} //while swDirFor) == 1, nära
bakåt rörelse
medan ((digitalRead(swDirBack)==1)) {
om (digitalRead(swStopBeg)==0) {
Serial.println ("BREAK stopBeg");
bryta;
} //if Stäng
samtidigt (digitalRead(swFast)==1) {
Serial.println("FB");
runMotor(1,1000);
} //while swFast Stäng
runMotor(1,steps);
noOfSteps ++;
servoMove(160);
fördröjning (1000); //final dröjsmål
takeFoto();
} //while swDirBack) == 1, nära
servo rörelse
om ((digitalRead(swFast)==1)) {
Serial.println ("mesa sto om");
servoMove(20);
fördröjning (2000), //time att flytta servo till start pos
för (jag = 20; jag < = 155; (i = i + 27)) {
Serial.println ("mesa sto för");
servoMove(i);
Delay(2000);
takeFoto();
Delay(100);
noOfSteps ++;
} //for Stäng
} //if Stäng
Delay(500);
Serial.Print ("steg:");
Serial.println(noOfSteps);
} //loop Stäng
Rutin för rörelse / / /
void runMotor (int dir, int steg) {
Växla (dir) {
fall 0:
Serial.println ("framåt");
motor.Run(forward); slå på framöver
Delay(Steps);
motor.Run(release); stoppad
Serial.println ("Stop framåt");
bryta;
fall 1:
Serial.println("Backward");
motor.Run(Backward);
Delay(Steps);
motor.Run(release);
Serial.println ("Stop bakåt");
bryta;
} //switch Stäng
fördröjning (100);
} //runMotor Stäng
//Routine foto//////////////////////////////////////////////////
void takeFoto() {
fördröjning (500).
Serial.Print ("klick!");
digitalWrite(swPhoto,HIGH);
Delay(1500);
digitalWrite(swPhoto,LOW);
} //takeFoto Stäng
//Routine servo//////////////////////////////////////////////////
void servoMove (int pos) {
servo.write(POS); berätta servo gå för att placera i variabel "pos"
Serial.Print ("servo flytta till:");
Serial.println(POS);
Delay(150); Waits 15 MS för servo att nå ställning
} //servo Stäng