Télécommande voiture RC + caméra

dje8269

Senior Member
Waouhhh

Tout simplement énorme . Ta façon de voir pour le tilt est géniale . Supprimer les select case , font gagner je pense beaucoup de réactivité .

Ça fonctionne a merveille , j'ai toutefois dus rajouté "min 65" , car a 255 pour le pan le servo forçait beaucoup .

Code:
b5 = b5 * 7 / 10		' Mise a l'echelle
b5 = 238- b5 min 65

servopos Pan,b5		' Positionnement du servo
Crois tu que c'est réalisable du coup pour la direction aussi ??? car en fait le select case nous servais a crée ce point mort, qui n'est plus nécessaire au vu de la configuration physique des potars .
 

dje8269

Senior Member
Est ce que ça arrive quand le TX est éteint ?
Non, je viens de laisser la voiture 5 minutes toute seule allumée , TX éteint , aucun bug .

J'ai allumer le tx , sans rien touché , au bout d'une minute , la voiture à fais un petit coup en avant très très bref, et la sirène c'est mise en route toute seule .

Une autre question qui n'as rien a voir, est ce que le temps de lecture du scratchpad est plus court , si on met moins de variable ? Actuellement je fais

get 0,b0,b1,b2,b3,b4,b5,b6,b7 ' Lecture du scratchpad
mais je n'utilise pas b2, b4 et b6 . est ce que ca me ferais gagner en rapidité d'écrire :

get 0,b0,b1,b3,b5,b7 ' Lecture du scratchpad
 
Last edited:

PieM

Senior Member
Non, je viens de laisser la voiture 5 minutes toute seule allumée , TX eteint , aucun bug .

J'ai allumer le tx , sans rien touché , au bout d'une minute , la voiture à fais un petit coup en avant trés trés bref, et la sirène c'est mise en route toute seule .
Donc le pb vient du TX. Il faut que tu vérifies toutes tes entrées ana.

Crois tu que c'est réalisable du coup pour la direction aussi ?
ben oui, je vais regarder. mais tu redonnes le programme actuel stp... ou le N° du poste où il est.
 

dje8269

Senior Member
Il faut que tu vérifies toutes tes entrées ana.
En hard tu veux dire ?

Le voici :

Code:
#PICAXE 28X2

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

'b0 à b7 pour les communications
'b8 pour le compteur d'erreur de com
'b9 pour la secu moteur
'b10 pour le compteur de la secu moteur


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 = pinA.0
Symbol Option = A.2

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


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

setfreq m8	

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

servo Direction,150		'Servo direction en broche B.1, position neutre a 150
servo Pan,150			'Servo Pan en broche B.2, position neutre a 150
servo Tilt,150			'Servo Tilt en broche B.3, position neutre a 150
	
pwmout moteur, 125, 0 		' rapport cyclique a 0

dacsetup %10100000		' Configure le dac avec Vcc en reference

put 1,125				' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125				' Ecrit dans le scratchpad la valeur du point milieu de la direction
put 5,127				' Ecrit dans le scratchpad la valeur du point milieu du Pan de la caméra
put 7,255				' Ecrit dans le scratchpad la valeur du point milieu du tilt de la caméra

Low sens				' met le relais a l'etat bas
b8=0					' RAZ du compteur d'erreur communication	

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

main:
do
	get 0,b0,b1,b2,b3,b4,b5,b6,b7	' Lecture du scratchpad
	
'-----------------------------------	
'##### perte de communication  #####

if hi2cflag = 0 then 			'Si flag=0, donc perte de com

	b8 = b8+1 max 25			'Compteur d'erreurs de flag
		if b8>40 then 		' en augmentant le chiffre , on augmente le delai de  reaction
		gosub Escape		' Si plus de 40 erreurs, on stop la machine
		end if
						
else
hi2cflag = 0		're-armement du flag
b8 = 0			'RAZ du compteur			
end if

'------------------------------
'#####  Commande des TOR  #####

if b0=0 then		' Si pas de bouton appuyé , daclevel = 0
daclevel 0
end if

if bit0 = 1 then		' Correspond au klaxon , bouton sur le joystick
daclevel 3
end if

if bit4 = 1 then		' Correspond au changement de sirene , bouton du haut
daclevel 9
end if

if bit2 = 1 then		' Correspond au lancement de sirene , bouton du bas
daclevel 15
end if

if bit1 = 1 then		' Correspond aux phares bouton de gauche
high C.5
end if

if bit3 = 1 then
high A.0
high A.1
end if

'if bit? = 1 then		' Correspond au declenchement caméra
'high C.2
'end if


'--------------------------------
'#####  Commande du moteur  #####

Select Case b1			

Case < 101 		'Marche arriere
	high sens
	b1 = 100-b1					' Mise a l'echelle
	w13 = b1*37/10+130  max 500
	
	
Case > 128		'Marche avant
	low sens
	b1= b1-129					'Mise a l'echelle
	w13 = b1*3+130 max 500			'130 commence à faire avancer la voiture.
	
else
	w13 = 0					'Sinon point milieu , donc a l'arret

end select

pwmduty moteur, w13				'envoi du pwm sur le moteur

'--------------------------------
'#####  Sécurité du moteur  #####

readadc C.7, b9					' Lecture de la broche securité
	if b9 > 90 then 				' Pour eviter les coupures intempestives sur un simple choc on compte avant de couper le moteur
		b10=b10+1 max 30
			if b10>20 then 		' Si le moteur est au dessus de 90 pendant 20 cycles
				pwmduty B.0,0	' On coupe le moteur
				pause 3000		' On fais une pause
				b10=0			' On RAZ le compteur
			end if
	else
	b10=0

	end if

'--------------------------------------
'#####  Commande de la direction  #####

Select case b3			' Lecture valeur du servo direction

