Coordoner moteur pas à pas et raspicam

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Coordoner moteur pas à pas et raspicam

Message par Eddie » dim. 12 avr. 2015 11:44

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:
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Coordoner moteur pas à pas et raspicam

Message par Manfraid » dim. 12 avr. 2015 11:49

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)
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Coordoner moteur pas à pas et raspicam

Message par Manfraid » dim. 12 avr. 2015 13:31

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)


NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Coordoner moteur pas à pas et raspicam

Message par Eddie » lun. 13 avr. 2015 12:03

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) ?
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Coordoner moteur pas à pas et raspicam

Message par Manfraid » lun. 13 avr. 2015 12:28

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)


NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Coordoner moteur pas à pas et raspicam

Message par Eddie » mar. 14 avr. 2015 18:17

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 ?
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Coordoner moteur pas à pas et raspicam

Message par Eddie » mar. 14 avr. 2015 18:19

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...
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Coordoner moteur pas à pas et raspicam

Message par Manfraid » mar. 14 avr. 2015 19:00

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
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Coordoner moteur pas à pas et raspicam

Message par Manfraid » jeu. 16 avr. 2015 11:01

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]]
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Coordoner moteur pas à pas et raspicam

Message par Eddie » jeu. 16 avr. 2015 17:34

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
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

Répondre

Retourner vers « Python »