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
C'est quoi une class python ?

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