|
|||||||||||||||||||||||||||||||||
Client-Programm für Roboter Erstellen eines Roboter-Projekts CRoboter-Klasse C#-Roboter-Grundgerüst sensorlose Roboter-Steuerung einfache_Sensorabfrage Timergesteuerte_Sensorabfrage Roboter mit Helligkeitssensor |
|
||||||||||||||||||||||||||||||||
|
Im Programmierunterricht
an der Friedrich-Ebert-Schule wird ein Raupenroboter für verschiedene
Projekte eingesetzt. Dazu zählen autonome Steuerungen mit programmierbarer
Logik oder Mikrocontroller. Eine andere interessante Möglichkeit
ist die Steuerung des Roboters vom PC mit Microsofts Visual Studio. Der Roboter hat fest eingebaute Sensoren und Aktoren, mit denen er mit seiner Umwelt interagieren kann:
Zusätzlich können die meisten im Miniboard vorhandenen Baugruppen für Erweiterungen verwendet werden. 2 x Taster, 4 AD-Wandler, 1 DA-Wandler, SiebenSeg-Anzeige, diverse LED's oder optional ein LC-Display. Im Bild unten ist die Verkabelung der einzelnen Roboterbaugruppen gezeigt.
Um die Beispiele nachvollziehen zu können, muss das Programm Microsoft Visual C# 2008 Express Edition von folgendem Downloadlink installiert werden: http://www.microsoft.com/express/vcsharp/#webInstall Client-Programm für den RoboterDie Steuerbefehle vom PC werden über die serielle Schnittstelle übertragen. Ein Clientprogramm auf dem Mikrocontroller des Roboters empfängt die Befehle und führt sie aus. Das Clientprogramm muss auf den Roboter geladen werden: VisualRoboter.hex (Clientprogramm für Mikrocontroller) VisualRoboterX1.hex (mit Support für Kompass-Modul und Nintendo Nunchuk) VisualRoboterX2.hex (mit doppelter Baudrate 19200Baud) Laden Sie die Hex-Datei mit dem Programm Flip auf den Mikrocontroller. (Siehe Beschreibung!) Programmieren des Mikrocontrollers (Beschreibung) Erstellen eines neuen Roboter-ProjektsIm einfachsten Fall wird ein neues Projekt basierend auf einer der Vorlagen erstellt:
1. Möglichkeit:Auf der Startseite von Visual C# wird über 2. Möglichkeit:Kopieren Sie eine der Vorlagendateien (nicht entpacken!!) in den Ordner: "...\Eigene Dateien\Visual Studio 20010\Templates\ProjectTemplates". Dann kann auf der Startseite mit Geben Sie hier der Robotersteuerung einen aussagekräftigen Namen.
Im Projektmappen Explorer sollte danach die nebenstehende Ansicht erscheinen. Die Dateien im einzelnen: 1. Properties: Enthält alle Projekteigenschaften, die für die Programmerstellung benötigt werden. 2. Verweise: Enthält die im Projekt verwendeten Verweise auf Klassendefinitionen 3. Resources: Enhält weitere Dateien wie z.B. Bilder
die verwendet werden. 4. CRoboter.cs: Klassendefinition für die Roboterklasse 5. Form1.cs: Enthält das sichtbare Frontend des Programms
und den zugehörigen Code. In dieser Datei wird überwiegend
gearbeitet.
CRoboter-KlasseDie CRoboter-Klasse ist in der Datei CRoboter.cs definiert. Sie implementiert die Grundfunktionen zur Steuerung des Roboters. Sie muss in jedem Roboterprojekt vorhanden sein. Dort sind die beiden Enumerationstypen mot und Sens
definiert: Diese Typen werden für die Parameterübergabe an, bzw.
von den CRoboter-Methoden benötigt. Das CRoboter-Objekt wird dann mit dem Konstruktor new erzeugt: Die CRoboter-Methoden im einzelnen sind:
C#-Roboter GrundgerüstDie Datei Form1.cs enthält ein leeres Formular. Hier wird der "sichtbare" Teil des Programms, die grafische Benutzeroberfläche, erstellt. Dazu werden Schaltflächen, Listenfelder, Bilder, usw. aus der Toolbox eingefügt.
und das Code-Grundgerüst für jedes Roboterprogramm: Sensorlose Steuerung mit C#Im Folgenden wird gezeigt, wie der Roboter mit einfachen Steuerelementen über die PC-Maus gesteuert werden kann. Öffnen Sie dazu zunächst die Datei Form1.cs. Holen Sie aus der Toolbox ein Button-Steuerelement auf die leere Form.
In den Eigenschaften des Button-Steuerelements können Sie die Text-Eigenschaft und den Namen des Steuerelements verändern. Ändern der Text-Eigenschaft Ändern der Name-Eigenschaft Jetzt ist es an
der Zeit, das Verhalten der Schaltflächen zu programmieren.
In objektorientierten Sprachen bedeutet das, ein bestimmtes Ereigniss
auszuwerten. Für das Button-Steuerelement gibt es sehr viele
mögliche Ereignisse. Wir benötigen das MouseDown-
und das MouseUp-Ereignis. Die Code-Ansicht mit dem Code-Grundgerüst wird geöffnet und der Rumpf der sogenannten Ereignisprozedur wird in den Code eingefügt. Der Name sollte nicht geändert werden, da Visual Studio sonst durcheinder gerät.
Damit der Roboter beim Loslassen der Schaltfläche Vor
stehenbleibt, muss der gleiche Vorgang für das MouseUp-Ereignis
wiederholt werden. Mit dem Unterschied... Probieren Sie selbst! Erzeugen Sie die abgebildeten Schaltflächen mit den Namen: btnVor Aufgabe: Programmieren Sie jeweils die Ereigniss-Prozeduren.
Testen Sie auch die anderen Bewegungsrichtungen und Geschwindigkeiten des Roboters. Ergänzen wir nun das Programm mit einer komfortablen Geschwindigkeitssteuerung.
Fügen Sie aus der Toolbox ein NumericUpDown- und ein Label-Steuerelement
in die Form ein. Machen Sie im Eigenschafts-Dialog des NumericUpDown-Steuerelements die dargestellten Änderungen Gehen Sie in die Code-Ansicht und ändern Sie die btnVor_MouseDown-Prozedur wie abgebildet ab.
Hier wird zunächst eine Ganzzahl-Variable (Integer) angelegt.
Ihr wird dann der Wert des NumericUpDown-Steuerelements (abzurufen
über die Value-Eigenschaft) zugewiesen. Dazu muss der Value-Wert
aber noch in eine Integer-Variable umgewandelt werden. Die Methoden
von System.Convert. können eine Vielzahl von Typkonvertierungen
durchführen. Als nächsten Schritt fügen wir jetzt eine Tastatursteuerung mit den Cursortasten hinzu. Dazu muss Form1 in der Formularansicht angeklickt werden, so dass die Formularereignisse im Eigenschaftenfenster bearbeitet werden können. Fügen Sie dem
Code ein KeyDown-Ereignis hinzu: Der Übergabeparameter e des KeyDown-Ereignisses enthält
unter anderem auch den Tastaturcode (e.KeyValue-Eigenschaft)
der betätigten Taste. Mit der if ... else if ... -Konstruktion
wird abhängig vom Tastaturcode ein jeweils anderer Roboter-Befehl
ausgeführt. Eventuell gibts mit den Cursor-Tasten Probleme. Versuchen SIe
doch die Steuerung über die Tasten w,a,s,d zu realisieren.
Überlegen Sie sich ein kurzes Programm, um die Tastaturcodes
dieser Tasten herauszufinden! Eine andere elegante Möglichkeit für die Auswertung
der Variablen e.KeyValue ist die switch... case...- Konstruktion:
Roboter mit SensorabfrageRichtig interessant wird es natürlich erst, wenn der Roboter seine Sensoren verwendet, um bestimmte Aufgaben selbständig zu erledigen. Im Bild werden die Reflextaster verwendet, um den Roboter auf einer schwarzen Linie fahren zu lassen.
Zum Test der Sensorabfrage erstellen Sie ein neues Projekt aus der Roboter-Vorlage. Fügen Sie 2 Label- und ein Button-Steuerelement wie abgebildet ein. Programmieren Sie die abgebildete
Click-Ereignisprozedur für den Button: Ein Programmlauf ergibt etwa folgendes Ergebnis: Die Variable Sensor ist vom Enum-Typ Sens (Alias Bot) und besteht
genaugenommen aus einem Byte, also 8 Bit. Dabei gilt folgende Reihenfolge
der Bit inherhalb von Sensor: Als Beispiel soll der Roboter den linken Endschalter abfragen und bei Betätigung den Roboter stoppen: Innerhalb der Klammer der if-Anweisung wird der boolsche Wahrheitswert gebildet.
Die Wirkung wird am Beispiel des betätigten Endschalter
Links (zusätzlich ist noch RflxL betätigt) gezeigt: Um auf den rechten Endschalter ebenfalls reagieren zu können, kann auf die gleiche Weise vorgegangen werden, oder beide Abfragen können ODER-verknüpft werden. In C# lautet die Formulierung dann so:
Eine etwas kürzere Möglichkeit ist:
Machen Sie sich die Funktion der Abfrage mit Hilfe der folgenden Operatorenliste klar! C# kennt folgende Operatoren für das Bitweise (logische)-Verknüpfen
von Byte-Werten, sowie das Verknüpfen von boolschen Wahrheitswerten:
Timergesteuerte SensorabfrageUm auf Hindernisse schnell reagieren zu können, müssen die Sensoren in kurzen Zeitintervallen abgefragt werden. Dazu wird ein Timer-Steuerelement verwendet. Erstellen Sie zunächst ein neues Projekt und fügen Sie Label- und Checkbox-Steuerelemente, wie abgebildet, in die Form ein. Um das Checkbox-Steuerelement als Schaltfläche darzustellen, stellen Sie dessen Appearance-Eigenschaft auf Button! Das Timer-Steuerelement wird aus der Toolbox auf das Formular gezogen. Es erscheint dann unterhalb des Forms im Komponentendock:
Es werden noch zwei Prozeduren benötigt, um einerseits den
Timer mit "Start/Stopp" zu starten und andererseits bei
jedem Timeraufruf (Tick) die Sensoren abzufragen und deren Wert
anzuzeigen: Aufgaben:
Machen Sie sich die Funktion der Switch-Anweisung
klar! Was passiert, wenn die erste
break-Anweisung weggelassen wird?
Roboter mit HelligkeitssensorenDie beiden LDR-Helligkeitssensoren sind mit den Analogeingängen 2 (Links) und 3 (Rechts) verbunden. Die Abfrage erfolgt über die getAnalogPort(n)-Methode des robo-Objekts. Die Rückgabewerte liegen zwischen 0 (Hell) und 255 (Dunkel). Erstellen Sie zunächst das abgebildete Formular, mit den
Elementen:
In der Timer-Tick-Prozedur werden zunächst zwei Integer-Variablen
(wertLinks und wertRechts) deklariert. In diese Variablen werden
dann nacheinander die Helligkeitswerte der beiden Senoren eingelesen.
Aufgaben:Erstellen Sie eine Robotersteuerung die den Roboter:
|
||||||||||||||||||||||||||||||||
|
Wird fortgesetzt! |
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|