Distance sensor

The distance sensor extension board is based on the VCNL4040 by Vishay Semiconductors. The sensor uses I2C to communicate with the Picoclick (SDA = GPIO2, SCL = GPIO8). It has an ultra low power voltage regulator on board and can be used to activate the Picoclick by firing an interrupt. The interrupt can be configured via software.

Hardware

Overview

Technical drawing

  • PCB: 18mm x 10mm

  • Thickness: 1mm

  • Mounting holes: 3.2mm

  • Corner radius: 2mm

Schematics

Software

Hardwaretest can be found on GitHub.

#include <Arduino.h>
#include <FastLED.h>
#include <Wire.h>
#include "SparkFun_VCNL4040_Arduino_Library.h"
#include "config.h"

VCNL4040 vcnl;

void setup(){
  pinMode(BUTTON_PIN, INPUT);
  pinMode(ADC_ENABLE_PIN, OUTPUT);
  pinMode(ADC_PIN, INPUT);
  analogReadResolution(12);
  digitalWrite(ADC_ENABLE_PIN, HIGH);

  WiFi.mode(WIFI_OFF);

  FastLED.addLeds<APA102, APA102_SDI_PIN, APA102_CLK_PIN, BGR>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  delay(50);

  set_fastled(CRGB::Blue);
  
  Wire.begin(SDA_PIN, SCL_PIN);

  if(vcnl.begin() == false){
    printf("Device not found. Please check wiring.\r\n");
    set_fastled(CRGB::Red);
    while(1); //Freeze!
  }
}

unsigned long led_timer = millis();
int hue1 = 0, hue2 = 0;
int brightness = 255;
unsigned long t_sensor = 500;

void loop() {
  if(digitalRead(BUTTON_PIN) == 1){
    set_fastled(CRGB::Red);
    delay(1000);
    esp_deep_sleep_start();
  }

  if(millis() >= t_sensor + 100){
    t_sensor = millis();
    unsigned int proxValue = vcnl.getProximity();
    printf("Proximity: %i\r\n", proxValue);
  }

  if(millis() >= led_timer + 15){
    led_timer = millis();
    set_fastled(CHSV(hue1, 255, brightness), CHSV(hue2, 255, brightness));
    hue1 = (hue1 + 1)%255;
    hue2 = (hue1 + 127)%255;
  }
}

Last updated