RadarTurm TX

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Scan der Umgebung mit ROBO TX und VB 2008 Console

Einfache Beispiele zum Einstieg in VB 2008 .NET

Drehkranz angetrieben durch Motor an M1 mit Endtaster an I1 und Impulstaster an C1. UltraschallSensor (ersatzweise auch Photowiderstand) an I8, sowie rote Lampe an O3

Programm RadarTurmEins :
Der Turm oszilliert zwischen Position 0 und 100. Dabei wird alle 10 Impulse der am Ultraschallsensor gemessene Abstandswert in cm ausgegeben.

Programm RadarTurmZwei :
Wie Eins. Hinzugekommen ist die rote Lampe zur Anzeige von Distanzwerten kleiner 16 cm. Die Messung wurde in eine Sub verlegt.

Programm RadarTurmSechs : 
Wie Zwei, aber modifiziertes Modell für einen ZweiAchsenbetrieb.

Programm RadarTurmEins, der einfachste Fall :

Imports System.Console
Imports
FishFaceTX

Module
RadarTurmEins
  Dim tx As New FishFace()
  
 
Sub Main()
    tx.OpenController(
"COM4")
    WriteLine(
"gestartet")
    
    tx.SetMotor(Mot.M1, Dir.Left)
    tx.WaitForInput(Unv.I1)
    tx.SetMotor(Mot.M1, Dir.Off)

    Dim Schrittweite As Int16 = 10
    Do Until tx.Finish()
      For i As Int16 = 0 To 101 Step Schrittweite
        WriteLine(
"Position : {0:000} Radarwert : {1:0000}", i, tx.GetDistance(Unv.I8))
        tx.StartRobMotor(Mot.M1, Dir.Right, 512, Schrittweite)
        tx.WaitForMotor(Mot.M1)
     
Next
      For i As Int16 = 90 To 0 Step -Schrittweite
        tx.StartRobMotor(Mot.M1, Dir.Left, 512, Schrittweite)
        tx.WaitForMotor(Mot.M1)
        WriteLine(
"Position : {0:000} Radarwert : {1:0000}", i, tx.GetDistance(Unv.I8))
     
Next
    Loop

    tx.CloseController()
    WriteLine(
"FINIS")
    ReadLine()
  End Sub
End
Module

Anmerkungen : 
- Imports für den Zugriff auf die Console (WriteLine, ReadLine) und auf FishFaceTX.DLL (Achtung in My Project einen entsprechenden Verweis einrichten).
- Dim tx : Instanzieren eines FishFace-Objekts
- tx.OpenController : Herstellen einer Verbindung zum TX-Controller (COM-Name mit RoboTxTest.EXE ermitteln).
- tx.SetMotor ...: Der Drehkranz wird zu seiner Home-Position am Endtaster gefahren.
- Do Until : Endlosschleife, Abbruch durch ESC-Taste
- For i : Zwei Schleifen um den Drehkranz in 10er Schritten (Schrittweite) erst nach rechts und dann wieder nach links zu drehen. Bei jeder Zwischenposition wird der aktuelle Abstandswert angezeigt. Zum Positionieren wird die Methode StartRobMotor verwendet, sie erlaubt die Angabe der zu fahrenden Impulse. Bei Linksdrehung wird zusätzlich noch auf den Endtaster abgefragt um dessen Überfahren zu verhindern. Die Methode ist asynchron und beendet sich selber. Um im Programm festzustellen, ob das Ziel erreicht wurde, wird die Methode WaitForMotor eingesetzt.

Program RadarTurmZwei :

Imports FishFaceTX
Module
RadarTurm
Const SchrittWeite = 10
 
Const DistLimit = 16

  Sub
Main()
    tx.OpenController(
"COM4")
    Console.WriteLine(
"gestartet")
    
    tx.SetMotor(Mot.M1, Dir.Left)
    tx.WaitForInput(Unv.I1)
    tx.SetMotor(Mot.M1, Dir.Off)
Next
      For i As Int16 = 100 To 0 StepNext
    Loop

    tx.CloseController()
    Console.WriteLine(
"FINIS")
    Console.ReadLine()
