Beispiel #1
0
    def runControl(self, param):
        s1 = stepper(port=stepperPort, micro_steps=32, hold_current=20, run_current=20, accel_current=20,
                     deaccel_current=20, steps_per_unit=200, speed=8)
        if param == "stop":
            s1.start_relative_move(0)
            s1.hard_stop()
            s1.free()
            return
        micro_steps = self.ids.microstep_slider.value
        speed = self.ids.speed_slider.value / 10
        acceleration = self.ids.acell_slider.value * 10
        deceleration = self.ids.decell_slider.value * 10
        if self.ids.dir_button.source == 'cw.png':
            direction = 1
        else:
            direction = -1

        s1.set_accel(acceleration)
        s1.set_deaccel(deceleration)
        s1.set_micro_steps(int(micro_steps))
        s1.set_speed(speed)
        if self.ids.length_mode_button.text == "Rotations":
            s1.start_relative_move(int(direction * self.ids.length_slider.value))
        else:
            s1.move_steps(int(direction * self.ids.length_slider.value))
Beispiel #2
0
 def back(self):
     global checkingSliders
     s1 = stepper(port=stepperPort, micro_steps=32, hold_current=20, run_current=20, accel_current=20,
                  deaccel_current=20,
                  steps_per_unit=200, speed=8)
     SCREEN_MANAGER.transition.direction = 'right'
     SCREEN_MANAGER.current = "motors"
     checkingSliders = False
     s1.free()
 def slider2(self):
     global s0
     s0 = stepper(port=0,
                  micro_steps=32,
                  hold_current=20,
                  run_current=20,
                  accel_current=20,
                  deaccel_current=20,
                  steps_per_unit=200,
                  speed=self.speedSlider.value)
     s0.start_relative_move(20)
Beispiel #4
0
 def initialize(self):
     global s0
     cyprus.initialize()
     cyprus.setup_servo(1)
     cyprus.setup_servo(2)
     cyprus.set_pwm_values(1,
                           period_value=100000,
                           compare_value=0,
                           compare_mode=cyprus.LESS_THAN_OR_EQUAL)
     cyprus.set_servo_position(2, 0.25)
     s0 = stepper(port=0,
                  micro_steps=32,
                  hold_current=20,
                  run_current=20,
                  accel_current=20,
                  deaccel_current=20,
                  steps_per_unit=200,
                  speed=8)
     s0.set_as_home()
 def fancy_button(self):
     global s0
     txt_var1 = s0.get_position_in_units()
     s0 = stepper(port=0,
                  micro_steps=32,
                  hold_current=20,
                  run_current=20,
                  accel_current=20,
                  deaccel_current=20,
                  steps_per_unit=200,
                  speed=5)
     s0.relative_move(15)
     self.fancyPosition.text = "current position: %d " % s0.get_position_in_units(
     )
     time.sleep(
         5
     )  # some speed values are increased and sleeps time decreased temporarily so code will run faster
     self.ids.speed = 6
     s0.relative_move(10)
     self.fancyPosition.text = "current position: %d " % s0.get_position_in_units(
     )
Beispiel #6
0
    def build(self):
        self.title = "Robotic Arm"
        return sm


Builder.load_file('main.kv')
Window.clearcolor = (.1, .1, .1, 1)  # (WHITE)

cyprus.open_spi()

# ////////////////////////////////////////////////////////////////
# //                    SLUSH/HARDWARE SETUP                    //
# ////////////////////////////////////////////////////////////////

sm = ScreenManager()
arm = stepper(port=0, speed=10)

# ////////////////////////////////////////////////////////////////
# //                       MAIN FUNCTIONS                       //
# //             SHOULD INTERACT DIRECTLY WITH HARDWARE         //
# ////////////////////////////////////////////////////////////////


