Proximity Detector

Proximity sensors are sensors that detect movement/presence of objects without physical contact.

MetaDetector boards come equipped with a TSL2671 proximity detector.

Functions communicating with the detector are defined in proximity_tsl2671.h header file.

Configuration

The TSL2671 detector has 4 configurable parameters that control the sensitivity and distance at which the detector can measure proximity:

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

It is recommended that you use the channel 1 receiver ,and set the transmitter current to 25mA or less if your board is powered by a CR2032 battery. To write your settings to the sensor, call mbl_mw_proximity_tsl2671_write_config after choosing your desired settings.

#include "metawear/sensor/proximity_tsl2671.h"

void configure_proximity(MblMwMetaWearBoard* board) {
    // Set the integration time 5.44ms
    mbl_mw_proximity_tsl2671_set_integration_time(board, 5.44);

    // Use 32 pulses to sense proximity
    mbl_mw_proximity_tsl2671_set_n_pulses(board, 32);

    // Use receiver channel 1
    mbl_mw_proximity_tsl2671_set_receiver_channel(board, MBL_MW_PROXIMITY_TSL2671_CHANNEL_1);

    // Use a transmitter current of 12.5mA
    mbl_mw_proximity_tsl2671_set_transmitter_current(board,
            MBL_MW_PROXIMITY_TSL2671_CURRENT_12_5MA);

    // Write configuration to the sensor
    mbl_mw_proximity_tsl2671_write_config(board);
}

Distance Measurement

Measuring distance is manually triggred by calling mbl_mw_datasignal_read with a proximity data signal. The distance data is expressed as an ADC value that is inversely proportional to distance; the ADC value is represented as an unsigned integer.

#include "metawear/core/datasignal.h"
#include "metawear/sensor/proximity_tsl2671.h"

void proximity_stream(MblMwMetaWearBoard* board) {
    auto signal = mbl_mw_proximity_tsl2671_get_adc_data_signal(board);

    mbl_mw_datasignal_subscribe(signal, [](const MblMwData* data) -> void {
        // cast to uint32_t*
        printf("distance adc= %d\n", *((uint32_t*) data->value));
    });
    mbl_mw_datasignal_read(signal);
}