RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#51 von mebo , 09.10.2014 14:41

Zitat von Knuffel
Wenn alles hinhaut, stelle ich auch den Sketch gerne hier ein. Vorher dürfte es dir ja wenig bringen, oder?


Stell am besten gleich ein, das macht leichter zu beurteilen was noch nicht passt


mebo  
mebo
InterRegioExpress (IRE)
Beiträge: 250
Registriert am: 03.01.2010


RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#52 von Knuffel ( gelöscht ) , 12.10.2014 13:40

Hi,
ich habe privat noch Hilfe bekommen. Drum läuft das jetzt grundsätzlich recht gut. Hier ist der Skript:



#include <Servo.h>



int Weiche1Pin = 3; //Ausgangsbelegung
int Weiche1TasterAPin = 1;
int Weiche1TasterBPin = 2;
int Weiche1Stellung = 20;
Servo Weiche1;

int Weiche2Pin = 5;
int Weiche2TasterAPin = 4;
int Weiche2TasterBPin = 6;
int Weiche2Stellung = 20;
Servo Weiche2;

int Weiche3Pin = 9;
int Weiche3TasterAPin = 8;
int Weiche3TasterBPin = 7;
int Weiche3Stellung = 20;
Servo Weiche3;

void setup()
{
pinMode(Weiche1TasterAPin , INPUT_PULLUP); //Taster als grundsätzlich high definieren
pinMode(Weiche1TasterBPin , INPUT_PULLUP);
Weiche1.write(Weiche1Stellung);
Weiche1.attach(Weiche1Pin,5,20);


pinMode(Weiche2TasterAPin , INPUT_PULLUP);
pinMode(Weiche2TasterBPin , INPUT_PULLUP);
Weiche2.write(Weiche1Stellung);
Weiche2.attach(Weiche2Pin,5,20);

pinMode(Weiche3TasterAPin , INPUT_PULLUP);
pinMode(Weiche3TasterBPin , INPUT_PULLUP);
Weiche3.write(Weiche3Stellung);
Weiche3.attach(Weiche3Pin,5,20);
}

void loop()
{
int tasterStatus;
int pos;

tasterStatus = digitalRead(Weiche1TasterAPin); //Taster für Weiche 1 abrufen

if (tasterStatus == 0) // durch die internen Pullups ist der Eingang standardmäßig High und wird durch drücken Low
{
if(Weiche1Stellung == 20) // Servo steht am andern Anschlag --> zurück drehen
{
for (pos=20; pos >=5; pos -=1)
{
Weiche1.write(pos);
Weiche1.attach(Weiche1Pin,5,20);
delay(20);
}
}

Weiche1Stellung = 5;
}

tasterStatus = digitalRead(Weiche1TasterBPin);

if (tasterStatus == 0)
{
if(Weiche1Stellung == 5)
{
for (pos=5; pos <=20; pos +=1)
{
Weiche1.write(pos);
Weiche1.attach(Weiche1Pin,5,20);
delay(20);
}
}

Weiche1Stellung = 20;
}

int tasterStatus2;
int pos2;

tasterStatus = digitalRead(Weiche2TasterAPin); //Taster für Weiche 2 abrufen

if (tasterStatus == 0) // durch die internen Pullups ist der Eingang standardmäßig High und wird durch drücken Low
{
if(Weiche2Stellung == 20) // Servo steht am andern Anschlag --> zurück drehen
{
for (pos=20; pos >=5; pos -=1)
{
Weiche2.write(pos);
Weiche2.attach(Weiche2Pin,5,20);
delay(20);
}
}

Weiche2Stellung = 20;
}

tasterStatus = digitalRead(Weiche2TasterBPin);

if (tasterStatus == 0)
{
if(Weiche2Stellung == 5)
{
for (pos=5; pos <=20; pos +=1)
{
Weiche2.write(pos);
Weiche2.attach(Weiche1Pin,5,20);
delay(20);
}
}

Weiche2Stellung = 20;
}

int tasterStatus3;
int pos3;

tasterStatus = digitalRead(Weiche3TasterAPin); //Taster für Weiche 3 abrufen

if (tasterStatus == 0) // durch die internen Pullups ist der Eingang standardmäßig High und wird durch drücken Low
{
if(Weiche3Stellung == 20) // Servo steht am andern Anschlag --> zurück drehen
{
for (pos=20; pos >=5; pos -=1)
{
Weiche3.write(pos);
Weiche3.attach(Weiche3Pin,5,20);
delay(20);
}
}

Weiche3Stellung = 5;
}

tasterStatus = digitalRead(Weiche3TasterBPin);

if (tasterStatus == 0)
{
if(Weiche3Stellung == 5)
{
for (pos=5; pos <=20; pos +=1)
{
Weiche3.write(pos);
Weiche3.attach(Weiche3Pin,5,20);
delay(20);
}
}

Weiche3Stellung = 20;
}

}

