Proximity Sensor¶
Proximity sensors detect the presence of objects without physically touching them. They are often used as a touch-less switch, automatically turning on faucets and opening doors to name a few examples.
MetaDetector boards are outfitted with the TSL2671 proximity detector, a photoelectric style detector that refelcts an infrared signal off the target object to measure distance. This sensor is accessed with the ProximityTsl2671 interface.
import com.mbientlab.metawear.module.ProximityTsl2671;
final ProximityTsl2671 proximity = board.getModule(ProximityTsl2671.class);
Configuration¶
The TSL2671 device has 4 configurable parameters that control the sensitivity and distance at which the detector can measure proximity. These parameters are set with the interface’s ConfigEditor class.
Parameter |
Description |
---|---|
Integration Time |
How long the internal ADC converts analog input into digital counts |
Pulse Count |
Number of IR pulses emitted for distance measuring |
Receiver Diode |
Which photodiode to use for measure incoming light |
Transmitter Current |
Amount of current driving the IR transmitter |
import com.mbientlab.metawear.module.ProximityTsl2671.ReceiverDiode;
import com.mbientlab.metawear.module.ProximityTsl2671.TransmitterDriveCurrent;
// set integration time to 5.44ms
// use both photodiodes for proximity detection
// use default pulse count of 1,
// set drive current to 25mA
proximity.configure()
.integrationTime(5.44f)
.receiverDiode(ReceiverDiode.BOTH)
.transmitterDriveCurrent(TransmitterDriveCurrent.CURRENT_25MA)
.commit();
Proximity Data¶
Proximity data is an ADC value represented as an unsigned short; the higher the adc value, the closeer the distance to the object.
proximity.adc().addRouteAsync(new RouteBuilder() {
@Override
public void configure(RouteComponent source) {
source.stream(new Subscriber() {
@Override
public void apply(Data data, Object ... env) {
Log.i("MainActivity", "Proximity ADC = " + data.value(Integer.class));
}
});
}
}).continueWith(new Continuation<Route, Void>() {
@Override
public Void then(Task<Route> task) throws Exception {
proximity.adc().read();
return null;
}
});