Aus RN-Wissen.de
Version vom 23. November 2006, 12:22 Uhr von Frank (Diskussion | Beiträge) (SRF02 im I2C-Mode)

Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

Noch recht wenig bekannt ist der neue kompakte Ultraschallsensor SRF02. Dieser Sensor stellt eine preiswerte Alternative zu den Sensoren SRF05 oder SRF10 dar, kann jedoch keine kleineren Entfernungen als 15 cm messen. Allerdings reicht der Messbereich von 15cm bis ca. 6m durchaus für viele Anwendungen aus.

Der Sensor lässt sich wahlweise per RS232 oder I2C anschließen. Jeweils bis zu 16 Stück können an einer Schnittstelle betrieben werden. Die Beispiele sollen demonstrierne wie einfach der Sensor an ein RN-Board angeschlossen werden kann. Konkret verwenden wir hier das RN-Control Board, allerdings ist es sehr ähnlich auch bei allen anderen RN- und AVR-Boards. Die Programme sind in Bascom-Basic programmiert und können somit fast ohne Änderung auf alle RN-Boards übertragen werden.

SRF02 Daten

Der erste Sensor aus der SRF-Reihe der mit nur einem Ultraschallwandler auskommt. Dennoch können sich die Leistungen zeigen. Vorallem die Tatsache das sowohl RS232 und I2C-Bus Schnittstelle vorhanden ist dürfte viele Bastler erfreuen.

  • Betriebsspannung 5V (stabilisiert)
  • Stromaufnahme nur 4mA (typisch)
  • Ultraschallfrequenz 40khz
  • Reichweite 15cm bis 6 Meter
  • Schnittstelle RS232 (TTL) und I2C-Bus
  • Ausgabeeinheit wahlweise mm, inch oder uS
  • Einfachste Verwendung, keine Kalibration/Justierung notwendig
  • Größe 24mm x 20mm x 17mm

Srf02 germany.jpg


SRF02 im I2C-Mode

In dem Beispiel wurde ein Adapter verwendet, es ginge natürlich auch ohne indem man ein passendes Kabel für den I2C Stecker bastelt oder aber die Steckleisten auf dem Board RN-Control nutzt.

Der neue Ultraschallsensor SRF02 im I2C Mode über Adapter an RN-Control
'###################################################
'SRF02_rncontrol_i2c_beispiel2.bas
'für
'RoboterNetz Board RN-CONTROL (ab Version 1.1)
'und das SRF02 Ultraschallmodul für Entfernungsmessung
'Datenblatt zu SRF02:
'http://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=357
'Anschlussbeschreibung:
'http://www.roboternetz.de/wissen/index.php/Sensorarten

'Aufgabe:
' Gibt die Firmware-Version vom SRF02 aus und
' anschließend in einer Endlosschleife die
' Entfernung von Objekten in Zentimetern
' Die Entfernung wird 1 mal pro Sekunde über RS232
' ausgegeben
' Hier wird noch genau gescheckt ob ein Sensor die
' Messung schon beendet hat. Dadurch sind noch
' schnellere Messungen als nur 15 pro Sekunde möglich

'Autor: Frank  (Roboternetz)
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'#######################################################



Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer


$regfile = "m32def.dat"
$framesize = 42
$swstack = 42
$hwstack = 42

$crystal = 16000000                                         'Quarzfrequenz
$baud = 9600

Config Scl = Portc.0                                        'Ports fuer IIC-Bus
Config Sda = Portc.1


Const Srf02_slaveid = &HE0                                  'Standard I2C Adresse von SRF02

Dim Entfernung As Integer
Dim V As Byte




   Wait 3                                                   'Warte 3 Sekunden
   I2cinit
   Print "SRF02 Testprogramm von robotikhardware.de"
   Print "SRF02 Ultraschall-Firmware Version:" ; Srf02_firmware(srf02_slaveid)


   V = 1
   Do
     Entfernung = Srf02_entfernung(srf02_slaveid)
     Print "Entfernung:" ; Entfernung ; "cm"
     Wait 1
   Loop


End

SRF02 im RS232-Mode

Der neue Ultraschallsensor SRF02 im RS232 Mode an RN-Control
'###################################################
'SRF02_rncontrol_rs232_beispiel.bas
'für
'RoboterNetz Board RN-CONTROL (ab Version 1.1)
'und das SRF02 Ultraschallmodul für Entfernungsmessung
'Datenblatt zu SRF02:
'http://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=357
'Anschlussbeschreibung:
'http://www.roboternetz.de/wissen/index.php/Sensorarten

'Aufgabe:
' Gibt die Firmware-Version vom SRF02 aus und
' anschließend in einer Endlosschleife die
' Entfernung von Objekten in Zentimetern
' Die Entfernung wird 1 mal pro Sekunde über RS232
' ausgegeben
' Dieses Beispiel nutzt den RS232 Mode vom SRF02
' Um die Ergebnisse auch gleichzeitig an PC
' übermitteln zu können, wird in dem Beispiel eine
' zweite RS232 Schnittstelle per Software eingerichtet.
' Dadurch kann der Sensor (oder auch mehrere) bequem
' an der Steckklemme angeschlossen werden

'Autor: Frank  (Roboternetz)
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'#######################################################



Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer


$regfile = "m32def.dat"
$framesize = 42
$swstack = 42
$hwstack = 42

$crystal = 16000000                                         'Quarzfrequenz
$baud = 9600                                                'Normale Hardware RS232 (hier hängt PC dran)

Open "COMA.0:9600,8,N,2" For Output As #1                   'Port PA0 wird als TX definiert
Open "COMA.1:9600,8,N,2" For Input As #2                    'Port PA1 wird als RX definiert


Const Srf02_slaveid = 0                                     'Standard RS232 Slave ID von SRF02
Dim Entfernung As Integer


   Wait 3                                                   'Warte 3 Sekunden
   Print "SRF02 RS232 Testprogramm von robotikhardware.de"
   Print "SRF02 Ultraschall-Firmware Version:" ; Srf02_firmware(srf02_slaveid)
   Print "PA0 wird TX und PA1 wird als RX genutzt"


   V = 1
   Do
     Entfernung = Srf02_entfernung(srf02_slaveid)
     Print "Entfernung:" ; Entfernung ; "cm"
     Wait 1
   Loop
End



'------------- Hilfsfunktionen für SRF02 ----------


Function Srf02_firmware(byval Slaveid As Byte) As Byte

   Print #1 , Chr(slaveid) ; Chr(93);
   Srf02_firmware = Waitkey(#2)
End Function



Function Srf02_entfernung(byval Slaveid As Byte) As Integer
Local Lob As Byte
Local Hib As Byte

   Print #1 , Chr(slaveid) ; Chr(84);                       'Messvorgang in cm starten
   Inputbin #2 , Hib , Lob                                  'Warte auf Ergebnis
   Srf02_entfernung = Makeint(lob , Hib)
End Function


Siehe auch

Weblinks


LiFePO4 Speicher Test