den habe ich jetzt auf drei Servos gekürzt, da ich noch einen Switch Piloten hatte und an dem ein Ausgang frei geworden ist. Meine Gedanken gingen dahin, als eine Position der Servos 0 zu nehmen, damit sie beim Einschalten immer dahin zurückfahren, das klappt aber irgendwie nicht. Wenn man die Servos in einer der Beiden Positionen ausschaltet, dann zucken sie beim Anmachen nicht ganz so heftig, in der anderen Position zucken sie, wenn man dann den Schalter umlegt passiert gar nichts und wenn man ihn dann zurück kippt, dann zuckt der Servo in die eine Richtung und dann in die richtige Position. Also wie bei Georg in dem Video. Ich habe mir auf dem Stellpult einfach die richtige Position markiert und da werden sie vor dem ausschalten dann immer hingestellt.

Das kann ich ja später immer noch optimieren, aber aktuell geht es so auch.

Jetzt werde ich mir aber noch ein Uno bestellen und das Programmieren mal von grund auf lernen.

Hat dafür jemand einen guten Kurs, der am besten auf die Arduino Nutzung ausgerichtet ist, oder sollte ich lieber mit was allgemeinem anfangen? Sollte ich vielleicht ein anderes Board nehmen?

Vielen Dank für die Hilfe!


Knuffel

RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#53 von mebo , 12.10.2014 16:08

Hallo,

vertausch doch in der setup() hier die Reihenfolge wieder zurück:

Bisher:
Weiche1.write(Weiche1Stellung);
Weiche1.attach(Weiche1Pin,5,20);

später:
Weiche1.attach(Weiche1Pin,5,20);
Weiche1.write(Weiche1Stellung);

und natürlich auch bei den anderen Weichen.

Das war ja nur ein Versuch wie er sich wenn man das andersrum macht - hab halt leider keinen Arduino mit Servo zur Hand

In der loop kannst Du die attach-Befehle auch wieder rausnehmen, nachdem Du das detach ja ebenfalls wieder rausgenommen hattest.

Ansonsten, wenn Du in Stellung 0 starten willst, solltest Du das natürlich auch oben eintragen für die Werte der Weiche1Stellung etc.


mebo  
mebo
InterRegioExpress (IRE)
Beiträge: 250
Registriert am: 03.01.2010


RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#54 von Knuffel ( gelöscht ) , 14.10.2014 19:18

Hi,
@mebo: Der ganze Skript muss auf jeden Fall noch mal überarbeitet werden. Da ich jetzt auch noch zwei Servos mehr ansteuern muss, lohnt sich das um so mehr. Ich kann das ja einfach im nachhinein noch mal aufspielen.

Jetzt, wo es noch mehr Servos werden, bräuchte ich aber auch die analogen Eingänge. Ich habe mit denen auch schon mal ein wenig rum experimentiert, bin aber nicht so richtig zu einem Ergebnis gekommen. Kann ich die einfach mit einem analogRead statt digitalRead usw. abfragen, oder muss ich da was grundlegendes ändern?


Knuffel

RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#55 von spielbahn ( gelöscht ) , 14.10.2014 20:07

Zitat von Knuffel
..... bräuchte ich aber auch die analogen Eingänge. Ich habe mit denen auch schon mal ein wenig rum experimentiert, bin aber nicht so richtig zu einem Ergebnis gekommen. Kann ich die einfach mit einem analogRead statt digitalRead usw. abfragen, oder muss ich da was grundlegendes ändern?....


