Initial sensor setup
This commit is contained in:
commit
9af1079c6c
3 changed files with 89 additions and 0 deletions
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
smbus2
|
||||||
|
vl53l1x
|
24
src/sensor/tofsensor.py
Normal file
24
src/sensor/tofsensor.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
class Direction(Enum):
|
||||||
|
INDOOR = "indoor"
|
||||||
|
OUTDOOR = "outdoor"
|
||||||
|
|
||||||
|
|
||||||
|
class ToFSensor:
|
||||||
|
def open(self):
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def setDirection(self, direction: Direction):
|
||||||
|
"""Configure sensor to pick up the distance in a specific direction.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def getDistance(self) -> float:
|
||||||
|
"""Returns new distance in cm.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
raise NotImplementedError()
|
63
src/sensor/vl53l1xsensor.py
Normal file
63
src/sensor/vl53l1xsensor.py
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
from sensor.tofsensor import Direction, ToFSensor
|
||||||
|
import VL53L1X
|
||||||
|
|
||||||
|
# Reference: https://github.com/pimoroni/vl53l1x-python
|
||||||
|
#
|
||||||
|
# Left, right, top and bottom are relative to the SPAD matrix coordinates,
|
||||||
|
# which will be mirrored in real scene coordinates.
|
||||||
|
# (or even rotated, depending on the VM53L1X element alignment on the board and on the board position)
|
||||||
|
#
|
||||||
|
# ROI in SPAD matrix coords:
|
||||||
|
#
|
||||||
|
# 15 top-left
|
||||||
|
# | X____
|
||||||
|
# | | |
|
||||||
|
# | |____X
|
||||||
|
# | bottom-right
|
||||||
|
# 0__________15
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
class VL53L1XSensor (TofSensor):
|
||||||
|
def __init__(self) -> None:
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
def open(self):
|
||||||
|
self.sensor = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29)
|
||||||
|
self.sensor.open()
|
||||||
|
|
||||||
|
# Optionally set an explicit timing budget
|
||||||
|
# These values are measurement time in microseconds,
|
||||||
|
# and inter-measurement time in milliseconds.
|
||||||
|
# If you uncomment the line below to set a budget you
|
||||||
|
# should use `tof.start_ranging(0)`
|
||||||
|
# tof.set_timing(66000, 70)
|
||||||
|
self.ranging = 2
|
||||||
|
# 0 = Unchanged
|
||||||
|
# 1 = Short Range
|
||||||
|
# 2 = Medium Range
|
||||||
|
# 3 = Long Range
|
||||||
|
def setDirection(self, direction: Direction):
|
||||||
|
"""Configure sensor to pick up the distance in a specific direction.
|
||||||
|
"""
|
||||||
|
direction_roi = {
|
||||||
|
Direction.INDOOR: VL53L1X.VL53L1xUserRoi(6, 3, 9, 0),
|
||||||
|
Direction.OUTDOOR: VL53L1X.VL53L1xUserRoi(6, 15, 9, 12)
|
||||||
|
}
|
||||||
|
|
||||||
|
roi = direction_roi[direction]
|
||||||
|
|
||||||
|
self.sensor.stop_ranging()
|
||||||
|
self.sensor.set_user_roi(roi)
|
||||||
|
self.start_ranging(self.ranging)
|
||||||
|
|
||||||
|
def getDistance(self) -> float:
|
||||||
|
"""Returns new distance in cm.
|
||||||
|
"""
|
||||||
|
distance = self.sensor.get_distance()
|
||||||
|
|
||||||
|
return distance / 10
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self.sensor.stop_ranging()
|
||||||
|
self.sensor.close()
|
Loading…
Reference in a new issue