case  < 120				
	b3 = b3*3/8			' Mise a l'echelle
	b3 = 192 - b3
case > 134
	b3 = b3*4/10
	b3 = 200 - b3		' Mise a l'echelle
else
	b3=150			' Sinon point milieu
	
end select

servopos Direction,b3		' Positionnement du servo

'------------------------------------
'#####  Commande Pan de la camera  #####
'tourne a gauche de 150 à 235, a droite de 65 à 150
 
b5 = b5 * 7 / 10		' Mise a l'echelle
b5 = 238- b5 min 65

servopos Pan,b5		' Positionnement du servo

'--------------------------------------
'#####  Commande Tilt de la camera  #####
' Vers le haut	de 70 à 150			

b7 = b7/3+70 max 150		' Mise à l'echelle

servopos Tilt,b7			' Positionnement du servo

Loop

'####################################################################################################
'					Programme Subsidiaire
'####################################################################################################


'########     Perte de communication     ##########
Escape:

do while hi2cflag = 0		' Tant que le scratchpad n'as rien recu on eteint le moteur
	pwmduty B.0,0
loop

b8 = 0				' En sortant de la boucle, c'est que la communication est revenue
hi2cflag = 0			' On remet le compteur a 0 et on ré-arme le flag
return
 

dje8269

Senior Member
Le point milieu pour la direction se trouve en 125 .

Je regarde mes entrées ana sur l'émetteur !

Tout à l'air en ordre coté typon . Mais il est vieux quand même je l'ai jamais refait celui-la. Il y as pas mal de rafistolage dessus, coup de cutter , soudure de strap par dessus etc ..... un vrai proto quoi . Il doit y avoir du parasite a gogo . je vais pensé a le refaire ; car de toutes façon, il me manque un interrupteur pour alimenté la vidéo . Le potentiomètre de réglage de la vitesse max du moteur ; revoir mon alimentation , refaire l'antenne , bref il mérite un coup de rafraichissement;

Surtout que l'émetteur a quelques centimètres du récepteur ne doit pas arranger les choses .

Pour le plaisir des yeux, voici une vidéo de la caméra en action .

Pour le plein écran par ici

[video=dailymotion;x1s9yg3]http://www.dailymotion.com/video/x1s9yg3_voiture-rc-avec-picaxe-et-camera_tech[/video]
 
Last edited:

dje8269

Senior Member
Pfffff , a chaque fois que je crois qu'un problème va être facile a résoudre, je tombe sur un Os . Incroyable !!

Je sais PieM que tu n'aime pas faire plusieurs truc a la fois .

J'ai un encore un soucis . Je regardais pour allumer les phares . Il s'agirait d'un inter style "télérupteur" , un BP pour changer l'état d'un interrupteur ; Jusque la j'avais réussis grâce au compteur . Mais ces compteur passait pour un anti rebond "bloquant" avec un do-loop while . Ce que je ne veux pas sur mon 28x2 ca le bloquerait tant que le bouton est appuyé .

Je pourrais faire ça , sur l"émetteur directement , mais même problème, puis ça touche a la réactivité . Pareil sur le 14M2 de réception .

Je viens de lire la fonction "button" mais j'avoue que ce n'est pas très clair, mais j'entrevois une solution par la ; sinon j'aurais pus confié ca au 08M2 qui fais la musique, mais j'ai pas de liaison dans le sens 08M2---> 28x2 , seulement dans l'autre sens .

Ma question, y'a -t-il une fonction capable de faire un antirebond, sans pause , sans boucle bloquante ?

PS: j'aurais le même problème avec l'allumage de l'émetteur vidéo, il me faut un télérupteur . En dernière solution je rajouterais un interrupteur a glissière plutôt qu'un BP .
 

PieM

Senior Member
En dernière solution je rajouterais un interrupteur a glissière plutôt qu'un BP .
Tu vois que tu as de bonnes idées ....

Très sincèrement, tu cherches un peu la difficulté avec tes BP !
Il ne s'agit pas de problème d'antirebond mais de mémoire. C'est effectivement le principe du télérupteur.

Alors depuis le début on l'a dit, il faut éviter de perdre son temps avec des boucles d'attente, et toi tu passes ton temps à en rajouter !
Non la fonction button ne correspond pas au besoin. c'est un anti rebond avec une fonction répétition.

Alors tu mets des inters. Au moins tu sauras dans quels états sont tes commandes. Car après tu vas demander à avoir une led pour savoir si ta caméra est allumée ou non !
 

dje8269

Senior Member
Très sincèrement, tu cherches un peu la difficulté avec tes BP !
En effet, mais les BP était existant, et c'est tout de même extrêmement plus pratique, un BP qu'un inter a glissière, surtout pour un enfant . Mais c'est sur que c'est la solution idéale de facilité, et c'est pas mon genre de cherché la facilité .

Car après tu vas demander à avoir une led pour savoir si ta caméra est allumée ou non !
En voila une idée géniale !

Je viens de relire les premiers post !!!! j'en ai pris pour mon grade quand même au début ! . quand je vois le résultat maintenant , y'en as eu du chemin , surtout que j'ia encore plus d'option que mon cahier des charges ;

PS: Je vais quand même réfléchir "un peu" a faire une fonction télérupteur. Je me souvent plus ce qu'on avait dis sur le multitache du 28X2 ? serait-ce envisageable ?
 
Last edited:

PieM

Senior Member
PS: Je vais quand même réfléchir "un peu" a faire une fonction télérupteur. Je me souvent plus ce qu'on avait dis sur le multitache du 28X2 ? serait-ce envisageable ?
pas de multitâche sur le X2. Uniquement sur les M2 !

Et pour ta direction, avec ton équation actuelle, il n'y a pas de symétrie autour du point milieu ! tu varies entre 150 et 98 d'un coté et 192 et 150 de l'autre.

