|
Eigenbau : Der Radarturm mit UltraschallsensorModell RadarTurm diesmal in schwarz/rot. Das Modell simuliert einen Radarturm durch Abtasten der Umgebung mit dem Ultraschallsensor des ROBO Explorer. Die erhaltenen Abstandswerte werden in Farbinformationen auf dem "Radarschirm" des Betriebsprogrammes angezeigt - Nah : kleiner 15 cm, Mittel - kleiner 75 cm, Weit - darüber. Das Modell lehnt sich an den alten Radarturm an, auch wenn es gründlich anders aussieht. Das Betriebsprogramm erfüllt die gleiche Aufgabe, wurde aber in C# 2005 und in gleicher Struktur in VB2005 auf Basis der FishFace2005.DLL vollkommen neu entwickelt. Radar-Panel des Modell RadarTurm. Anmerkungen zum Betriebsprogramm in C# 2005Es setzt auf der Vorlage FishRobotWindowsCS siehe auch CS2005
/ VB2005 Seite auf. Verwendet wird die Klasse FishtRobot. Das OpenInterface wurde für
die Nutzung des Ultraschallsensors modifiziert. Zunächst die Interfacebelegung und andere nützliche Konstanten : constDie Instanzierung von FishRobot sieht so aus : FishRobot ft = new FishRobot(new int[,] { { mTurm, 180 }, { mSensor, 99 }}); Die End- und Impulstaster werden in Abhängigkeit der Motoren
intern festvergeben : ft.OpenInterface(IFTypen.ftROBO_first_USB, 0, Distance.UltraSonic); Der Betrieb des Modells läuft in der Routine Action() ab : private void
Action() { rs.Clear(Color.Black); lblPosition.Text = "Bei der Arbeit"; while (!ft.Finish()) { lblStatus.Text = "Home"; ft.MoveHome(); while(ft.MotCntl[iTurm].actPos < ft.MotCntl[iTurm].maxPos && !ft.Finish()){ ft.MoveTo(ft.MotCntl[iTurm].actPos, ft.MotCntl[iSensor].maxPos); ft.MoveDelta(incTurm); ft.MoveTo(ft.MotCntl[iTurm].actPos, 0); ft.MoveDelta(incTurm); } while (ft.MotCntl[iTurm].actPos > 0 && !ft.Finish()) { ft.MoveTo(ft.MotCntl[iTurm].actPos, ft.MotCntl[iSensor].maxPos); ft.MoveDelta(-incTurm); ft.MoveTo(ft.MotCntl[iTurm].actPos, 0); ft.MoveDelta(-incTurm); }}} Eine EndlosSchleife in der der Turm um jeweils incTurm Impuls weiterfährt, dann stoppt damit der Sensor die Umgebung von oben nach unten und dann von unten nach oben abtasten kann. Dazu fährt das Modell zunächst auf die Home-Position (an die Endtaster) und dann in incTurm-Schritten weg vom Endtaster, zwischendurch wird gescannt. In der zweiten while-Schleife gehts dann wieder zurück auf den Endtaster des Turms zu. Die Positionsanzeige erfolgt in einer Event-Routinen, die durch MoveTo/MoveDelta intern ausgelöst wird. private void PositionAusgabe(object sender, int if ((actPos[iTurm] % incTurm) > 0) return string Pos = "Position : " for (int Pos += actPos[i].ToString("000") + " - " }Pos += actPos[actPos.Length - 1].ToString("000"); int dis = ft.GetDistance(dSensor); lblPosition.Text = Pos + " Wert : " + dis.ToString(); if (actPos.Length == 2) { if (dis < disNah) Farbe = new SolidBrush(Color else if (dis < disMittel) Farbe = new SolidBrush(Color else Farbe = new SolidBrush(Color rs.FillRectangle(Farbe, actPos[iTurm] * 2, actPos[iSensor] * 2, 50, 4); }} Im Label lblPosition werden die aktuelle Position und der Distancewert angezeigt. Zusätzlich wird der Distancewert klassifiziert : Nah, Mittel, Weit und farblich codiert in der PictureBox picAnzeige als Rechteck 50 * 4 angezeigt. VB2005 VersionPrivate rs = picAnzeige.CreateGraphics()rs.Clear(Color.Black) Do lblStatus.Text = "Home" ft.MoveHome() Do While ft.MotCntl(iTurm).actPos < ft.MotCntl(iTurm).maxPos And Not ft.MoveDelta(incTurm) ft.MoveTo(ft.MotCntl(iTurm).actPos, 0) ft.MoveDelta(incTurm) Loop Do While ft.MotCntl(iTurm).actPos > 0 And Not ft.MoveTo(ft.MotCntl(iTurm).actPos, ft.MotCntl(iSensor).maxPos) ft.MoveDelta(-incTurm) ft.MoveTo(ft.MotCntl(iTurm).actPos, 0) ft.MoveDelta(-incTurm) Loop Loop Until End Sub Die Action Routine in der VB2005 Version Private If (ActPositions(iTurm) Mod incTurm) > 0 Then Dim Pos As String =Pos &= ft.MotCntl(iTurm).actPos.ToString("000") & Pos &= ft.MotCntl(iSensor).actPos.ToString("000") Dim dis As Integer lblPosition.Text = Pos & " Wert : " & dis.ToString() If ActPositions.Length = 2 If dis < disNah Farbe = New SolidBrush(Color.Red) ElseIf dis < disMittel Farbe = New SolidBrush(Color.Yellow) Else Farbe = New SolidBrush(Color.Green) End rs.FillRectangle(Farbe, ActPositions(iTurm) * 2, ActPositions(iSensor) * 2, 50, 4) End Sub Und hier die VB2005 Version der Event-Routine. Es sieht etwas anders aus, aber einen wirklichen Unterschied gibt es nicht. DownloadDas Betriebsprogramm (VB2005 / C# 2005) ist in UlraRadar.ZIP enthalten. Und noch einen Radarscanner von Johannes HoermannDer Distanzsensor auf dem Radarturm macht eine volle Umdrehung und zeigt dabei die jeweils gemessene Entfernung auf einem Radarschirm winkelgerecht an. Details sind bei http://www.die-hoermaenner.de/johannes/Computer/ft radar.php zu finden. Hier noch ein minimalistischer Aufbau von mir mit Reedkontakt zur Bestimmung des Nullpunktes (Magnet dazu links außen). Das Modell kann ebenfalls mit dem Hoermann-Programm betrieben werden. Stand : 16.01.2011 |