Esempio n. 1
0
class Controls:
    def __init__(self):
        self.motor = PWM(0)
        self.servo = PWM(1)

        self.motor.export()
        self.servo.export()

        self.motor.period = 20000000
        self.servo.period = 20000000

        self.motor.enable = True
        self.servo.enable = True

        self.neutral()

    def move(self, speed):
        """
        0 <= speed <= 1
        where 0 is stopped
              1 is full speed
        """
        speed = interpolate_01(STOP_DUTY, FASTEST_DUTY, speed)
        self.motor.duty_cycle = int(speed)

    def turn(self, angle):
        """
        -1 <= angle <= +1
        where -1 is left
               0 is center
              +1 is right
        """
        # -angle because LEFT_DUTY > RIGHT_DUTY but want -1 to mean LEFT
        angle = interpolate_pm1(LEFT_DUTY, RIGHT_DUTY, -angle)
        self.servo.duty_cycle = int(angle)

    def neutral(self):
        self.move(STOP)
        self.turn(CENTER)

    def test(self):
        self.neutral()

        self.turn(LEFT)
        time.sleep(.5)

        self.turn(RIGHT)
        time.sleep(.5)

        self.turn(CENTER)
        time.sleep(.5)

        self.move(.15)
        time.sleep(1)

        self.move(STOP)
Esempio n. 2
0
def tracer_grille(grille, agrandissement, angle, origine):
    n = 4000
    calibre = 0.1
    pwm_X = PWM(0)
    pwm_Y = PWM(
        1)  # il n'existe que 2 canaux pour implementer les PWMs (0 et 1)
    pwm_X.export()
    pwm_Y.export()
    pwm_X.period = 100000  # les unites sont en nanosecondes, ainsi dans cet exemple la periode vaut 100000*1ns = 100 us
    pwm_Y.period = 100000

    GPIO.setmode(
        GPIO.BOARD)  # On lit les pattes dans l'ordre classique en électronique
    GPIO.setup(35, GPIO.OUT)  # La broche 35 est configurée en sortie

    ##La fréquence max du lever/baisser de stylo et 4Hz. Donc 250ms.

    ###    Ecriture de la grille

    for i in range(0, len(grille)):
        for j in range(0, len(grille[0])):

            if (grille[i][j] != 0):

                seq_chiffre = choix(grille[i][j], i, j, agrandissement, angle)

                x = seq_chiffre[0]
                y = seq_chiffre[1]
                haut = seq_chiffre[2]
                for k in range(0, len(x)):
                    x[k] += origine[0] * calibre
                    y[k] += origine[1] * calibre

                stylo_haut()

                for k in range(0, len(x)):
                    if (k != 0):
                        lever_stylo(haut[k], haut[k - 1])

                    pwm_X.duty_cycle = int(x[k] * pwm_X.period / 3.3)
                    pwm_Y.duty_cycle = int(y[k] * pwm_Y.period / 3.3)
                    pwm_X.enable = True
                    pwm_Y.enable = True
                stylo_haut()

#Lorsque l'on a termine avec la table tracante
    pwm_X.enable = False  # On desactive la PWM
    pwm_Y.enable = False
    pwm_X.unexport()
    pwm_Y.unexport()
    GPIO.cleanup(
    )  # A la fin du programme on remet à 0 les broches du Rasberry PI
    return (0)
Esempio n. 3
0
def calibrage():
    GPIO.setmode(
        GPIO.BOARD)  # On lit les pattes dans l'ordre classique en électronique
    GPIO.setup(35, GPIO.OUT)  # La broche 35 est configurée en sortie
    pwm_X = PWM(0)
    pwm_Y = PWM(
        1)  # il n'existe que 2 canaux pour implementer les PWMs (0 et 1)
    pwm_X.export()
    pwm_Y.export()
    pwm_X.period = 100000  # les unites sont en nanosecondes, ainsi dans cet exemple la periode vaut 100000*1ns = 100 us
    pwm_Y.period = 100000
    GPIO.output(35, GPIO.HIGH)
    for i in range(0, int(pwm_Y.period / 5)):
        pwm_Y.duty_cycle = 5 * i
        pwm_Y.enable = True

    for i in range(0, int(pwm_X.period / 5)):

        pwm_X.duty_cycle = 5 * i
        pwm_X.enable = True

    for i in range(0, int(pwm_Y.period / 5)):
        pwm_Y.duty_cycle = pwm_Y.period - 5 * i
        pwm_Y.enable = True

    for i in range(0, int(pwm_X.period / 5)):
        pwm_X.duty_cycle = pwm_X.period - 5 * i
        pwm_X.enable = True

    pwm_X.enable = False
    pwm_Y.enable = False
    stylo_haut()
    time.sleep(1)
    pwm_X.duty_cycle = int(pwm_X.period / 2)
    pwm_X.enable = True
    time.sleep(1)

    camera = picamera.PiCamera()
    camera.capture('calibrage.jpg')
    time.sleep(1)
    pwm_X.enable = False

    pwm_X.unexport()
    pwm_Y.unexport()
    GPIO.cleanup()
    return 1
Esempio n. 4
0
class Motion:
    _enabledPin = 6

    def __init__(self):
        self._speed = 0
        self._direction = 0
        self._enabled = False

        self._enabledOutput = DigitalOutputDevice(self._enabledPin)
        self._speedPwm = PWM(0)  # pin 12
        self._directionPwm = PWM(1)  # pin 13

        self._speedPwm.export()
        self._directionPwm.export()

        time.sleep(1)  # wait till pwms are exported

        self._speedPwm.period = 20_000_000
        self._directionPwm.period = 20_000_000

    def enable(self):
        self._updatePwm()
        self._speedPwm.enable = True
        self._directionPwm.enable = True
        self._enabledOutput.value = 1

    def disable(self):
        self._enabledOutput.value = 0
        self._speedPwm.enable = False
        self._directionPwm.enable = False

    def set_values(self, speed=None, direction=None):
        self._speed = speed if speed is not None else self._speed
        self._direction = direction if direction is not None else self._direction
        self._updatePwm()

    def _updatePwm(self):
        self._speedPwm.duty_cycle = _translate_duty_cycle(
            self._speed, speed_offset, speed_scale)
        self._directionPwm.duty_cycle = _translate_duty_cycle(
            self._direction, direction_offset, direction_scale)
Esempio n. 5
0
class Servo:
    duty_min = 900000
    duty_max = 2790000
    duty_range = []
    pwm = []

    def __init__(self):
        self.duty_scale = (self.duty_max - self.duty_min) / 100
        self.pwm = PWM(0)
        self.pwm.export()
        self.pwm.inversed = False
        self.pwm.period = 20000000
        self.pwm.duty_cycle = 2000000
        self.pwm.enable = True

    def set_value(self, value):
        value = numpy.clip(value, 0, 100)
        scaled = int(value * self.duty_scale) + self.duty_min
        self.pwm.duty_cycle = scaled

    def disable(self):
        self.pwm.enable = False
Esempio n. 6
0
from pwm import PWM
pwm0 = PWM(0)
pwm1 = PWM(1)
pwm0.export()
pwm1.export()
pwm0.period = 20000000
pwm1.period = 20000000
pwm0.duty_cycle = 1000000
pwm0.enable = False
pwm1.duty_cycle = 1465000
pwm1.enable = False