Hallo!
Ich heiße Kai und bin gerade mit meinem ersten Arduino Projekt beschäftigt.
Es handelt sich dabei um einen Rover der zum Antrieb zwei gehackte Servos bekommen hat und zwei IR-Abstandssensoren von Sharp (Modell 2Y0A21) als seine Augen, damit er nicht überall gegenfährt.
Nach und nach sollen dann noch weitere Funktionen hinzugefügt werden, jedoch gibt es schon jetzt die ersten Probleme.
Und zwar reagiert der Rover nicht auf die Sensoren, die Servos drehen sich zwar jedoch auch immer sehr Ruckhaft und für nur kurze Zeit, nicht so schön flüssig wie man das immer auf Youtube so schön bestaunen kann. Ich habe nochmal meine Schaltung überprüft und kann dort keine Fehler finden, ich denke somit liegt es an meinen Programmierfähigkeiten.
Da es mein erstes Programm ist denke ich mal, dass ich ein paar fundermentale Dinge vergessen habe, bitte schaut euch das mal an und helft mir!
#include <Servo.h>
Servo servobr; //Rechter Servoantrieb
Servo servobl; //Linker Servoantrieb
int maxgeschw = 100; //Maximalgeschwindigkeit
int geschw = 0; //Momentan Geschwindigkeit
int sensorbr = 0; //Anfangswert Rechter Sensor
int sensorbl = 0; //Anfangswert Linker Sensor
int brstop = 90; //Stopwert für rechten Servoantrieb
int blstop = 90; //Stopwert für linken Servoantrieb
int richtung = 1; //Abwechselnder Richtungswert
void setup()
{
pinMode(9, OUTPUT); //Setzt Pin9 von ServoBR als Output
pinMode(10, OUTPUT); //Setzt Pin10 von ServoBL als Output
servobr.attach(9); //Rechter Servoantrieb befindet sich auf Pin 9
servobl.attach(10); //Linker Servoantrieb befindet sich auf Pin 10
}
void loop()
{
sensorbr = analogRead(0); //Rechter Sensor liegt auf Pin Analog0
sensorbl = analogRead(1); //Linker Sensor liegt auf Pin Analog1
vorwaerts();
if (sensorbr >= 300 && sensorbl >= 300) //Vollständiges Ausweichen
{
halt();
delay(250);
rueckwaerts();
delay(1000);
if (richtung%2==0)
{
rechts();
delay(750);
}
else
{
links();
delay(1000);
}
richtung+=1;
}
if (sensorbr >= 300) //Ausweichen nach Links
{
halt();
delay(250);
links();
delay(750);
}
if (sensorbl >= 300) //Ausweichen nach Rechts
{
halt();
delay(250);
rechts();
delay(750);
}
}
void vorwaerts() //Unterprogramm Vorwärts
{
for (int i=0; i<=maxgeschw; i+=10)
{
geschw = i;
servobr.write(brstop +geschw);
servobl.write(blstop -geschw);
}
}
void rueckwaerts() //Unterprogramm Rückwärts
{
for (int i=0; i<=maxgeschw; i+=10)
{
geschw = i;
servobr.write(brstop -geschw);
servobl.write(blstop +geschw);
}
}
void links() //Unterprogramm links abbiegen
{
for (int i=0; i<=maxgeschw; i+=10)
{
geschw = i;
servobr.write(brstop -geschw);
servobl.write(blstop +geschw);
}
}
void rechts() //Unterprogramm rechts abbiegen
{
for (int i=0; i<=maxgeschw; i+=10)
{
geschw = i;
servobr.write(brstop +geschw);
servobl.write(blstop -geschw);
}
}
void halt() //Unterprogramm anhalten
{
servobr.write(brstop);
servobl.write(blstop);
}