Arduino Motor Shield mit RC ansteuern

Hallo,

ich bin Michael und komplett neu in der Arduinio Szene. Aktuell baue ich gerade einen Wall-E der eigentlich mittels Arduino und Raspberry agiert. Nun da ich hier erst einmal die Programmierung erlernen muss wollte ich zumindest mit dem Wall-E per RC Fernsteuerung etwas durch die Gegend fahren. Nun frage ich mich, ob ich die Motor Shield Platine über einen RC Empfänger ansteuern kann. Also wirklich nur Motor 1 Vorwärts/stop/Rückwärts und Motor 2 Vorwärts/stop/Rückwärts.
Wie gesagt, ich habe bis dato keine Ahnung von Arduino. Also habt bitte Mitleid das ich nicht gleich alles verstehe :wink:

Viele Grüße
Michael

Würde sagen nein.
Der RC Empfänger gibt Servosignale aus und das Shild wird über andere Signale angesteuert.
Du kannst den Arduino so Programmieren daß er die Servosignale einliest, interpretiert und dann das Shield dementsprechend ansteuert.
Ohne Arduino und dessen Programmierung geht es nicht.
Grüße Uwe

Hallo Uwe,
danke erstmal, also gerne auch inkl. dem UNO.
Hatte mich da schon mal mit einem Sketch versucht den im bei YT gesehen habe, aber das funzt irgendwie nicht.
Sorry fürs Bild. Hier der Code:

//Wall-E RC 

int PWM_PIN1 = 1;

int PWM_PIN2 = 2;

void setup() {

  pinMode(PWM_PIN1, INPUT);

  pinMode(PWM_PIN2, INPUT);

  Serial.begin(115200);

}

void loop() {

  int PWM1 = pulseIn(PWM_PIN1, HIGH); 

  int PWM2 = pulseIn(PWM_PIN2, HIGH);

  Serial.print("PWM CH1: ");

  Serial.print(PWM1);

  Serial.print(" PWM CH2: ");

  Serial.print (PWM2);

}

Bist Du bitte so nett und machst mal in der IDE:
BEARBEITEN - FÜR FORUM KOPIEREN - und dann ersetze das Bild mit dem, was Du kopiert hast.

Im Weiteren vielleicht mal kurz das hier mitnehmen.

Bitte keine Fotos von einem Sketch sondern den Sketch herainkopieren ,it </> Button

Hab es geändert, sorry

pin 1 ist die Serielle Schnittstelle. also such Dir für das Einlesen des Signals ein anderes freies Pin.
Grüße Uwe

Danke Dir, so einfach kann es sein :wink:
Jetzt hab ich nur das Problem, das die Kette langsam läuft und sich nur minimal einstellen lässt.
Im Wall-E Sketch musste ich einen MotorController sketch hochladen, kannst du vielleicht dort sehen wo ich den Input ändere um den über den RC EMpfänger einspiele?

#ifndef MOTOR_CONTROLLER_HPP

#define MOTOR_CONTROLLER_HPP

// MOTOR CONTROLLER CLASS

class MotorController {

public:

  // Constructor

  MotorController(uint8_t _dirPin, uint8_t _pwmPin, uint8_t _brkPin, bool _brkEnabled = true);

  

  // Functions

  void setSpeed(int pwmValue);

  // Default destructor

  ~MotorController();

private:

  uint8_t dirPin, pwmPin, brkPin;

  bool reverse, brake, brakeEnabled;

};

/**

 * Default Constructor

 * 

 * @param  (_dirPin) Digital pin used for motor direction

 * @param  (_pwmPin) Digiral pin for PWM motor speed control

 * @param  (_brkPin) Digital pin to enable/disable the breaks

 * @param  (_brkEnabled) Should the break be used?

 */

MotorController::MotorController(uint8_t _dirPin, uint8_t _pwmPin, uint8_t _brkPin, bool _brkEnabled) {

  dirPin = _dirPin;

  pwmPin = _pwmPin;

  brkPin = _brkPin;

  brakeEnabled = _brkEnabled;

  pinMode(dirPin, OUTPUT);     // Motor Direction

  pinMode(brkPin, OUTPUT);     // Motor Brake

  digitalWrite(dirPin, HIGH);

  reverse = false;

  if (brakeEnabled) {

    digitalWrite(brkPin, HIGH);

    brake = true;

  } else {

    digitalWrite(brkPin, LOW);

    brake = false;

  }

}

/**

 * Default Destructor

 */

MotorController::~MotorController() {

  // Empty

}

/**

 * Set a new motor speed

 * 

 * @param  (pwmValue) The PWM value of the new speed

 * @note   Negative PWM values will cause the motor to move in reverse

 * @note   A PWM value of 0 will enable the breaks

 */

void MotorController::setSpeed(int pwmValue) {

  // Bound the PWM value to +-255

  if (pwmValue > 255) pwmValue = 255;

  else if (pwmValue < -255) pwmValue = -255;

  

  // Forward direction

  if (pwmValue > 0 && reverse) {

    digitalWrite(dirPin, HIGH);

    reverse = false;

    // Release the brake

    if (brake) {

      digitalWrite(brkPin, LOW);

      brake = false;

    }

  // Reverse direction

  } else if (pwmValue < 0 && !reverse) {

    digitalWrite(dirPin, LOW);

    reverse = true;

    // Release the brake

    if (brake) {

      digitalWrite(brkPin, LOW);

      brake = false;

    }

  // If there is no movement, engage the brake

  } else if (brakeEnabled && !brake) {

    digitalWrite(brkPin, HIGH);

    brake = true;

  }

  

  // Send PWM value

  analogWrite(pwmPin, abs(pwmValue));

}

#endif /* MOTOR_CONTROLLER_HPP */

Aber nicht so wie Dir geraten wurde.
Schau Dir an, wie das in #8 aussieht - Das ist nicht lesbar.
Bitte nochmal.

aber jetzt

Hatte das gleiche problem mit dem einlesen der rc fernbedienung. Kann dir das hier:

Und das hier :

Empfehlen, habe die Lib zwar selber nicht zum laufen gebracht, es hat aber sehr geholfen die signale vom rc empfänger zu verstehen.

Habe meine fernbedienung anders eingelesen, auf fehler korrigiert und verarbeitet.

Siehe hier:

Siehe sketch im untersten sketch dump.

Grüsse

Danke Dir, werde ich mal durchstöbern :slightly_smiling_face:

Kleiner hinweis noch am rande:

Ppm muss zu pwm umgerechnet werden.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.