Kuman Bluetooth RC Smart Roboter Auto Set, UNO R3 Robotic SM11

Hallo Zusammen,

ich habe mir vor kurzem diesen Bausatz hier gekauft:

Bausatz

Nachdem alles Zusammengebaut war, habe ich die ersten Tests mit den mitgelieferten Programmen erfolgreich durchgeführt.

Nun wollte ich ein eigenes Projekt mit diesem fertigen Bausatz implementieren. Hier der Code:

#include <Servo.h> 

// Motor A connections
int enA = 10;
int in1 = 9;
int in2 = 8;
// Motor B connections
int enB = 5;
int in3 = 7;
int in4 = 6;

Servo myservo;        // Set up the myservo

void setup()
{
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);

// Turn off motors - Initial state
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);

}

void loop()
{ 
speedControl();
delay(10000);
}

// This function lets you control speed of the motors
void speedControl()
{
// Turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);

for (int i = 0; i < 256; i++)
{
  analogWrite(enA,100);
  analogWrite(enB, 100);
  delay(20);
}
  
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}

Wenn ich also diesen Sketch hochlade, macht der Roboter genau das war ich erwartet habe, nämlich: der Roboter fährt langsam nach vorne.

Wenn ich nun im Setup-Teil folgende Zeile hinzufüge, drehen sich nur noch die Reifen auf der Rechten Seite. Der Roboter fährt also nicht mehr geradeaus, sondern macht eine Kurve.

" myservo.attach(11); // Define the servo motor output 11pin(PWM) "

Für mich ist dieses Verhalten absolut unverständlich, da für mich das EINE nichts mit dem ANDEREN zu tun hat. Könnte mir hier jemand weiterhelfen?

Mfg, Lorion

Du solltest Dein Posting noch einmal überarbeiten: Die URL kannst Du klickbar machen, den Code in Code-Tags fassen.

Gruß

Gregor

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Möglicherweise zerschiesst dir die Servo-Bibliothek deine PWM.
Beides benötigt Timer.

Da das Ding ja original schon ein Servo zu haben scheint: wie löst der Hersteller das Problem?
Werden da eventuell andere Pins benutzt?

Je nach Einsatzfall kann man das Servo wieder "entkoppeln"- wenn man die PWM für die Motoren braucht.
Und nur dann wieder anbinden, wenn die PWM nicht benutzt wird.

Hallo Rabenauge,

danke für die Antwort.

In den mitgelieferten Programmen ist es anscheinend so. Wenn ein Servo verwendet wird, werden die Pins für den Motor nur digital verwendet.

Was meinst du mit koppeln und entkoppeln? Ist sowas zur Laufzeit möglich? Wenn ja, wie funktioniert das? Wenn nein könnte ich mein Projekt eventuell so fortsetzen:

a) Einen zweiten Arduino UNO für die Servo-Steuerung verwenden.
b) Einen Arduino MEGA verwenden.

Was meint ihr dazu?

lg, Lorion

Ja- das geht. Mit Einschränkungen:

Du kannst jederzeit Servos mit servo.detach() wieder "abschalten".
Wenn du es wieder brauchst, wird es mit servo.attach() einfach wieder eingebunden.

Da die Servobibliotek die nicht "nullt" geht das.
Das abgeschaltene Servo bekommt dann einfach keine Steuerimpulse mehr, es bleibt also einfach stehen.
Genau das ist die Einschränkung: wenn es in einer definierten Lage stehen bleiben soll, musst du warten, bis es die auch erreicht hat, bevor du abschaltest (bei billigen kann das auch schonmal ne Sekunde dauern, je nach Last und Stromversorgung).
Servos speichern die nämlich nicht intern, also einfach Sollposition senden, und dann direkt die Signalleitung kappen, funktioniert nicht.
Und: es hat dann keinerlei Haltekraft- ausser der mechanischen, da es keine "Soll-Position" weiss, in der es bleiben soll.

Ne gute Idee ist es, die letzte Position, die das Servo haben sollte, abzuspeichern, und nach dem attach() gleich mal wieder zu senden, damit es wirklich dort steht, wo es stehn sollte.
Gerade dann, wenn es unter mechanischer Last gestoppt wurde (z.B. ein angehobener Arm oder so).
Je nach Szenario (wenn das Ding einfach nur nen kleinen IR-Sensor schwenkt, ist es eher unnötig) kann man das aber auch weg lassen.