Hallo habe ein Auto gebaut was an einer Schwarz weißen Lienie entlang
fahren soll. Mein Auto fährt allerdings mur auf einem schwarzen
streifen. Wisst ihr wo mein fehler ist.
Hier meine Software:
1
#include<AFMotor.h>
2
3
#include<QTRSensors.h>
4
5
6
#include<AFMotor.h> // Adafruit Motor Shield Bibliothek. Zuerst müssen Sie die AFMotor-Bibliothek herunterladen und installieren
7
#include<QTRSensors.h> // Pololu QTR-Sensorbibliothek. Zuerst müssen Sie die QTRSensors-Bibliothek herunterladen und installieren
8
9
AF_DCMotorMotor1(1,MOTOR12_1KHZ);// erzeuge Motor Nr. 1 unter Verwendung des M1-Ausgangs am Shield Motor Drive, eingestellt auf 1 kHz PWM-Frequenz
10
AF_DCMotormotor2(2,MOTOR12_1KHZ);// erzeuge Motor Nr. 2 mit M2-Ausgang am Shield Motor Drive, eingestellt auf 1 kHz PWM-Frequenz
11
12
#define KP 2 // Experimentieren Sie, um dies zu bestimmen, beginnen Sie mit etwas, das Ihren Bot der Linie langsam folgen lässt
13
#define KD 5 // experimentieren Sie, um dies zu ermitteln, erhöhen Sie langsam die Geschwindigkeit und passen Sie diesen Wert an. (Anmerkung: Kp <Kd)
14
#define M1_minumum_speed 150 // Mindestgeschwindigkeit des Motors1
15
#define M2_minumum_speed 150 // Mindestgeschwindigkeit des Motors2
16
#define M1_maksimum_speed 250 // max. Geschwindigkeit des Motors1
17
#define M2_maksimum_speed 250 // max. Geschwindigkeit des Motors2
18
#define MIDDLE_SENSOR 4 // Nummer des verwendeten mittleren Sensors
19
#define NUM_SENSORS 5 // Anzahl der verwendeten Sensoren
20
#define TIMEOUT 2500 // wartet auf 2500 us, damit die Sensorausgänge niedrig werden
21
#define EMITTER_PIN 2 // emitterPin ist der digitale Arduino-Pin, der steuert, ob die LEDs ein- oder ausgeschaltet sind. Der Emitter wird über den digitalen Pin 2 gesteuert
22
#define DEBUG 0
23
24
// Die Sensoren 0 bis 5 sind mit den analogen Eingängen 0 bis 5 verbunden
intposition=qtrrc.readLine(Sensoren);// Erhalten Sie kalibrierte Messwerte zusammen mit der Zeilenposition. Weitere Informationen zur Zeilenposition finden Sie in der QT Sensors Arduino Library.
Trotz der Quellcode-Tags, die ich nachträglich in Deinen Quelltext
eingefügt habe, ist das ganze grottenschlecht zu lesen, da sämtliche
Einrückungen fehlen.
Obendrein scheint der Quelltext automatisch ins Deutsche übersetzt zu
sein, was dann gar nicht mehr funktionieren kann:
> QTRSensorsRC qtrrc ((nicht signiertes Zeichen []) {A4, A3, A2, A1, A0},
NUM_SENSORS, TIMEOUT, EMITTER_PIN);
> Leere Schleife ()> für (i = 0; i <250; i ++)> Verzögerung (20);> wenn (DEBUG) {>
Und was soll das hier?
> if (Motor1> M1_Maximum_Geschwindigkeit) Motor1Geschwindigkeit =
M1_Maksimum_Geschwindigkeit;
Maximum oder Maksimum?
Poste den tatsächlichen Quelltext, am besten als Dateianhang, lass'
den Quatsch mit der Übersetzung sein, und rücke alles anständig ein,
damit man es vernünftig lesen kann.
Johann D. schrieb:> Mein Auto fährt allerdings mur auf einem schwarzen> streifen.
das nennt sich normalerweise Asphalt und ist auch normal für Autos.
Mehr gibt dein Code nicht her.
Die Kommentare in dem obigen Quelltext sind doch ein deutlicher Hinweis,
dass selbiger überhaupt nicht von Dir selbst stammt, sondern offenbar
ein Vorlage ist, die von irgendeiner Lehranstalt zur Verfügung gestellt
wurde.
Haben denn der Autor und/oder Rechteinhaber Dir explizit gestattet,
den Quelltext in irgendwelchen Foren zu veröffentlichen, und zwar ohne
Nennung der Urheberschaft? Falls nicht, handelt es sich ggf. um einen
Rechtsverstoß.
Ich gehe davon aus, dass es sich bei dem TE nur um einen faulen und
gleichzeitig kriminellen Studenten handelt, für den wir die Hausaufgaben
machen sollen.
Mario M. schrieb:> Die Kommentare sagen, dass die Sensoren kalibriert und Reglerparameter> angepasst werden müssen. Hast Du das schon getan?
Nein, natürlich nicht. Wir sollen schließlich seine Hausaufgaben
erledigen und ihm inklusive Kalibrierung auf dem Silbertablett
servieren.
> Hallo habe ein Auto gebaut was an einer Schwarz weißen Lienie> entlang fahren soll. Mein Auto fährt allerdings mur auf einem> schwarzen streifen.
Was meinst du mit "Schwarz weißen Linie"?
Wie ist der Sensor mechanisch aufgebaut?
Was ist das für eine seltsame Programmiersprache?
Kannst du bitte mal ordentlich einrücken?
Du hast nirgends eine Regelung der Position. Du subtrahierst 2000 von
dem gemessenen Wert und machst dann nichts mit dem Ergebnis.
Johann D. schrieb:> Wisst ihr wo mein fehler ist.
Für den Arduino solltest du ein Arduino Programm verwenden und das
sollte zumindest eine Funktion loop() enthalten.
https://www.arduino.cc/en/Reference/Loop/
Das Werkzeugt zum vernünftigen formatieren findest du in der Arduino IDE
im Menü Werkzeuge ;-)
Wolfgang schrieb:> Johann D. schrieb:>> Wisst ihr wo mein fehler ist.>> Für den Arduino solltest du ein Arduino Programm verwenden und das> sollte zumindest eine Funktion loop() enthalten.> https://www.arduino.cc/en/Reference/Loop/
Vielleicht ist das ja schon der Fehler.
Schuss ins Blaue... Beim starten werden die Sensoren kalibriert. Das
Auto bzw. dessen Sensoren müssen auf der Line stehen. Die Spannungen
werden gelesen und gespeichert. So kann nachher die Abweichung ermittelt
werden.
Entweder wurde die Sensoren vertauscht oder falsch kalibriert.
Falls es dem TO noch nicht klar war:
Anfänger verwenden meist zwei Sensoren zwischen denen sie den Streifen
positionieren. Beim NiboBee sind sogar drei Sensoren angebracht, ich
habe keine Ahnung, was ich mit dem dritten anfangen soll.
Nach einigen schlechten Ergebnissen mit primitiver Software, die nur
drei Zustände kennt (links, geradeaus, rechts) kommt man früher oder
später auf eine Lösung mit PD oder PID Regelung und stellt dann fest,
dass die Umsetzung mit nur einem Sensor einfacher und zuverlässiger
funktioniert.
Man muss sich nur Gedanklich von diesen drei harten Zuständen trennen
und den Roboter so programmieren, dass er der Kante einer Linie folgt.
Die Kante hat mittlere Helligkeit, weiter links ist es dunkler, weiter
rechts ist es heller. Der Sensor liefert ein analoges Signal, welches
der Abweichung vom Soll entspricht. Die Lenkung lässt sich quasi-analog
(damit meiner ich weit mehr als 3 Zustände) viel besser steuern.
Der Quelltext oben scheint diesen Lösungsweg zu unterstützen.
Vielleicht hilft das dem TO. Mehr möchte ich dazu nicht verraten, denn
wer einfach nur 1:1 nach macht, lernt wenig.
Johann D. schrieb:> int i;> für (i = 0; i <250; i ++)> {> qtrrc.calibrate (QTR_EMITTERS_ON);> Verzögerung (20);> }Stefanus F. schrieb:> Der Quelltext oben scheint diesen Lösungsweg zu unterstützen.
Der tut das ganz bestimmt nicht...
>> Der Quelltext oben scheint diesen Lösungsweg zu unterstützen.> Der tut das ganz bestimmt nicht...
Er ist natürlich offensichtlich noch unvollständig.
Stefanus F. schrieb:>>> Der Quelltext oben scheint diesen Lösungsweg zu unterstützen.>> Der tut das ganz bestimmt nicht...>> Er ist natürlich offensichtlich noch unvollständig.
Nicht nur das. Er ist schlicht und einfach falsch und läßt sich
garantiert nicht mal compilieren.
> für (i = 0; i <250; i ++)
oder
> Verzögerung (20);
oder die vielen anderen Übersetzungen frißt kein Compiler ;-)
Johann D. schrieb:> Hallo habe ein Auto gebaut was an einer Schwarz weißen Lienie entlang> fahren soll. Mein Auto fährt allerdings mur auf einem schwarzen> streifen.
Wenn ich mir schon hier den Kopf zerbrechen muß, lese ich gar nicht erst
weiter.
vielleicht sollte der OP mal mit der Original-Beschreibung anfangen und
die dann -nach und nach - an sein Projekt anpassen:
https://www.pololu.com/docs/0J19/3
Bernhard S. schrieb:> Wenn man den Google-Translator-Quatsch wieder zurückübersetzt, wird> sogar Arduino-Code draus ;-)
Na ich vermute mal, dass der TO irgendwo gehört oder gelesen hat, dass
man den Quellcode übersetzen muss, bevor man ihn auf den Controller
lädt.