Forum: Mikrocontroller und Digitale Elektronik Hilfe Sketch für Ironmankostüm.


von Hene H. (heppo)


Lesenswert?

Hi alle zusammen,

ich brauche Hilfe beim schreiben eines Sketch für mein Arduino Uno 3,
da ich nur Laie bin und mir so ein bisschen Randwissen angeeignet habe,
jetzt jedoch aus irgendein Grund vorm Scheidern stehen.
Folgende Funktion will ich erreichen mit Tastendruck, und zwar soll 2 
Seromotoren mit 90 Grad angesteuert werden, in die eine Richtung 
langsamer als in die andere Richtung, gleichzeitig sollen 3 LED angehen 
in die Richtung wo der Servo schneller fährt, dabei soll bevor die LEDs 
dauerhaft leuchten eine kurze Schleife erzeugt werden, wo die LEDs 3 mal 
für ein paar Millisekunden/Sekunde an und aus gehen und in die Richtung 
wo der Servo langsamer fährt, sollen die LEDs ausgehen.
Einen Sketch habe ich auch schon erstellt, bei dem die Servomotoren und 
LEDs auf Tastenknopf reagieren:

Video:

https://www.youtube.com/watch?v=YwniiN5H2IA

Sketch:

#include <Servo.h>
const int tasterPin = 2;
const int ledPin1 =  13;
const int ledPin2 = 10;
const int ledPin3 = 11;
int tasterStatus = LOW;
int tasterGedrueckt = 0;
int lichtmodus = 0;
int ledStatus = LOW;
Servo servoblau1;
Servo servoblau2;

unsigned long tasterZeit = 0;
unsigned long entprellZeit = 10;
unsigned long ledMillis = 500;


void setup()
{
  servoblau1.attach(6);
  servoblau2.attach(9);
  pinMode(ledPin1,OUTPUT);
  pinMode(ledPin2,OUTPUT);
  pinMode(ledPin3,OUTPUT);
  pinMode(tasterPin,INPUT);
}

void loop()
{
  tasterStatus = digitalRead(tasterPin);

  if (tasterStatus == HIGH)
  {
  tasterZeit = millis();
  tasterGedrueckt = 1;
  }
if ((millis() - tasterZeit> entprellZeit)&& tasterGedrueckt == 1)
{
  lichtmodus++;
  tasterGedrueckt = 0;
}
if (lichtmodus == 0)
{


digitalWrite(ledPin1,HIGH);
digitalWrite(ledPin2,HIGH);
digitalWrite(ledPin3,HIGH);
servoblau1.write (90);
servoblau2.write (0);

delay(50);
}
if (lichtmodus == 1)
{digitalWrite(ledPin1,LOW);
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
servoblau1.write (0);
servoblau2.write (90);
delay(50);
}
if (lichtmodus >=  2)
{
  lichtmodus = 0;
}
}


Wenn ihr mir helfen könntet würde ich mich freuen:-)

von Marc S. (marc_s86)


Lesenswert?

Hene H. schrieb:
> Wenn ihr mir helfen könntet würde ich mich freuen:-)

Wobei denn?

von Hene H. (heppo)


Lesenswert?

Naja wie ich die Servo's in eine Richtung langsamer bewegen kann und 
LED's bevor sie auf Tastendruck dauerhaft leuchten vorher kurz 
an,aus,an,aus,an machen kann.Ich dachte an eine Bedingung in der 
Bedienung,nur weiß ich nicht ganz wie ich diese mit einbringen kann um 
die Ursprünglich Bedingungen noch auszuführen (also Taster High= Servo's 
90 Grad bewegen/LED's an(vorher Bedingung), Taster LOW=Servo's fahren 90 
Grad  zurück und LED's gehen aus),hoffe ich konnte so einiger Maßen 
verständlich erklären was ich gerne noch einbauen wollen würde in den 
Sketch ;-)

von Ralph S. (jjflash)


Lesenswert?

Um einen Servo in der Geschwindigkeit zu steuern mußt du das bei 
Verwendung mit einem Controller mittels PWM machen.

Mit Arduinosoftware geschieht das mittels analogWrite

https://www.arduino.cc/en/Tutorial/Fade

Hinweis: Einen (Servo)Motor mußt du über einen Transistor an den 
Mikrocontroller anschließen.

von Stefan F. (Gast)


Lesenswert?

> Einen (Servo)Motor mußt du über einen Transistor an den
> Mikrocontroller anschließen.

Nein, man kann Modellbau Servos direkt mit dem µC ansteuern.

Um die Geschwindigkeit eines Servos zu beeinflussen, muss man wissen, 
wie sie sich verhalten. Je weiter die aktuelle Position von der 
Soll-Position abweicht, umso schneller läuft der Motor. Um eine langsame 
bewegung von 90° zu erreichen, musst du lediglich die Soll-Position 
langsam verändern.

Also nicht schlagartig von 0° nach 90°, sondern zum Beispiel in 1° 
Schritten pro Sekunde. Dann dauert die ganze Bewegung 90 Sekunden.

> Ich dachte an eine Bedingung in der Bedienung,nur weiß ich nicht ganz
> wie ich diese mit einbringen kann um die Ursprünglich Bedingungen noch
> auszuführen

Versteht das jemand? Den ersten Beitrag verstehe ich ebenso wenig.

Ich denke, du wirst dich mit den Themen 
Multitasking/Threads/Zustandsautomaten befassen müssen.

von Hubert G. (hubertg)


Lesenswert?

Ein bisschen musst du dich da schon selbst in die Materie hineinhauen.
Du brauchst dir aber nur die diversen Beispiele ansehen. Z.B. 
BlinkWithoutDelay
Einen fertigen Sketch wird dir hier keiner schreiben.
Außerdem solltest du deinen Code entsprechend dokumentieren, sonst muss 
sich jeder der ihn liest selber die Funktionen zusammenklauben und in 
vier Wochen weißt du selbst nicht mehr was du geschrieben hast.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.