From d680fc0dfd9ebcf31a6c16c20385867b5b267c3f Mon Sep 17 00:00:00 2001 From: Steven Tracey Date: Sat, 1 Apr 2023 13:08:40 -0400 Subject: [PATCH] Done! --- .idea/.gitignore | 8 ++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 ++ .idea/other.xml | 6 + .idea/pythonProject.iml | 19 +++ .idea/vcs.xml | 6 + main-comments-debug.py.inactive | 109 ++++++++++++++++++ main.py | 89 ++++++++++++++ 9 files changed, 255 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/other.xml create mode 100644 .idea/pythonProject.iml create mode 100644 .idea/vcs.xml create mode 100644 main-comments-debug.py.inactive create mode 100644 main.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..13fecf3 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e15ec35 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/other.xml b/.idea/other.xml new file mode 100644 index 0000000..a708ec7 --- /dev/null +++ b/.idea/other.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/pythonProject.iml b/.idea/pythonProject.iml new file mode 100644 index 0000000..97538d9 --- /dev/null +++ b/.idea/pythonProject.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/main-comments-debug.py.inactive b/main-comments-debug.py.inactive new file mode 100644 index 0000000..aebf147 --- /dev/null +++ b/main-comments-debug.py.inactive @@ -0,0 +1,109 @@ +import time +from machine import Pin, ADC, PWM + +light_sensor_1 = ADC(26) # Side with servo on left +light_sensor_2 = ADC(27) # Side with servo on right +servo_pwm = PWM(Pin(28, Pin.OUT)) +servo_pwm.freq(50) + +cur_deg = 90 + +reset_button = Pin(14, Pin.IN) +calibrate_button = Pin(15, Pin.IN) +cal_threshold = 0 + +led = Pin('WL_GPIO0', Pin.OUT) +led.high() + +run_avg = [0, 0, 0, 0, 0] + +def servo(degrees): + if degrees > 180: + degrees = 180 + if degrees < 0: + degrees = 0 + max_duty = 2500000 + min_duty = 500000 + new_duty = min_duty + (max_duty - min_duty) * (degrees / 180) + print("Adjusted Position: ", degrees) + servo_pwm.duty_ns(int(new_duty)) + + +def shift_array(arr, num_to_add): + arr.pop(0) + arr.append(num_to_add) + return arr + + +# If this quits prematurely, add required buffer in final else statement +def move_to_light(): + print("Init Move To Light") + global cur_deg + is_facing_light = False + while not is_facing_light: + offset = light_sensor_1.read_u16() - light_sensor_2.read_u16() + if offset > 100 and cur_deg > 0: + cur_deg = cur_deg - 1 + servo(cur_deg) + elif offset < -100 and cur_deg < 180: + cur_deg = cur_deg + 1 + servo(cur_deg) + else: + is_facing_light = True + print("Current Degrees in move to light: ", cur_deg) + time.sleep(.01) + + +# Deg+ = More Light to Right +# Deg- = More Light to Left +# Lower number = more light + +servo(90) + +while True: + if reset_button.value() == 1: + led.low() + cur_deg = 90 + servo(90) + cal_threshold = 0 + run_avg = [0, 0, 0, 0, 0] + while reset_button.value() == 1: + time.sleep(.1) + led.high() + diff = light_sensor_1.read_u16() - light_sensor_2.read_u16() + run_avg = shift_array(run_avg, diff) + if calibrate_button.value() == 1: + print("Button is being pressed") + cal_threshold = int((light_sensor_1.read_u16() + light_sensor_2.read_u16()) / 2) - 50 + print("Sensor 1 Val: ", light_sensor_1.read_u16()) + print("Sensor 2 Val: ", light_sensor_2.read_u16()) + while calibrate_button.value() == 1: + time.sleep(.1) + print("New Threshold: ", cal_threshold) + if light_sensor_1.read_u16() > cal_threshold and light_sensor_2.read_u16() > cal_threshold: + continue + num_over = 0 + first_iter = True + sign = True + for i in run_avg: + cur_num = i + print("Cur Num:", cur_num) + if abs(cur_num) > 150: + if first_iter: + if cur_num >= 0: + sign = True + else: + sign = False + first_iter = False + if (cur_num >= 0 and not sign) or (cur_num < 0 and sign): + num_over = 0 + first_iter = True + break + elif (cur_num >= 0 and sign) or (cur_num < 0 and not sign): + print("Hit") + num_over += 1 + print("Num Over: ", num_over) + print("Sign: ", sign) + if num_over == 5: + move_to_light() + run_avg = [0, 0, 0, 0, 0] diff --git a/main.py b/main.py new file mode 100644 index 0000000..da41221 --- /dev/null +++ b/main.py @@ -0,0 +1,89 @@ +import time +from machine import Pin, ADC, PWM + +light_sensor_1 = ADC(26) +light_sensor_2 = ADC(27) +servo_pwm = PWM(Pin(28, Pin.OUT)) +servo_pwm.freq(50) +cur_deg = 90 +reset_button = Pin(14, Pin.IN) +calibrate_button = Pin(15, Pin.IN) +cal_threshold = 0 +led = Pin('WL_GPIO0', Pin.OUT) +led.high() +run_avg = [0, 0, 0, 0, 0] + + +def servo(degrees): + if degrees > 180: + degrees = 180 + if degrees < 0: + degrees = 0 + max_duty = 2500000 + min_duty = 500000 + new_duty = min_duty + (max_duty - min_duty) * (degrees / 180) + servo_pwm.duty_ns(int(new_duty)) + + +def shift_array(arr, num_to_add): + arr.pop(0) + arr.append(num_to_add) + return arr + + +def move_to_light(): + global cur_deg + is_facing_light = False + while not is_facing_light: + offset = light_sensor_1.read_u16() - light_sensor_2.read_u16() + if offset > 100 and cur_deg > 0: + cur_deg = cur_deg - 1 + servo(cur_deg) + elif offset < -100 and cur_deg < 180: + cur_deg = cur_deg + 1 + servo(cur_deg) + else: + is_facing_light = True + time.sleep(.01) + + +servo(90) +while True: + if reset_button.value() == 1: + led.low() + cur_deg = 90 + servo(90) + cal_threshold = 0 + run_avg = [0, 0, 0, 0, 0] + while reset_button.value() == 1: + time.sleep(.1) + led.high() + diff = light_sensor_1.read_u16() - light_sensor_2.read_u16() + run_avg = shift_array(run_avg, diff) + if calibrate_button.value() == 1: + cal_threshold = int((light_sensor_1.read_u16() + light_sensor_2.read_u16()) / 2) - 50 + while calibrate_button.value() == 1: + time.sleep(.1) + if light_sensor_1.read_u16() > cal_threshold and light_sensor_2.read_u16() > cal_threshold: + continue + num_over = 0 + first_iter = True + sign = True + for i in run_avg: + cur_num = i + if abs(cur_num) > 150: + if first_iter: + if cur_num >= 0: + sign = True + else: + sign = False + first_iter = False + if (cur_num >= 0 and not sign) or (cur_num < 0 and sign): + num_over = 0 + first_iter = True + break + elif (cur_num >= 0 and sign) or (cur_num < 0 and not sign): + num_over += 1 + if num_over == 5: + move_to_light() + run_avg = [0, 0, 0, 0, 0]