Arduino Joystick PWM DC Motor control

Hallo Leute,

ich möchte einen Remote Head Mit einem Joystick und 2 Dc Motoren steuern. Habe bereits die nötige hardware inklusive eines L298N. Ich tue mich nur mit dem Code ein bisschen schwer im Moment. Gibt es jemand der mir ein bisschen unter die arme greifen kann?

Hallo, willkommen im Forum!

Mir hat die Beschreibung Arduino Modules - L298N Dual H-Bridge Motor Controller geholfen.

Hi Conni,

was hast du für Motoren?
Ich wusste bis eben nicht was ein RemoteHead ist, aber nach dem googeln danach
denk ich brauchen die Motoren für das Vorhaben ziemlich Kraft.
(Über Getriebe oder Riemen)

Wie bist du bis jetzt vorgegangen?
(Aufbau Hardware / Code)

Hey! Danke für die Antwort!

Hab getriebemotoren mit 15U/m und 1A Stromaufnahme bei 12V. Das sollte reichen. Die Hardware steht alles soweit verkabelt. Jedoch haut mein Programm nicht hin. Irgendwie Funzt es nicht :'( , das übliche bei Programmen eben :D

Ich versuche Mittels einem analogen Joysticks die 2 Motoren proportional zu steuern. Das heißt, der joystick gibt gleich die PWM vor, je nach dem wie weit er in eine Richtung gedrückt wird. Kein anderer Krims Krams.

Am liebsten würde ich von komplett neuen beginnen.

Eventuell würde ich für die Zukunft 2 Stepper in betracht ziehen da, dass Getriebe doch ein bisschen spiel hat.

Conni: Irgendwie Funzt es nicht :'( , das übliche bei Programmen eben :D

Dann schalte doch mal Deine WebCam ein, damit wir sehen, was Du machst und wir Dir helfen können ;D

Oder Du probierst selbst noch etwas.

Ich lass euch morgen mal ein paar Fotos zukommen.

Ich habe mich doch dazu entschlossen Stepper zu verwenden, (insofern das nicht noch komplizierter wird.) da mir das spiel im Getriebe zu groß ist. Das würde ich dann mittels 2 L298N realisieren.

Aber das mit dem Code bekomm ich nicht gebacken. :slightly_frowning_face:

Conni: Ich habe mich doch dazu entschlossen Stepper zu verwenden, ...

Da könnte Dir die Bibliothek AccelStepper helfen.

Allerdings ist das Drehmoment ohne Getriebe kritisch.

Hey Leute. Hab jetzt alles angeschlossen so weit. das Programm lautet wie folgt:

#include <Stepper.h>

// Set steps per revolution
const int PPR = 200;

// Motor Y in pins 10-13
Stepper motor1(PPR, 10,11,12,13);
// Motor X in pins 6-9
Stepper motor2(PPR, 6,7,8,9);

void setup() {
// Pins 2-5 set up as inputs with pullup resistors. Sensors are active-low.
for (int i = 2; i <= 5; i++)
{
pinMode(i, INPUT_PULLUP);
}
}

void loop() {
// MOTOR 1 CONTROL
int speed = 0;
int direction = 1;
// Get joystick position on A1
int position = analogRead(1);

/*
Values between 562 and 1023 mean forward movement. Speed gets
mapped from 0 to 10 and direction stays positive. Sensors will
block any movement if HIGH.
/
if (position > 562 and digitalRead(2) == HIGH) {
speed = map(position, 562, 1023, 0, 10);
}
/

Values between 0 and 462 mean backwards movement. Speed gets
mapped from 10 to 0 and direction is negative. Sensors will
block any movement if HIGH.
*/
if (position < 462 and digitalRead(3) == HIGH) {
speed = map(position, 0, 462, 10, 0);
direction = -1;
}
// Values between 462 and 562 mean no movement (joystick center zone)
if (speed > 0) {
motor1.setSpeed(speed);
motor1.step(direction);
}

// MOTOR 2 CONTROL
speed = 0;
direction = 1;
position = analogRead(2);

if (position > 562 and digitalRead(4) == HIGH) {
speed = map(position, 562, 1023, 0, 10);
}

if (position < 462 and digitalRead(5) == HIGH) {
speed = map(position, 0, 462, 10, 0);
direction = -1;
}

if (speed > 0) {
motor2.setSpeed(speed);
motor2.step(direction);
}
}

