Home > Technologie > Servos mit Arduino und RC Empfänger / Transmitter

Servos mit Arduino und RC Empfänger / Transmitter

0
Advertisement

Servos mit Arduino und RC Empfänger / Transmitter

In diesem Tutorial werde ich erklären, wie man mehr als ein Servo mit nur einem Kanal des Transmiter / Receiver steuern und eigene Bewegungen programmieren kann. Es ist nützlich für komplexe Bewegungen wie Roboterarme.

Sie benötigen:
-Arduino Uno
-Übertragung
-Empfänger
-3 Servos

Schritt 1: Verdrahtung

Servos mit Arduino und RC Empfänger / Transmitter

Schritt 2: Der Code

Dieser Code ist sehr einfach,
In diesem Beispiel, wenn der Querruder nach links oder rechts gesetzt wird, bewegen sich die 3 Servos von 90 Grad (Mitte) auf 0 Grad und jeweils 180 Grad nacheinander. Ändern Sie die Verzögerung (), um die Geschwindigkeit der Servos zu ändern.

Sie müssen Ihren eigenen Bereich definieren, um Ihre Servos zu zentrieren, indem Sie die Werte des Empfängers überwachen. Ich definierte einen Bereich zwischen 1450 und 1550, weil der Wert I überwacht wurde um 1500 für Querruder -> Kanal2

  Wenn ((Kanal2> = 1450) && (Kanal2 <= 1550))
  // *** ------ RC Servosteuerung ----- ***
  // *** ---- K. Michalsky / 2015 ---- ***
  // Arduino Stifte
  // Pin7 zum Kanal2 des Empfängers
  // Pin9 zum Signal von Servo1
  // Pin10 auf Signal von Servo2
  // Pin11 zum Signal von Servo3
  // Inklusive Servobibliothek.Die Servobibliothek unterstützt bis zu 12 Motoren auf den meisten Arduino-Karten und 48 auf dem Arduino Mega.
  #include <Servo.h>
  // Erstellen von Servoobjekten zur Steuerung der Servomotoren
  Servo servoMotor1;
  Servomotor2;
  Servo servoMotor3;
  // Variablen für die Position der Servos definieren
  Int posServo1 = 0;
  Int posServo2 = 0;
  Int posServo3 = 0;
  // Definiere eine Variable für den Kanal des Empfängers, mit dem du die Servos steuern möchtest, in diesem Fall channel2 (ailerons channel from my receiver)
  Int channel2;
  // Setzen Sie jede Servovariable auf einen Pin
  Void setup () {
    ServoMotor1.attach (9);  // Servo1 an Pin 9 angeschlossen
    Servomotor 2. Anschlag (10);  // Servo2 an Pin 10 angeschlossen
    ServoMotor3.attach (11);  // Servo3 an Pin 11 angeschlossen
      // Definieren Sie den Eingang Pin für den Empfänger
    PinMode (7, INPUT);
    Serial.begin (9600);  // Serielle Kommunikation zur späteren Überwachung des Kanalsignals
  aufrechtzuerhalten.
  Void Schleife () {
    // Lesen Sie den Impuls von Pin7 entweder HIGH oder LOW
    Channel2 = pulseIn (7, HIGH);
    // Überwachen Sie den Kanalwert
    Serial.print ( "Kanal 2:");
    Serial.println (channel2);
   // Definieren Sie einen Bereich des Kanalwerts, um das Servo zu zentrieren, wenn der Stick des Senders zentriert ist.  Dieser Bereich kann je nachdem, welche Servos und Transmiter Sie verwenden.  Servos sind bei 90 Grad zentriert
    Wenn ((Kanal2> = 1450) && (Kanal2 <= 1550)) {
      PosServo1 = 90;
      PosServo2 = 90;
      PosServo3 = 90;
      ServoMotor1.write (posServo1);
      ServoMotor2.write (posServo2);
      ServoMotor3.write (posServo3);
    aufrechtzuerhalten.
    // Wenn der Kanalwert größer als der höchste Wert des Bereichs ist, folgen Sie
    Sonst if (channel2> 1550) {
      Für (int i = 90; posServo1 <180; posServo1 ++) {
        ServoMotor1.write (posServo1);
        I = posServo1;
        Wenn (i> = 179) {
          Für (int j = 90; posServo2 <180; posServo2 ++) {
            ServoMotor2.write (posServo2);
            J = posServo2;
            Verzögerung (10);  // Zeit für Servo2, den Wert zu erreichen
            Wenn (j> = 179) {
              Für (int j = 90; posServo3 <180; posServo3 ++) {
                ServoMotor3.write (posServo3);
                J = posServo3;
                Verzögerung (10);  // Zeit für Servo3, den Wert zu erreichen
              aufrechtzuerhalten.
            aufrechtzuerhalten.
          aufrechtzuerhalten.
        aufrechtzuerhalten.
        Verzögerung (10);  // Zeit für Servo1, den Wert zu erreichen
      aufrechtzuerhalten.
    aufrechtzuerhalten.
    // Wenn der Kanalwert kleiner als der niedrigste Wert des Bereichs ist, folgen Sie
    Sonst if (channel2 <1450) {
      Für (int i = 90, posServo1> 0, posServo1 -) {
        ServoMotor1.write (posServo1);
        I = posServo1;
        Wenn (i <= 1) {
          Für (int j = 90; posServo2> 0; posServo2 -) {
            ServoMotor2.write (posServo2);
            J = posServo2;
            Verzögerung (10);  // Zeit für Servo2, den Wert zu erreichen
            Wenn (j & lt; = 1) {
              Für (int j = 90; posServo3> 0; posServo3 -) {
                ServoMotor3.write (posServo3);
                J = posServo3;
                Verzögerung (10);  // Zeit für Servo3, den Wert zu erreichen
              aufrechtzuerhalten.
            aufrechtzuerhalten.
          aufrechtzuerhalten.
        aufrechtzuerhalten.
        Verzögerung (10);  // Zeit für Servo1, den Wert zu erreichen
      aufrechtzuerhalten.
    aufrechtzuerhalten.
    Verzögerung (100);  // Zeit für die Überwachung von Werten
  aufrechtzuerhalten.

Schritt 3: Testen

Related Reading