AlphaBot: Linienverfolger PD-Regler

Aus HSHL Mechatronik
Version vom 2. Juni 2022, 19:11 Uhr von Ulrich Schneider (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „'''Autor:''' Prof. Dr.-Ing. Schneider right|550px == Inhalt des 9. Termins == * Wir wiederholen di…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Autor: Prof. Dr.-Ing. Schneider

Inhalt des 9. Termins

  • Wir wiederholen die Struktur des 2-Punkt-Reglers.
  • Wir messen und visualisieren die Laufzeit und die Zykluszeit.
  • Wir programmieren einen P-Regler.
  • Anschließend erweitern wird den P-Regler zum PD-Regler für eine sanfte Spurverfolgung.
  • Wir legen die Reglerparameter systematisch aus und erfreuen uns am Ergebnis!

Quelltext

/* Bibliotheken hinzufügen */
#include "AlphaBot.h"                   // Arduino Bibliothek für die Motoren einbinden    
#include "TRSensors.h"                  // Tracker Sensor Bibliothek


AlphaBot  Alf = AlphaBot();              // Instanz des AlphaBot wird erzeugt
TRSensors trs = TRSensors();          // Instanz des Sensors wird erzeugt

#define NUM_SENSORS 5                   // 5 Tracker Sensoren, Daten via I2C
unsigned int Messwerte[NUM_SENSORS];    // Meswert Array wird angelegt

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Achtung hohe Geschwindigkeit für den seriellen Monitor
  KalibriereLinienVerfolger(); // kalibrierung des Linienverfolgers


  Serial.println("SETUP beendet");

}

void loop() {
  unsigned int position = trs.readLine(Messwerte);

  Serial.println(position); // Istwert ausgeben
  
  /* Hier entsteht der PD-Regler */

}
void KalibriereLinienVerfolger() {
  Serial.println("Kalibrierung startet für 10s...");
  for (int i = 0; i < 400; i++)                  // make the calibration take about 10 seconds
  {
    trs.calibrate();                             // reads all sensors 10 times
  }
  Serial.println("Kalibrierung beendet");

  // Ausgabe der Minimalwerte während der Kalibrierung
  for (int i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(trs.calibratedMin[i]);
    Serial.print(' ');
  }
  Serial.println();

  // Ausgabe der Maximalwerte während der Kalibrierung
  for (int i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(trs.calibratedMax[i]);
    Serial.print(' ');
  }
  Serial.println();

  delay(1000);
}


Abb. 1: Motorenbezeichnung in Fahrtrichtung

Hausaufgaben bis zum 12. Termin

  • Stimmt Euren Regler so ab, dass die Fahrt geschmeidig ist.
  • Was sind die besten Parameter?
  • Ist eine Fahrt in beide Richtungen möglich?


Hinweise:

  • Einen Artikel zum Linienverfolger findet Ihr hier.
  • Die Jumper von Block F müssen alle links gesetzt sein.

→ zurück zum Hauptartikel: Projekt Alf