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
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: ,.!?
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.
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;
}
Najaah... da biste ja noch nicht so arg weit gekommen mit deinem Code. Was für eine Typenbezeichnung hat denn dein Sensor?
also auf dem sensor steht SA LR116075 125°C OFT war der von der Realrobot baureihe
http://andrewwhitehead.tripod.com/cybottechnical/id2.html ich denk das ist woll besser es nennt sich wohl sonar
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.
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?
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
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
Werde es wenn ich Zuhause bin gleich ausprobieren Und melde mich dann wieder Danke Grus Christian
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
