motor steuern , position speichern und abrufen

Hallo
ich möchte eine Steuerung für Mein Camcorder zu bauen,
Der Camcorder soll gedreht und geneigt werden, dazu die position (oder mehrere) gespechert und dann abgerufen werden.
Habe schon soeine Steuerung mit Siemens Logo, aber der ist zu gross und zu teuer.
Seit paar Tagen versuche ich es mit Arduino, schritt für schritt, und wenn das so weiter geht werde ich noch nach Monaten nicht fertig.
Folgenden sketch habe ich geschrieben, ich kann die position speichern und abrufen, leider manuell geht nicht.
Ah, das ist erst ein versuch, und an stelle von Schritt- oder Servomotoren habe ich LED_s angeschlossen.
Noch etwas: wenn jemand bereit wäre dies für mich zu schreiben oder zu ergänzen, bin ich auch bereit (nach absprache) dafür zu bezahlen.
MfG an alle
Peterint zaehler=-1; // zaehlt impulse

int reedPin=9; //reedkontakt
int sw_man_li=4; //manuell li
int sw_man_re=10; //manuell re
int prog=0;
int sw_prog=5; //mit pos_1 oder pos_2
//speichert aktuellen zaehler als pos_1 oder pos_2
int sw_pos_1=12; // schreibt pos_1 als pos
int sw_pos_2=11; // schreibt pos_2 als pos
int pos_1=5; //
int pos_1a=0; //

int pos_2=-3; //
int pos_2a=0; //

int pos=6; //wenn pos<>zaehler, geht led (rot oder gruen)an
//solange zaehler=pos
int richtung=2; // bestimmt die richtung (1=re, 0=li, 2=stop)

int led=13; //anzeige "motor stop"
int led_rt=6; //anzeige "motor links"
int led_gn=8; //anzeige "motor rechts"
int state1;
int laststate1;
int state2;
int laststate2;

void setup()
{ Serial.begin(9600);
Serial.println("start");
Serial.println();

pinMode (reedPin,INPUT);
digitalWrite (reedPin,HIGH);
pinMode (sw_pos_1,INPUT);
digitalWrite (sw_pos_1,HIGH);
pinMode(led, OUTPUT);
pinMode(led_rt, OUTPUT);
pinMode(led_gn, OUTPUT);
pinMode (sw_pos_2,INPUT);
digitalWrite (sw_pos_2,HIGH);
pinMode (sw_prog, INPUT);
digitalWrite(sw_prog, HIGH);
}