Else
      tx.SetLamp(Out.O3, Dir.Off)

    Console.WriteLine(
"Position : {0:000} Radarwert : {1:0000}", Pos, Distanz)
    tx.StartRobMotor(Mot.M1, Turn, 512, SchrittWeite)
    tx.WaitForMotor(Mot.M1)
Module

Anmerkungen : 
- Aufbau wie Eins. Die Positionierung des Drehkranzes wurde aber in ein eigenes Unterprogramm verlegt. Hier lohnt sich das da der Code in den beiden Schleifen nahezu gleich ist.
- Die Unterschiede zwischen Rechts- und Links-Schleife werden als Parameter übergeben : Turn, Pos
- In der Sub selber ist zusätzlich eine Abfrage auf DistLimit enthalten bei dessen Unterschreitung die rote Lampe ein- sonst aus-geschaltet wird.
- die {0:0000} und {1:0000} dienen der Formatierung der Ausgabe. Hier Parameter 0 und 1 sollen immer drei- bzw. vierstellig, ggf. mit führenden Nullen ausgegeben werden. So stehen die Ausgaben schön untereinander.

RadarTurmSechs : Jetzt wird es etwas komplizierter - Betrieb mit zwei Bewegungsachsen 

Imports FishFaceTX

Module SechsMain
  Dim tx As New FishFace()
  Const motTurm As Mot = Mot.M1
  Const endTurm As Unv = Unv.I1
  Const impTurm As Cnt = Cnt.C1
  Const motSensor As Mot = Mot.M2
  Const endSensor As Unv = Unv.I2
  Const impSensor As Cnt = Cnt.C2
  Const roteLampe As Out = Out.O5
  Const ultraSensor As Unv = Unv.I8
 
Const SchrittWeite = 5
  Const SchrittAufAb = 3
  Const DistLimit = 16

 Sub Main()
    .....
 
End
Sub

 

Sub Distance(ByVal Turn As Dir, ByVal Pos As Int32)
  Dim Distanz As Int32

 tx.SetMotor(motSensor, Dir.Left)
  tx.WaitForInput(endSensor)
  tx.SetMotor(motSensor, Dir.Right)
  
  For i As Int16 = 0 To    If tx.Finish() Then Return
    Distanz = tx.GetDistance(Unv.I8)
    If Distanz < DistLimit Then
      tx.SetLamp(roteLampe, Dir.On)
     Else
       tx.SetLamp(roteLampe, Dir.Off)
     End     Console.WriteLine("Position : {0:000} / {2:000} Radarwert : {1:0000}", _
                                   Pos, Distanz, i)
     tx.SetMotor(motSensor, SchrittAufAb)
   Next
   tx.SetMotor(motSensor, Dir.Off)
   tx.StartRobMotor(motTurm, Turn, 512, SchrittWeite)
   tx.WaitForMotor(motTurm)
  End Sub
End
Module

Anmerkungen :
- Aufbau wie RadarTurmZwei. Anstelle der enums für die Parameter wurden modellspez. Bezeichnungen verwendet : Also stat Mot.M1 - motTurm .. impTurm / impSensor wurden nur der vollständigkeithalber aufgeführt, sie sind den RobMotoren fest zugeordnet.
- Sub Main wie bisher, Erweiterungen sind in Sub Distance untergebracht.
- Zweite Achse (motSensor) : Bewegung zunächst linksdrehend zum EndTaster, dann in SchrittAufAb Messen analog Turmbewegung. Anzeige Distanz / roteLampe wie bisher. Die Positionsausgabe enthält jetzt eine zusätzliche Höhenangabe.
- If tx.Finish() : wurde mehrmals eingefügt, um die Abbrechbarkeit des Programms zu gewährleisten. Do Until mit tx.Finish() allein reicht nicht da die Befehle in den Schleifen von Distance zwar abgebrochen werden, die Schleifen selber aber weiterlaufen.

Download 

Sources enthalten in DrehzahlD

Weitere Radartürme sind auf radar.htm und radarex.htm zu bewundern.

Stand : 02.02.2010