capteur suiveur de ligne

margamas

Member
bonsoir
désolé mais je n'ai rien trouvé dans le forum français consacré au Picaxe concernant le suivi de ligne
 

MGU

Senior Member
Bonjour,

Après essai, ce capteur doit fonctionner.
En simulant le PT par des couples de R, 220k/100k, 100k/47k, 47k/4k7
Au moins un des couples correspond à la réalité, l'écart est sans doute plus important
La détection est parfaite en jouant légèrement sur la pause après le reverse.

Code:
#picaxe 08M2
Do
high C.1
pause 1
reverse C.1
pause 1  	        ;jusqu'à pause 4 avec 220k/100k
			;pause 1 ou 2 avec 100k/47k
			;et pas de pause avec 47k/4k7
if pinC.1 =1 then 
	high C.2
	else low C.2
endif 
loop
Le schéma du test:
 

Attachments

PieM

Senior Member
En simulant le PT par des couples de R, 220k/100k, 100k/47k, 47k/4k7
ce n'est pas 22nF mais 2.2nF et un transistor c'est mieux de le simuler avec une diode dans le sens passant pour tenir compte de la jonction.
 

MGU

Senior Member
ce n'est pas 22nF mais 2.2nF et un transistor c'est mieux de le simuler avec une diode dans le sens passant pour tenir compte de la jonction.
Va pour 2,2nF
Une diode... Ok

Et bien ça fonctionne encore, mais il ne faut aucune pause, le reverse en tient lieu

Sans la diode, R=220k -> led allumée . Avec R= 100k -> led éteinte

Avec diode, R=220k ou 100k -> led allumée . Avec R= 220k//47k ou 100k//47k-> led éteinte

Pour moi, c'est OK.

J'ai essayé #38, j'ai attendu, mais pas d'affichage.

Avec 2,2 nF, on a juste le temps d'exécuter le reverse, après c'est fichu, c'est toujours 0. Mais ça fonctionne bien comme ça.
Il faut tester les trois sorties en séquence, séparément. Sans conséquence sur le fonctionnement global

MM
 

BESQUEUT

Senior Member
J'ai essayé #38, j'ai attendu, mais pas d'affichage.
Comme indiqué dans ce même post, essayer avec une boucle principale plus courte : 60, 600 ou 6000 en fonction de la vitesse du Picaxe qui gagne à être au maxi.
 

margamas

Member
bonjour
j'avoue que je suis un peu perdu
si ça intéresse quelqu'un, je peux lui envoyer un des capteurs pour qu'il puisse le tester
merci
 

MGU

Senior Member
Comme indiqué dans ce même post, essayer avec une boucle principale plus courte : 60, 600 ou 6000 en fonction de la vitesse du Picaxe qui gagne à être au maxi.
Bonjour,
J'ai essayé à 32MHz, et des valeurs de 60 à 60000, la réponse est toujours 1
 

MGU

Senior Member
bonjour
j'avoue que je suis un peu perdu
si ça intéresse quelqu'un, je peux lui envoyer un des capteurs pour qu'il puisse le tester
merci

Bonjour,

En fait, ça fonctionne, même avec des fréquences de 4 à 32MHz.

Code:
#picaxe 14M2
setfreq M32

Do
	high C.0
	pause 1
	reverse C.0
	pause 3		;pause =1 ou 2 ou 3	
				;R=150k->B0=1
				;R=150k//47k->B0=0 
	if pinC.0 =1 then
		high B.0
		else low B.0
	endif
	
	;même code pour C.1 et C.2
loop
Un petit test pour en savoir plus. Dans le capteur analogique, le condo de 2,2 nF est remplacé par une R de 47k.

Le test consiste à placer une R de 47k entre la sortie et le + alim et de mesurer la tension de sortie lue au voltmètre avec une surface blanche et une surface noire.

Cela permettra de reproduire le comportement du PT, au lieu de simuler par des R de 150k et 150k//47k.

Essayez le code ci dessus et dites le résultat

MM
 
Last edited:

margamas

Member
ça marche !

j'ai essayé votre code

Code:
#picaxe 14M2
setfreq M32

Do
	high C.1, C.2
	pause 1
	reverse C.1, C.2
	pause 3		 
	if pinC.1 =1 then
		high B.1
		low B.2
else
	if pinC.2 =1 then
		high B.2
		low B.1
		
	else high B.2
		high B.1
	endif
endif	
	
loop

ça fonctionne bien
merci beaucoup
mes élèves vont être ravis
 

margamas

Member
je pense que c'est le "setfreq M32" qui permet le bon fonctionnement

Code:
#picaxe 14M2
setfreq M32

Do
	high C.1, C.2
	pauseus 12
	reverse C.1, C.2
	pause 1		 
	if pinC.1 =1 then
		high B.1
		low B.2
else
	if pinC.2 =1 then
		high B.2
		low B.1
		
	else high B.2
		high B.1
	endif
endif	
	
loop
ça marche très bien avec les temporisations préconisées par la documentation du capteur t1=12µs t2=1ms
merci encore pour votre aide
 

MGU

Senior Member
j'ai essayé votre code

ça fonctionne bien
merci beaucoup
mes élèves vont être ravis
Bien, tant mieux.

Une remarque, dans le code en #50 , avec un seul test, le code fonctionne pour pause 1, pause 2, pause 3, et ne fonctionne plus avec pause 4.
Si on augmente le nombre de test, il est préférable de diminuer la valeur de pause.
Si pause 1 ou pause 2 fonctionne, prenez plutôt cette valeur.

Des fréquences plus basses que 32MHz fonctionnent aussi.
Le résultat du test avec la R de 47k et le voltmètre permettrait d'optimiser.

A 32 MHz, pause 1 ne correspond pas à 1ms
4MHz -> 1ms
8 MHz -> 500 µs
16 MHz -> 250 µs
32MHz -> 125 µs

L'essentiel est que cela fonctionne

MM
 

PieM

Senior Member
D'une part, pause est fonction de la fréquence d'horloge, mais pauseus est très imprécis en dessous de 1000! et son unité est 10µs et non 1 µs...
pour info, mesuré sur un 14M2 à 4MHz:

Pauseus 51 044 µs
Pauseus 101 094 µs
Pauseus 501 533 µs
Pauseus 1002 038 µs
Pauseus 2003 022 µs
Pauseus 5006 189 µs
Pauseus 100010 726 µs
Pauseus 500051 235 µs
Pauseus 10000100 635 µs
 

MGU

Senior Member
En plus, 2,2 nF et 220 ohms, ça fait un RC d'environ 0,5 µs.

Si on considère qu'il faut 5 RC pour décharger le condo, on obtient 2,5 µs

Et vu la vitesse des picaxes, même à 32 MHz, une pause de 2,5 µs, c'est du décor.

Et donc le pauseus 12, on peut l'enlever, et ça fonctionne toujours.

MM
 

margamas

Member
amélioration du programme

bonsoir
j'ai ajouté un capteur ultrason à mon projet
voici le code
Code:
#picaxe 14M2
setfreq M32

Do
	pulsout C.4, 8	
	pulsin C.4, 1, w6
	pause 100
	w6 = w6 * 1 / 58
	
	
if w6 > 10 then
	
	high C.1, C.2
	reverse C.1, C.2
	pause 1
			 
	if pinC.1 =1 then
		high B.2
		low B.1
	else
		if pinC.2 =1 then
		high B.1
		low B.2
		
		else high B.2, B.1
		
		endif
	endif	
else
		low B.1, B.2
endif	
loop
ça fonctionne mais les moteurs manquent de puissance
quand je met une pause trop faible après pulsin ( pause 10) les moteurs font du bruit mais ne tournent pas
quand je met une pause supérieure (pause 100) ils marchent faiblement
vous avez une idée ?
 

prubi

New Member
Bonjour
J'ai lr même problème avec une carte Chi035 picaxe 18m2 et ce capteur de ligne
Est-ce que je peux utiliser ce capteur directement :eek:u faut il une interface?
Merci
 

PieM

Senior Member
Bonjour
J'ai lr même problème avec une carte Chi035 picaxe 18m2 et ce capteur de ligne
Est-ce que je peux utiliser ce capteur directement :eek:u faut il une interface?
Merci
Bonjour,
Pas d'interface puisque le capteur doit être relié directement à des broches capable d'être des entrées et des sorties.
Attention à enlever toutes les résistances de pull down correspondantes à ces E/S de la CHI035 !

Sincèrement, je pense qu'utiliser ce type de capteur avec un Picaxe est source de galères !
le principe de travailler sur l'évaluation de niveaux de tension sur des temps très courts est peu judicieux .
Ce capteur est fait pour des µC du type Parallax STAMP qui a une fonction toute faite (RCTIME), ou des µC non interprétés type Arduino.
L'utilisation de capteurs type CNY avec schéma adapté est davantage conseillée. Il y a sur le sujet de nombreux posts dans le forum.
Il faut toujours évaluer coûts <-> emmer..nt !
 

prubi

New Member
Merci pour le conseil, je crois que je vais le suivre. C'est surtout le coût de ces circuits qui me semblaient intéressants mais bon... je vais me tourner vers les CNY.
 

PieM

Senior Member
Merci pour le conseil, je crois que je vais le suivre. C'est surtout le coût de ces circuits qui me semblaient intéressants mais bon... je vais me tourner vers les CNY.
Pour à peine plus cher, un produit bien conçu et réglable : http://www.ebay.fr/itm/TCRT5000-IR-Infrarouge-Reflechissant-Photoelectrique-Capteur-Module-Ligne-Piste/311518330986?_trksid=p2047675.c100011.m1850&_trkparms=aid=222007&algo=SIC.MBE&ao=1&asc=20140620074313&meid=5a82869e50bf4b6cbee40ef3a7674989&pid=100011&rk=2&rkt=3&sd=281898733491
 
Top