Télécommande voiture RC + caméra

GM39

Senior Member
Edit: je dois me trompé comme d'hab, mais il me semble que le mode esclave n'est utile que dans le cas ou il y as plusieurs esclaves en fait, afin de les dissocier . dans mon cas il n'y auras qu'un seul esclave, donc j'aurais besoin d'utiliser seulement la commande hi2c maitre non ? :
Si vous utilisez un seul périphérique i2c esclave commandé par un Picaxe maître, cela nécessite une seule commande hi2csetup dans le
programme. Après l’initialisation par le hi2csetup, il est possible d’accéder à l’esclave i2c avec les commandes hi2cin et hi2cout.
Cela veut juste dire que s'il n'y a qu'un esclave, la commande qui permet au maître de définir l'adresse de l'esclave (hi2csetup) n'a besoin d'être utilisée qu'une seule fois, puisque ce sera toujours la même adresse.
En revanche il faut que le picaxe qui joue le rôle de l'esclave soit configuré comme esclave i2c, et cela n'est possible que sur les X2.
 

dje8269

Senior Member
Ok nickel merci ben GM39 . donc il me faut un "X2" pour utiliser cette méthode !!! .

Sinon j'ai cette nuit pensée à une solution, certainement farfelue comme d'hab, qui ne fonctionne pas comme d'hab, mais bon je vous la dis quand même, des fois que ce soit une idée de génie lol .
Vous me direz ce que vous en pensez .

Alors, le relais commandant le moteur est actionné par un transistor NPN .
A l'état 0 le relais n'est pas collé et la voiture et dans le sens "avant" . si le transistor devient saturé , il colle le relais qui mets la voiture en sens "arriere".

Il me reste 3 variables non utilisées ; Je dédie une variable comme un flag marche avant / marche arrière qui me permet de piloter le sens de la marche .

Maintenant ça se complique ;
Avant chaque Rfin, je met le flag a 1 . donc je fais coller le relais(virtuellement car temporiqation), et donc je met la voiture au point mort , car la valeur de la marche arrière est de 0 , donc pas de courant.

Dans le RFin je repasse mon flag à zéro. La voiture repasse en marche avant.

Donc quand je part pas la com : le relais colle et passe un marche arriere et 37ms plus tard ( le temps du RFin) il repasse en marche avant grâce au flag . Si je temporise avec un condensateur sur la base du transistor, ces 37ms serais invisible . car le condo servirais de tempo avant de faire coller le relais ( calcul du condo pour 50ms par exemple) .

Maintenant si je perds la com . le relais colle et passe en marche arrière . comme la commande RFin est bloquante , il reste dans cette position , la tempo se termine et le relais colle, donc "débraye" la voiture et elle n'avance plus ! .

Alors foufou ou pas . Avez vous saisi l'idée ? réalisable ?

Pour resumé: on eteint le moteur avant le RFin par une tempo ; Si le RFin passe, on rallume le moteur , sinon a la fin de la tempo , quand le RFin est bloqué on eteint le moteur

- Exctinction du moteur
-RFin
-rallumage du moteur
 

jojojo

Senior Member
Heu ...
J'ai regardé ton schéma, là.

Le MOSFET est déjà mort !
- La grosse capa de récup
- Les deux diodes (rapides !) de protection !

Sinon ...
 

PieM

Senior Member
Je disais bien : commence à faire rouler ta voiture ...
Car comme dit jojojo, avec un schéma comme ça c'est pas gagné!
Je ne comprends pas trop non plus l'alim : un inter peut mettre en liaison du 12V avec un accus 7.2V ?

Et une fois que qu'elle sera capable de rouler, tu pourras faire l'essai de ramener ton pwm duty a une très faible valeur avant le RFIN et de le mettre à plus haute valeur juste après. Mais ça , ça ne peut s'essayer que si tu fais rouler la voiture. En cas de perte de liaison elle restera à très faible vitesse.
Sinon oui, la liaison I2C maitre esclave permet aux maîtres de lire et d'écrire dans une mémoire spécifique des esclaves, et à ceux ci de lire et écrire les valeurs quand ils en ont besoin.
 

