Motorsteuerung zum Fokussieren.

Selbst entwickelte Geräte, Umbauten, Modifikationen, usw.
Antworten
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Motorsteuerung zum Fokussieren.

Beitrag von Hans_Ulrich »

Hallo allerseits,


bei den Sonnenaufnahmen ist das Fokussieren mit dem Newton ziemlich umständlich. Man kraucht in die Box mit dem Rechner (sonst sieht man ja nichts), versucht dann mit einer Hand den Auszug zu erreichen. Stößt irgend wo an und alles wackelt. Durch das Seeing am Tag ist so schon kaum der Fokus zu finden. Deshalb möchte ich das mit einem Schrittmotor steuern.

Als Motor soll ein 5V 4 Phasen Schrittmotor (Getriebe) mit dem Modul ULN2003zu Einsatz kommen. Die Steuerung über einen Arduino. Das kostet zusammen nicht mal 10 Euro. Schneller Vor- und Rücklauf. Ebenfalls langsamer Vor- und Rücklauf. Man kann eine Position abspeichern. Es wird angezeigt, ob man sich vor oder hinter der gespeicherten Position befindet. Weiterhin kann man automatisch zu diese Position fahren.

Ich stelle das Programm unten ein. Sicherlich kann man das eine oder andere anders machen, ist mein erstes Programm in C.

Das Programm:

// Übersetzung des Motors 1/64, 512 Schritte für eine Umdrehung

//Namen für Ausgabe Motor
int aus1=8;int aus2=9;int aus3=10;int aus4=11;


//Namen Lage zum gespeicherten Wert
int vor_speicher=12;int nach_speicher=13;


int ausgabe_motor [8][8] ={
{1,0,0,0,1,0,0,1},
{1,1,0,0,0,0,0,1},
{0,1,0,0,0,0,1,1},
{0,1,1,0,0,0,1,0},
{0,0,1,0,0,1,1,0},
{0,0,1,1,0,1,0,0},
{0,0,0,1,1,1,0,0},
{1,0,0,1,1,0,0,0},};

//Namen für Eingänge

int schalter_schnell_vor=2;int schalter_schnell_ruek=3;int schalter_langsam_vor=4;
int schalter_langsam_ruek=5;int schalter_merken=6;int schalter_home=7;

//Variable
int zw=0;long stellung=0; long speicher=0; long maxwert=10000; int tempo=0; //maxwert begrenzt die Anzahl der möglichen Schritte
int schnell=2; int langsam=10;

//---------------------------------------------------------------------------------------

void setup() {

// Motorausgänge
pinMode (aus1,OUTPUT);pinMode (aus2,OUTPUT);pinMode (aus3,OUTPUT);pinMode (aus4,OUTPUT);

// Lage zum gespeicherten Wert
pinMode (vor_speicher,OUTPUT);pinMode (nach_speicher,OUTPUT);

//Tasteneingänge
pinMode(schalter_schnell_vor,INPUT);pinMode(schalter_schnell_ruek,INPUT);
pinMode(schalter_langsam_vor,INPUT);pinMode(schalter_langsam_ruek,INPUT);
pinMode(schalter_merken,INPUT);pinMode(schalter_home,INPUT);

//interner Pullup
digitalWrite (schalter_schnell_vor,HIGH);digitalWrite (schalter_schnell_ruek,HIGH);
digitalWrite (schalter_langsam_vor,HIGH);digitalWrite (schalter_langsam_ruek,HIGH);
digitalWrite (schalter_merken,HIGH);digitalWrite (schalter_home,HIGH);
}

//-----------------------------------------------------------------------------------

void loop() {

//Tastaturabfrage Bewegung
if(digitalRead(schalter_schnell_vor)==0){tempo=schnell;vor();}
if(digitalRead(schalter_schnell_ruek)==0){tempo=schnell;ruek();}
if(digitalRead(schalter_langsam_vor)==0){tempo=langsam;vor();}
if(digitalRead(schalter_langsam_ruek)==0){tempo=langsam;ruek();}

//Tastaturabfrage Speicher
if(digitalRead(schalter_merken)==0){speicher=stellung;}

//Tastaturabfrage Home

if(digitalRead(schalter_home)==0&&stellung<speicher)
{tempo=schnell;
do{vor();}
while(stellung!=speicher);
}

if(digitalRead(schalter_home)==0 && stellung>speicher)
{tempo=schnell;
do{ruek();}
while(stellung!=speicher);
}

//Tastaturabfrage Motor aus
if(digitalRead(schalter_schnell_vor)==1&&digitalRead(schalter_schnell_ruek)==1&&
digitalRead(schalter_langsam_vor)==1&&digitalRead(schalter_langsam_ruek)==1&&
digitalRead(schalter_home)==1)

//Motor aus
{delay(tempo);digitalWrite(aus1,0);digitalWrite(aus2,0);digitalWrite(aus3,0);digitalWrite(aus4,0);}

//Lage zum Speicher
if (stellung<=speicher){digitalWrite (vor_speicher,1);}
else {digitalWrite (vor_speicher,0);}
if (stellung>=speicher){digitalWrite (nach_speicher,1);}
else {digitalWrite (nach_speicher,0);}
}

// -------------------------- Unterprogramme ---------------------------------------------------

void vor(){
if (stellung<maxwert){
zw=0;
do{
digitalWrite(aus1,ausgabe_motor[zw][0]);digitalWrite(aus2,ausgabe_motor[zw][1]);
digitalWrite(aus3,ausgabe_motor[zw][2]);digitalWrite(aus4,ausgabe_motor[zw][3]);
delay(tempo);
zw++;
}while(zw<8);
stellung++;
}}

void ruek(){
if (stellung>0){
zw=0;
do{
digitalWrite(aus1,ausgabe_motor[zw][4]);digitalWrite(aus2,ausgabe_motor[zw][5]);
digitalWrite(aus3,ausgabe_motor[zw][6]);digitalWrite(aus4,ausgabe_motor[zw][7]);
delay(tempo);
zw++;
}while(zw<8);
stellung--;
}}
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Re: Motorsteuerung zum Fokussieren.

Beitrag von Hans_Ulrich »

Hallo allerseits,

so langsam nimmt alles Gestalt an und existiert nicht nur in meiner Vorstellung. Beim Programm bin ich jetzt bei Version 4 angelangt: http://www.huk-2.de/ot18/motor_v4.zip

Dazugekommen ist jetzt eine LCD Anzeige. Dort wird der aktuelle Wert des Auszuges angezeigt und ebenfalls der gespeicherte Wert. Der Wert des Auszuges ist noch relativ. Wenn alles funktioniert, werde ich mir noch überlegen, ob ich das ändere.

Die die Anzeige ziemlich viel Strom verbraucht, wird sie immer wieder abgeschaltet. Sie leuchtet nur, wenn eine Taste gedrückt wird und dann noch ein paar Sekunden danach. Kann man aber leicht anpassen.
Antworten