Hallo Leute, ich bin neu auf diesem Forum habe aber eine Fragen zu meinem Projekt und zwar möchte für meine Prüfung in der Schule ein Auto bauen, welches durch ein Microcontroller (Arduino Uno) gesteuert werden soll. Das Auto habe ich schon "gebaut" es hat zwei 3V-Motoren und drei Ultraschallsensoren (HC-SR04) zur Hinderniserkennung. Den Code habe ich soweit auch fertig nur habe ich ein kleines Problem. Hier die Stelle: scanvorne(); if(cm >= 10){ GoForward(); delay(400); } else{ Stop(); } scanlinks(); if(cm >= 10){ GoLeft(); delay(300);} else{ Stop();} scanrechts(); if(cm3 >= 10){ GoRight(); delay(300);} else{ Stop();} scanvorne(); if(cm <= 10){ GoBackward(); delay(350);} else{ Stop();} Ich möchte dass das Auto nicht rumzuckt wie auf Drogen sondern erst soweit fährt bis es etwas erkennt und danach ausweicht und nicht wie jetzt, abscannt 3sec fährt und dann plötzlich die Richtung ändert, obwohl da nichts ist. Ich bin ein Anfänger im Programmieren deswegen wird sich der eine oder andere etwas über einen Code ärgern oder sogar lachen. Und ich weiß dass mir noch massen an Bauteilen fehlen um alles in "Echtzeit" durchführen zu lassen, deswegen muss es nur so ne grobe Richtung haben und so ungefähr arbeiten. MFG Vangola P.S. Danke schon mal im Voraus. Ich hab ein Foto vom Auto und den kompletten Code dabei gelegt.
Vangola schrieb: > Ich möchte dass das Auto nicht rumzuckt wie auf Drogen sondern erst > soweit fährt bis es etwas erkennt und danach ausweicht Dann mußt Du das auch genau so programmieren. Schaue Dir bitte mal den Code Deiner loop-Funktion an und überlege was passiert, wenn alle Richtungen völlig hindernisfrei sind! Dein Auto fährt erst vorwärts, weil nach vorne alles frei ist. Dann fährt es gleich darauf nach links, weil links frei ist. Links ist dann das neue vorne und es wird festgestellt, dass rechts frei ist. Dann fährt das Auto nach rechts, dreht also wieder zurück. Rückwärts fährt es dann allerdings nicht, weil nach vorne immer noch frei ist. Aber dann beginnt das Spiel von vorne. Im übrigen frage ich mich, ob Du bei laufenden DC-Motoren überhaupt Deine Ultraschallsensoren zur Abstandsmessung einsetzen kannst. Die Motoren rappeln doch bestimmt und erzeugen Geräusche, die sicher auch bis in den Ultraschallbereich reichen. Ob der Ultraschallsensor dann das Echo der Motorengeräusche auffängt oder das Echo von seinem Trigger-Impuls? Hat Dein Auto ein LCD-Display, auf dem während der Fahrt die wichtigsten Daten zur Kontrolle angezeigt werden, wie z.B. die Abstände, die von den Ultraschallsensoren gemessen werden?
nein es hat keinen LCD-Display, es ist so wie auf dem Bild zu sehen
Vangola schrieb: > nein es hat keinen LCD-Display, es ist so wie auf dem Bild zu sehen Du brauchst dringend ein Feedback über das, was Du nicht direkt sehen kannst, z.B. ob die Ultraschallsensoren Hindernisse feststellen oder nicht. Notfalls ziehe die Board-LED an Pin-13 als Hilfe heran. Und ändere die Programmlogik, damit das Ding eine Strategie hat und nicht irgendwie durch die Gegend torkelt. Z.B.: 1. Scannen in geradeaus Richtung 1.a) Wenn kein Hindernis, geradeaus fahren und weiter mit 1. 1.b) Wenn Hindernis, anhalten, Board-LED einmal blinken, weiter mit 2. 2. Scannen nach rechts 2.a) Wenn rechts frei, drehen nach rechts, weiter mit 1. 2.b) Wenn rechts Hindernis, Board-LED zweimal blinken, weiter mit 3. 3. Scannen nach links 3.a) Wenn links frei, drehen nach links, weiter mit 1. 3.b) Wenn links Hindernis, Board-LED dreimal blinken, wenden (2* drehen Rechts oder Links) Oder so.
Du kannst das zum Beispiel so machen: Go forward(); scanforne(); If(cm < 5) { Stop(); Delay(500); Go backward(); Delay(1000); Stop(); if(scanlinks < scanrechts) { GoRight(); delay(600); Stop(); Go forward(); } if(scanlinks > scanrechts) { GoLeft(); Delay(600); Stop(); Go froward(); } }
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.