-
Notifications
You must be signed in to change notification settings - Fork 225
PING 28015 ultrasonic sensor
Thomas E. Horner edited this page Mar 12, 2019
·
22 revisions
This sensor provides precise, non-contact distance measurements from about 2 cm to 3 meters.
The PING))) sensor works by transmitting an ultrasonic burst and providing an output pulse that corresponds to the time required for the burst echo to return to the sensor. The distance is calculated by measuring the echo pulse width.
Please, take in mind, that sound speed depends on ambient temperature, about 0.6 m/secs per celsius degree, so combine this sensor with a temperature sensor if you want to get accurate measurements or if the sensor can be subjected to a wide temperature range.
Power supply:
- Supply voltage: +5 VDC
- Supply current: 30 mA typ; 35 mA max
What | Comments | |
---|---|---|
Identifier | PING28015 | |
Interface | GPIO | 1 pin |
Provides | distance | cm |
calibration | +/- cm. Default set to -0.6049 cm. | |
Properties | temperature | current ambient temperature |
Datasheet |
-- Attach sensor to GPIO26
s = sensor.attach("PING28015", pio.GPIO26)
-- We tell to PING28015 that ambient temperature are 25º for adjust
-- the sound speed, used internally for calculate the distance from an
-- object
s:set("temperature", 25)
while true do
print("distance: "..s:read("distance"))
tmr.delayms(500)
end
In this example a BME280 sensor is used for set the ambient temperature at regular interval.
-- Create an event for syncronize the ping thread with
-- the temp thread. We don't want to take the first measure
-- until the thread temp sets the ping temp
tempSet = event.create()
-- Attach sensor to GPIO26
ping = sensor.attach("PING28015", pio.GPIO26)
-- Attach BME280 to I2C0, with default values
bme = sensor.attach("BME280", i2c.I2C0, 0)
-- Temperature thread
thread.start(function()
local temp
-- Read current ambient temperature
temp = bme:read("temperature")
-- Set current temperature to ping sensor
ping:set("temperature", temp)
tempSet:broadcast()
while true do
-- Read current ambient temperature
temp = bme:read("temperature")
-- Set current temperature to ping sensor
ping:set("temperature", temp)
-- Read temperature again in 10 seconds
tmr.sleep(5)
end
end)
-- Ping thread
thread.start(function()
tempSet:wait()
while true do
print("distance: "..ping:read("distance"))
tmr.sleepms(500)
end
end)