Forum: Mikrocontroller und Digitale Elektronik Arduino Programmierung


von Christian F. (christian_f21)


Lesenswert?

Hallo
würde gerne mein arduino in einen roboter verbauen mit 
ultraschallsensoren vom damaligen Real Robot (Cybot)
die motoren habe ich erfolgreich an den Arduino angeschlossen und lasse 
sie über den blink code fahren also ziemlich planlos
jetzt würde ich gerne die gennanten sensoren einbauen das mein Arduino 
robot hindernissen ausweichen kann
kann mir jemand beim ProgrammCode helfen
bzw. geht das überhaupt mit den Sensoren

MFG RedOne

von Urz (Gast)


Lesenswert?

Helfen heißt nicht für dich machen. Zeig deinen bisherigen Code und wie 
du das Problem lösen willst. Stell zu deinem Ansatz konkrete Fragen und 
dir wird geholfen.
Darüber hinaus solltest du dich mit den folgenden Zeichen beschäftigen:
,.!?

von Christian F. (christian_f21)


Lesenswert?

Also das ist mein bisheriger Code.

int RMV = 10; // Rechter Moto Vorwärts
int RMR = 9; // Rechter Motor Rückwärts
int LMR = 8; // Linker Motior Rückwärts
int LMV = 13; // Linker Motor Vorwärts

void setup() {
pinMode(RMV, OUTPUT);
pinMode(RMR, OUTPUT);
pinMode(LMR, OUTPUT);
pinMode(LMV, OUTPUT);}

void loop() {
    digitalWrite(RMV, HIGH); // Motor geht an
    delay(1000); // 1 Sekunde warten
    digitalWrite(RMV, LOW); // Motor geht aus
    delay(1000); // 1 Sekunde warten
}



also einen Pin kann ich jeweils immer ansteuern, da ich ja aber ziemlich 
neu auf dem gebiet bin weiß ich jetzt nicht, wie ich die anderen Pins 
hinten dran schalte und dann dem Arduino auch noch das mit den Sensoren 
bei bringe.
Ich muss mir vielleicht zugestehen das dieses Projekt vll. ne nummer zu 
groß ist für den Anfang. Aber ich denke so lernt man am besten.

von Urz (Gast)


Lesenswert?

Was für ein Signal gibt denn der Ultraschallsensor aus? Digital? Analog?

von Christian F. (christian_f21)


Lesenswert?

ich nehme mal an das es digital ist

mit diesem code hat es funktioniert

Habe ich meine hand davor gehalten kamen kleinere abstände
und wenn ich meine Hand weg hielt waren es grössere abstände

hier der Code:

void setup()

{

  // Start serielle Kommunikation
  Serial.begin(9600);

}

void loop()

{

  // Definition der Variablen für die Dauer des Pings und für das 
Ergebnis in cm

  long dauer, cm;

  // wir intialisieren den Sensor, indem wir ihm einen kurzen 
"Low"-Pulse senden,
  // dann einen 5 mS "High-Pulse"


  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // wir benutzen denselben Pin als Eingang und berechnen die Dauer des 
Pulses zwischen
  // ausgehendem und eingehendem Signal

  pinMode(pingPin, INPUT);
  dauer = pulseIn(pingPin, HIGH);

  // wir berechnen die Entfernung aus der Zeitdifferenz

  cm = mikrosekundenZuZentimeter(dauer);

  // wir geben die Entfernung auf der seriellen Konsole aus

  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  // wir warten 200 mS, Wert beliebig

  delay(200);

}

long mikrosekundenZuZentimeter(long Mikrosekunden)

{

 //  Die Schallgeschwindigkeit beträgt bummelige 340 m/s bzw. 29 mS pro 
Zentimeter
 //  Teilen wir durch 2, da der Schall ja hin und zurück muß

  return Mikrosekunden  29  2;

}

von Kopfkratzender (Gast)


Lesenswert?

Najaah... da biste ja noch nicht so arg weit gekommen mit deinem Code.

Was für eine Typenbezeichnung hat denn dein Sensor?

von Christian F. (christian_f21)


Lesenswert?

also auf dem sensor steht

SA LR116075  125°C  OFT

war der von der Realrobot baureihe

von Christian F. (christian_f21)


