Télécommande voiture RC + caméra

dje8269

Senior Member
Avant d'essayer ton code qui va fonctionner j'en suis sur ! . Je tiens à te répondre ;
J'avais bien pris en compte les deux coefs . J'ai diviser en deux droites car justement le rapport n'était pas le même .
Pour une j'obtenais :
y = -0.375x + 195 donc y = 195 - ( 0.375x)

et pour l'autre

y = -0.4x + 202 donc y = 202 - (0.4x)

Pourquoi prends tu 134 au lieu de 130 ?

Allez j'essaie ton code tout de suite .
 

dje8269

Senior Member
Ça fonctionne pas , ou du moins , je sais pas si ça fonctionne pour être plus précis .

A l'allumage le servo fais des va et viens sans cesse . même la lumière ne peut plus s'allumée .

je vais simplifier a fond;
Je vous le donne au cas ou .
mais , je tiens a preciser, peut être que ca peut aider que si je met ton autre code , ca fonctionne trés bien , je doute que ce soit un probléme hard.

Code:
#PICAXE 28X2

'########################  Configuration  ########################

Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = A.0
Symbol Option = A.2

dirsA = %0101	'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée


'########################  Initialisation  ########################

setfreq m8	

hi2csetup i2cslave, %10100000		' Met le 28X2 en Esclave

servo B.1,150				'Servo direction en broche B.1, position neutre a 150, MAJ 20ms


'####################################################################################################
'					Programme Principal
'####################################################################################################
do

get 0,b0
get 1,b1
get 2,b2
get 3,b3
get 4,b4
get 5,b5

'#####  Commande TOR  #####

If bit4 = 1  then
	high GYRO
	else
	low gyro
end if


'#####  Commande direction  #####

Select case b3

case  < 120
	b3 = b3*3/8
	b3 = 195 - b3
case > 134
	b3 = b3-134*5/12
	b3 = 150- b3
else
	b3=150
	
end select

servopos 1,b3

loop
 

dje8269

Senior Member
Je dois reconnaître que la réalisation est magnifique.
Dont acte
merci PapyJP , un peu d'encouragement fais du bien . Tu comprends que tout refaire pour dédié une fonction m'embête un peu .

Avec ce code la ; ca fonctionne parfaitement : sauf pour les limites max et min bien sur .

Code:
#PICAXE 28X2

'########################  Configuration  ########################

Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = A.0
Symbol Option = A.2

dirsA = %0101	'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée


'########################  Initialisation  ########################

setfreq m8	

hi2csetup i2cslave, %10100000		' Met le 28X2 en Esclave

servo B.1,150				'Servo direction en broche B.1, position neutre a 150, MAJ 20ms


'####################################################################################################
'					Programme Principal
'####################################################################################################
do

get 0,b0
get 1,b1
get 2,b2
get 3,b3
get 4,b4
get 5,b5

'#####  Commande TOR  #####

If bit4 = 1  then
	high GYRO
	else
	low gyro
end if


'#####  Commande direction  #####

Select case b3
case  < 120
	b3 = b3*5/8
	b3 = 225 - b3
case > 134
	b3 = b3-134*5/8
	b3 = 150 - b3
else
	b3=150
	
end select

servopos 1,b3
loop
Pourquoi prends tu 134 au lieu de 130 ?
Je viens de comprendre pour respecter la marge de sécurité avec le point milieu . 127 plus ou moins 7 . 120---127---134

Par contre , je comprends pas pourquoi marqué 134 , car en réalité c'est 135 non ?
50/(255-135) = 5/12
 
Last edited:

PieM

Senior Member
désolé mais la formule que je t'ai donnée fourni 100 et 195 en mini maxi pour les valeurs 254 à 0 du potard. et sort progressivement de la zone neutre.

concernant ton programme:

definir gyro comme étant pinA.0

ecrire plus simplement get 0,b0,b1,b2,b3,b4,b5

et à la place de :
If bit4 = 1 then
high GYRO
else
low gyro
end if


écrire simplement :

Gyro = bit4
 

PapyJP

Senior Member
Tu comprends que tout refaire pour dédié une fonction m'embête un peu .
Il ne s' agit pas de tout refaire.
Quelques cm² de veroboard supportant le 08M2, relié au CI déjà réalisé par trois fils ( V+, V-, B5 ) + qques petites capas + la commande du HP ( six ou sept composants au total ).
Mettre B5 en TOR et programmer le 08M2 avant l' installation ( puis l'enficher pour pouvoir modifier la mélodie jouée ).
A vous de voir.
 