void loop()
{
{
if (digitalRead(sw_pos_1)==LOW)
{
pos_1a=1;

}
}
{
if (digitalRead(sw_pos_2)==LOW)
{
pos_2a=1;

}
}
{
if (digitalRead(sw_prog)==LOW)
{
prog=1;

}
}

{
if ((pos_1a==1)&&(prog==1))
pos_1=zaehler;
}

{if ((pos_2a==1)&&(prog==1))
pos_2=zaehler;
}
{
if (pos_1a==1)
pos=pos_1;
}
{

if (pos_2a==1)
pos=pos_2;
}
pos_1a=0;
pos_2a=0;
prog=0;

{
if (richtung==0)
{
digitalWrite(led_rt, HIGH);
}
else
{
digitalWrite(led_rt, LOW);
}}

{
if (richtung==1)
{
digitalWrite(led_gn, HIGH);
}
else
{digitalWrite(led_gn, LOW);
}}

{
if (richtung==2)
{
digitalWrite(led, HIGH);
}
else
{digitalWrite(led, LOW);
}
}

if(pos==zaehler)
richtung=2;

if(pos<zaehler)
richtung=1;

if(pos>zaehler)
richtung=0;

Serial.println("");
Serial.println();
Serial.print("zaehler= ");
Serial.println(zaehler);
Serial.print("gewaellte position = ");
Serial.println(pos);
Serial.print("pos 1= ");
Serial.println(pos_1);
Serial.print("pos 2= ");
Serial.println(pos_2);
Serial.print("pos 1a= ");
Serial.println(pos_1a);
Serial.print("pos 2a= ");
Serial.println(pos_2a);
Serial.print("richtung =");
Serial.print(richtung);
Serial.println();
Serial.println("
");
delay(1000); // nur um Anzeige abzulesen

{

{
int state1=digitalRead(reedPin);

{
if ((digitalRead(reedPin)==HIGH)&&richtung==0) //zaehler rauf
delay(20);

{ if (state1==1 && laststate1==0&&richtung==0)
zaehler++;
laststate1=state1;
}
}

}
{
int state2=digitalRead(reedPin);
{
if ((digitalRead(reedPin)==HIGH)&&richtung==1)//zaehler runter
delay(20);

{
if (state2==1 && laststate2==0&&richtung==1)
zaehler--;
laststate2=state2;
}
}
}
}
}

danke für den sinnvollsten Vote der Welt.

Danke :0
Es gibt keine dumme Fragen, sondern dumme Antworten!
Villeicht bist Du von Gebuhrt an Programmierer, ich nicht.

Darum ging es doch nicht - was hilft es dir zu wissen, dass 75% der Leute dir komplett helfen, aber nur 25% ein bisschen?

Zu deinem Problem:

Drehen und Neigen inklusive Positionsabfrage schreit geradezu nach einem Servo - da weißt du jederzeit, an welcher position er ist, und das ganze IF-Verschwurbel ist auch unnötig. Modellbauservos gibt es recht günstig in Ebay - kosten ab etwa 3€ und stemmen den Camcorder mit links.

Danke. :expressionless: Wie Du weisst, bin Anfänger, und mit Servo habe bisher garnichts am Hut. Das was ich im Forum und im Internet gelesen habe, sind Servo die beste Wahl....aber der Anfang fehlt, leider kein Code gefunden, was auch abrufen der Positionen erlaubt.
Für ein Tipp werde ich dankbar.

Ich habe dasselbe Problem wie Du, kenne mich auch nicht aus und habe es nicht geschafft, einen Motor direkt am Arduino zu betreiben. Ich habe jetzt das Motor-Shield gekauft, kostet 17€ in ChingChangChong.

Ich habe allerdings einen bipolaren Stepmotor, und mir ist nicht ganz klar, warum man für dies einen Step- und warum man für jenes einen Servo-Motor nimmt. Und dann gibt es ja auch noch Getriebemotoren...

Soweit ich weiss, sind Steppmotoren genauer, Servo und Getriebemotoren kräftiger, und Servo , im gegenatz zu Getriebe die position an Steuerung "zurückgeben"

Servos geben keine Position zurück. Ein Servo fährt die Position an, die er gesagt bekommt. Welche das ist, musst Du schon selber speichern.
Ein Schrittmotor macht hingegen nur Schritte, der kennt überhaupt keine Positionen. Da muss man sich selber darum kümmern. Die einzige Konstante beim Schrittmotor ist, dass er für eine komplette Umdrehung 200 (Voll-)Schritte benötigt (normalerweise, es gibt aber auch Modelle mit anderer Schrittweite). Soll er sich also um 90° drehen, musst Du ihn 50 Vollschritte machen lassen.

clockdivider:
Ich habe allerdings einen bipolaren Stepmotor, und mir ist nicht ganz klar, warum man für dies einen Step- und warum man für jenes einen Servo-Motor nimmt. Und dann gibt es ja auch noch Getriebemotoren...

Ein kurzes Tutorial, soll ja niemand unwissend sterben... :wink:

  1. Getriebemotor: normaler Motor versehen mit einem Getriebe um entweder die Kraft zu erhöhen und die Umdrehungen zu dezimieren, oder die Umdrehungen zu erhöhen und die Kraft zu dezimieren.

  2. Schrittmotor: Motor mit spezieller Ansteuerung, der pro Ansteuerungszyklus einen festgelegten Schritt zurücklegt. meistens zwischen 1.8 und 3.6°. Diese Schritte können gezählt werden um die momentane Position des Motors festzustellen.

  3. Servomotor: Kombination aus Motor, Getriebe und Potentiometer. Das Potentiometer gibt wärend der Bewegung des Motors einen Potentialwert zurück. Anhand des Potentials lässt sich die exakte Stellung der Achse im Motor ermitteln.

die jeweilige Kraft des Motors liegt stark am jeweiligen Modell, von jeder der hier aufgeführten Arten gibt es starke und schwache Versionen - und jede Version findet Einsatz in einem anderen Anwendungsbereich. So mach es z.B. wenig sinn einen 40 Nm-Servo an die Lenksäule eines RC-Autos zu flanschen, genausowenig wie ein 0.2 Nm-Servo beim Greifarm eines Roboter zum Einsatz kommen sollte.

wie genau sind Servos?

wie genau sind Servos?

Wie stark ist Kaffee? Sorry. Konnte ich mir nicht verkleifen.

Die Genauigkeit des Servos liegt - am Servo. Ohne sich ein bisschen durch die Betriebsdaten des jeweiligen Modells zu wurschteln wirst du nicht zum Ziel kommen...

ok, :slight_smile:

[quote author=Marcus W link=topic=59235.msg427039#msg427039 date=1303596213]
3. Servomotor: Kombination aus Motor, Getriebe und Potentiometer. Das Potentiometer gibt wärend der Bewegung des Motors einen Potentialwert zurück. Anhand des Potentials lässt sich die exakte Stellung der Achse im Motor ermitteln.[/quote]
Würde genauer sagen: Motor mit Getriebe, Ansteuerungselektronik und interne Positionsmessung. Die Elektronik stellt die Motorposition in Funktion der Steuergröße. Es gibt keine Rückkopplung an die Steuerung (zB: Arduino) über die tatsächliche Position.
Standart sind Servos für 180Grad Rotation aber es gibt auch welche für Spezialanwendungen zB mit größerem Winkel oder mit entfernter Positionsmessung die dann als Fahrmotor in kleinen Robotern verwendet werden. Die Servos unterscheiden sich auch bezüglich Drehmoment und Drehgeschwindigkeit der Achse. Dei Ansteuerung kann analog (PPM) oder digital sein.

Grüße Uwe

wie immer korrekt, aber versuch das mal einem Anfänger zu erklären. einfacher und nicht weniger richtig ist die Potentiometererklärung.
BTW: PWM - nicht PPM; fyp

Aber ich bin ja schon froh, dass du die anderen zwei beispiele nicht auch noch auseinander gepflückt hast.

Danke füf Eure Ratschläge, sehr hilfreich. Mein Projekt bekommt bestimmt Servomotoren. Inzwieschen finde ich mein Code blöd :slight_smile:
Am neuen wird gearbeitet.....