Programmlisting für den Slider

Zurück zum Baubericht des Kamera-Sliders

Zuerst eine Aufstellung der Pinbelegung für den Arduino Uno

Analoge Ein/Ausgänge
Pin0 Poti für Anzahl der Schritte
Pin1 Poti für Dauer der Kamera-Auslösung
Pin2 frei
Pin3 frei
Pin4 frei
Pin5 frei
Digitale Ein/Ausgänge
Pin0 frei
Pin1 frei
Pin2 Eingang Endschalter links
Pin3 Eingang Endschalter rechts
Pin4 Eingang Richtungsschalter links
Pin5 Eingang Richtungsschalter rechts
Pin6 frei
Pin7 Ausgang Optokoppler Kamerafocus, ist noch nicht belegt
Pin8 Ausgang Optokoppler Kameraauslösung
Pin9 Ausgang LED Richtungsschalter rechts
Pin10 Ausgang LED Richtungsschalter links
Pin11 Ausgang LED Endschalter rechts
Pin12 Ausgang LED Endschalter links
Pin13 Ausgang LED Kameraauslösung

Nachfolgend habe ich das Programm für die Steuerung als Text eingestellt. Leider sind die Einrückungen für die Schleifen aus dem Editor nicht übernommen worden.
Einen prinzipiellen Schaltplan werde ich in den nächsten Tagen noch veröffentlichen.
Bei weiteren Veröffentlichungen bitte darauf achten, das bei Open Source immer auch die ursprünglichen Autoren genannt werden sollten!

(aus irgendwelchen Gründen löscht WordPress immer wieder die manuell eingefügten Leerstellen im Listing, die die Schleifen übersichtlicher darstellen)

An einigen Stellen sind noch write Anweisungen, die benutze ich ab und an wärend des Programmablaufs. Wenn ein Rechner angeschlossen ist, lassen sich damit einige Variablen überprüfen. Ansonsten haben diese Anweisungen keine Bedeutung. Ein Display ist nicht angeschlossen. Die Bedienung erfolgt nur über zwei Potis für den Fahrweg zwischen den Fotos und die für die Stillstandszeit für das Foto sowie einen Schalter für die Richtung des Motors.

Programmlisting für Arduino Uno

/*
Dieses Programm ist zur Steuerung eines Kamerasliders von Jörg Viering.
Verwendet wir ein Adafruit Motor Shield for Arduino v2.
Diese Version ist für die Steuerung einer Linearachse.
Version 1.1 ,
Stand 30. Juni 2015
*/

// Konstanten für das Programm
const int schrittemax = 4750; // max Schritte bei Fahrweg von 1170mm
const int schalterliPin = 4; // Taster links 4 pin
const int schalterrePin = 5; // Taster rechts 5 pin
const int schalterledPinli = 10; // LED pin links
const int kamera = 8; // Optokoppler
const int schalterledPinre = 9; // LED pin rechts
const int tasterliPin = 2; // Taster links 2 pin
const int tasterrePin = 3; // Taster rechts 3 pin
const int ledPinli = 12; // LED pin links
const int ledPinre = 11; // LED pin rechts
const int ledPin = 13; // LED Kameraauslösung pin 13
const int mininkrement0 = 1; // kleinste Schrittmenge
const int maxinkrement0 = 20; // max. Schrittweite
const int mininkrement1 = 500; // kleinste Zeit
const int maxinkrement1 = 15000; // max. Zeit
// Variablen
int schritte = 0; // Variable für den aktuellen Schrittewert
int schrittinkrement = 10; // Wert für Schrittweite pro Inkrement
int belichtungszeit = 100; // wert für belichtungszeit
int schalterliState, schalterreState; // Variable für die Laufrichtung
int tasterliState, tasterreState; // Variable für Endschalter
int sensorPin0 = 0; // The potentiometer is connected toanalog pin 0
int analoginkrement0 = 1;
int inkrement0 = 1;
int sensorPin1 = 1; // The potentiometer is connected toanalog pin 0
int analoginkrement1 = 1;
int inkrement1 = 1;

boolean Stop=true ;

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include „utility/Adafruit_PWMServoDriver.h“
Adafruit_MotorShield AFMS = Adafruit_MotorShield();

// Für einen Schrittmotor mit 200 steps pro Umdr. (1.8 Grad)
// am motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);