essaie ça:

b3 = b3* 9 / 25
b3 = 195 - b3

tu vas varier entre 195 et 105 pour 0 à 250 avec un point milieu à 150 pour 125.
 
Last edited:

dje8269

Senior Member
pas de multitâche sur le X2. Uniquement sur les M2 !
Zut !!!

Bon, j'ai peut être une autre solution :eek: .

Quel serait les inconvénients d'utiliser le timer3 sachant que le 1&2 sont utilisé pour servo ?
En test réel ça fonctionne très bien, le seul problème , qui n'en est pas vraiment un, se situe sur le délais entre deux bascules . en effet je ne peux pas allumer et éteindre, tout de suite après. Je dois attendre une petite seconde(à peine) avant de pouvoir re-basculer . Dans la pratique, ce n'est vraiment pas gênant .

Voici le télé-rupteur façon Jérémy :

Code:
if bit1 = 1 then		' Correspond aux phares bouton de droite
	
	if timer3 > 20 then	'Fonction télérupteur . Compteur avec le timer3
		toggle C.5	'le BP est préssé ET le temps est superieur au compteur alors  on inverse l'interrupteur 
		timer3 = 0	'On ré-arme le compteur en le mettant a 0
	end if
	
end if
 
Last edited:

dje8269

Senior Member
Et pour ta direction, avec ton équation actuelle, il n'y a pas de symétrie autour du point milieu ! tu varies entre 150 et 98 d'un coté et 192 et 150 de l'autre.

essaie ça:

b3 = b3* 9 / 25
b3 = 195 - b3

tu vas varier entre 195 et 105 pour 0 à 250 avec un point milieu à 150 pour 125.
Je n'avais vu ta modification de message !.

Sans cette symétrie dur dur . Je me suis permis de retouché ta formule qui fonctionne parfaitement.Le petit HIC, c'était sur le 195. La le servo tape et force sur le châssis . le grand max pour cette valeur est 193 . Par contre de l'autre coté, le pignon sort de l'emplacement donc j'ai une énorme marge de man&#339;uvre ; le max de l'autre coté varie au minimum a 95 jusqu'à 110.

Je l'ai donc remplacé par celle-ci , et la c'est parfait .
Code:
'--------------------------------------
'#####  Commande de la direction  #####
'Tourne à gauche (b3 > 125) de 150 à 95-105  (fourchette max) 
'Tourne à droite (b3 < 125) de 150 à 190-193 (fourchette max)

b3 = b3* 9 / 25			' Mise à l'echelle
b3 = 192 - b3

servopos Direction,b3		' Positionnement du servo

C'est vraiment incroyable cette simplification ! vraiment BRAVO ! on gagne énormément de temps ;

Si tu me valide le télé-rupteur et l'utilisation du timer3, je crois que la voiture touche au but !!!!! . Je ne vois pas comment on peut l'améliorer en programmation.
 

jojojo

Senior Member
Hello, pour les problèmes de boutons poussoirs, quitte a refaire tes typons, pourquoi ne pas "oublier" l'aspect bascule software ?
Deux CI de plus, et tu gères 6 boutons poussoirs sans ralentir le µP. Et zéro rebond garanti.

Comme ça :

Bascule.jpg

Bon muguet à tous.
 

dje8269

Senior Member
Bonjour Georges ,

Excellente idée , mais malheureusement la place me manque cruellement , et deux CI de 14 pattes chacun ça risque d'être dur . I l me sera plus facile de placé des inters a glissière ; Mais par contre l'idée de réglé ça en hard est très bonne . J'ai pas le reflex effectivement, je veux toujours tout réglé par soft , alors que des solutions souvent plus fiables existe en hard .

J'ai bon espoir que PieM me valide mon timer3, trouvé après pas mal de boulot et de test en tout genre ;

Je sais que tu aime bien faire des test Georges, tu serais chaud pour faire un petit test ? car je ne dispose pas d'analyseur logique ?

Voici quelques photos de la V3.0 .

V.3 vue de coté.jpg

vue de haut.jpg
 
Last edited:

PieM

Senior Member
Bon muguet ...

A vrai dire la solution timer ne me botte pas trop! question de logique.

tu peux faire une bascule vraiment en soft de cette façon:
Code:
do

If pinC.1 = 1 then
	 if b1 = 0 then
	 b2=1
	 else 
	 b2=0 
	 endif
 else 
 if b2 = 1 then 
	 b1 = 1
	 else
	 b1 = 0
 endif
endif 
 
loop
C'est à l'état brut non simplifié pour voir comment ça marche... passe le en simulation et regarde ce que font les variables b1 et b2.
le problème d'anti rebond est à traiter avec un condo aux bornes de tes BP.
 

PieM

Senior Member
version simplifiée ... comme tu les aimes!

Code:
do

If pinC.1 = 1 then
	 bit2 = not bit1
 else 
 	bit1 =bit2
endif 
 
loop
 

dje8269

Senior Member
Bon Muguet à tous ,

A vrai dire la solution timer ne me botte pas trop! question de logique.
Rohhhh, tu crois que ca peut engendrer des ralentissements ? car je vois pas trop ce qui dérange ; c'est pas comme si je me servais du timer en permanence , c'est juste quand j'appuie sur le BP.

Je viens d'essayer ta bascule ca fonctionne parfaitement, j'ai essayer hier soir de faire un truc dans ce genre, mais sans succès . Bravo !
Oui pour les condos anti rebonds en hard .

est ce qu'il y aurais un point à améliorer sur le programme , car la je pense qu'il est finis sinon .

Il me reste a réfléchir ou placé les composants camera, émetteur ...... etc .... refaire mon typon, en l'améliorant . Je pense faire un deuxième étage sur le premier pour placé les antennes de réception radio et vidéo ; Je pense mettre la caméra sur le servo de direction ;

dessous.jpg

V3.0 vue de face.jpg
 

PieM

Senior Member
Dans tes programmes, pense à définir par des symboles toutes tes sorties et tes entrées.
(et détaille l'utilisation des bits de b0)
ça te permet d'écrire:

phare = bit1

et pour peu que tu définisses:
symbol cde_phare = bit1
ça se traduit par

phare = cde_phare

au lieu de

if bit1 = 1 then
high C.5
end if


donne des noms à tes variables b0 ... etc
c'est plus clair et lisible.
 
Last edited:

PieM

Senior Member
Code:
servo Direction,150		'Servo direction en broche B.1, position neutre a 150
servo Pan,150			'Servo Pan en broche B.2, position neutre a 150
servo Tilt,150			'Servo Tilt en broche B.3, position neutre a 150
	
pwmout moteur, 125, 0 		' rapport cyclique a 0

dacsetup %10100000		' Configure le dac avec Vcc en reference

put 1,125				' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125				' Ecrit dans le scratchpad la valeur du point milieu de la direction
put 5,127				' Ecrit dans le scratchpad la valeur du point milieu du Pan de la caméra
put 7,255				' Ecrit dans le scratchpad la valeur du point milieu du tilt de la caméra
Incohérent! tu écris que tu mets les servo au milieu avec 150 et ensuite tu définis le milieu à 125 !!
d'ailleurs tes put xxxx ne servent à rien du tout.
 

dje8269

Senior Member
Renvoie tes programmes modifiés.
Ok j'apporte quelques vérifications , Pour les rendre plus lisibles.

Dans tes programmes, pense à définir par des symboles toutes tes sorties et tes entrées.
Je vais le faire , au début je le faisais , mais quand c'était plus simple ; Car après je confondais , la broche et la valeur de la broche et pin qui correspond a la valeur mais dans certains seulement . bref je vais trouver un système afin de m'y retrouver pour les prochains .

Incohérent! tu écris que tu mets les servo au milieu avec 150 et ensuite tu définis le milieu à 125 !!
d'ailleurs tes put xxxx ne servent à rien du tout.
Non pas tant que ca.

En fait , je place le servo a 150 (physiquement) c'est a dire au milieu avec servopos . et ensuite j'écris dans la variable la position qui correspond au milieu CàD 125 . sans ca le servo fais un a-coup au démarrage .
Moi aussi je trouve ça bizarre les put au début car derrière il y as une lecture donc un changement de valeur . je vais re-essayer des les enlever , mais pour moi ça va pas fonctionner correctement ;

Je vais aussi anticiper sur le bouton "débutant". J'ai deux solutions , le bloquant simplement an changeant la valeur max de pmw , ou refaire un courbe avec la nouvelle valeur max, pour garder un gros débattement .

Je vais inclure aussi le bouton allumage de la camera .

Allez je mets tout les programmes au "propre" ; et je vous montrent .
 

dje8269

Senior Member
bonjour à tous ,

Pour ce week end du premier mai , je reçois du monde à la maison . Donc moins de temps a consacrer a la voiture et plus a l'apéro :p

Voici les 3 premiers programmes : l'émetteur , le récepteur , et la musique . Il reste le 28X2 qui demande plus de travaille ......

Emetteur :
Code:
#PICAXE 20M2
'#################################################################################
'##########################    Programme Emetteur    ############################	
'#################################################################################

'##########################    configuration    ################################	
' B_ pour Broche, c'est le nom ou est branché le composant
' E_ pour Etat, c'est la valeur de la broche
' V_ pour variable, ou est enregistrée l'Etat de la broche

symbol B_TX = B.4
symbol B_DONNEE = B.7
symbol E_Klax	= pinC.6
symbol E_Phare= pinB.5
symbol E_Gyro= pinB.6
symbol E_sirene= pinB.1
symbol E_chgt= pinB.3
'symbol E_camera = pin???
'symbol E_debutant = pin???

dirsC = %00000001	'declare C.0 comme sortie
dirsB = %10010000 'declare B.4 et B.7 en sortie

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

setfreq m32		'Mets la freq à 32Mhz, RFout se met a 4 mzh puis repasse à 32Mhz

high B_TX	' On allume le TX , pour une option d'extinction en cas d'inactivité

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

do

readadc C.3,b1		'Av/ar voiture
readadc C.2,b3		'Dr/ga voiture
readadc B.2,b5		'pan de la caméra
readadc B.0,b7		'Tilt de la caméra

bit0 = E_Klax
bit1 = E_Phare
bit2 = E_sirene
bit3 = E_Gyro
bit4 = E_chgt
'bit5 = E_camera
'bit6 = E_debutant

rfout B_DONNEE,(b0,b1,b2,b3,b4,b5,b6,b7) 	'envoi des données par RF
	
loop
Le récepteur en master:
Code:
#PICAXE 14M2

'#################################################################################
'##########################    Programme Recepteur    ############################	
'#################################################################################

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

dirC.0=0				'declare C.0 en entrée DATA

inputtype %0000000100000000 	'met la broche C.0 en  mode TDS


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

setfreq m4

hi2csetup i2cmaster, %10100000, i2cfast_4, i2cbyte 	' met le 14M2 en mode maitre


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

RFin C.0,b0,b1,b2,b3,b4,b5,b6,b7		' Enregistre les données du RX

hi2cout 0,(b0,b1,b2,b3,b4,b5,b6,b7)		' Envoi des données au scratchpad du 28X2 esclave

loop
et le Musical :

Code:
#PICAXE 08M2

'#################################################################################
'##########################    Programme Musique    #############################	
'#################################################################################

'########################  Configuration  ########################
' B_ pour Broche, c'est le nom ou est branché le composant
' E_ pour Etat, c'est la valeur de la broche
' V_ pour variable, c'est l'endroit ou est enregistrer la valeur de la broche


 

Symbol B_ordre = C.4
symbol V_ordre = b1
symbol V_type_sirene = b6
symbol V_inter = bit0
'variable pour pompier b2,b4,b5,b20,b21, w9 ,w10

dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée

'########################  Initialisation  ########################
 
 read 0,V_type_sirene	'On lit la derniére sirene enregistrée
 
 pwmout 2,off		'On eteint le son
 
 V_ordre = 0		'valeur de l'ordre à 0
 V_inter = 0 		'interrutpeur sur Off	
 
  
'#################################################################################
'##########################    Programme Principal    ############################	
'#################################################################################

do
 
readadc B_ordre,V_ordre		' Lecture de l'action à realiser

loop

'############################
' deuxiéme tâche
Start1:
do
   	'##### KLAXON #####
	if V_ordre=24 then		' Si appui sur klaxon
						
		if V_inter = 1 then	' Si la siréne etait lancée, on arrete start2 pour ne pas se marcher dessus
			suspend 2
		end if
 		 
 		do
			pwmout pwmdiv16, 2, 143, 460 	' Le klaxon doit durer tant que la valeur est recu
		loop while V_ordre=24			' on boucle tant que le bouton est appuyé
 	
		pwmout 2,off				' On eteint le son
		
		if V_inter = 1 then 	' On reprend start2
			resume 2
		end if					
 	end if
 	
 	'##### CHANGEMENT #####
 	if V_ordre=72 then			' Si appui sur changement
 		
 		do					' Anti-rebond
		loop while V_ordre=72

		inc V_type_sirene			' On change la sirene
			
			if V_type_sirene > 4  then	' On reboucle entre 0 et 4
				V_type_sirene = 0
			end if

		write 0 , V_type_sirene		' On enregsitre la nouvelle valeur en EEPROM
		
		restart 2				' RAZ de start2 "sirene" pour prise en compte du nouveau changement
	end if
 	 	
 	'##### LANCEMENT #####
 	if V_ordre=120 then			' Si appui sur sirene
 		
 		do					' Anti-rebond
		loop while V_ordre=120
 	
		inc V_inter				' Inversement de l'interrupteur
 			
		if V_inter = 0 then 
			restart 2			'Si l'interrupteur est a 0, on eteint le son en resetant la start2 ;
		end if
 	end if
 	 	
loop

'############################
' troisiéme programme

start2:
pwmout 2,off		' On eteint le son au lancement du start2

do

	if V_inter = 1 then	' Si l'inter est à ON , alors on joue la sirene correspondante
		on V_type_sirene goto pompier,police,gendarme,ambulance,pompierUS
	end if
loop

'---------------------------- 
pompier:
  
do
 pwmout pwmdiv16, 2, 143, 287		'fréq = 435 Hz
 pause 1070
 pwmout pwmdiv16, 2, 127, 256		'fréq = 488 Hz
 pause 1070
 loop
 
'---------------------------- 
police:
do
 pwmout pwmdiv16, 2, 143, 287		'fréq = 435 Hz
 pause 545
 pwmout pwmdiv16, 2, 107, 216		'fréq = 580 Hz
 pause 545
 loop
 
'----------------------------  
gendarme:
 
do
 pwmout pwmdiv16, 2, 143, 287		'fréq = 435 Hz
 pause 545
 pwmout pwmdiv16, 2, 84, 171		'fréq = 732 Hz
 pause 545
 loop
 
'----------------------------  
ambulance: 

do
 pwmout pwmdiv16, 2, 148, 298		'fréq = 420Hz
 pause 166
 pwmout pwmdiv16, 2, 120, 242		'fréq = 516Hz
 pause 166
 pwmout pwmdiv16, 2, 148, 298		'fréq = 420Hz
 pause 166
 pwmout 2, off
 pause 1500 
loop
'----------------------------  
pompierUS:
 
b2=205
 w9=b2*2
 b4=65
 
Do
 random w10 'w10=(b21,b20)
 w10=5*b20 +400 'w10 aléatoire de 400 à 1675 mS
 
do 
dec b2 'glissement fréquence montée 
w9=b2*2 'rapp cyclique 50%
 pwmout pwmdiv16, 2, b2, w9
 pause 30
 loop while b2>b4 'b4=65 -->940 Hz
 
pause w10
 
random w10 'w10=(b21,b20)
 w10=4*b20 'b20 = 0 à 255 --> w10= 0 à 765
 b21=b21//4 'b21=0,1,2,3
 b5=51*b21+100 'b5 aléatoire: 100(620Hz) , 151(410Hz), 202(308Hz), 253(246Hz)
 
do
 inc b2 'glissement fréquence descente
 w9=b2*2
 pwmout pwmdiv16, 2, b2, w9
 pause 50
 loop while b2<b5 'relance sirène suivant fréquences
 
pause w10
 
Loop
 

dje8269

Senior Member
Bonsoir à tous,

Pour le 28X2 cela devrais bien se rapprocher de celui la . Je n'ai pas encore defini ma stratégie pour le gyro .... mais je pense le dédié au 08M2 au final . j'ai peur que ca abaisse la réactivité qui pour moi reste au la priorité Numéro 1 .

Ne pas en tenir compte donc, de ma premiere ebauche de reflexion sur le gyro .

Code:
#PICAXE 28X2

'#################################################################################
'##########################   Programme 28X2 Slave   #############################	
'#################################################################################

' B_ pour Broche, c'est le nom ou est branché le composant
' E_ pour Etat, c'est la valeur de la broche
' V_ pour Variable, ou est enregistré l'Etat de la broche


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

'b0 à b7 pour les communications

Symbol V_TOR = b0
Symbol V_moteur = b1
Symbol V_direction = b3
Symbol V_Pan = b5
Symbol V_Tilt = b7
symbol V_compteur_com = b8
Symbol V_Secu = b9
Symbol V_compteur_secu = b10

Symbol V_Klaxon = bit0
Symbol V_Phares = bit1
Symbol V_sirene = bit2
Symbol V_Gyro = bit3
Symbol V_Chgt = bit4
Symbol V_camera = bit5
Symbol V_debutant = bit6
Symbol V_inter_gyro = bit7

Symbol B_gyro1 = A.0
Symbol B_gyro2 = A.1
Symbol B_moteur = B.0
Symbol B_Direction = B.1
Symbol B_Pan = B.2
Symbol B_Tilt = B.3
Symbol B_Sirene = B.5
Symbol B_sens = C.6
Symbol B_Secu = C.7


dirsA = %0101	'declare les broches A.0 et A.2 en sortie
dirsB = %00001111 'declare les broches B.0, B.1, B.2, et B.3 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_Direction,150		' Servo direction en broche B.1, position neutre a 150
servo B_Pan,150			' Servo Pan en broche B.2, position neutre a 150
servo B_Tilt,150			' Servo Tilt en broche B.3, position neutre a 150
	
pwmout pwmdiv16, B_moteur, 125, 0 	' rapport cyclique a 0

dacsetup %10100000 		' Configure le dac avec Vcc en reference

tmr3setup %00000011		' Configure le timer3 pour les telerupteurs

put 1,125				' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125				' Ecrit dans le scratchpad la valeur du point milieu de la direction
put 5,127				' Ecrit dans le scratchpad la valeur du point milieu du Pan de la caméra
put 7,255				' Ecrit dans le scratchpad la valeur du point milieu du tilt de la caméra

Low B_sens				' Met le relais à l'état bas ( par default marche avant)
V_compteur_com = 0		' RAZ du compteur d'erreur communication	
V_compteur_secu = 0		' RAZ du compteur de securité moteur

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

main:
do
	get 0,b0,b1,b2,b3,b4,b5,b6,b7	' Lecture du scratchpad
	
'-----------------------------------	
'##### perte de communication  #####

if hi2cflag = 0 then 					'Si flag=0, donc perte de com

	V_compteur_com = V_compteur_com + 1 max 25'Compteur d'erreurs de flag
		
		if V_compteur_com > 40 then 		' en augmentant le chiffre , on augmente le delai de  reaction
			gosub Escape			' Si plus de 40 erreurs à la suite, on arrete la machine
		end if					
	else
	hi2cflag = 0		're-armement du flag
	V_compteur_com = 0	'RAZ du compteur			
end if

'------------------------------
'#####  Commande des TOR  #####

if V_TOR = 0 then		' Si pas de bouton appuyé , daclevel = 0
daclevel 0
end if

if V_Klaxon = 1 then	' Correspond au klaxon , bouton sur le joystick
daclevel 3
end if

if V_Phares = 1 then	' Correspond aux phares bouton de droite
	
	if timer3 > 20 then	'Fonction télérupteur . Compteur avec le timer3
		toggle C.5		'le BP est préssé ET le temps est superieur au compteur alors  on inverse l'interrupteur 
		timer3 = 0		'On ré-arme le compteur en le mettant a 0
	end if
	
end if

if V_sirene = 1 then		' Correspond au lancement de sirene , bouton du bas
daclevel 15
end if

if V_Gyro = 1 then		' Correspond aux gyrophares bouton de gauche

	if timer3 > 20 then	'Fonction télérupteur . Compteur avec le timer3
		inc V_inter_gyro
		high B_gyro1
		timer3 = 0
	end if	
end if

if V_inter_gyro = 1 then
	toggle B_gyro1
	toggle B_gyro2
else
	low B_gyro1
	low B_gyro2
end if

if V_Chgt = 1 then		' Correspond au changement de sirene , bouton du haut
daclevel 9
end if

'if bit? = 1 then		' Correspond au declenchement caméra
'high C.2
'end if


'--------------------------------
'#####  Commande du moteur  #####

Select Case V_moteur			

Case < 101 		'Marche arriere
	high B_sens
	V_moteur = 100 - V_moteur		' Mise a l'echelle
	w13 = V_moteur*37/10+130  max 500
	
	
Case > 128		'Marche avant
	low B_sens
	V_moteur = V_moteur - 129		'Mise a l'echelle
	w13 = V_moteur*3+130 max 500		'130 commence à faire avancer la voiture.
	
else
	w13 = 0					'Sinon point milieu , donc a l'arret

end select

pwmduty B_moteur, w13				'envoi du pwm sur le moteur

'--------------------------------
'#####  Sécurité du moteur  #####

readadc B_Secu, V_Secu					' Lecture de la broche securité
	if V_Secu > 90 then 				' Pour eviter les coupures intempestives sur un simple choc on compte avant de couper le moteur
		
		V_compteur_secu = V_compteur_secu + 1 max 30
		
			if V_compteur_secu > 20 then 	' Si le moteur est au dessus de 90 pendant 20 cycles
				pwmduty B_moteur,0	' On coupe le moteur
				pause 3000			' On fais une pause
				V_compteur_secu = 0	' On RAZ le compteur
			end if
	else
	V_compteur_secu=0

	end if

'--------------------------------------
'#####  Commande de la direction  #####
'Tourne à gauche (V_direction > 125) / position du servo de 150 à 95-105(fourchette max) 
'Tourne à droite (V_direction < 125) / position du servo de 150 à 190-193(fourchette max)

V_direction = V_direction* 9 / 25		' Mise à l'echelle
V_direction = 192 - V_direction

servopos B_Direction,V_direction		' Positionnement du servo

'------------------------------------
'#####  Commande Pan de la camera  #####
'tourne a gauche de 150 à 235, a droite de 65 à 150
 
V_Pan = V_Pan * 7 / 10		' Mise a l'echelle
V_Pan = 238- V_Pan min 65

servopos B_Pan,V_Pan		' Positionnement du servo

'--------------------------------------
'#####  Commande Tilt de la camera  #####
' Vers le haut	de 70 à 150			

V_Tilt = V_Tilt/3+70 max 150		' Mise à l'echelle

servopos B_Tilt,V_Tilt			' Positionnement du servo

Loop

'####################################################################################################
'					Programme Subsidiaire
'####################################################################################################


'########     Perte de communication     ##########
Escape:

do while hi2cflag = 0		' Tant que le scratchpad n'as rien recu on eteint le moteur
	pwmduty B_moteur,0
loop

V_compteur_com = 0		' En sortant de la boucle, c'est que la communication est revenue
hi2cflag = 0			' On remet le compteur a 0 et on ré-arme le flag
return
Je suis actuellement sur la rénovation et la finition de l'émetteur .

Et je me demandais si vous aviez une idée comment traiter une absence pour éteindre l'émetteur ;
en effet l'émetteur fais plus de 400mW alimenté en 14.4V . Donc je désire l'éteindre si inaction pendant disons 30 secondes environ . et dés qu'une commande est touchée il se rallume . Les entrées a surveiller je pense dans la logique devrait être les commandes analogiques de direction, de moteur , et de caméra . Les autres n'ont pas vocation à être utilisé sans que la voiture ne roule .

Bien sur il faudra que ce soit le moins contraignant, et le plus rapide pour que le l'émetteur n'en soit pas "trop" affecté , et garder un max de réactivité.

PS: la caméra et le mode débutant s'effectueront par un interrupteur a glissière .
 
Last edited:

PieM

Senior Member
Bonsoir,

A mon avis, pour éviter de faire une multitude de tests, tu mets sur ton boitier à un endroit sur lequel la main pose obligatoirement, une électrode touch-pad que tu relies à ton 20M2. Tu utilises l'instruction touch16 (voir doc) qui te met ce que tu veux en marche ou en sommeil.
 

dje8269

Senior Member
tu mets sur ton boitier à un endroit sur lequel la main pose obligatoirement
Ceci serait presque impossible et/ou aléatoire . Il faut penser que c'est enfant qui est prévu , utiliser la voiture ; de plus sans la voire, Et comme je l'ai déjà fais, des fois on pose la télécommande sur la table pour ne piloter qu'avec les joysticks , donc rien ne touche la télécommande ;

L'idée hard me parait plutôt delicate dans ce cas de figure, car il y as beaucoup de contraintes de détection . je pensais plutôt additionner les 4 bytes analogique des joysticks . en la comparant au valeur des 4 points milieux j'obtiendrais si oui ou non ou touche a quelques choses ;

Si pendant 30 secondes ou une minutes , la somme des bytes et comprise dans la fourchette des points milieux c'est que rien n'as bougé et donc on éteint le Tx . un truc du genre ! mais je bloc sur le timer encore !!!
 

PieM

Senior Member
Il faut que ton programme soit dans une boucle do while timer < (30 secondes), et que dans le corps du programme tu remettes le timer à 0 dès que ta somme des readadc est en dehors de la fourchette. Mais vu la tolérance sur la somme tu risques de perdre de la sensibilité autour des points milieu.
 

dje8269

Senior Member
Il faut que ton programme soit dans une boucle do while timer < (30 secondes), et que dans le corps du programme tu remettes le timer à 0 dès que ta somme des readadc est en dehors de la fourchette. Mais vu la tolérance sur la somme tu risques de perdre de la sensibilité autour des points milieu.
D'accord je vais creuser dans ce sens, pour voir la faisabilité .

Je suis en train de faire le typon final pour l'emtteur .

J'ai rapproché la broche donnée du picaxe de celle de l'emetteur pour eviter les parasites . Je vais mettre un BNC pour mettre une antenne correcte avec une masse . J'ai eloigner au plus loin le regulateur de l'emetteur . Je vois pas trop quoi faire de plus, afin d'emettre dans les meilleurs conditions .
 

PieM

Senior Member
Je suis en train de faire le typon final pour l'emtteur .
Pour éviter d'improviser, tu devrais t'inspirer de cette doc pour ton typon ...View attachment TX433_1.pdf

Quant à l'arrêt de l'émetteur, je te conseille d'y penser quand tout le reste fonctionnera ! Ne pas mettre les accessoires avant l'essentiel !

Autre remarque: tu persistes à utiliser un timer pour faire une bascule ; mais je vois que tu vas l'utiliser plusieurs fois pour des actions différentes ? Alors prépare toi à une galère...
 

dje8269

Senior Member
Pour éviter d'improviser, tu devrais t'inspirer de cette doc pour ton typon ...TX433_1.pdf
Merci bien !! je vais lire ca , avec interet , même si c'est en anglais!! . j'adapterais a mon TX qui lui est en 12V à 15V .

Quant à l'arrêt de l'émetteur, je te conseille d'y penser quand tout le reste fonctionnera ! Ne pas mettre les accessoires avant l'essentiel !
Tout fonctionne bien pour le moment , je me dirige donc vers la fin et le paufinage . Effectivement et tu as raison pour le moment, l'arret de l'emetteur ce n'est pas une priorité mais il faut que je pense pour la suite .
Je suis en train de pousser le 20M2 a ces limites lol !!!! . toutes les broches vont etre utilisés . j'ai rajouter deux BP "au cas ou", et je vais rajouter deux transistor sur des sorties " au cas ou" aussi .

Autre remarque: tu persistes à utiliser un timer pour faire une bascule ; mais je vois que tu vas l'utiliser plusieurs fois pour des actions différentes ? Alors prépare toi à une galère...
Ok , disons que pour le moment, je n'ai eu aucun probléme avec, mais je me prepare a changer de solution . Le timer3 est utilisé seulement quand on fais une bascule , je n'ai pas essayé si on en fait deux en même temps ou truc du genre ; Il ne seras pas souvent utilisé. Mais je prends note . Merci
 

dje8269

Senior Member
Sinon j'avais une autre question importante :

Sur un 20M2 la broche 19 est noté Sérial Out (DAC) ! Le serial Out est il reservé pour la programmation ou je peux m'en servir en tant que "OUT" a part entiére , pour transmettre mes données au DATA de l'emetteur ? ceci me permettras de libérer la patte 18 actuellement utilisée pour les DATA comme entrée du coup !
 

PieM

Senior Member
Sinon j'avais une autre question importante :

Sur un 20M2 la broche 19 est noté Sérial Out (DAC) ! Le serial Out est il reservé pour la programmation ou je peux m'en servir en tant que "OUT" a part entiére , pour transmettre mes données au DATA de l'emetteur ? ceci me permettras de libérer la patte 18 actuellement utilisée pour les DATA comme entrée du coup !
Oui, tu peux t'en servir comme une sortie normale. Par contre si tu programmes sur place, tu vas envoyer des trucs vers ton TX...
si c'est gênant, tu peux mettre un cavalier pour l'isoler .
 

dje8269

Senior Member
Oui, tu peux t'en servir comme une sortie normale. Par contre si tu programmes sur place, tu vas envoyer des trucs vers ton TX...
si c'est gênant, tu peux mettre un cavalier pour l'isoler .
Parfait , oui je programme sur place, mais ce n'est pas genant car l'emetteur emettera les infos je sais pas ou . je verrais pour prevoir un cavalier tout de meme !

Merci bien , le typon final se dessine bien .

Une autre question bête , est ce qu'avec la broche DAC je peut allumer une led trois couleurs en faisant varier les niveaux ?
 

dje8269

Senior Member
Ok, tant pis pour moi , c'était pour faire un joli effet de style .

Sinon encore une pour la route . si je compare la tension de la batterie de télécommande de 4x3.6 = 14.4V, sur une entré ADC, je dois bien grâce un pont diviseur de tension faire tomber la tension en dessous des 5V de l'alimentation du picaxe. ceci pour faire une petite visu sur la tension des piles !

Je vais vous faire grâce de mon typon , mais voici le schéma , si jamais vous voyez quelques choses de bizarroïde n'hésitez pas car demain je sors le typon et je fais la nouvelle Télécommande .

PS : chaque BP à un condo de 0.1µF a ces bornes pour l'anti rebond

Sans titre.jpg
 
Last edited:

dje8269

Senior Member
Pour éviter d'improviser, tu devrais t'inspirer de cette doc pour ton typon ...TX433_1.pdf
J'ai pas trouver de traduction française . Je trouve ça super important, mais j'ai pas tout compris ......

Sur la fig.2 ; la line 50ohms coupe le circuit ?? impossible !! je voudrais faire les choses dans les regles de l'art .... mais la je seche . Je vais continuer mes recherches pour une traduction ....
 

PieM

Senior Member
la line 50ohms coupe le circuit ?? impossible !!
la ligne 50 Ohm va de la broche antenne (11, ici) à la connexion antenne. Il n'y a rien qui coupe le circuit ! Tu dois trouver la même chose sur la doc du TX que tu as acheté....

je dois bien grâce un pont diviseur de tension faire tomber la tension
Ben oui. Prendre une marge de sécurité et mettre une diode (faible tension directe de préférence) entre l'entrée ana et le +5V au cas où...

Sortie C.0 : un transistor (pas le bon, et mal polarisé) avec une 330R au mauvais endroit pour commander une led ?
Il y a du +12V et du + 14.4V ?

n'hésitez pas car demain je sors le typon et je fais la nouvelle Télécommande .
Evite si c'est pour faire un typon qui correspond à ton schéma !
 
Last edited:

dje8269

Senior Member
Tu dois trouver la même chose sur la doc du TX que tu as acheté....
Je l'ai pas achété , c'est de la recup !!! pas de notice avec :mad:

Plus y'as de masse mieux c'est ? car je peux fabriquer une petite plaque en alu pour fixer la prise BNC du coup, et je la relierais à la masse .

MAJ du schéma , pour le transistor erreur de retournement du composant pour la resistance aussi ;

Pardon il y as du 14.4V ( 4 piles de 3.6V)

Je n'ai pas compris comment tu veux que je branche la diode ( schoktty je crois) et dans quelle sens et son but

Je suis en train de finaliser le typon avant de le lancé
Sans titre.JPG
 

PieM

Senior Member
transistor toujours mal polarisé !!
pourquoi un transistor pour commander une led ??
La diode doit être connectée de façon à ce que la tension sur l'entrée ana ne puisse pas dépasser 5V + 0.6V
pas compris la prise BNC ; tu veux démonter l'antenne ?
 

dje8269

Senior Member
transistor toujours mal polarisé !!
??? je vois pas la !!

pourquoi un transistor pour commander une led ??
Pour ne pas abimer ou gener le µC ? je peux la branxhe en direct sans risque de perte de courant pour les autres pattes ? ou alors je pourrai me servir du transistor pour mettre autre chose dans le futur ! ( même si je vois pas quoi a part un buzzer)

La diode doit être connectée de façon à ce que la tension sur l'entrée ana ne puisse pas dépasser 5V + 0.6V
Je propose une zener alors ?

pas compris la prise BNC ; tu veux démonter l'antenne ?
Je dispose de belle antenne adaptée a la frequence avec embout BNC . Et effectivement je pourrais ainsi la demonter rapidement .
 
Top