Page 2 sur 6

Re: Coordoner moteur pas à pas et raspicam

Posté : dim. 12 avr. 2015 11:44
par Eddie
Oui j'ai déjà essayé mais pas facile de trouver vraiment ce qu'on veut... L'on trouve des prog de l'un ou de l'autre mais pas des 2 à la fois.
Comme dirait l'autre j'suis pas faignant mais partisan du moindre effort :mrgreen:

C'est quoi une class python ? :oops:

Re: Coordoner moteur pas à pas et raspicam

Posté : dim. 12 avr. 2015 11:49
par Manfraid
je te conseille de lire ceci c'est un excellent moyen d'apprendre python, et j'y vais encore cela me sert aussi de pense bête

alors en gros un class c'est un objet, par exemple dans ton projet tu pourrais avoir une class moteur, est c'est celle si qui s'occupera de faire bouger ton moteur, et dans le programme principale du utilisera cette class juste pour dire au moteur fait 100 pas a droite ou 200 a gauche (c'est un exemple)

Re: Coordoner moteur pas à pas et raspicam

Posté : dim. 12 avr. 2015 13:31
par Manfraid
voici un exemple de class pour un moteur pas à pas, je l'ai fait vite fait, elle ne fonctionne peu être pas, mais je n'ai rien chez moi pour pouvoir la tester

Code : Tout sélectionner

#!/usr/bin/env python

 

#import global
import RPi.GPIO as GPIO
from time import sleep,time
#import pour comportement proche de python3
from __future__ import (unicode_literals, absolute_import,
                        print_function, division)


class MotorPaP(object):
    """ class pour la gestion d'un moteur pas a pas
    """
    seq = [[GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.LOW],
       [GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT],
       [GPIO.LOW,GPIO.LOW,GPIO.LOW,GPIO.HIGHT],
       [GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.HIGHT]]
    debug = False

    def __init__(self,pins=[17,22,23,24],revolution=4096,rpm=10):
        """initialisation de la class avec les pins pour le moteur"""
        self.pins = pins
        self.rpm = rpm
        self.revolution = revolution
        #remise a zero des sortie
        self.InitOutput()
        #temp de pause entre chaque pas
        self.pause = 60/(revolution*rpm)

    def InitOutput(self):
        for pin in self.pins:         
            GPIO.setup(pin,GPIO.OUT)
            GPIO.output(pin, GPIO.LOW)

    def ClearOutput(self):
        for pin in self.pins:         
            GPIO.output(pin, GPIO.LOW)
        GPIO.Cleanup()
    def set_all_pins_low(self):
        for pin in self.pins:
            GPIO.output(pin, GPIO.LOW)  
      
    def log(self,msg):
        if self.debug:
            print(msg)

    def _setstep(self,pins):
        for i in range(len(self.pins)):
            GPIO.output(self.pins[i],pins[i])
    
    def move(self,nbstep,sens=1):
        if sens < 0:
            self.seq.reverse()
        for i in range(nbstep):
            p = self.seq.pop(0)
            self._setstep(p)
            sleep(self.pause)
            self.seq.append(p)
        if sens < 0:
            self.seq.reverse()        
pour l'utilisé avec ton code cela donnerai

Code : Tout sélectionner

StepPins = [17,22,23,24]
motor = MotorPaP(StepPins)
sequence = [300]*50 # avance de 300pas pour 50 arret

for s in sequence:
    motor.move(s)
    call("raspistill -o myimage_%04d.jpg -tl 3000 -t 22500 -w 800 -h 600", shell=True)



Re: Coordoner moteur pas à pas et raspicam

Posté : lun. 13 avr. 2015 12:03
par Eddie
Merci de passer du temps à mon sujet.

J'ai essayé ton code brut. Cela ne marche pas... Une erreure à chaque ligne ou presque. Je pense que c'est un probleme sur l'alignement des lignes...
Par contre j'ai pas compris comment je dois associer les 2 parties de code (la tienne et la mienne) ?

Re: Coordoner moteur pas à pas et raspicam