dje8269

Senior Member
Je disais bien : commence à faire rouler ta voiture ...
Je vais essayer de faire ca aujourd'hui, tu as raison ; Faisons la rouler deja la titine .

Car comme dit jojojo, avec un schéma comme ça c'est pas gagné!
Ben oui je fais avec mes moyens lol . pas trés gros d'ailleurs , tu aurais d'autre correction que celle de Georges ?

Je ne comprends pas trop non plus l'alim : un inter peut mettre en liaison du 12V avec un accus 7.2V ?
Je me suis dépeché pour refaire le schéma hier soir , en esperant avoir une réponse . J'ai donc baclé ma MAJ . En fait il y a un converter 4.5/9V DC en 12V DC pour le recepteur qui fonctionne en 12V . Mais je viens encore de changer d'avis, je vais garder pour les tests de roulage le recepteur en 5V de chez gotronic.

Je suis en train de finaliser le typon "d'essai" . Je suis encore sur un OS . J'ai pas de relais 7.2 V avec multi contact . J'ai donc recuperer les relais qu'il y avait sur la voiture ( 6V 10A). Le probléme c'est qu'il n'y as qu"un seul contact . Je dois donc en mettre deux pour inverser le moteur .
Ma question , je dois les mettrent en serie ou en // ? pour commander les bobines ?
 

PieM

Senior Member
tu aurais d'autre correction que celle de Georges ?
Non, mais j'avoue que le MOSFET qui fait court circuit piloté il fallait le faire !

Les bobines en // bien sûr .
 

jojojo

Senior Member
Normalement, un relais 12V colle sans problème, à 7V.
Donc, si tu en as un, fais le test, ce serait plus sympa.
 

dje8269

Senior Member
Oui je crois que j'en ai ...... Je regarde ca tout de suite .

par contre pour le MOSFET je vois pas !!!! mon erreur , un petit schéma a me proposer ?
 

jojojo

Senior Member
par contre pour le MOSFET je vois pas !!!!

Bon, on chausse ses lorgnons, là !

Autre truc, plus philosophique (ça va faire râler Besqueut, mais ...) : On doit gérer en même temps du proportionnel (servos) et du tor (boutons).
J'ai essayé 36 trucs, pour le faire avec UN seul picaxe (un 40X2). Ben ... Non. Il faut séparer les deux tâches. Donc, oui, deux pic.

