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);


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 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() {
    public void configure(RouteComponent source) { Subscriber() {
            public void apply(Data data, Object ... env) {
                Log.i("MainActivity", "Proximity ADC = " + data.value(Integer.class));
}).continueWith(new Continuation<Route, Void>() {
    public Void then(Task<Route> task) throws Exception {
        return null;