K (Mode-Pin) |
K |
||
Zeile 239: | Zeile 239: | ||
End Function | End Function | ||
</pre> | </pre> | ||
+ | |||
+ | |||
+ | ==SRF02 Änderung der I2C Slave ID== | ||
+ | |||
+ | Die Slave ID muss nur geändert werden, wenn mehrere SRF02 an einem I2C Bus betrieben werden | ||
+ | sollen oder ein anderer Busteilnehmer zufällig die gleiche Slave ID besitzt. | ||
+ | Es ist zu beachten, dass nur ein SRF02 angeschlossen sein darf, wenn die ID geändert wird. | ||
+ | |||
+ | Die Slave ID wird geändert indem man eine 3 Byte-Sequenz (Hex A0 AA A5) und die neue Slave ID selbst an | ||
+ | das Modul sendet. Die einzelnen Bytes dieser Sequenz müssen an das Register 00 gesendet werden. | ||
+ | Es werden 4 getrennte I2C Schreibbefehle nutzen, wobei der Abstand zwischen jeder Registerbeschreibung 50ms | ||
+ | sein sollte. | ||
+ | |||
+ | Beispiel: Ändern der Standard ID "E0" auf "F2": | ||
+ | |||
+ | <pre> | ||
+ | S E0 00 A0 P | ||
+ | S E0 00 AA P | ||
+ | S E0 00 A5 P | ||
+ | S E0 00 F2 P | ||
+ | </pre> | ||
+ | |||
+ | Die aktuelle Slave-ID ist in der Blinkfrequenz des SRF02 beim Power on codiert. | ||
+ | Die Tabelle findet man im Datenblatt. | ||
==Siehe auch== | ==Siehe auch== |
Aktuelle Version vom 30. März 2015, 17:55 Uhr
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, auch an der RS232 TTL was durchaus ungewöhnlich ist. Die Beispiele sollen demonstrieren 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 anderen RN-Boards übertragen werden (lediglich Ports und Quarztakt anpassen).
Inhaltsverzeichnis
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 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 Mode-Pin bleibt unbeschaltet.
'################################################### '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 '------------- Hilfsfunktionen für SRF02 ---------- Function Srf02_firmware(byval Slaveid As Byte) As Byte Local Firmware As Byte Local Slaveid_read As Byte slaveid_read = Slaveid + 1 I2cstart I2cwbyte Slaveid I2cwbyte 0 'Leseregister festlegen I2cstop I2cstart I2cwbyte Slaveid_read I2crbyte Firmware , Nack I2cstop Srf02_firmware = Firmware End Function Function Srf02_entfernung(byval Slaveid As Byte) As Integer Local Lob As Byte Local Hib As Byte Local Firmware As Byte Local Temp As Byte Local Slaveid_read As Byte slaveid_read = Slaveid + 1 'Messvorgang in starten I2cstart I2cwbyte Slaveid I2cwbyte 0 I2cwbyte 81 'in Zentimetern messen I2cstop Warteaufmessung: Waitms 1 Firmware = Srf02_firmware(slaveid) If Firmware = 255 Then Goto Warteaufmessung I2cstart I2cwbyte Slaveid I2cwbyte 2 'Leseregister festlegen I2cstop I2cstart I2cwbyte Slaveid_read I2crbyte Hib , Ack I2crbyte Lob , Nack I2cstop Srf02_entfernung = Makeint(lob , Hib) End Function End
SRF02 im RS232-Mode
Das nachfolgende Beispiel demonstriert wie einfach sich ein oder mehrere SRF02 Ultraschallsensoren an RN-Control anschließen lassen. Da wir die normale RS232 an RN-Control weiterhin benötigen um Daten und Ergebnisse von RN-Control zum PC zu senden, definieren wir per Software einfach eine neue Software RS232 Schnittstelle auf die Ports PA0 und PA1. Dadurch können die SRF02´s sehr einfach an die orange Stecklemme von RN-Control angeschlossen werden. Wir können uns so den Stecker-Adapter sparen. Es wäre natürlich auch jeder andere freie Port verwendbar.
Der Mode-Pin wird mit GND verbunden.
'################################################### '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
SRF02 Änderung der I2C Slave ID
Die Slave ID muss nur geändert werden, wenn mehrere SRF02 an einem I2C Bus betrieben werden sollen oder ein anderer Busteilnehmer zufällig die gleiche Slave ID besitzt. Es ist zu beachten, dass nur ein SRF02 angeschlossen sein darf, wenn die ID geändert wird.
Die Slave ID wird geändert indem man eine 3 Byte-Sequenz (Hex A0 AA A5) und die neue Slave ID selbst an das Modul sendet. Die einzelnen Bytes dieser Sequenz müssen an das Register 00 gesendet werden. Es werden 4 getrennte I2C Schreibbefehle nutzen, wobei der Abstand zwischen jeder Registerbeschreibung 50ms sein sollte.
Beispiel: Ändern der Standard ID "E0" auf "F2":
S E0 00 A0 P S E0 00 AA P S E0 00 A5 P S E0 00 F2 P
Die aktuelle Slave-ID ist in der Blinkfrequenz des SRF02 beim Power on codiert. Die Tabelle findet man im Datenblatt.