70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
# SPDX-FileCopyrightText: 2024 John Park for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
'''
|
|
Air Blaster
|
|
Feather RP2040 Prop-Maker with Power Relay FeatherWing and VL53L1X distance sensor
|
|
'''
|
|
|
|
import time
|
|
import board
|
|
import digitalio
|
|
import adafruit_vl53l1x
|
|
|
|
TRIGGER_DISTANCE = 50.0
|
|
triggered = False
|
|
|
|
i2c = board.STEMMA_I2C()
|
|
vl53 = adafruit_vl53l1x.VL53L1X(i2c)
|
|
vl53.distance_mode = 2
|
|
vl53.timing_budget = 100
|
|
|
|
print("VL53L1X Simple Test.")
|
|
print("--------------------")
|
|
model_id, module_type, mask_rev = vl53.model_info
|
|
print("Model ID: 0x{:0X}".format(model_id))
|
|
print("Module Type: 0x{:0X}".format(module_type))
|
|
print("Mask Revision: 0x{:0X}".format(mask_rev))
|
|
print("Distance Mode: ", end="")
|
|
if vl53.distance_mode == 1:
|
|
print("SHORT")
|
|
elif vl53.distance_mode == 2:
|
|
print("LONG")
|
|
else:
|
|
print("UNKNOWN")
|
|
print("Timing Budget: {}".format(vl53.timing_budget))
|
|
print("--------------------")
|
|
|
|
vl53.start_ranging()
|
|
|
|
relay_pin = digitalio.DigitalInOut(board.D10)
|
|
relay_pin.direction = digitalio.Direction.OUTPUT
|
|
relay_pin.value = False
|
|
|
|
def blast(repeat, duration, rate):
|
|
for _ in range(repeat):
|
|
relay_pin.value = True
|
|
print("bang")
|
|
time.sleep(duration)
|
|
relay_pin.value = False
|
|
time.sleep(rate)
|
|
|
|
distance = None
|
|
|
|
while True:
|
|
if vl53.data_ready:
|
|
distance = vl53.distance
|
|
print("Distance: {} cm".format(vl53.distance))
|
|
vl53.clear_interrupt()
|
|
time.sleep(0.1)
|
|
|
|
if distance:
|
|
if distance <= TRIGGER_DISTANCE:
|
|
if not triggered :
|
|
blast(3, 0.01, 0.1) # adjust repeat, duration, rate here
|
|
time.sleep(0.4)
|
|
blast(2, 0.01, 0.2) # adjust repeat, duration, rate here
|
|
triggered = True
|
|
|
|
else:
|
|
triggered = False
|