Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose24:keksbus:projektdoku

Dies ist eine alte Version des Dokuments!




Projektdokumentation

Einleitung

Die Grobe Idee für den Roboter war es eine Art quasi-autonomen Bus in Miniatur Form zu bauen. Um diesem Bus auch eine reale Anwendung zu geben beschlossen wir, dass er Kekse transportieren soll, sodass wir auch auch auf den Namen Keks-Bus kamen. Quasi-autonom heißt in diesem Fall, dass der Bus einen durch eine vorgegebene Spur vorgegebenen Loop abfahren sollte und an Bedarfshaltestellen auf Knopfdruck an der jeweiligen Haltestelle halten soll. Zudem sollte es eine Haupthaltestelle geben, an der jedes mal auch ohne äußere Interaktion bzw. Befehl gehalten wird, sodass der Bus mit Keksen befüllt werden kann.

Umsetzung

Ergebnisse und Dokumentation

Leider hat sich unsere Gruppe, die an dem Keksbus gearbeitet hat nach wenigen Wochen von 2 Personen auf eine halbiert, sodass die vorher selbst gesetzten Ziele und Erwartungen nicht erfüllt werden konnten. Nun kann das Fahrzeug lediglich fahren und theoretisch eine Haltestelle (in Form eines Magneten auf der richtigen Höhe und in Fahrtrichtung rechts) erkennen, für eine gewünschte Zeit anhalten und danach weiter fahren. Eine der Kern-Funktionen, die Spur-Erkennung wurde nicht erreicht. Die dafür benötigten beiden Hall-Sensoren wurden lediglich an der Karosserie angebracht, aber nicht angeschlossen und in den Code integriert.

Hier zu sehen: Der Keksbus wird eingeschaltet und die Motoren drehen die Räder. Als nächstes wird ein Magnet an den Hall-Sensor gehalten, daraufhin stoppen die Räder für 4 Sekunden.

Der Keksbus „beladen“

Code und Roh-Daten

Code:

#define Hall1 A4 benennt den PIN A4 in Hall1 um Hall1 ist der Hall-Sensor an der Seite

erster motor links int in1 = 9; vorwärts int in2 = 8; rückwärts zweiter motor rechts int in3 = 7; vorwärts int in4 = 6; rückwärts

int in5 = 15; control speed motor links ENA int in6 = 16; control speed motor rechts ENB

void setup() {

Serial.begin(9600);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(in5, OUTPUT);
pinMode(in6, OUTPUT);  //alle genannten PINs dienen zur Steuerung der Motoren und werden als outputs deklariert
pinMode(Hall1, INPUT);  //deklariert Hall1 also A4 als Input PIN für den ersten Hall Sensor

} void fahren() {

analogWrite(in5, 142);
analogWrite(in6, 142);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

} void rueckfahren() {

analogWrite(in5, 142);
analogWrite(in6, 142);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);

} void drehlinks() {

analogWrite(in5, 142);
analogWrite(in6, 160);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

} void drehrechts() {

analogWrite(in5, 160);
analogWrite(in6, 142);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

} void stop() {

digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);

} void loop() {

int hallsensor1 = analogRead(Hall1); //Info: Hallsensor1 gibt den Wert 1051 ohne erkanntes Magnetfeld und den Wert 0 bei erkanntem Magnetfeld an
Serial.println(analogRead(Hall1));
if (hallsensor1 <= 10) { // wenn der Hallsensor1 ein Magnetfeld erkennt halten die Motoren an
  stop();
  delay(4000);
} else if (hallsensor1 >= 11) { //bei keinem erkanntem Magnetfeld durch den Hallsensor1 
  fahren();
}

}

projektesose24/keksbus/projektdoku.1727730368.txt.gz · Zuletzt geändert: 2024/09/30 23:06 von TLWeschke