Forum: Mikrocontroller und Digitale Elektronik Einstieg in Arduino


von Luca (Gast)


Lesenswert?

Hallo,

ich muss zugeben, dass ich noch nie einen Mikrocontroller programmiert 
habe, da ich aber Arduino ganz interessant finde, wollte ich mir einen 
bestellen und ein wenig experimentieren. Habe mich dazu in letzter Zeit 
ein wenig eingelesen, es ist allerdings eine Frage offen geblieben: Ich 
habe eine konkrete "Projekt"-Idee, allerdings weiß ich nicht, ob ein 
Arduino dafür geeignet ist.

Meine Projekt-Idee sieht so aus:

Es gibt ein Fahrzeug aus Lego, das von einem Motor angetrieben wird. Die 
Lenkung wird von einem Servo gesteuert. Auf dem Fahrzeug ist ein 
weiterer Servo montiert, an dem ein Ultraschallsensor montiert ist. Zur 
Vereinfachung wollte ich das ganze erstmal mit der Kabelverbindung über 
USB steuern. Der Ultraschallsensor soll sich um 180° drehen und dann 
wenden um 180°, dann wieder wenden, sich also auf einem Halbkreis 
bewegen. Die Messung des Ultraschallsensors soll alle 2° an den PC 
gesendet werden.

Ich kann C/C++ und Java recht gut, allerdings bleibt eine Frage offen:

Die Arduinos haben ja nur einen Thread, wie kann ich dann gewährleisten, 
dass sich der Servo kontinuierlich dreht und die Ultraschallsensordaten 
ausgelesen und gesendet werden, WÄHREND das Fahrzeug bewegt wird?

Wenn ich zum Beispiel das Signal sende, "Fahre für 5 Sekunden vorwärts", 
dann kann in diesen 5 Sekunden eigentlich ja nicht der Servo bewegt 
werden, weil der Code für "Fahre für X Sekunden vorwärts" noch 
abgearbeitet wird (zum Beispiel in einer Schleife). Danach wird der 
Servo dann wieder angesteuert.

Wenn ich die Zeit für "Fahre X Sekunden vorwärts" aber zum Beispiel auf 
0.1 Sekunden reduziere und diesen Befehl mehrfach sende, dann könnte der 
Mikrocontroller ja die restlichen Befehle abarbeiten, zum Beispiel 2° 
weiter drehen, Daten lesen und senden und dann anschließend prüfen, ob 
ein neuer Fahrbefehl vorliegt.

Könntet Ihr bitte bewerten, ob das so möglich ist oder ob es noch andere 
Möglichkeiten für die Lösung meines Problemes gibt? Eine Lösung wäre es 
ja zum Beispiel einen zweiten Arduino zu besorgen ... ;)

von Stephan K. (stephan_k)


Lesenswert?

Dafuer gibt's die millis() Funktion beim Arduino.

von Karl-heinz W. (heinzel)


Lesenswert?

Hallo Luca,

Einfache Lösung:

Moter einschalten und Zeit merken mit millis()
Sensordaten auslesen
ggf lenken (2°)
wenn Moterlaufzeit erreicht -> abschalten

Und dann die Schleife wieder von vorne.

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.