Posté : lun. 13 avr. 2015 12:28
par Manfraid
Salut,

voici le code complet que je te propose par contre pas sur non plus qu'il fonctionne

Code : Tout sélectionner

#!/usr/bin/env python

 

#import global
import RPi.GPIO as GPIO
from time import sleep,time
from subprocess import call
#import pour comportement proche de python3
from __future__ import (unicode_literals, absolute_import,
                        print_function, division)


class MotorPaP(object):
    """ class pour la gestion d'un moteur pas a pas
    """
    seq = [[GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.LOW],
       [GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT],
       [GPIO.LOW,GPIO.LOW,GPIO.LOW,GPIO.HIGHT],
       [GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.HIGHT]]
    debug = False

    def __init__(self,pins=[17,22,23,24],revolution=4096,rpm=10):
        """initialisation de la class avec les pins pour le moteur"""
        self.pins = pins
        self.rpm = rpm
        self.revolution = revolution
        #remise a zero des sortie
        self.InitOutput()
        #temp de pause entre chaque pas
        self.pause = 60/(revolution*rpm)

    def InitOutput(self):
        for pin in self.pins:         
            GPIO.setup(pin,GPIO.OUT)
            GPIO.output(pin, GPIO.LOW)

    def ClearOutput(self):
        for pin in self.pins:         
            GPIO.output(pin, GPIO.LOW)
        GPIO.Cleanup()
    def set_all_pins_low(self):
        for pin in self.pins:
            GPIO.output(pin, GPIO.LOW) 
     
    def log(self,msg):
        if self.debug:
            print(msg)

    def _setstep(self,pins):
        for i in range(len(self.pins)):
            GPIO.output(self.pins[i],pins[i])
   
    def move(self,nbstep,sens=1):
        if sens < 0:
            self.seq.reverse()
        for i in range(nbstep):
            p = self.seq.pop(0)
            self._setstep(p)
            sleep(self.pause)
            self.seq.append(p)
        if sens < 0:
            self.seq.reverse()        
            
StepPins = [17,22,23,24]
motor = MotorPaP(StepPins)
sequence = [300]*50 # avance de 300pas pour 50 arret

for s in sequence:
    motor.move(s)
    call("raspistill -o myimage_%04d.jpg -tl 3000 -t 22500 -w 800 -h 600", shell=True)



Re: Coordoner moteur pas à pas et raspicam

Posté : mar. 14 avr. 2015 18:17
par Eddie
Manfraid a écrit :je te conseille de lire ceci c'est un excellent moyen d'apprendre python, et j'y vais encore cela me sert aussi de pense bête

alors en gros un class c'est un objet, par exemple dans ton projet tu pourrais avoir une class moteur, est c'est celle si qui s'occupera de faire bouger ton moteur, et dans le programme principale du utilisera cette class juste pour dire au moteur fait 100 pas a droite ou 200 a gauche (c'est un exemple)
Et faut pas faire une class pour la picam ?

Re: Coordoner moteur pas à pas et raspicam

Posté : mar. 14 avr. 2015 18:19
par Eddie
Manfraid a écrit :Salut,

voici le code complet que je te propose par contre pas sur non plus qu'il fonctionne

Code : Tout sélectionner

#!/usr/bin/env python

 

#import global
import RPi.GPIO as GPIO
from time import sleep,time
from subprocess import call
#import pour comportement proche de python3
from __future__ import (unicode_literals, absolute_import,
                        print_function, division)


