Changed structure

This commit is contained in:
Dlr Rpi
2025-11-06 16:20:44 +01:00
parent 7bd18d09ac
commit aeeb78bf98
5 changed files with 31 additions and 145 deletions

View File

@@ -1,11 +1,5 @@
"""Helpers for building moving mirrors."""
from adafruit_servokit import ServoKit
class Board:
def __init__(self, channels=16, frequency=50):
self.kit = ServoKit(channels=channels, frequency=frequency)
class Motor:
"""Model a type of servo motor."""
@@ -13,42 +7,40 @@ class Motor:
MAX_PULSE = 2500
MIN_PULSE = 500
COVERAGE = 180 # Total degree of freedom in degrees
AREA = MAX_PULSE - MIN_PULSE
OFFSET = 2 # In degrees a constant to be added
OFFSET = 0 # In degrees a constant to be added
SCALE = 1 # Scaling
# Used for ids
count = 0
def __init__(self, pi, pin, angle=0):
def __init__(self, board, angle=0):
self.board = board
self.id = Motor.count; Motor.count += 1
self.pi = pi # Local pi instance
self.pin = pin
self.angle = angle
self.offset = Motor.OFFSET # Fine grained controls over every motor
self.coverage = Motor.COVERAGE
self.scale = Motor.SCALE
# Initialization
self.set()
def angle_to_pulse(self, angle):
return min(max(Motor.MIN_PULSE, (Motor.MIN_PULSE + Motor.AREA * angle/Motor.COVERAGE + self.offset) * self.scale), Motor.MAX_PULSE)
# Update the motor position on hardware
def set(self):
self.pi.set_servo_pulsewidth(self.pin, self.angle_to_pulse(self.angle))
self.board.kit.servo[self.id].angle = self.angle * self.scale + self.offset
def safe_set_angle(angle=0, sleep=0.01, offset=1):
kit.servo[NUM].angle = angle + offset
time.sleep(sleep)
kit.servo[NUM].angle = angle
def set_angle(self, angle):
self.angle = angle
self.angle = min(self.coverage, max(0, angle)) # Double check bad
self.set()
def __str__(self):
return f"Motor {self.id} is set at {self.angle} degrees."
def __del__(self):
self.pi.set_servo_pulsewidth(self.pin, 0)
def inc(self, inc):
self.angle += inc
self.angle = min(max(self.angle, 0), Motor.COVERAGE) # Clip