Précédente Accueil Suivante

 

Accueil
Le projet IRBOT
Chassis roues
Servomoteur
Modif servos
Test servos
Le radar IR
Premiers pas robot
Détection collision
Télécommander
Test RC5
IRBOT et RC5
Mémo parcours
Mise en veille
Vers PIC16F628
Borne recharge
Compilateur CCS
Modif matérielle
Recharge du robot
Bip Bip ...
En musique
Vidéos
Téléchargements
Carte développ.
Liens Affiliation

Radar de détection Infrarouge

Pour détecter un obstacle se trouvant devant le robot nous allons utiliser un radar infrarouge.

Principe de fonctionnement

Le radar se compose de deux led émettrices infrarouge (une de chaque côté à l'avant) et d'un récepteur infrarouge au centre. Les led émettent à tour de rôle un faisceau lumineux infrarouge. Au cas où le faisceau est réfléchi, il revient percuter le récepteur infrarouge. En fonction de la led qui émettait, on sait de quel côté se trouve l'obstacle et l'on peut engager une manoeuvre de contournement.

Le récepteur infrarouge : SHARP IS1U60

Le récepteur réagit à un faisceau infrarouge modulé à une fréquence de 38khz. Sa sortie passe au niveau 0 lors de la réception. L'avantage de travailler avec une fréquence de 38khz est qu'on se prémunisse contre toute lumière parasite.

But à atteindre

Il va falloir qu'on génère des trains d'impulsions de 38khz vers les diodes émettrices et tester si la sortie du récepteur passe à 0. En cas d'obstacle, on allume une LED du côté correspondant.


Le schéma et les signaux en sortie du PIC


Le montage électronique réalisé sur la carte d'expérimentation pour PIC16F84



Le programme en CCS

Reprenons notre programme de test du servomoteur. Nous allons lui rajouter la fonction de détection d'obstacle en plus de la fonction de commande du servomoteur.
Il n'est pas nécessaire de détecter en permanence s'il y a obstacle. Si on le fait une fois toutes les 18ms, c'est largement suffisant. En plus, cela économise les piles.
18ms, ça tombe bien. On a déjà notre COMPTEUR1 qui comptes les interruptions pendant 18ms.
On va générer nos trains d'impulsions de 38khz à chaque passage de COMPTEUR1 par 180 afin de ne pas perturber la fonction de commande du servo qui est appelé à chaque fois que COMPTEUR1 =360.
Un petit calcul. f=38khz, donc t=1/f = 26µs.
La période de notre signal est de 26µs. On va envoyer un train de 50 impulsions ( c'est suffisant.) d'abord sur la LED INFRAROUGE gauche puis sur la droite. En même temps, on teste la sortie du récepteur infrarouge. (voir le schéma pour la forme des signaux)

Le programme dans le prochain post.



//**********************
// Programme principal
//**********************

main() {

init_timer();

while (TRUE) { // boucle sans fin

SENS=AV; // en avant pendant 3"
delay_ms(3000);
SENS=STOP; // stop 1"
delay_ms(1000);
SENS=AR; // en arrière 3"
delay_ms(3000);
SENS=STOP; // stop
delay_ms(1000);
SENS=AVP; // en avant petite vitesse 3"
delay_ms(3000);
SENS=STOP; // stop
delay_ms(1000);
SENS=ARP; // en arrière petite vitesse
delay_ms(3000);
SENS=STOP; // stop
delay_ms(1000);
}

}

 

Conclusion

Ca fonctionne à merveille.
Lorsqu'on rapproche un objet ( dans mon cas la boîte du servo ) à 20 cm, il le détecte bien. La LED s'allume du côté de l'objet. A noter qu'il est possible de règler la distance de détection en faisant varier l'intensité qui circule dans les LEDS.
En même temps le servo tourne impertubablement une fois dans un sens puis dans l'autre. Le système d'interruption fonctionne bien.
Le fréquencemètre m'affiche bien 38khz lorsque je mesure sur la LED. (nota: pour effectuer la mesure j'ai fait une petite modif du prog pour qu'il envoie en continu du 38k)

Un petit inconvénient tout de même : lorsqu'on lui présente un objet de couleur noir il ne le détecte pas du tout. Ceci est normal car le noir ne réfléchie pas la lumière. C'est pour cela qu'on a prévu une détection de collision par switch.

A très bientôt pour la suite.

 

Précédente Accueil Suivante