class MotorPaP(object):
    """ class pour la gestion d'un moteur pas a pas
    """
    seq = [[GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.LOW],
       [GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT],
       [GPIO.LOW,GPIO.LOW,GPIO.LOW,GPIO.HIGHT],
       [GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.HIGHT]]
    debug = False

    def __init__(self,pins=[17,22,23,24],revolution=4096,rpm=10):
        """initialisation de la class avec les pins pour le moteur"""
        self.pins = pins
        self.rpm = rpm
        self.revolution = revolution
        #remise a zero des sortie
        self.InitOutput()
        #temp de pause entre chaque pas
        self.pause = 60/(revolution*rpm)

    def InitOutput(self):
        for pin in self.pins:         
            GPIO.setup(pin,GPIO.OUT)
            GPIO.output(pin, GPIO.LOW)

    def ClearOutput(self):
        for pin in self.pins:         
            GPIO.output(pin, GPIO.LOW)
        GPIO.Cleanup()
    def set_all_pins_low(self):
        for pin in self.pins:
            GPIO.output(pin, GPIO.LOW) 
     
    def log(self,msg):
        if self.debug:
            print(msg)

    def _setstep(self,pins):
        for i in range(len(self.pins)):
            GPIO.output(self.pins[i],pins[i])
   
    def move(self,nbstep,sens=1):
        if sens < 0:
            self.seq.reverse()
        for i in range(nbstep):
            p = self.seq.pop(0)
            self._setstep(p)
            sleep(self.pause)
            self.seq.append(p)
        if sens < 0:
            self.seq.reverse()        
            
StepPins = [17,22,23,24]
motor = MotorPaP(StepPins)
sequence = [300]*50 # avance de 300pas pour 50 arret

for s in sequence:
    motor.move(s)
    call("raspistill -o myimage_%04d.jpg -tl 3000 -t 22500 -w 800 -h 600", shell=True)


Ça marche pas...
Je cherche désespérément sur le net' mais pas moyen de trouver. J'suis pas le premier à vouloir faire ça quant même ???
C'est chaud Python quant même... J'ai regarder ton lien mais je sais pas par ou commencer...

Re: Coordoner moteur pas à pas et raspicam

Posté : mar. 14 avr. 2015 19:00
par Manfraid
Peu-tu me mettre ce que la console affiche comme message d'erreur, si il y en a un bien sur, et si il y en as pas peu tu me dire ce qui ne va pas plus précisément

Re: Coordoner moteur pas à pas et raspicam

Posté : jeu. 16 avr. 2015 11:01
par Manfraid
J'ai fait une erreur dans mon code a la place de ceci

Code : Tout sélectionner

seq = [[GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.LOW],
       [GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGHT,GPIO.HIGHT],
       [GPIO.LOW,GPIO.LOW,GPIO.LOW,GPIO.HIGHT],
       [GPIO.HIGHT,GPIO.LOW,GPIO.LOW,GPIO.HIGHT]]
mettre

Code : Tout sélectionner

    seq = [[GPIO.HIGH,GPIO.LOW,GPIO.LOW,GPIO.LOW],
       [GPIO.HIGH,GPIO.HIGH,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGH,GPIO.LOW,GPIO.LOW],
       [GPIO.LOW,GPIO.HIGH,GPIO.HIGH,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGH,GPIO.LOW],
       [GPIO.LOW,GPIO.LOW,GPIO.HIGH,GPIO.HIGH],
       [GPIO.LOW,GPIO.LOW,GPIO.LOW,GPIO.HIGH],
       [GPIO.HIGH,GPIO.LOW,GPIO.LOW,GPIO.HIGH]]

Re: Coordoner moteur pas à pas et raspicam

Posté : jeu. 16 avr. 2015 17:34
par Eddie
Ok j'ai repris ton dernier email. Par contre ça bloque à la ligne 10
from __future__ import (unicode_literals, absolute_import,
print_function, division)

SyntaxError

J'ai mis un # pour les 2 lignes afin de voir si pas d'autres erreurs et :
ligne 69 motor = MotorPaP(StepPins)

ligne 32 self.InitOutput()
ligne 38 GPIO.setup(pin,GPIO.OUT)

RuntimeError: please set pins numbering mode using GPIO.setmode (GPIO.BOARD) or GPIO.setmode (GPIO.BCM)

Du coup c'est pas la ligne 26 qui plante ? car c'est là qu'il y'a les n° de pin. Il sont bon et le branchement aussi.
Est-ce que les def doivent être décalés ? Quant je ramène tout à la colonne 1 j'ai plus que l’erreur à la ligne 69 TypeError: object.__new__() takes no parameters