Du kannst auch die analogen Eingänge wie digitale ansprechen. A0 sprichst Du mit digitalRead(14) an. A1 heißt dann 15 usw.
(geht mit digitalWrite() genauso) Natürlich müssen sie dann auch im Setup als Eingang (bzw. Ausgang) angegelegt sein.


spielbahn

RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#56 von Instandsetzung , 19.10.2014 17:44

Hallo zusammen,

wollte da noch etwas zu Bodos Widerstandsleiter sagen äh schreiben.

Ich habe das für eine Anwendung, wo auch nur immer nur eine Taste gedrückt werden darf, ebenso gemacht.
Ich habe allerdings nicht so viel nachgedacht und die Widerstände genommen, die gerade verfügbar waren.

Die Widerstandswerte die die entsprechenden Tasten wiedergeben, habe ich mir anzeigen lassen und festgestellt, dass diese Werte bei verschiedenen Boards fast immer gleich sind.
Habe das mit UNO und Leonardo Nachbau als auch mit UNO von Sainsmart bzw. Dcduino probiert.

Und um eventuelle Abweichungen auszugleichen habe ich den gemessenen Wert einfach durch 10 geteilt bevor er ausgewertet wird.
Kommt z.B. bei einem bestimmten Tastendruck der Wert 437, so kann er bei einem anderen Board ruhig 436 oder 438 sein. Nach der Teilung durch 10 bleibt immer nur die 43 übrig.
Und da ich da nur 6 Tasten habe, sind die gemessenen Werte auch weit genug auseinander, so daß es da auch keine Probleme mit zu nah bei einander liegenden Werten gibt.

Dann noch ein Wort zur Servostromversorgung:
Wenn man nur ein leichtgängiges Signal mit einem kleinen Servo stellt, so kann das mit der Stromversorgung vom Arduino aus noch klappen.
Beim Versuch eine Weiche zu stellen und festzuhalten wurde der Regelbaustein aber schon schön heiß.

Ich habe für 2-3 Euro aus Ping Pong nun Shields bekommen an denen man auch einfach Servos anschließen kann und die eine eigene Stromversorgung haben.
Nur sind die eigentlich für Nanos gedacht. Man kann aber auch Stecker einlöten und die auf einen UNO stecken. Da wird man aber bestimmt noch sicherheitshalber eine Leiterbahn unterbrechen müssen. Da bin ich noch nicht so weit, da ich gerade umgezogen bin und erst demnächst wieder weiter basteln werde.

Mit freundlichen Grüßen
.
Oliver


Instandsetzung  
Instandsetzung
EuroCity (EC)
Beiträge: 1.364
Registriert am: 27.02.2009
Ort: Revier


RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#57 von mebo , 19.10.2014 17:53

Zitat von Instandsetzung

Kommt z.B. bei einem bestimmten Tastendruck der Wert 437, so kann er bei einem anderen Board ruhig 436 oder 438 sein. Nach der Teilung durch 10 bleibt immer nur die 43 übrig.


Das kann aber auch schiefgehen, wenn dann eben 440 ist - es kann aber natürlich auch gutgehen. Robuster wäre es, wenn man die Grenzen jeweils passend (und großzügiger) setzt.

Allerdings verstehe ich nach wie vor nicht wirklich, warum man sich das mit den Widerständen antut, sofern man nicht wirklich alle Pins bis auf einen belegt hat. Klar, das Schieberegister braucht zwei Pins mehr, dafür bekommt man aber auch beliebig viele digitale Eingänge unter, gemeinsam gedrückte Tasten können erkannt werden (und führen nicht zu undefiniertem Verhalten).


mebo  
mebo
InterRegioExpress (IRE)
Beiträge: 250
Registriert am: 03.01.2010


RE: Sevos steuern mit Mikrocontroller - Womit lernen?

#58 von spielbahn ( gelöscht ) , 19.10.2014 18:07

Zitat von mebo
......Allerdings verstehe ich nach wie vor nicht wirklich, warum man sich das mit den Widerständen antut,......


Weil der Verdrahtungsaufwand deutlich geringer ist.


spielbahn

   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz