The UltrasonicSensor is typically used in ranging. This can be very useful for collision avoidance or proximity notification. MRL's event driven ranging DOES NOT use the Arduino's library pulseIn. PulseIn is written in a way which will interfere with servos. So this service should provide the capability of moving servos at the same time as finding range.
SRF04
SRF05
The SRF05 can be used with a single pin where the echo & trigger pins are combined.
References
Example code (from branch develop):
#########################################
# UltrasonicSensor.py
# description: ranging sensor
# categories: data, finance
# more info @: http://myrobotlab.org/service/UltrasonicSensor
#########################################
# config
port = "COM15"
# start the service
python = runtime.start("python","Python")
sr04 = runtime.start("sr04", "UltrasonicSensor")
arduino = runtime.start("arduino", "Arduino")
if ('virtual' in globals() and virtual):
virtualArduino = runtime.start("virtualArduino", "VirtualArduino")
virtualArduino.connect(port)
# initializing
arduino.connect(port)
sr04.attach(arduino, 12, 11)
sr04.addRangeListener(python)
def onRange(distance):
print "distance ", distance, " cm"
# event driven ranging
# start ranging for 5 seconds - the publishRange(distance) will be
# called for every attempt to range - this SHOULD NOT INTERFERE WITH SERVOS
# YAY !
# the even ranging DOES NOT USE Arduino's pulseIn() method -
# at the moment range() & ping() do
sr04.startRanging()
sleep(5)
sr04.stopRanging()
# range can also be retreieved in a blocking call
print "on demand range is ", sr04.range()
# you can also ping - ping does not do any calculations
# it simply returns the duration in microseconds of the ping
print "ping ", sr04.ping(), " mircoseconds"
Example configuration (from branch develop):
!!org.myrobotlab.service.config.UltrasonicSensorConfig
controller: null
echoPin: null
listeners: null
peers: null
timeout: null
triggerPin: null
type: UltrasonicSensor