UltrasonicSensor

javadoc

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.

The SRF05 can be used with a single pin where the echo & trigger pins are combined.

SRF04 - be careful the SRF04 & SRF05 have GND VCC flipped !

 

 

SRF05


 

Excellent Diagram from our friends @ communityofrobots - orginal post

 

References

Examples:


#file : service/UltrasonicSensor.py edit raw
#########################################
# 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"