Code programme Picaxe

dje8269

Senior Member
Bonsoir ludo ,

Je te propose avant d'aller plus loin de découpler l'alimentation de tes servo .
Voici un petit schéma : ca te couteras 1 condensateur et une diode rapide . le condo le plus prêt possible de ton servo

Sans titre.jpg

Je ne m'y connais pas trop en servo , mais au vu du prix, ca devrait etre de la qualité quand même ;
Sinon pour le pwm ou pulsout oui ca se ferais en logiciel ( soft) . mais je suis presque sur que si tu decouple correctement tu n'auras plus ces tremblements ; Je vais suivre ton post car j'utilise aussi des servos sur mon projet , et la commande pulsout ou pwm m'interresse , si on obtient de meilleurs resultats !!!
 

ludo0404

Senior Member
Le probleme à prendre en compte, c'est que le servo est relié à un boitier (où se trouve mon circuit) par un cable "jr" de 10-15 cm... Et servo se trouve dans un phare, donc l'ampoule chauffe beaucoup, et y rajouter un condensateur, c'est pas rajouter encore de la chaleur ? Est ce que je peut placer cette diode et ce condensateur dans le boitier, à 15 cm du servo ?
 

dje8269

Senior Member
Bonjour ,

c'est pas rajouter encore de la chaleur ?
Non, ce genre de condo ne chauffe pas . Oui il faudrait le mettre dedans idéalement . Pas collé a l'ampoule bien sur . Sur la datasheet tu devrais trouvé les caractéristiques de t° max . Sinon commence par essayer de le mettre dans ton circuit ( loin), si tu manque de place la diode rapide peut être mise loin elle ( elle n'est pas extrêmement nécessaire). Le condensateur est le plus important .
La meilleure façon c'est de faire quelques tests, avant de fixer définitivement !
 

PieM

Senior Member
@ dje: relire #29

Les servos sont bien alimentés en 6V sur un circuit separé et la 08m2 avec du 5V sur une autre....
Faire une recherche sur servo jitter et il y en a des pages...
En outre, le condensateur sur une alim séparée ne changera rien du tout.
 

ludo0404

Senior Member
@ dje: relire #29
Faire une recherche sur servo jitter et il y en a des pages...
En outre, le condensateur sur une alim séparée ne changera rien du tout.
Y'a d'autres solutions Piem ?

Je doit encoder une autre 08m2 toujours avec deux servo mais une action combiné. Dois je faire un autre sujet ou je vous l'expose ici ?
Voici le type de montage pour cette autre programation : http://www.gotronic.fr/art-support-pan-tilt-dg2b-avec-servos-12404.htm
Je vais juste mettre des servo plus costaud .
 

alainav1

Senior Member
Bonjour,
pour commander cette equipement je le verrai bien commandé par 2 potentiometre .(Un pour chaque mouvement ).

cordialement
Alain
 

PieM

Senior Member
Y'a d'autres solutions Piem ?
Code:
#Picaxe 08M2

low 1,2
pulsout 1,150
pulsout 2,150


do
if pin3=1 then	
		pulsout 1,85  'à modifier pour être à 30° a droite
	else
		pulsout 1,150 'à modifier pour etre en position 0 
endif


If pin4=1 then	
		pulsout 2,215	'à modifier pour être à 30° a gauche
	else
		pulsout 2,150	'à modifier pour etre en position 0 
endif
pause 18
loop
Je vais juste mettre des servo plus costaud
Oui, et attention à la masse mise sur le support, car les servos risquent de ne pas faire long feu. Ce type de montage est parfait pour mettre un capteur à ultrason par exemple mais rien de lourd !
En outre la commande se fait par quoi ? en tout ou rien aussi ?
 

jojojo

Senior Member
Ca, ça fonctionne bien.

Par contre, selon le contexte, les 18ms de pause ne sont pas forcément nécessaire.

Ca marche dans l'autre sens : 20ms MAXI de temps de rafraichisement, pas plus. Mais, si c'est plus souvent, ça géne pas.
 

ludo0404

Senior Member
Code:
#Picaxe 08M2

low 1,2
pulsout 1,150
pulsout 2,150


do
if pin3=1 then	
		pulsout 1,85  'à modifier pour être à 30° a droite
	else
		pulsout 1,150 'à modifier pour etre en position 0 
endif


If pin4=1 then	
		pulsout 2,215	'à modifier pour être à 30° a gauche
	else
		pulsout 2,150	'à modifier pour etre en position 0 
endif
pause 18
loop


Oui, et attention à la masse mise sur le support, car les servos risquent de ne pas faire long feu. Ce type de montage est parfait pour mettre un capteur à ultrason par exemple mais rien de lourd !
En outre la commande se fait par quoi ? en tout ou rien aussi ?

