Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/make gpio ports configurable #72

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 19 additions & 11 deletions brachiograph.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ def __init__(
hysteresis_correction_2=0,
pw_up=1500, # pulse-widths for pen up/down
pw_down=1100,
servo_1_pin=14,
servo_2_pin=15,
servo_3_pin=18,
):

# set the pantograph geometry
Expand All @@ -62,6 +65,10 @@ def __init__(
self.arm_2_centre = arm_2_centre
self.hysteresis_correction_2 = hysteresis_correction_2

self.servo_1_pin = servo_1_pin
self.servo_2_pin = servo_2_pin
self.servo_3_pin = servo_3_pin

if servo_1_angle_pws:
servo_1_array = numpy.array(servo_1_angle_pws)
self.angles_to_pw_1 = numpy.poly1d(
Expand Down Expand Up @@ -90,7 +97,7 @@ def __init__(


# create the pen object, and make sure the pen is up
self.pen = Pen(bg=self, pw_up=pw_up, pw_down=pw_down, virtual_mode=self.virtual_mode)
self.pen = Pen(bg=self, pw_up=pw_up, pw_down=pw_down, pin=self.servo_3_pin, virtual_mode=self.virtual_mode)

if self.virtual_mode:

Expand All @@ -112,13 +119,13 @@ def __init__(
self.rpi = pigpio.pi()

# the pulse frequency should be no higher than 100Hz - higher values could (supposedly) damage the servos
self.rpi.set_PWM_frequency(14, 50)
self.rpi.set_PWM_frequency(15, 50)
self.rpi.set_PWM_frequency(self.servo_1_pin, 50)
self.rpi.set_PWM_frequency(self.servo_2_pin, 50)

# Initialise the pantograph with the motors in the centre of their travel
self.rpi.set_servo_pulsewidth(14, self.angles_to_pw_1(-90))
self.rpi.set_servo_pulsewidth(self.servo_1_pin, self.angles_to_pw_1(-90))
sleep(0.3)
self.rpi.set_servo_pulsewidth(15, self.angles_to_pw_2(90))
self.rpi.set_servo_pulsewidth(self.servo_2_pin, self.angles_to_pw_2(90))
sleep(0.3)

# by default we use a wait factor of 0.1 for accuracy
Expand Down Expand Up @@ -545,8 +552,8 @@ def set_pulse_widths(self, pw_1, pw_2):

else:

self.rpi.set_servo_pulsewidth(14, pw_1)
self.rpi.set_servo_pulsewidth(15, pw_2)
self.rpi.set_servo_pulsewidth(self.servo_1_pin, pw_1)
self.rpi.set_servo_pulsewidth(self.servo_2_pin, pw_2)


def get_pulse_widths(self):
Expand All @@ -558,8 +565,8 @@ def get_pulse_widths(self):

else:

actual_pulse_width_1 = self.rpi.get_servo_pulsewidth(14)
actual_pulse_width_2 = self.rpi.get_servo_pulsewidth(15)
actual_pulse_width_1 = self.rpi.get_servo_pulsewidth(self.servo_1_pin)
actual_pulse_width_2 = self.rpi.get_servo_pulsewidth(self.servo_2_pin)

return (actual_pulse_width_1, actual_pulse_width_2)

Expand All @@ -577,9 +584,10 @@ def park(self):
# self.quiet()


def quiet(self, servos=[14, 15, 18]):
def quiet(self):

# stop sending pulses to the servos
servos=[self.servo_1_pin, self.servo_2_pin, self.servo_3_pin]

if self.virtual_mode:
print("Going quiet")
Expand Down Expand Up @@ -649,7 +657,7 @@ def angles_to_xy(self, shoulder_motor_angle, elbow_motor_angle):

def calibrate(self, servo=1):

pin = {1: 14, 2: 15}[servo]
pin = {1: self.servo_1_pin, 2: self.servo_2_pin}[servo]

servo_centre = {1: self.servo_1_centre, 2: self.servo_2_centre}.get(servo)
servo_angle_pws = []
Expand Down
5 changes: 5 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,8 @@ Changelog
----------

* Added an exception for out-of-reach condition

2020 03 09
----------

* Make the GPIO ports/pins for the servos configurable