Octolively sensitivity adjustment
  • I have 36 Octolively panels installed in a coffee table and for safety (because of the size of the array) a piece of 10mm thick tempered glass over the top.

    Without the glass in place over the Octolively panels they work as expected on all sensitivity levels. When the glass is installed the sensitivity of IR sensing drops and I have to increase the sensitivity setting.

    Level 1: nothing sensed.
    Level 2: a few LEDs respond
    Level 3: nearly all LEDs respond but there is the occasional false trigger.
    Level 4: all LEDs respond well but there is a lot of false triggering. Possibly from reflections from adjacent IR emitters (the glass is just above the 10mm LEDs).

    I have had a look at the code but the sensitivity and detection routines are beyond my limited understanding of C.

    Could you give me a few pointers on what to experiment with?

    The couple of candidates I have come up with are:

    #define num_acd_readings 14


    uint8_t cutoffs[] = {100, 50, 35, 20};

    Am I on the right track or barking up the wrong tree?

  • Tempered glass can be tricky, because some types admit less IR light than regular glass. The "active" sensing part of the sensing tends to be diminished, since the IR light that is emitted has to make two round trips through the glass.  

    What we would usually recommend -- if at all possible -- is to add some supplemental light sources outside of the glass, to allow it to be stimulated by passive sensing as well.  Typically, that would be something like a halogen lamp or near-infrared illuminator (the kind used by security cameras; usually LED-based and invisible), pointing at the table top.

    For a programming approach, yes adjust the cutoff values.
  • Thanks for the quick reply Windell. Unfortunately external lighting is not possible in this case.

    Adjusting the cutoffs down [40, 35, 30, 25] has given me a useful sensitivity range for all 4 levels however there is still quite a bit of false triggering. Is there an easy way to increase the filtering by adjusting the existing code?
  • The cutoff value is the setting for the sensitivity adjustment-- there is not any additional default level of filtering beyond setting a threshold on the rate of change of the infrared signal that is detected. Some other things that you can play with in the code, perhaps, include the amount of time spent sampling (num_acd_readings, as you noted), and the constants in the filteredReading function -- which set the number of samples acquired and averaged to determine the slope. Playing with those values might require you to adjust the cutoff values as well.

    Depending on the exact nature of the stray triggers that you are seeing, averaging for a longer period of time before determining the slope might help, or it might not.

    Another physical modification that you might consider would be to add a sleeve around the IR sensors and/or emitters, that helps to narrow their field of view. You could use a piece of black heat-shrink tubing, even not-shrunk-- just like a short, black section of a drinking draw.
  • Success!

    I placed some 6mm long by 6mm ID heatshrink sleeves around the IR sensors (not emitters) and that cured the false triggering problem. I found not shrinking the tubing gave the best sensitivity.

    Thanks for your assistance Windell.

  • Awesome-- glad to hear it.  And, neat enclosure! Does the button switch settings?
  • Yes it does. I had to increase the switch debounce time ("buttonInterval", was 100 now 400) to prevent double hits when the button was pressed. Measuring with my oscilloscope I observed the little through-hole buttons on the boards don't contact bounce at all. However the microswitch under the big button on my table has a debounce time of about 3ms. No trouble with ringing or noise even though all the switches are wired in parallel.