dje8269

Senior Member
désolé mais la formule que je t'ai donnée fourni 100 et 195 en mini maxi pour les valeurs 254 à 0 du potard. et sort progressivement de la zone neutre.
Je suis entièrement d'accord avec toi ! mais bizarrement ça fonctionne pas , le servo oscille toujours ; j'ai bien regardé le mouvement , il va de gauche a droite de facon impeccable, rapidement et precisement comme si un coup on lui disais va à droite , puis non a gauche puis non à droite etc ..... Une vidéo pourrait vous aidez ?

get 0,b0,b1,b2,b3,b4,b5
Merci pour ca !!

Gyro = bit4
ca je l'avais fais, mais comme j'avais doute j'ai préféré faire un truc très "basic" pour moi ;

Vraiment incompréhensible ce bug !
 

dje8269

Senior Member
A vous de voir.
Je vous propose le tutoiement si vous le permettez . On est entre nous ici .....

L'idée n'est pas tombé dans l'oreille d'un sourd , si je galére trop ou si c'est infaisable , j'y reflechirais . mais quelques cm2 pourront etre trouvé difficillement, mais pas impossbile , je ne perds pas de vue qu'il va aussi y avoir une caméra et un transmetteur vidéo ;

Bon pour le moment la voiture ne tourne pas encore les roues lol
 

PieM

Senior Member
Comprends pas ton servo! tu n'as rien fait d'autre que changer le programme ? ce ne peut pas être un problème de soft ...

Gyro = bit4 n'aurait pas marché ! il faut definir Gyro comme étant pinA.0 et non A.0
 

dje8269

Senior Member
Gyro = bit4 n'aurait pas marché ! il faut definir Gyro comme étant pinA.0 et non A.0
Oui oui PieM, je sais , je l'avais déjà fais sur la première version .

Comprends pas ton servo! tu n'as rien fait d'autre que changer le programme ? ce ne peut pas être un problème de soft ...
J'essaie de cherché par élimination ; Car , je ne vois pas comment cela ne pourrais pas etre un problème de soft . Avec ton code en #218, ca fonctionne parfaitement. je change juste la partie commande direction , et paf ca bug .

Je viens de faire un test . j'ai changé seulement une formule sur les deux .

Code:
Select case b3
case  < 120
	b3 = b3*5/8
	b3 = 225 - b3
case > 134
	[B][COLOR="#FF0000"]b3 = b3-134*5/12[/COLOR][/B]
	b3 = 150 - b3
else
	b3=150
	
end select

servopos 1,b3
Ca fonctionne nickel pour le max du coté changé .
 

dje8269

Senior Member
Code:
Select case b3
case  < 120
	[B][COLOR="#FF0000"]b3 = b3*3/8[/COLOR][/B]
	b3 = 225 - b3
case > 134
	b3 = b3-134*5/12
	b3 = 150 - b3
else
	b3=150
	
end select

servopos 1,b3
dans cette configuration , du cote >134 ca marche nickel , et quand je pousse de l'autre coté <120 , ca bug ....... . On pourrait en déduire qu'il faut cherché de ce coté, mais si le ration n'est pas calculé pour optimiser la course , ca ne devrais pas faire n'importe quoi !
 
Last edited:

dje8269

Senior Member
Quand j'isole la partie > 134 . en supprimant la partie <120 , ca fonctionne impec .

Quand j'isole la partie <120 en supprimant la partie >134 , ca fais le même bug des aller retour cadencés.

c'est incompréhensible , j'ai verifié et re-verifiéla formule y'as pas de problème .

En fait la commande <120 n'est pas prise en compte ??????

Code:
Select case b3

[B]case  < 120
	b3 = 170[/B]
	'b3 = b3*3/8
	'b3 = 195 - b3
case > 134
	b3 = b3-134*5/12
	b3 = 150 - b3
else
	b3=150
	
end select

servopos 1,b3
J'ai juste isolé le calcul, et mis une valeur intermédiaire si <120 , a l'allumage le servo oscille!!!
 
Last edited:

dje8269

Senior Member
Bon allez la nuit porte conseille !

je vais réfléchir a un problème logiciel , plutôt que programme . la formule est forcement bonne, le hard est forcement bon . il ne reste plus qu'a trouvé pourquoi il y as une mauvaise interprétation, config ou autre . je ne vois que ça !!
 

dje8269

Senior Member
Bonjour à tous,