Der Stepper macht jedoch keinen mux.

@agmue

hast du bereits schon mal was in diese Richtung gemacht? Die Bibliothek sieht Interessant aus, da mach ich noch bisschen schlau!

Ja, beispielsweise mein Kohlekranfunktionsmodell, allerdings mit unipolarem Motor. Der Motor hat ein Getriebe und wurde schon mal von jemandem hier im Forum für einen Kameraschlitten eingesetzt. Ein Freund hat den Kran für eine Modellanlage nachgebaut und nutzt meine Software. Er ist weit besser in Mechanik als ich.

Die L298N mag ich nicht so sehr, daher habe ich noch eine Platine und einen Motor hier rumliegen. Am WE könnte ich die zusammenstöpseln.

Wegen der sanften Beschleunigung nehme ich lieber die AccelStepper.

EDIT: Habe gerade ein Bild eines früheren Aufbaus gefunden. Der Arduino wird von der Treiberplatine versorgt.
L298N.png

Sieht super aus!

Du hast recht die L298N sind nicht die besten dinger, aber sollten es trotzdem tuen. Ein richtiger Stepper Driver wie ZB. ein SparkfunEasydriver kann ich nicht mit 1.5A belasten, daher fallen sie weg. :confused:

Das sanfte beschleunigen (auch bremsen?) währe echt von Vorteil. Aber ich kenn mich mit dieser Bibliothek 0 aus. Ich tue mich ja ohnehin schon ziemlich schwer was das Programmieren angeht. :(

Bei dem Bild handelt es sich um einen unipolaren stepper?

Habe das Setup soweit zum laufen gebracht! Yepie! Aber die Stepper schritte sind extrem "Steppig" :D, wen man das so sagen darf

Conni: Du hast recht die L298N sind nicht die besten dinger, aber sollten es trotzdem tuen.

Mich stören hauptsächlich die vier Anschlüsse je Stepper.

Conni: ... ein SparkfunEasydriver kann ich nicht mit 1.5A belasten, daher fallen sie weg. :confused:

Was hältst Du von von DRV8825 (rated for up to 2.2 A per coil with sufficient additional cooling)?

Conni: Bei dem Bild handelt es sich um einen unipolaren stepper?

Nein bipolar. Der L298N kann meines Wissens nur bipolar.

Aus meinem Kohlekranprojekt kopiert:

 stepper.setMaxSpeed(500);
  stepper.setAcceleration(500);
...
stepper.moveTo(KohlepositionKran);

In den Beispielen zur Bibliothek ist das beschrieben. Außerdem hilft Probieren :)

Conni: Habe das Setup soweit zum laufen gebracht! Yepie!

Gratulation! Mit welcher Bibliothek? Welchen Motor verwendest Du?

Erstens 4. Anschlüsse und 2. werden die L298N brutal heiß.

agmue:
Was hältst Du von von DRV8825 (rated for up to 2.2 A per coil with sufficient additional cooling)?

Das sieht interessant aus. Vor Allem die Strombegrenzung ist von Vorteil.

agmue:
Gratulation! Mit welcher Bibliothek? Welchen Motor verwendest Du?

Den Stepper soweit zu laufen gebracht habe ich mit der normalen Stepper.h Bibliothek. Aber lange hielt die Begeisterung nicht an denn ich hab schnell bemerkt, dass der Stepper ein bisschen/stark Vibriert. Das würde der Kameraführung letztendlich nicht gut tuen. Ich habe es sogar mit microsteps versucht, aber das Ding ist besser wie ein vibrator. :grinning:

Ich habe es jetzt nochmals mit den normalen Getriebe Motoren probiert mittels PWM. Das klappt ganz gut, aber das Getriebespiel stört nach wie vor. Solle das mit dem stepper doch klappen, das er nicht ganz so stark vibriert, könnte ich es trotzdem noch so machen. Hast du ne Idee wie ich das unter Kontrolle bekommen könnte?

Welchen Schrittmotor hast Du? Ich kann nicht auf Deinen Schreibtisch sehen!

"Nennspannung: 2.4V" paßt nicht an den Treiber. Der möchte Motoren so um 12V Nennspannung haben. Deiner wäre ideal für DRV8825 und solcher Art.

Uwe (Forumsmoderator) mag den SilentStepStick und Silent könnte ja auch für Dich von Interesse sein.