Projekt 22: Ballbalancierer: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
'''''[[Kategorie:Projekte]]
'''''[[Kategorie:Projekte]]
[[Kategorie:ProjekteET_MTR_BSE_WS2017]]
Dieser Wiki-Beitrag ist Teil eines Mess- und Regelungstechnik Projektes, welches im Rahmen vom [[Fachpraktikum Elektrotechnik (WS 15/16)]] im Studiengang [http://www.hshl.de/mechatronik/ Mechatronik] im 5. Semester erarbeitet wurde.<br/>  
Dieser Wiki-Beitrag ist Teil eines Mess- und Regelungstechnik Projektes, welches im Rahmen vom [[Fachpraktikum Elektrotechnik (WS 15/16)]] im Studiengang [http://www.hshl.de/mechatronik/ Mechatronik] im 5. Semester erarbeitet wurde.<br/>  
Der Beitrag dient der Dokumentation der Ergebnisse und Erfahrungen die während des Projektes Ballbalancierer erziehlt und gesammelt wurden. <br/><br/>  
Der Beitrag dient der Dokumentation der Ergebnisse und Erfahrungen die während des Projektes Ballbalancierer erziehlt und gesammelt wurden. <br/><br/>  

Version vom 12. Oktober 2017, 16:47 Uhr

Dieser Wiki-Beitrag ist Teil eines Mess- und Regelungstechnik Projektes, welches im Rahmen vom Fachpraktikum Elektrotechnik (WS 15/16) im Studiengang Mechatronik im 5. Semester erarbeitet wurde.
Der Beitrag dient der Dokumentation der Ergebnisse und Erfahrungen die während des Projektes Ballbalancierer erziehlt und gesammelt wurden.

Projektbearbeitung: Jan Völlmecke

Laboraufbau Ballbalancierer (CAD)

Projektbetreuer: Prof. Dr. Mirek Göbel

Einführung

Der Ballbalancierer ist ein Laborversuch an dem das Verhalten verschiedener Reglertypen untersucht und erlernt werden kann. Dabei wird eine Kugel auf einer Wippe balanciert. Die gewünschte Position der Kugel auf der Wippe, sowie die Parameter des Reglers lassen sich über Potentiometer beliebig einstellen.

Ein Servomotor angesteuert vom Herzstück des Regelsystems, dem Mikrocontroller "Arduino Uno", welcher zugleich als Schnittstelle zwischen Sensorik und Aktorik dient, soll die in Schieflage gebrachte Wippe so ansteuern, dass der Ball unabhängig der Erdanziehungskraft an die gewünschte Position rollt.

Projektsteckbrief

Aufgabe
Entwurf eines Reglers für einen mechanisch und elektrisch "fertigen" Laborversuch

Erwartungen an die Projektlösung

  • Recherche zu bestehenden Lösungen
  • Sensorkonzept: Auswahl und Test von geeigneten Sensoren zur Erkennung der Lage des Balls bzw. der Kugel
  • Falls erfolgreich:
    • Entwurf eines Regelkreises
    • Systemidentifikation (Übertragungsfunktion der Regelstrecke bestimmen)
    • Vergleichen und bewerten Sie verschiedene Regelansätze (P, PI, PID), Darstellen der Soll-/Istgrößen
  • Programmiersprache: C
  • Test und wissenschaftliche Dokumentation
  • Live Vorführung während der Abschlusspräsentation
  • weitere Erwartungen an Präsentation und Dokumentation

Planungs-/Klärungsphase

Die Projektbearbeitung begann nach der Einführungsveranstaltung mit der Recherche zur bestehenden Lösung. So wurden der "fertige" Versuchsaufbau im Mechatronik-Labor inspiziert und später die bisherigen Projektunterlagen und Dokumentationen durchgelesen um einen Einstieg in die Problemstellung zu bekommen. Im Anschluss daran ist mittels einer selbst entwickelten Excel-Tabelle die Projektplanung mit den einzelnen Projektphasen, deren Meilensteinen und Teilaufgaben durchgeführt worden. Zudem enthält dieses sogenannte Gant-Chart ein Logbuch in welchem festgehalten werden soll, zu welcher Zeit die einzelnen Teilaufgaben erledigt wurden bzw. wie fortgeschritten die Bearbeitung daran ist.

Projketplanung

Abbildung der Projektplanung inklusive Tracking und Logbuch aus erstellter und Exceldatei

Konzeptionsphase

Sensorkonzept-Messdatennutzung

Die Anschließende Projektphase bestand aus den Meilensteinen Konzeptausarbeitung, -Auswahl, und Test des gewählten Konzeptes.
Überwiegend bestand die Ideensammlung in Internetrecherche und aus vorherigen Projektdokuementationen. Es wurde sich über verschiedene Sensoren informiert und in Bezug auf den Ballbalancierer die Umsetzbarkeit untersucht.

Aufgrund der Aussage aus dem vorherigen Wikibeitrag des Projektes Ballbalancierer, dass ein Infrarotsensor besser funktioniere als ein Ultraschallsensor, es jedoch Probleme beim Messbereich gibt, wurde sich dazu entschlossen einen zweiten Infrarotsensor auf die gegenüberliegende Seite der Wippe zu installieren. Diese beiden Signale gilt es dann zu überlagern bzw. auszuwählen mit welchem Sensor in welchem Bereich der Wippe gemessen werden soll. Die Messbereichsproblematik kann so umgangen werden. Die Auswahl des richtigen Sensors erfolgt über folgenden Programmteil:

Weitere Entscheidungsgründe für das Sensorkonzept mit einem weiteren Infrarotsensor, waren das Projektbudget und der vorhandene Lagerbestand der Sharp-Infrarotsensoren (Messbereich 10-80cm) im Mechatroniklabor.

Provisorische Sensor-Test-Montage

Die Sensoren wurden provisorisch vorn an die Sensorhalter angeschraubt und verdrahtet. Die Verdrahtung wurde vorerst, der Komplexität und Umsetzung halber, durch die Öffnung des Wippenpleuls gelegt. Dieses gilt es in weiteren Bearbeitungen zu optimieren. Für die spätere Optimierung wurde bereits ein CAD-Modell des Sensorhalters inklusive Zeichnungsableitung erstellt und den Projektunterlagen beigefügt. Die neuen Sensorhalter dienen als Gehäuse für die Infrarotsensoren, welche dann an dem Rückteil des Sensorhalters zu befestigen sind. Mithilfe der Sensorumhausung sind die Sensoren vor Beschädigungen, insobesondere bei Reglerversuchen mit der Holzkugel geschützt.

Im Anschluss an die Montage wurden die Sensoren mit folgendem C-Code getestet. Dieser Test ließ ein positives, funktionierendes Konzept verzeichnen.

#include <SharpIR.h>

#define ir_sensor_PIN_links A4
#define ir_sensor_PIN_rechts A5
#define model 1080

SharpIR sharp_links(ir_sensor_PIN_links, 25, 93, model);
SharpIR sharp_rechts(ir_sensor_PIN_rechts, 25, 93, model);

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  delay(20);      // it gives you time to open the serial monitor after you upload the sketch
  
    int dis_links=sharp_links.distance();  // this returns the distance to the object you're measuring (mit linkem Sensor)
    int dis_rechts=sharp_rechts.distance();// this returns the distance to the object you're measuring (mit rechtem Sensor)

    Serial.print("Time taken (ms): ");
    Serial.print(millis());
    Serial.print(";");
    Serial.print("Mean distance left sensor; ");  // returns it to the serial monitor
    Serial.print(dis_links);
    Serial.print(";");
    Serial.print("Mean distance right sensor; ");  
    Serial.print(dis_rechts);
    Serial.println(";");
}

Ausarbeitungsphase

Die Ausarbeitungsphase beschränkte sich auf die Entwicklung eines Regelkreises, sowie dessen noch ausbaufähigen Implementierung und die Aufnahme von Messdaten bezogen auf ein Eingabesignal an den Servomotor.

Regelkreis


Sprungantwort

Für die Ermittlung der Sprungantwort wurde der Servomotor, nach einigen Test wie dieser angesteuert werden kann, mit einer Winkeländerung von 10°, da 1° sogut wie keine Auswirkung auf die Steroporkugel hat, auf seine Ruhelage von 90° angesprochen. Das daraus resultierende Ergebnis ist eine Wippenneigung von 10° nach links. Das Diagramm spiegelt die dazu aufgenommenen Messwerte der Sensoren wieder.

Abbildung der aufgenommenen Sprungantwort
#include <Servo.h>
#include <SharpIR.h>

#define ir_sensor_PIN_links A4
#define ir_sensor_PIN_rechts A5
#define model 1080

SharpIR sharp_links(ir_sensor_PIN_links, 25, 93, model);
SharpIR sharp_rechts(ir_sensor_PIN_rechts, 25, 93, model);

Servo myservo;     // erzeugt ein Servo-Objekt
// maximal können acht Servo-Objekte erzeugt werden
 
int pos = 100;        // Variable, die die Servoposition (Winkel) speichert 
                         (zwischen 46°= rechtsschwenk und 132°= linksschwenk, 90° = mittig)

void setup()
{ 
  
  myservo.attach(3);  // an welchem Pin ist der Servo angeschlossen
  Serial.begin(9600);
  //pinMode (ir_sensor_PIN_links, INPUT);
  //pinMode (ir_sensor_PIN_rechts, INPUT);
  myservo.write(90);
  delay (5000);
}

void loop()
{
  myservo.write(pos);                   // sagt dem Servo, in welche Position sich drehen soll     
  delay(15);                            // wartet 15 Millisekunden  
  
    int dis_links=sharp_links.distance();  // this returns the distance to the object you're measuring (mit linkem Sensor)
    int dis_rechts=sharp_rechts.distance();// this returns the distance to the object you're measuring (mit rechtem Sensor)
 
    Serial.print("Time taken (ms): ");
    Serial.print(millis());
    Serial.print(";");
    Serial.print("Einheitssprung; ");
    Serial.print(pos-90);  
    Serial.print(";");
    Serial.print("Mean distance left sensor; ");  // returns it to the serial monitor
    Serial.print(dis_links);
    Serial.print(";");
    Serial.print("Mean distance right sensor; ");  
    Serial.print(dis_rechts);
    Serial.println(";");
}

Fazit/Reflexion

Die vorgegebene Aufgabenstellung wurde bestmöglichst bearbeitet. Somit konnte ein zufriedenstellendes Sensorkonzept ausgearbeitet und getest, ein Regelkreis entwickelt und eine erste Sprungantwort aufgenommen werden.
Aufgrund teilweise unzureichender Dokumentation und fehlerhafter Verdrahtungen von Sensoren und Aktoren sowie defekten Potentiometern mussten einige Reperaturen und Änderungen vorgenommen werden. Diesbezüglich konnte man, zudem dass es noch kein fertiges Sensorkonzept gab auch nicht von einem fertigen Versuchsaufbau sprechen.
Der Projekteinstieg und die strukturiert geplante Vorgehensweise geriet durch die gerade gennanten Dinge ein wenig ins Stocken. Zur nicht kompletten Fertigestellung des Projektes trugen ebenfalls die nicht erschienen aber eingeplanten Personalressourcen sowie der Mangel an Lötplätzen (einer für sämtliche Labor-/Projektteams)bei.
Für kommende Projektteams sollte man einen weiteren Arduino zur Verfügung stellen, da nur einer mit 50Pol-Substecker als Schnittstelle, für 3 Projekte vorhanden ist. Alternativ sollten die Teams früh genug darüber informiert werden, sodass man sich um einen eigenen Arduino und vorallem dessen Anbindung an die Hardware kümmern kann. Hierfür waren in diesem Falle jedoch die Zeitressourcen zu begrenzt.

Das Projekt ist letztendlich noch nicht abgeschlossen und bedarf noch weiterer Ausarbeitung und Korrekturen:

  • angepassten Sensorhalter fertigen und montieren
  • 2 Potentiometer reparieren
  • Verdrahtung optimieren
  • Schaltplan aktualiesieren
  • Systemidentifikation der Übertragungsfunktion (Schwingungsmethode nach Ziegler/Nichols die Parameter zur Berechnung der P-, I- und D-Anteile ermitteln)
  • Bestehendes Regler-Programm optimieren
  • verschiedene Regelansätzen testen


Autor: Jan Völlmecke
Youtube-Video:Video Projekt Ballbalncierer