Bon je vous mets une vidéo pour vous rendre compte . Cela pourras peut être vous aidez a m'aider lol . Dnas la première partie je colle le programme de base qui fonctionne , mais on voit qu'a gauche , le levier du servo sort trop de son emplacement , et a droite cela force ( pas sur la plaque d'alu), mais la direction arrive en bout de course et le levier ne peut pas sortir donc sa force . d'ou ma limitation max .
Mais on voit dans la deuxième partie , je met le programme qui me parait bon, et à l'allumage cela déconne, sans même que la télécommande soit allumée .

La nuit m'a pas trop porté conseille . j'ai essayé de changer le nom des variables, en dissociant la variable récupérée dans le scratchpad de la variable position servo , sans succès .
La vraiment ca me dépasse .

Je peux faire tous les tests que vous voulez . Toutes les idées sont le bienvenue

La vidéo plein écran par ici

[video=dailymotion;x1hhl71]http://www.dailymotion.com/video/x1hhl71_bug-servo-direction_tech[/video]
 

dje8269

Senior Member
Dés que je touche quelques choses au calcul <120 ; ca bug .

Par exemple je me suis dis je vais garder le calcul qui fonctionne , et limité le max , et puis c'est tout . l'echelle ne seras pas respectée mais bon .

J'ecris donc ca .

case < 120
b3 = b3*5/8
b3 = 225 - b3 max 195
Ben ca bug , en avant pour des aller-retours ; incroyable

J'ai l'impression de m'approcher, mais je vois pas le problème .

Quand je met :b3 = 225 - b3 max 209 ca bug
Quand je met :b3 = 225 - b3 max 210 ça fonctionne ( toujours sans le bon max )

La voiture est hantée ???!!!???? Je pense que la ca dépasse mes compétences
 

micro_33

New Member
Bonjour

vous utilisez comme variable b3 (0 à 255) or le produit b3*3 dépasse 255 pour toutes les valeurs > 85, donc vous vous retrouvez avec le complément à 255
 

PieM

Senior Member
vous utilisez comme variable b3 (0 à 255) or le produit b3*3 dépasse 255 pour toutes les valeurs > 85, donc vous vous retrouvez avec le complément à 255
Non, les calculs intermédiaires se font sur 16 bits.

@ dje

essaie ce code:

Code:
'#####  Commande direction  #####

Select case b3

case  < 120
	b3 = b3*3/8
	b55 = 195 - b3
case > 134
	b3 = b3-134*5/12
	b55 = 150- b3
else
	b55=150
	
end select

servopos 1,b55
 

dje8269

Senior Member
Merci à vous ,

votre idée était pas mal micro_33, Mais PieM a raison les calculs intermédiaires fonctionne c'est le résultat qui ne doit pas dépasser 255 .

@PieM .
J'y ai crus vraiment .

Voila ce qui se passe :

J'ai téléchargé ton code .
Le servo est resté a droite . J'ai allumé la radio-commande, il est venu au milieu nickel . Je allez a gauche nickel . je suis allez a droite nickel ( avec les bons max) . j'ai fais quelques droite gauche, et paf ca c'est mis a oscillé.
J'ai éteint la voiture puis rallumé , paf ca a oscillé , puis ca s'est arrêté . j'ai touché le joystick ça s'est remis a oscillé .

HELPPPP
 

micro_33

New Member
Bonjour Piem
Merci pour cette précision, je passai en "word" pour ne pas être ennuyé, j'aurai pu faire la manip pour m'en assurer.
Merci encore
 

dje8269

Senior Member
Comme je suis à la recherche du plus petit temps possible, je privilegie les calculs sur bytes plus rapides sur word ; mais je vais essayé tiens ca me coute rien . au point ou j'en suis .
 

PieM

Senior Member
Merci à vous ,

votre idée était pas mal micro_33, Mais PieM a raison les calculs intermédiaires fonctionne c'est le résultat qui ne doit pas dépasser 255 .

@PieM .
J'y ai crus vraiment .

Voila ce qui se passe :

J'ai téléchargé ton code .
Le servo est resté a droite . J'ai allumé la radio-commande, il est venu au milieu nickel . Je allez a gauche nickel . je suis allez a droite nickel ( avec les bons max) . j'ai fais quelques droite gauche, et paf ca c'est mis a oscillé.
J'ai éteint la voiture puis rallumé , paf ca a oscillé , puis ca s'est arrêté . j'ai touché le joystick ça s'est remis a oscillé .

HELPPPP
Il y a un pb sur le joystick ou sa transmission , pas possible autrement !
sur le prog 28X2, mets un sertxd (#b3,cr,lf) (mettre le débit dans la fenêtre à 9600) pour surveiller la valeur b3 après le get
 

dje8269

Senior Member
Il y a un pb sur le joystick ou sa transmission , pas possible autrement !
J'en etais persuadé moi aussi ; c'est impossible autrement et pourtant . dés que je mets le code de base ( sans limitation de max) ca fonctionne impeccable ! je pense vraiment discriminer la transmission ou le joystick non ???? ca fonctionne parfaitement avec un max 210 et ca bug avec un max 209 , c'est quand même bizarre !!!! Peut etre mon picaxe qui as un pete au casque ?

sur le prog 28X2, mets un sertxd (#b3,cr,lf) (mettre le débit dans la fenêtre à 9600) pour surveiller la valeur b3 après le get
J'ai pas compris ce que je dois faire la ?
 

PieM

Senior Member
Avant Select case b3 tu écris une ligne sertxd (#b3) et tu verras dans une fenêtre "serial output buffer" la valeur de b3 défiler.
 

dje8269

Senior Member
Je suis vraiment désolé , tu veux dire en simulation ? cela m'affiche que des zero .
mais c'est normal en fait, la simu ne peux pas fonctionner .

Il faudrait que j'affiche b3 en temps réel sur un écran , mais je sais pas relié le picaxe au pc . ce serait l'idéal pour avancé
 

PieM

Senior Member
Non pas en simulation ! sertxd (à lire) renvoie la valeur par le câble de programmation que tu laisses sur le 28X2.
 

dje8269

Senior Member
tu va me prendre pour un fou . Je vois ce que tu veux dire , mais j'y arrive pas .

je ne savais pas qu'on pouvais faire ca, avec le cable de programmation . Mais comment et où je vois les valeurs ??? je n'ai pas vu de fenetre pour mettre 9600 bauds ? je suis sous PE5
Ce ne serais pas Serout plutot ?
 

PieM

Senior Member
tu va me prendre pour un fou . Je vois ce que tu veux dire , mais j'y arrive pas .

je ne savais pas qu'on pouvais faire ca, avec le cable de programmation . Mais comment et où je vois les valeurs ??? je n'ai pas vu de fenetre pour mettre 9600 bauds ? je suis sous PE5
Ce ne serais pas Serout plutot ?
Appuie sur F8: une fenêtre s'ouvre sur ton écran. la valeur de b3 va défiler. si ce n'est pas lisible modifie le débit pour être sur 9600.
 

dje8269

Senior Member
ok ,

avec la formule qui devrais marchée mais qui fonctionne pas :
Code:
Select case b3

case  < 120
	b3 = b3*3/8
	b3 = 195 - b3
	
case > 134
	b3 = b3-134*5/12
	b3 = 150- b3
else
	b3 = 150
	
end select

servopos 1,b3
J'obtiens ca :

test.jpg

Quand je met le programme qui fonctionne , j'ia que des 125 , ce qui est normal , et la valeur change quand je tourne, tout est normal , sauf les max
 

PieM

Senior Member
Si dans un cas le b3 du scratchpad est à 125 est dans l'autre à 0 ça ne vient pas des formules ! En plus tu as des valeurs anormales au milieu des 0.
 

dje8269

Senior Member
Désolé, je fais un break, car je sature la ..........ca commence a me gonfler sévère ....... je crois que c'est la première fois que je suis autant énervé .
A tout a l'heure !
 

le belge

Senior Member
faut pas baisser les bras !!!
une pause s'impose ....
ça serait trop facile si ça marchait du premier coup !!!
Mike
 

PieM

Senior Member
Désolé, je fais un break, car je sature la ..........ca commence a me gonfler sévère ....... je crois que c'est la première fois que je suis autant énervé .
ça ne sert à rien de s'énerver!

Il faut chercher à comprendre.
J'aimerai savoir:
quelle valeur as tu en sortie du readadc de ton joystick au point milieu.
quelle sont les mini et maxi du servo et quelle valeur correspond à son point milieu.
Les valeurs mini maxi d'un servo peuvent être très différentes de ce qu'on rencontre dans la littérature !
J'ai des servos dont le mini est à 60, le maxi à 180 et le point milieu à 122 ...

Tu fais d'abord un programme indépendant sur le 28X2 avec différentes valeurs de b3 et tu testes ton servo en utilisant la formule..
ensuite tu mets la valeur de b3 dans ton scratchpad par un put ... que tu va relire avec le get dans ton programme normal
 

dje8269

Senior Member
ça ne sert à rien de s'énerver!
Je suis bien d'accord , mais c'est plus fort que moi .

Il faut chercher à comprendre.
je suis d'accord , mais c'est a ni rien comprendre. Tout est décousu , et n'as aucun sens ;

Donc comme tu me le conseille, je vais repartir de zéro .
je vais tout simplement initialisé mon servo a certaines valeurs . c'est d'ailleurs comme ca que j'ai déterminé mes max .

Allez c'est partis je vous mets les résultats en temps réel.
 

dje8269

Senior Member
A peine commencé que ca commence mal .

Code:
#PICAXE 28X2

'########################  Configuration  ########################

dirsA = %0101	'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée


'########################  Initialisation  ########################

setfreq m8	

servo B.1,150					'Servo direction en broche B.1, position neutre a 150


'####################################################################################################
'					Programme Principal
'####################################################################################################
do

servopos 1,200

loop
J'attends de vos nouvelles , car rien que la le servo oscille . je peux difficilement faire plus simple
 

dje8269

Senior Member
Bon j'ai fais plus simple . Le servo prend enfin la position est y reste

Code:
#PICAXE 28X2

'########################  Configuration  ########################

dirsA = %0101	'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée


'########################  Initialisation  ########################

setfreq m8	

servo B.1,195					'Servo direction en broche B.1, position neutre a 150


'####################################################################################################
'					Programme Principal
'####################################################################################################
do


loop
A 200 le servo force(il faut un grondement pas terrible) donc il va trop loin . 195 est la bonne valeur max pour ce coté.
de l'autre coté 100/105 c'est bien. A 95 il sort de son emplacement .

le point milieu se trouve entre 150 et 155 . y'as pas une énorme différence. j'ai régle mecaniquement le point milieu a 150 pour etre plus facile de comprendre . J'ai mis le servo a 150 , enlevé le levier mis les roues piles poils au milieu et remis le levier .

On as donc un besoin de débattement de . 105 - 150 - 195 . Ainsi on as le même coefficient de pente pour les deux droites .
 

PieM

Senior Member
Dans ton programme #274 remplace ta commande servo par pulsout B.1, 300 suivi d'une pause de 20 dans ta boucle do loop
 

dje8269

Senior Member
Mon servo doit avoir un problème c'est pas possible autrement !

Code:
#PICAXE 28X2

'########################  Configuration  ########################

dirsA = %0101	'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée

'########################  Initialisation  ########################
setfreq m8	
servo B.1,150					'Servo direction en broche B.1, position neutre a 150
'####################################################################################################
'					Programme Principal
'####################################################################################################
do

servopos 1,130

loop
Quand j'ecris dans la configuration du dessus :
servopos 1,130 le servo oscille trois ou quatre fois en revenant a 150 et aprés se cale sur la valeur

servopos 1,140 Le servo se met en place tout de suite sans probléme . j'ai descendu toutes les valeurs de 10 en 10 en commencant par 190 , et ca a bugger à 130
 

dje8269

Senior Member
Dans ton programme #274 remplace ta commande servo par pulsout B.1, 300 suivi d'une pause de 20 dans ta boucle do loop

Code:
#PICAXE 28X2

'########################  Configuration  ########################

dirsA = %0101	'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée


'########################  Initialisation  ########################

setfreq m8	

servo B.1,150					'Servo direction en broche B.1, position neutre a 150


'####################################################################################################
'					Programme Principal
'####################################################################################################
do

pulsout B.1, 300 
pause 20

loop
Le résultat est bizarre , le servo fais des petits mouvements , assez cadencés mais des fois , il tremblote . c'est pas franc comme mouvement . Si tu me laisse 2 min utes je fais une mini vidéo .

http://www.dailymotion.com/video/x1hkscs_essai-servo-moteur_tech
 

PieM

Senior Member
Pas trop normal! Et il fait un bruit bizarre ton servo.
Essaie avec un autre, sans le monter sur la direction.
 

dje8269

Senior Member
Essaie avec un autre, sans le monter sur la direction.
J'y avais pensé , mais malheuresement je n'en ai pas à la maison !! :(

Et il fait un bruit bizarre ton servo
Je le trouve plutot normal , quand il bug c'est sur , mais on marche normal , ca va .

Je suis en train de tester un truc , je pense a une question de temps de réponse entre le calcul et l'exécution de la commande servo .
Je refais vite fait le programme test et je te montre . avec une pause 5 entre la définition de b1 et la commande ca marche bien . si j'enlève la pause ca bug
 
Top