class MainScreen(Screen):
    version = cyprus.read_firmware_version()
    armPosition = 0
    lastClick = time.clock()

    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)
        self.initialize()
    Class to handle running the GUI Application
    """
    def build(self):
        """
        Build the application
        :return: Kivy Screen Manager instance
        """
        return SCREEN_MANAGER


Window.clearcolor = (1, 1, 1, 1)  # White

s0 = stepper(port=0,
             micro_steps=32,
             hold_current=20,
             run_current=20,
             accel_current=20,
             deaccel_current=20,
             steps_per_unit=200,
             speed=8)


class MainScreen(Screen):
    """
    Class to handle the main screen and its associated touch events
    """
    def start_speed_thread(self):
        Thread(target=self.speed_update).start()

    global need_to_leave
    need_to_leave = False
    global motor_running
Beispiel #8
0
# //                     IMPORT STATEMENTS                      //
# ////////////////////////////////////////////////////////////////

import spidev
import os
from time import sleep
import RPi.GPIO as GPIO
from pidev.stepper import stepper
from Slush.Devices import L6470Registers
spi = spidev.SpiDev()

# Init a 200 steps per revolution stepper on Port 0
s0 = stepper(port=0,
             micro_steps=32,
             hold_current=20,
             run_current=20,
             accel_current=20,
             deaccel_current=20,
             steps_per_unit=200,
             speed=8)

# get current position and print it to the screen
s0.get_position_in_units()
# this tells us that the startup position is currently setup as the "home" position

# move stepper connected to port 0, 5 rotations clockwise
s0.start_relative_move(5)

# get current position and print it to the screen
s0.get_position_in_units()
# note the current position is 5 units - in this case 5 revolutions away from home
Beispiel #9
0
class MainScreen(Screen):
    version = cyprus.read_firmware_version()
    staircaseSpeedText = '0'
    rampSpeed = INIT_RAMP_SPEED
    staircaseSpeed = 40
    gate = False
    staircase = False
    ramp = False
    s0 = stepper(port=0,
                 micro_steps=32,
                 hold_current=20,
                 run_current=20,
                 accel_current=20,
                 deaccel_current=20,
                 steps_per_unit=200,
                 speed=8)
    s0.set_speed(3.75)
    staircase_speed = 100000

    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)
        self.initialize()

    def thread_flip(self):
        y = threading.Thread(target=self.auto, daemon=True)
        y.start()

    def toggleGate(self):
        self.gate = not self.gate
        if self.gate:
            cyprus.set_servo_position(2, .48)
        else:
            cyprus.set_servo_position(2, 0)

        print("Open and Close gate here")

    def toggleStaircase(self):
        self.staircase = not self.staircase
        if self.staircase:
            print(self.staircase)
            cyprus.set_pwm_values(1,
                                  period_value=100000,
                                  compare_value=self.staircase_speed,
                                  compare_mode=cyprus.LESS_THAN_OR_EQUAL)
        else:
            print(self.staircase)
            cyprus.set_pwm_values(1,
                                  period_value=100000,
                                  compare_value=0,
                                  compare_mode=cyprus.LESS_THAN_OR_EQUAL)
        print("Turn on and off staircase here")

    def toggleRamp(self):
        self.ramp = not self.ramp
        if self.ramp:
            self.s0.start_relative_move(29)
        else:
            self.s0.start_relative_move(-29)

        print("Move ramp up and down here")

    def auto(self):
        """""
        while True:
            if cyprus.read_gpio() and 0B0010:
                pass
            else:
                 self.s0.start_relative_move(29)
            if cyprus.read_gpio() and 0B001:
                pass
            else:
        """ ""
        self.toggleRamp()
        time.sleep(7.75)
        self.s0.set_speed(4)
        self.toggleRamp()
        time.sleep(1)
        self.toggleStaircase()
        time.sleep(5.25)
        self.toggleGate()
        time.sleep(1.75)
        self.toggleStaircase()
        time.sleep(.5)
        self.toggleGate()

        print("Run through one cycle of the perpetual motion machine")

    def setRampSpeed(self, speed):
        self.s0.set_speed(speed)
        self.ids.rampSpeedLabel.text = "Ramp Speed: " + "{:.1f}".format(speed)
        print("Set the ramp speed and update slider text")

    def setStaircaseSpeed(self, speed):
        self.staircase_speed = speed * 1000
        self.ids.staircaseSpeedLabel.text = "StairCase Speed: " + str(
            speed) + "%"
        if self.staircase:
            cyprus.set_pwm_values(1,
                                  period_value=100000,
                                  compare_value=(speed * 1000),
                                  compare_mode=cyprus.LESS_THAN_OR_EQUAL)
        print("Set the staircase speed and update slider text")

    def initialize(self):
        cyprus.setup_servo(2)
        cyprus.setup_servo(1)
        print("Close gate, stop staircase and home ramp here")

    def resetColors(self):
        self.ids.gate.color = YELLOW
        self.ids.staircase.color = YELLOW
        self.ids.ramp.color = YELLOW
        self.ids.auto.color = BLUE

    def quit(self):
        print("Exit")
        MyApp().stop()
Beispiel #10
0
class MyApp(App):
    def build(self):
        self.title = "Perpetual Motion"
        return sm


Builder.load_file('main.kv')
Window.clearcolor = (.1, .1, .1, 1)  # (WHITE)

cyprus.open_spi()

# ////////////////////////////////////////////////////////////////
# //                    SLUSH/HARDWARE SETUP                    //
# ////////////////////////////////////////////////////////////////
sm = ScreenManager()
ramp = stepper(port=0, speed=INIT_RAMP_SPEED)

# ////////////////////////////////////////////////////////////////
# //                       MAIN FUNCTIONS                       //
# //             SHOULD INTERACT DIRECTLY WITH HARDWARE         //
# ////////////////////////////////////////////////////////////////


# ////////////////////////////////////////////////////////////////
# //        DEFINE MAINSCREEN CLASS THAT KIVY RECOGNIZES        //
# //                                                            //
# //   KIVY UI CAN INTERACT DIRECTLY W/ THE FUNCTIONS DEFINED   //
# //     CORRESPONDS TO BUTTON/SLIDER/WIDGET "on_release"       //
# //                                                            //
# //   SHOULD REFERENCE MAIN FUNCTIONS WITHIN THESE FUNCTIONS   //
# //      SHOULD NOT INTERACT DIRECTLY WITH THE HARDWARE        //
Beispiel #11
0
        return sm


Builder.load_file('main.kv')
Window.clearcolor = (.1, .1, .1, 1)  # (WHITE)

cyprus.open_spi()

# ////////////////////////////////////////////////////////////////
# //                    SLUSH/HARDWARE SETUP                    //
# ////////////////////////////////////////////////////////////////
sm = ScreenManager()
ramp = stepper(port=0,
               micro_steps=32,
               hold_current=20,
               run_current=20,
               accel_current=20,
               deaccel_current=20,
               steps_per_unit=25,
               speed=INIT_RAMP_SPEED)
ramp.go_until_press(0, 20000)
ramp.set_as_home()

cyprus.initialize()
cyprus.setup_servo(2)
cyprus.set_servo_position(2, 0)

cyprus.setup_servo(1)
cyprus.set_pwm_values(1,
                      period_value=100000,
                      compare_value=0,
                      compare_mode=cyprus.LESS_THAN_OR_EQUAL)
Beispiel #12
0
    def _update_texture_filters(self, image, texture):
        texture.mag_filter = 'nearest'


class ProjectNameGUI(App):
    def build(self):
        return SCREEN_MANAGER


Window.clearcolor = (0, 0, 0, 1)


current = 30


motor_1 = stepper(port=1, speed=100, hold_current=current, run_current=current, accel_current=current,
                  deaccel_current=current)

motor_2 = stepper(port=2, speed=100, hold_current=current, run_current=current, accel_current=current,
                  deaccel_current=current)

motor_3 = stepper(port=3, speed=100, hold_current=current, run_current=current, accel_current=current,
                  deaccel_current=current)

motor_4 = stepper(port=4, speed=100, hold_current=current, run_current=current, accel_current=current,
                  deaccel_current=current)

motor_5 = stepper(port=5, speed=100, hold_current=current, run_current=current, accel_current=current,
                  deaccel_current=current)

motor_6 = stepper(port=6, speed=100, hold_current=current, run_current=current, accel_current=current,
                  deaccel_current=current)
class MainScreen(Screen):
    """
    Class to handle the main screen and its associated touch events
    """
    s0 = stepper(port=0,
                 micro_steps=32,
                 hold_current=20,
                 run_current=20,
                 accel_current=20,
                 deaccel_current=20,
                 steps_per_unit=200,
                 speed=8)
    cyprus.initialize()
    cyprus.setup_servo(1)

    go = False
    direction_pin = 1

    def thread_flip(self):
        y = threading.Thread(target=self.flip, daemon=True)
        y.start()

    def flip(self):
        if cyprus.read_gpio() & 0B0001:
            time.sleep(.05)
            if cyprus.read_gpio() & 0B0001:
                cyprus.set_servo_position(1, 1)
                self.ids.flip.text = "180 Degrees"
            else:
                cyprus.set_servo_position(1, 0)
                self.ids.flip.text = "0 Degrees"

    def pressed(self):

        self.go = not self.go

        if self.go:
            self.s0.run(self.direction_pin, int(self.ids.slider.value))
            self.ids.motor.text = "Motor On"
        else:
            self.s0.softStop()
            self.ids.motor.text = "Motor Off"

    def direction(self):
        if self.go:
            if self.direction_pin == 1:
                self.direction_pin = 0
                self.ids.direction.text = "Clockwise"
                self.s0.run(self.direction_pin, int(self.ids.slider.value))
            else:
                self.direction_pin = 1
                self.ids.direction.text = "Counter-Clockwise"
                self.s0.run(self.direction_pin, int(self.ids.slider.value))

    def motor_thread(self):
        y = threading.Thread(target=self.motor, daemon=True)
        y.start()

    def motor(self):
        self.s0.set_as_home()
        print(self.s0.get_position_in_units())
        self.ids.updates.text = str(self.s0.get_position_in_units())
        self.s0.set_speed(1)
        self.s0.go_to_position(15)
        print(self.s0.get_position_in_units())
        self.ids.updates.text = str(self.s0.get_position_in_units())
        time.sleep(10)

        self.s0.set_speed(5)
        self.s0.relative_move(10)
        self.ids.updates.text = str(self.s0.get_position_in_units())
        time.sleep(8)

        self.s0.relative_move(-25)
        self.ids.updates.text = str(self.s0.get_position_in_units())
        time.sleep(30)

        self.s0.set_speed(8)
        self.s0.relative_move(-100)
        self.ids.updates.text = str(self.s0.get_position_in_units())
        time.sleep(10)

        self.s0.relative_move(100)
        self.ids.updates.text = "Finished: " + str(
            self.s0.get_position_in_units())

    def admin_action(self):
        """
        Hidden admin button touch event. Transitions to passCodeScreen.
        This method is called from pidev/kivy/PassCodeScreen.kv
        :return: None
        """
        SCREEN_MANAGER.current = 'passCode'
Beispiel #14
0
from pidev.MixPanel import MixPanel
from pidev.kivy.PassCodeScreen import PassCodeScreen
from pidev.kivy.PauseScreen import PauseScreen
from pidev.kivy import DPEAButton
from pidev.kivy import ImageButton
from kivy.properties import ObjectProperty
from kivy.uix.slider import Slider
from kivy.animation import Animation
from threading import Thread
from time import sleep

from pidev.Joystick import Joystick
from pidev.stepper import stepper

STEPPER = stepper()

s = Slider(min=-100, max=100, value=25)

MIXPANEL_TOKEN = "x"
MIXPANEL = MixPanel("Project Name", MIXPANEL_TOKEN)

SCREEN_MANAGER = ScreenManager()
MAIN_SCREEN_NAME = 'main'
ADMIN_SCREEN_NAME = 'admin'
NEW_SCREEN = 'NewScreen'


class ProjectNameGUI(App):
    """
    Class to handle running the GUI Application