void setup()
{

Serial.begin(9600); // set up Serial library at 9600 bps
AFMS.begin(1000); // create with the default frequency 1.6KHz
myMotor->setSpeed(10); // 10 rpm
pinMode(schalterliPin, INPUT); // Richtungsschalter links
pinMode(schalterrePin, INPUT); // Richtungsschalter rechts
pinMode(tasterliPin, INPUT); // Endschalter links
pinMode(tasterrePin, INPUT); // Endschalter rechts
pinMode(schalterledPinli, OUTPUT); // Richtungsschalter links LED
pinMode(schalterledPinre, OUTPUT); // Richtungsschalter rechts LED
pinMode(ledPinli, OUTPUT); // Endschalter links LED
pinMode(ledPinre, OUTPUT); // Endschalter rechts LED
pinMode(ledPin, OUTPUT);
pinMode(kamera, OUTPUT); // Ausgang Optokoppler

}

void loop()
{

schalterliState = digitalRead(schalterliPin);
schalterreState = digitalRead(schalterrePin);
if ((schalterliState == LOW) and (schalterreState == LOW))
{
digitalWrite(schalterledPinli, LOW); // turn the LED off
digitalWrite(schalterledPinre, LOW); // turn the LED off
Stop=true;
}
else
{
Stop=false;
if (schalterliState == LOW)
{
digitalWrite(schalterledPinli, HIGH); // turn the LED on
if ( schritte < schrittemax)
{
Serial.println( schritte);
myMotor->step(schrittinkrement, FORWARD, DOUBLE);
// myMotor->step(schrittinkrement, FORWARD, MICROSTEP);
Serial.println(“ Motor links“);
schritte = schritte + schrittinkrement;
Serial.println(schrittinkrement);
}
}
if (schalterreState == LOW)
{
digitalWrite(schalterledPinre, HIGH); // turn the LED on
if ( schritte > 0)
{
Serial.println( schritte);
myMotor->step(schrittinkrement, BACKWARD, DOUBLE);
// myMotor->step(schrittinkrement, BACKWARD, MICROSTEP);
Serial.println(„Motor rechts „);
schritte = schritte – schrittinkrement;
Serial.println(schrittinkrement);
}
}
}
// schalterliState = digitalRead(schalterliPin);
// schalterreState = digitalRead(schalterrePin);
tasterliState = digitalRead(tasterliPin);
tasterreState = digitalRead(tasterrePin);

if (tasterliState == HIGH)
{
digitalWrite(ledPinli, HIGH); // turn the LED on
schritte=schrittemax;
}
else
{
digitalWrite(ledPinli, LOW); // turn the LED off
}

if (tasterreState == HIGH)
{
digitalWrite(ledPinre, HIGH); // turn the LED on
schritte=0;
}
else
{
digitalWrite(ledPinre, LOW); // turn the LED off
}
// Abfrage des Richtungsschalters
if ((schalterliState == HIGH) and (schalterreState == HIGH))
{
digitalWrite(schalterledPinli, LOW); // turn the LED off
digitalWrite(schalterledPinre, LOW); // turn the LED off
Stop=true;
//Serial.println(„Motor Stop“);
//Serial.println(Stop);
}
else
{
Stop=false;
if (belichtungszeit < 2000)
{
delay(500); // halbe Sekunde warten
}
else
{
delay(1000);
}
// delay (belichtungszeit/3);
// Kameraauslösung
digitalWrite(ledPin, HIGH); // Turn the KameraLED on
Serial.println(“ Kameraausloesung“);
// Serial.println(belichtungszeit);
digitalWrite(kamera, HIGH); // Kameraauslösung on
delay(belichtungszeit);
digitalWrite(kamera, LOW); // Kameraauslösung aus
digitalWrite(ledPin, LOW); // Turn the KameraLED off
}

// Abfrage Poti für schrittinkrement

analoginkrement0 = analogRead(sensorPin0);
schrittinkrement = map(analoginkrement0,0,1023,mininkrement0,maxinkrement0);

// Abfrage Poti für Belichtungszeit

analoginkrement1 = analogRead(sensorPin1);
belichtungszeit = map(analoginkrement1,0,1023,mininkrement1,maxinkrement1);

Serial.print(„Zeit: „);
Serial.print((belichtungszeit/1000));
Serial.println(“ Sekunden“);
Serial.print(„Anzahl der Schritte: „);
Serial.println((schrittinkrement));
Serial.print(„Aktuelle Position: „);
Serial.println((schritte));
}

 

Zurück zum Baubericht des Kamera-Sliders

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

DSGVO Cookie Consent mit Real Cookie Banner