Sur une suggestion de Piem, je suis en train de tenter de supprimer la liaison série entre les deux pic (même à 38400, ça prend du temps, et j'ai parfois une erreur, bon, rare, mais quand même). Le hi2 me tente bien, mais, pas possible avec deux M2. Je dois faire autrement.
 

dje8269

Senior Member
Bon, on chausse ses lorgnons, là !
Quel boulet !!!! Rassurez moi ca vous arrivent aussi ?????????? :mad:
J'ai tellement la tête dans le guidon que je vois même pas les enormes boulettes . Comme on dis c'est au pied du mur , qu'on voit mieux le mur .

Erreur corrigée !!!

Je refais vite fais mon schéma . Car je n'ai pas trouvé de relais qui va bien !!!!!! trop faible courant pour la plupart .
 

jojojo

Senior Member
Et, fais moi plaisir, réserve une entrée ADC, pour le contrôle du courant moteur. (Je sais, je radote, mais ...)
 

jojojo

Senior Member
Mieux, mais ...

Manquent toujours les diodes de protection du MosFet.
Manque toujours la protection sur-intensité moteur.

Allez, au boulôt !

PS:
Un truc, pas utile au premier "rabord", mais que je fais toujours, quand je fais un PCB de ce genre: Implante un connecteur "auxiliaire", qui récupère toutes les E/S inutilisées du Pic. Ca finit toujours par servir ...(le must: tu y inclus le +bat, le +5 et la masse)
 

dje8269

Senior Member
Manquent toujours les diodes de protection du MosFet.
Ok je rajoute ca !!!

Manque toujours la protection sur-intensité moteur.
Pas de zener en stock lol . Mais cela reste un proto , je voudrais juste la voir rouler . Mais je le mettrais pas de soucis ;

Pour les diodes de protection , il en faut des speciales ? de puissance ?
 

dje8269

Senior Member
J'ai des 1N4148, 1N4007, 1N5408,et des 1N4001 ...... y'en as des rapides dans le tas ??

Je viens de regarder la datasheet de mon MOSFET , y'as deja une diode d'intégré . En rajouter une ne dérange pas ?
 

dje8269

Senior Member
Ok c'est partis , ce sont les derniers composants a mettre , apres j'ia finis !!!!!!

Sinon je possede des vieilles alim de PC, des plaques de télé et deux trois bricoles pour prendres des piéces dessus . Tu n'as pas une reference en tête , je peux toujours regardé .....
 

jojojo

Senior Member
Ah !
Oui, dans les alim PC, on trouve d'excellentes diodes rapides.
Tu cherches de la FE60, ou de la BY203, ou BYW95, BYV96, etc, etc ...
 

dje8269

Senior Member
Merci beaucoup Georges ,

J'ai pus finir , j'ai fait du RAB !!!

Mais me voila fin prêt pour les premiers test !!! j'espère ne pas mettre trompé , car à la maison j'ai rien pour souder, dessouder . Juste mon multimètre......
J'ai un mauvais pressentiment car je l'ai fais un peu dans la précipitation quand même ..... . J'ai tout de même vérifier mes alims , et les pistes pour les CC.

Plus qu'as programmer tout le WE . lol

Allez voici quelques photos , du premier prototype. j'ai mis que la base pour le moment ;Le moteur ; le servo moteur pour la direction . et 2 TORs

PCB Voiture.JPG

Voiture.JPG
 

dje8269

Senior Member
Voila ,

Branchement de la batterie.

Mise sur ON

Verification de la presence des tensions .

Telechargement du programme du recepteur ;

allumage de la télécommande .

Mouvement sur le champignon .

Rien ne bouge lol .

J'incrimine le récepteur , je vais faire des test pour voir si ma transmission RF fonctionne
 

dje8269

Senior Member
Bon voila quelques heures que je galère , j'ai le début d'une piste .

Bon déjà, la voiture fonctionne . j'ai fais un programme "test" , afin de faire tourner les roues automatiquement . Presque Nickel ! car j'ai oublié un strap donc un seul relais colle ; je ne peux donc pas changer de sens . Pas grave !!! j'arrive a faire coller un relais automatiquement , je fais tourner les roues , c'est un début;
Le fait que le relais colle, seras ma preuve de réception d'un message par le RX , car j'ai pas mis de led pour visualiser. Voir ma signature lol . je la referais pas celle la .

j'ai modifier le programme en émission pour le simplifier. Si j'appuie sur n'importe qu'elle touche, cela devrais faire coller mon relais .

J'ai vérifier les branchements du RX tous va bien , niveau câblage sur tous le circuit ça à l'air bien.

Je suppute donc une chose , et la je compte sur votre expertise . La data de mon RX , arrive sur la broche B.0 après un long trajet ( une dizaine de centimètres).
Je ne crois pas que la broche soit une entrée trigger , et peut être que cela viens de la ! Sur les 08M2 , la broche C.2 est utilisé comme une trigger et j'ai jamais eu de problème .

La j'ai changé la broche au dernier moment pour prévoir une liaison i2c (avant elle était sur B.7).

Pensez-vous que cela peu venir de la ? savez vous quelle sont les entrées trigger sur un 20M2 ou alors ou les trouvés?

Merci à vous .
 

dje8269

Senior Member
YES !!!

J'ai trouvé tout seul , et en plus j'avais raison ..... !!!! je suis bien content, ça fais plaisir, c'est pour ça , que j'aime l'impossible et la galère, car quand on trouve et que ça fonctionne , cette sensation de satisfaction est tout simplement génial .

Je comptais retourné au boulot demain, pour faire une modif hard . quand je cherchais les broches trigger de schmidt sur le 20M2 , toutes sont en TTL avec un petit "asterix" . *Configurable .
Tiens donc, je continue mes recherches et tombe la dessus :" inputtype %0000000000001111"

J'essaie de mettre ma broche B.0 en TDS et paf ca fonctionne ..........

bon il se fait tard , je refais un petit programme vite fait pour voir mes roues tournées quand j'accélère quand même .
 

dje8269

Senior Member
Bonjour à tous,

J'avais une question bête !

A 32Mhz les temps de pause sont bien divisés par 8 ? . Exemple simple , faire une pause a 4Mhz j'écris pause 1000 . Et a 32 Mhz je dois écrire pause 8000 ?

Sinon j'avais une autre question d'ordre hardware . Mon TX fais du bruit quand il émet . Avec les petits TX de 10mW émettre en permanence de pose pas de problème , mais avec un émetteur 400mW comme le mien , est ce que ça pause un problème d'émettre en permanence ? Car on dirais que j'entends l'oscillateur , un petit ronronnement rapide !! ou alors peut être qu'il a prit une claque a force de test hasardeux parfois lol
 

PieM

Senior Member
A 32Mhz les temps de pause sont bien divisés par 8
oui si la fréquence de base est de 4MHz!

400mW pour une voiture !!!!! sous quelle fréquence ?
Si coté récepteur tu mets un système de chien de garde en cas d'arrêt d'émission, je ne vois pas trop comment tu peut envisager d'arrêter l'émetteur.
 

dje8269

Senior Member
400mW sous 433Mhz !!!!! je sais ce que tu va dire PieM !!! Mais je suis bien obligé si je veux qu'Alexis conduise la voiture sans la voir , il me faut de la portée ; Ce seras la même chose pour la vidéo , j'ai pris 1.2Ghz a 1000mW, en dehors des clous !!! je le ferais conduire en Italie lol .

J'ai fais des test avec ce TX j'avais plus de 500m de portée en TOR avec de gros murs . Il est donné pour 2Kms a 5Kms en terrain dégagé .
 

dje8269

Senior Member
Alors j'ai réussis a bidouiller sans fer a souder pour remplacer mon strap manquant, afin de faire avancer et reculer la voiture.
Mais maintenant je suis confronter à un autre problème que je pense être soft .

Dans mon programme "test" que voici .

- Quand je pousse le levier en avant la valeur de b1 devient supérieur à 130 ,les relais reste a l'état bas , et la voiture avance ok !
- Quand je pousse le levier en arrière la valeur de b1 doit être inférieur à 120 donc cela devrait coller mes relais et faire reculer la voiture !! ben non . la voiture avance toujours .
- Quand j'appuie sur un bouton cela fait collé mes relais(pour les test) .
- Quand j'appuie sur un bouton et que je bouge le levier la voiture recule .

J'en déduis donc que la valeur b1 n'est jamais inférieur à 120 car mes relais devraient coller sinon . Je suis un peu perdus la !

Code:
#PICAXE 20M2



dirB.0=0		'declare B.0 en entrée
dirB.1=1		'Declare B.1 comme sortie
dirB.6=1

symbol sens = B.6

inputtype %0000000000000001 			'met la broche B.0 en  mode TDS

setfreq m32

pwmout pwmdiv64, B.1, 150, 0 		' rapport cyclique a 0

b1 = 125

'####################################################################################################


'####################################################################################################
'						Commande moteur
'####################################################################################################

do

Select Case b1

Case 120 To 130
	pwmduty B.1,0		'Si b1 entre 120 et130 signifie au point milieu , donc a l'arret

Case > 129
	low sens
	b1= b1-130*4 max 100	'mise a l'echelle pour 130 à 250 de b1 et commande pwm de 0 à  500
	pwmduty B.1, b1		'envoi du pwm sur le moteur

Case < 121
	high sens
	b1 = 120-b1*4 max 100	'mise a l'chelle pour 120 à 0 de b1 et commande pwm de 0 à 480(pour 500)
	pwmduty B.1, b1		'envoi du pwm sur le moteur

end select

if b0<>0 then
	high sens
	else 
	low sens
end if

RFin B.0,b0,b1,b2,b3,b4,b5,b6,b7		'reception des données

loop
 

dje8269

Senior Member
Me revoici ,

Allez pour commencer quelques choses qui fonctionne bien .

Lien : http://www.dailymotion.com/video/x1d0z38_voiture-rc-avec-picaxe-2_tech

[video=dailymotion;x1d0z38]http://www.dailymotion.com/video/x1d0z38_voiture-rc-avec-picaxe-2_tech[/video]

Jusqe la tout va bien . En attendant mon servo pour la direction , j'en avais des mini . J'avais donc prévu, une connexion pour essayer de travailler dessus . Chose que j'ai fait ce matin et cet apres midi .
Mais la ca bug !!!! . Je voulais utiliser la commande "servo" , mais elle n'est disponible que sur le port B , et moi j'avais connecté le servo sur la broche C.4 . Je me suis donc dis, Jérémy ,utilise la commande pulsout comme Georges , en plus ça fait pas de bug !!!!!

J'obtiens avec ce programme , un comportement très aléatoire de la voiture , des servos ;la voiture accélère toute seule quand je touche aux commandes de la direction , comme si la valeur de la direction venait dans la commande moteur . ça fonctionne tout bizarrement et je ne maitrise rien.

Quand je supprime la partie moteur , la commandes servo fonctionne, mais pas top , la sensibilité n'est pas au RDV, j'ai l'impression que les valeurs sont mal lus .
quand je supprime la partie servo , le moteur fonctionne parfaitement .
Quand je mets les deux ensembles c'est l'enfer !!!

Voyez vous quelques choses de mauvais dans mon programme . Car j'ai bien galérer pour trouver la formule pour la mise a l'echelle de pulsout en 32Mhz .

Merci à vous

Code:
#PICAXE 20M2



dirB.0=0		'declare B.0 en entrée DATA
dirB.1=1		'Declare B.1 comme sortie MOTEUR
dirB.6=1		'Declare B.6 comme sortie RELAIS
dirC.4=1		'Declare C.4 comme sortie DIRECTION

symbol sens = B.6

inputtype %0000000000000001 			'met la broche B.0 en  mode TDS

setfreq m32

pwmout pwmdiv64, B.1, 150, 0 		' rapport cyclique a 0

b1 = 125

'#################################################  ##################################################  #


do

'#####  Commande moteur  #####
Select Case b1

Case 120 To 130
	pwmduty B.1,0		'Si b1 entre 120 et130 signifie au point milieu , donc a l'arret

Case > 129
	low sens
	b1= b1-130*4 max 100	'mise a l'echelle pour 130 à 250 de b1 et commande pwm de 0 à  500
	pwmduty B.1, b1		'envoi du pwm sur le moteur

else
	high sens
	b1 = 120-b1*4 max 100	'mise a l'chelle pour 120 à 0 de b1 et commande pwm de 0 à 480(pour 500)
	pwmduty B.1, b1		'envoi du pwm sur le moteur

end select



'#####  Commande direction  #####
select case b2
case 120 to 130
	w13=1200
	
case > 130
	w13=b2-130*32/10+1200
	else
	
	w13=120-b2*33/10+800
	
end select

pulsout c.4,w13

'#####  reception des données  #####
RFin B.0,b0,b1,b2,b3,b4,b5,b6,b7		



loop
 

jojojo

Senior Member
Page 211 du manuel 2, il est spécifié :Servo cannot be used as the same time as timer, or pwmout/hpwm

Donc, tu choises, servo OU PWM, pas les deux.

Sinon, ici, les servos fonctionnent très bien, en mode pulsout.
Vérifie un peu tes calculs de mise à l'échelle (pas regardé ton code, un peu la flemme, ce soir ...)

ET pulsout est tout à fait compatible avec PWM, donc ...

Tiens, inspire toi de ça :
Code:
'Commande moteur, PWM ET relais av ar
w8=b4			'par cohérence pour la suite ...
Select Case w8
	Case 126 To 130
	w8=0		'manche au neutre
	Case >130
	w8=b4-130	'mise à l'échelle, pour 0 à 500 (pwm), avec 131 à 255 (b4)
	w8=4*w8
	Low Sens	'avant
	Else
	w9=4*w8	'le même à l'envers, pour 500 à 0, avec 0 à 125
	w8=500-w9
	High Sens	'arriere
End Select
 
Last edited:

dje8269

Senior Member
Je viens de relire mon message. Quand je parle de commande servi, comme un boulet, je veux dire bien sur pulsout. Je ne peux pas utilisé servi car ma commande se trouve sur le port C
 

PieM

Senior Member
Sur un 20M2, pwm peut être utilisé en même temps que servo si il est sur B.1 ou C.2.

la formule w13=120-b2*33/10+800 n'est pas bonne.
plus b2 est petit plus le pulsout est grand !
il faut un pulsout de 1200 quand on sort de la zone morte par le bas comme par le haut.

dans les tests faire d'abord case > 130 puis case < 120. ça évite le double test.
 

dje8269

Senior Member
Tiens, inspire toi de ça
Aprés avoir testé ma facon , j'ai essayé de comprendre la tienne . sans succés, ton calcul de mise a l'échelle me dépasse . C'est difficile quand tu n'es pas dedans ; Ca m'epatte toujours de voir comment vous arrivez a voir tous de suite les choses sans faire le proggramme , c'est impressionnant .

la formule w13=120-b2*33/10+800 n'est pas bonne.
plus b2 est petit plus le pulsout est grand !
Demain matin je refais ca . promis !
dans les tests faire d'abord case > 130 puis case < 120. ça évite le double test.
Euhhh ................. je comprends pas . y'as pas de <120 ??? Tu m'as dis un peu plus haut , ca ne sert a rien de faire un test , si tout est faux, forcement cela sera juste . Donc si b1 est pas compris entre 120 et 130, ET si n'est pas superieur à 130, Donc forcement il sera inferieur a 120 non ?
 

jojojo

Senior Member
Aprés avoir testé ma facon , j'ai essayé de comprendre la tienne . sans succés, ton calcul de mise a l'échelle me dépasse
:confused:
Hum ...

Je crois, qu'un jour, il faudra ouvrir un post spécifique, sur les mises à l'échelle.
C'est comme pour tout, il suffit de bien poser le problème. "Par quoi dois-je multiplier truc pour obtenir machin, et de combien dois-je décaler, en plus ou en moins ?".
 

PieM

Senior Member
dans les tests faire d'abord case > 130 puis case < 120. ça évite le double test.
Euhhh ................. je comprends pas . y'as pas de <120 ??? Tu m'as dis un peu plus haut , ca ne sert a rien de faire un test , si tout est faux, forcement cela sera juste . Donc si b1 est pas compris entre 120 et 130, ET si n'est pas superieur à 130, Donc forcement il sera inferieur a 120 non ?
Je recommence:
tu fais le test simple case > 130
puis le test simple case < 120
puis le else.
le test double (Case 120 To 130 plus long à faire pour le picaxe ) n'est pas à faire.

Avec les bonnes formules :

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

select case b2
case <120 	
	w13=b2*10/3+800
case > 130
	w13=b2*10/3+766
	else
	w13=1200
end select

pulsout c.4,w13
 
Last edited:

jojojo

Senior Member
Sur un 20M2, pwm peut être utilisé en même temps que servo si il est sur B.1 ou C.2.

Ben, j'ai pas essayé, sur un 20M2( j'en ai pas). Mais, sur un 40X2, ça va pas !

Je viens de re parcourrir la doc on line, et, là aussi, il est spécifié que ces deux commandes sont incompatibles.
Ou as-tu eu ces infos, concernant les 20M2 ?
 

PieM

Senior Member
Ben, j'ai pas essayé, sur un 20M2( j'en ai pas). Mais, sur un 40X2, ça va pas !

Je viens de re parcourrir la doc on line, et, là aussi, il est spécifié que ces deux commandes sont incompatibles.
Ou as-tu eu ces infos, concernant les 20M2 ?
Sur le 40X2 ce n'est pas possible.
Oui qd on regarde la doc sur la commande servo, ils n'en parlent pas!
Mais tu as ça dans le manuel 2 (ou celui en ligne) a la rubrique PWMOUT.
 
Top