Je vais essayer ce code dés que je retourne voir la machine et te tiendrez au courant merci beaucoup !!

Pour le deuxieme montage, c'est aussi du TOR (exactement les mêmes capteurs..)

Mince pour le poids ! j'ai bien vu que les servo n'étaient pas trés résistant aux 150g de de ce que je fixe dessus.... Je vais essayer on verra ce que ca donne quitte à mettre encore plus gros comme servo.... Déja, j'ai mis des renforcés...

Pour le second :

Lorsque tor 1 et 2 ouverts : servo 1 = position central
servo 2 = position max gauche

Tor 1 fermé : déplacement à gauche de 30° du servo 1
+ deplacement à droite de 15° du servo 2

tor 2 fermé : déplacement à droite de 30° du servo 1
+ déplacement à droite de 15° du servo 2

.......
 

PieM

Senior Member
Pour que les deux commandes se fassent en meme temps, il y a quelque chose à ajouter au code ?
Code:
#Picaxe 08M2

low 1,2
pulsout 1,150
pulsout 2,150


do
if pin3=1 and pin4=1 then	
		pulsout 1,150 'à modifier pour etre en position 0 
		pulsout 2,215 'à modifier pour être à  gauche
endif
if pin3 =0 then
		pulsout 1,185 'à modifier pour être à 30° à gauche
		pulsout 2,115 'à modifier pour être à 15° à droite
endif
if pin4 =0 then
		pulsout 1,95 'à modifier pour être à 30° à droite 
		pulsout 2,115 'à modifier pour être à 15° à droite
endif

loop
 

ludo0404

Senior Member
Bonjour à tous,

Voila mes travaux sont quasiment terminés. Il ne me manque qu'une petite info pour bien maitriser mon module, comment gerer la vitesse de rotation du servo moteur par le code de programmation ? Faut-il ajouter des lignes au code ?
J'aimerais le ralentir.....

Voici mon code :

#Picaxe 08M2

low 1,2
pulsout 1,75
pulsout 2,150


do
if pin3=1 then
pulsout 1,100
else
pulsout 1,75
endif


If pin4=1 then
pulsout 2,125
else
pulsout 2,150
endif
pause 18
loop
 

PieM

Senior Member
Bonjour,

Ah le problème du ralentissement de servo !
Sincèrement, je pense que le faire avec des pulsout progressifs sur picaxe va être un peu la galère !

Je te propose un truc:

Modifier la position de tes servos avec la commande servo qui elle peut être dans une boucle de positionnement progressif. Donc tu règle ta vitesse.
Et une fois que tu es en position, tu annules ta commande servo que tu remplaces avec une boucle pulsout, qui elle t'assure la stabilité une fois en position.
 

ludo0404

Senior Member
Je suis désolé Piem, j'ai pas compris....

¨Peut etre que c'est mon explication qui est pas clair : Je veux que mon servo aille moins vite d'un point 0 au point 1....
(Tu te rappel que je suis un plus que débutant hein ? :) )
 

PieM

Senior Member
SI j'ai bien compris ! ce que je te propose correspond bien à ça. Aller lentement de A à B avec la cde servo, et une fois en place tu reste avec la commande pulsout
 

dje8269

Senior Member
Je ne crois pas que PieM te donneras la réponse toute faite ; Allez je t'aiguille a mon tour .

Actuellement tu place ton servo avec la commande pulsout , qui se répète en permanence dans ton programme , en moins de 20 millisecondes .

Pourquoi moins de 20ms , car c'est le temps que le servo va garder cette position, apres il ne la garde plus . Donc il faut lui répéter toutes les 20ms maximum ( moins ca fonctionne aussi), la position qu'il doit avoir .
Le picaxe , a une commande qui s'appelle "servo" ( regarde sur le manuel) qui permet d'envoyé au servo la position toutes les 20ms , ce la se passe en tache de fond , tu n'as plus de soucié des 20ms( qui sont géré par le picaxe) . si tu change pas la position, il la gardera contrairement à un pulsout. Pour changer la position on utilise la commande " servopos"

Donc l'astuce c'est de faire bouger ton servo , avec la commande servo en tache de fond , qui change progressivement faire la valeur souhaité .
par exemple tu veut aller de 0 à 5 ; tu créer une boucle comme ca :
1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5
Une fois arrivé a 5 tu passe dans une boucle pulsout pour la stabilité ;

je crois que c'est ce que voulais te faire faire PieM ; Allez hop au boulot
 

ludo0404

