Arduino Programmierung

OP #2436115
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
Gast #2436144
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:
,.!?
OP #2436190
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.
OP #2436215
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;

}
Gast #2436794
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.
Gast #2436954
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
Persönliche Seite #2436996
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren