I’m interested in using the Luminance Sensor from Seed. Unfortunately, there is no Python Example available on GitHub.
As I’m a newbie in coding the code for GrovePi I wonder if there is some how-to or experience available on how to get the lux in Python from this sensor connected to GrovePi.
(You said Any - I don’t know anything about GrovePi or that sensor - take this FWIW)
~/Dexter/GrovePi/Software/Python/grove_read_analog.py to get A2D reading
convert reading to Vout (find in grove pi documentation ? Vout = (reading * 5.0) / 1024 ?
Seeed example seems to suggest you use Vout = (reading * 3.0)/1023
no matter what Vref grove pi uses ??
interpolate using the Seeed example Vout and Lux arrays
(There is a scipy routine for interpolation). Here is how I brute forced an interpolation (same linear algorithm as FMultiMap func in the Seeed example - the data looks logarithmic so using linear interpolation is not the most accurate possible … ):
# #########
# INTERPOLATED ARRAY OBJECT
# (instead of polynomial estimation)
#
# http://www.zovirl.com/2008/11/04/interpolated-lookup-tables-in-python/
class InterpolatedArray(object):
"""An array-like object that provides
interpolated values between set points."""
def __init__(self, points):
self.points = sorted(points)
def __getitem__(self, x):
if x < self.points[0][0] or x > self.points[-1][0]:
raise ValueError
lower_point, upper_point = self._GetBoundingPoints(x)
return self._Interpolate(x, lower_point, upper_point)
def _GetBoundingPoints(self, x):
"""Get the lower/upper points that bound x."""
lower_point = None
upper_point = self.points[0]
for point in self.points[1:]:
lower_point = upper_point
upper_point = point
if x <= upper_point[0]:
break
return lower_point, upper_point
def _Interpolate(self, x, lower_point, upper_point):
"""Interpolate a Y value for x given lower & upper
bounding points."""
slope = (float(upper_point[1] - lower_point[1]) /
(upper_point[0] - lower_point[0]))
return lower_point[1] + (slope * (x - lower_point[0]))
# You use it like this:
# points = ((1, 0), (5, 10), (10, 0))
# table = InterpolatedArray(points)
# print table[3.2] returns 5.5