Senior Member
Quand on cherche un peu on comprend mieux ce que l'on fait. Néanmoins, étant novice, qu'est ce qu'une tache de fond ?
 

dje8269

Senior Member
C'est une tache qui s'effectue en arriére plan ! Un peu comme quand tu reduis une fenetre deton ordinateur, tu la voit pas, mais elle est toujours la. Ou alors comme sur un smartphone, les apps qui tournent en arriére plan quand tu ne les coupent pas .

C'est le même principe . Tu dis au picaxe de dire au servo , met toi a cette position, et le picaxe va tout seul lui envoie la position toute les 20ms, sans que tu le voit
 

dje8269

Senior Member
Ben je sais pas trop, il faudrait que j'y réfléchisse , mais ca devrait ressembler a ca .

Y etant la position du servo voulu
X etant la position du servo

Tu fais une boucle .
dnas cette boucle ,tu incrémente la valeur de ton servo progressivement , jusqu'à atteindre la valeur Y .

Un fois Y atteins tu sort de cette boucle

Tu rentre dans une nouvelle boucle
tu gere ton servo avec plusout tant que Y ne change pas
Si Y change tu sort de cette boucle et rentre dans la première pour atteindre la nouvelle valeur doucement .

etc etc etc ....
 

ludo0404

Senior Member
Merci, c'est plus clair....

Je m'y pencherai plus sérieusement demain mais le code pourrait ressembler à ca :
#Picaxe 08M2

low 1,2
pulsout 1,75
pulsout 2,150


do
if pin3=1 then
servo 1, 80
servo 1,90
servo 1,100
pulsout 1,100
else
servo 1,90
servo 1,80
pulsout 1,75
..................................
...............................
....................
 

dje8269

Senior Member
As tu lu le manuel ? il faut y mette un peu du tiens .

la commande servo ne sert que pour initialiser le servo à la bonne position de départ et indique au picaxe qu'il va gerer un servo . tu dois d'abord initialiser tes servo .

ensuite dans ton programme il te faut utiliser la commande "servopos" pour mettre le servo dans la bonne position .

En faisant des paliers de 10 en 10 ton servo va faire des accoups pas propre , commence par un pas de 1 , si c'est trop lent tu mettras un pas de 2 etc ....
 

ludo0404

Senior Member
Voila que je me fait gronder !!

Merci je vais m'y plonger plus sérieusement demain.

Merci pour tout, je reviens vers vous pour vous tenir informé....
 

dje8269

Senior Member
Voila que je me fait gronder !!
Lol ;

Non mais lire le manuel apprends plein de truc au passage . du moins c'est comme ca que j'ai appris ; a faire d'aller voir tel ou tel fonction .

Allez la nuit porte conseils a demain alors
 

ludo0404

Senior Member
Je viens d'essayer ca et ca ne ralenti pas le servo....

#Picaxe 08M2

low 1,2
pulsout 1,75
pulsout 2,150


do
if pin3=1 then
servopos 1,76
servopos 1,77
servopos 1,78
servopos 1,79
servopos 1,80
servopos 1,81
servopos 1,82
servopos 1,83
servopos 1,84
servopos 1,85
servopos 1,86
servopos 1,87
servopos 1,88
servopos 1,89
servopos 1,90
servopos 1,91
servopos 1,92
servopos 1,93
servopos 1,94
servopos 1,95
servopos 1,96
servopos 1,97
servopos 1,98
servopos 1,99
pulsout 1,100
else
pulsout 1,75
endif
J'ai faut ?
 

dje8269

Senior Member
essaie u ntruc comme ca pour te donner une idée :

Code:
#Picaxe 08M2


symbol position = b1
 low 1,2


position = 75

servo 1,position


 do
 if pin3=1 then


do  
	inc position
pause 10
	servo 1,position
	
loop while position<100


end if

loop
 

dje8269

Senior Member
Oui mais c'est pas si simple ralentir un servo , il faut le ruser . il faut lui dire d'aller a des valeurs intermédiaires pour le ralentir.

J'ai du mal avec tes noms de broche , sur le schéma ou est branché ton servo disons le 1 .
Sans titre.jpg
 

dje8269

Senior Member
mise à jour :
ca ne fonctionnera pas comme t veux hein .... c'est fais exprès , pour te laisser bosser un peu . Dis moi ce que tu remarque si le programme fonctionne
Code:
#Picaxe 08M2


symbol position = b1



position = 75

servo C.1,position


 do
 if pinC.4=1 then

	do  
		inc position 
		pause 10
		servopos C.1,position
		
	loop while position < 100


	do
	pulsout 1,100
	loop while pinC.4 = 1
end if 

position = 75
servopos C.1, position


loop
 
Top