Lesenswert?

http://andrewwhitehead.tripod.com/cybottechnical/id2.html

ich denk das ist woll besser
es nennt sich wohl sonar

von Joachim (Gast)


Lesenswert?

Der Sensor mißt über die Laufzeit, d.h. du brauchst einen Algorithmus 
der dir die Zeit zwischen gesendeter und empfangener Welle ermittelt.

http://de.wikipedia.org/w/index.php?title=Datei:Dibujo_Prinzip_Ultraschall.PNG&filetimestamp=20080915220242


Für nen Einstieg in ernsthaftes Programmieren ziemlich sportlich, wenn 
du mich fragst.

Ich würde das so lösen: Der ATmega hat eine Capture-Einheit, das analoge 
Signal wird über einen Schmitt-Trigger geformt, anschließend wird mit 
der Capture-Funktion eine Art Stoppuhr modelliert.

Ich habe so etwas ähnliches mal auf meinem Arduino-Board aufgebaut, 
damit wurde die Impulsbreite eines RC-Fernsteuerimpulses 
(800uS...1800us) gemessen. Ich hatte das aber nicht mit der 
Arduino-Umgebung gemacht sondern gleich in C.

von Markus U. (markjus) Benutzerseite


Lesenswert?

Du hast doch sowohl den Ansteuerungscode für die Motoren als auch den 
funktionierenden Code für das Auslesen des Ultraschall-Sensors. Das 
musst Du doch nur noch verknüpfen. Wo genau liegt Dein Problem?

von Christian F. (Gast)


Lesenswert?

Also ich Denk mein Problem hängt an der Verknüpfung
Ich weis nicht genau

Kann es sein das ich dass mit dem befehl "if" mache

Danke für eure Hilfe


@Joachim : den Algorithmus habe ich ja wie du weiter oben siehst
Und der funktioniert ja auch blos die Sensoren sollen dem Motor sagen da 
steht was und die motoren drehen sich dann und fahren nicht gegen das 
Hindernis

von Markus U. (markjus) Benutzerseite


Lesenswert?

Ja, "if" ist schon mal einer der möglichen Ansätze. Hier mal ein 
Pseudo-Code:

if (cm <= 15) {

// mache eine 90°-Drehung nach links }

else {

// mach irgendwas, z.B. dauernd geradeaus fahren (bis die Akkus leer 
sind), solange Abstand > 15 cm

}

Die 90°-Drehung musst Du natürlich berechnen, indem Du z.B. nur den 
rechten Motor für eine bestimmte Zeit (s. z.B. delay() - besser wäre es 
mit millis() und dem Setzen einer Variablen und der Berechnung eines 
Intervalls) vorwärts fahren lässt.

Du musst Dir auch Gedanken machen, ob eine 90°-Drehung die beste 
Variante ist, oder ob Du nach Unterschreitung des Mindestabstands lieber 
rückwärts und dann erst links/ rechts fährst. Aber ein bischen 
Nachdenken sollst Du ja auch noch ;)

Die Fahreigenschaften kann man später auch in Funktionen/ Methoden/ 
Libraries packen (90°/ 180°/ 270°-Drehung, 1 sec. geradeaus, Panik-Modus 
etc. ...).

Markus

von Christian F. (Gast)


Lesenswert?

Werde es wenn ich Zuhause bin gleich ausprobieren

Und melde mich dann wieder
Danke Grus Christian

von Christian F. (christian_f21)


Angehängte Dateien:

Lesenswert?

SO das ist jetzt mein Programmcode der aber leider nicht funktioniert
könnt ihr mir sagen woran es liegt?

das dies mit den Variablen nicht passt, denk ich mir irgendwie bin 
gerade am googeln wie das genau funktioniert, aber ob der Rest vom Code 
funktioniert oder seht ich noch ein Fehler

von Markus U. (markjus) Benutzerseite


Lesenswert?

Du solltest erstmal mit einem ganz einfachen Beispiel anfangen (z.B. 
Blink aus den Examples) und Dich dann durch die Tutorials arbeiten.
Mit dem vorliegenden Projekt wird das nichts, weil Du einfach viel zu 
wenig Ahnung vom Programmieren hast (sieht man deutlich an Deinem bisher 
geschriebenen Code).

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.