0

Boussole CMP03

_BOUSSOLE_CMP03

La boussole est un élément très important pour le robot. C’est elle qui va guider le châssis et lui donner la direction globale à atteindre. Les télémètres indiqueront les obstacles à éviter, et le robot risque de devoir faire des détours. La boussole lui redira alors la bonne direction à prendre dès l’obstacle franchit.

Il y a deux méthodes pour obtenir la position :

- A travers un signal PWM directement sur l’une des pins du capteur - En faisant une requête i2c.

La seconde possibilité à été retenue afin de permettre à n’importe quelle carte d’avoir accès à ces informations. Elle est plus longue à mettre en place mais nous permettra un plus large choix de possibilités.

C’est pourquoi, dans un premier temps, nous utilisons la PWM pour orienter le Robot. Il suffit de connecter la broche sur un port analogique du microcontrôleur et l’on obtient une tension fonction de la position.

Voici le schéma de la boussole que nous utilisons. Il faut noter que certaines broches sont à configurer en fonction des besoins. Par exemple la broche 7 doit être reliée à la masse car nous sommes en France et fonctionnons en 50Hz.

La broche 6 permet de calibrer notre module. Il est aussi possible de le faire via l’I2C en jouant avec le registre 15. Cependant, nous n’avons pas besoin de calibrer notre capteur car nous fonctionnons en positionnement relatif et non pas absolu. De plus, au démarrage, le robot n’as aucune idée de l’orientation du Nord magnétique. Mais la possibilité reste présente pour d’autres applications éventuelles…

1

Configurer votre microcontrôleur

module_PicKit2
Pour nos applications, nous avons choisis d’utiliser la famille des PIC en raison de la facilité de mise en place ainsi que l’étendue de l’aide que l’on peut trouver en ligne.

Nous étions sur des 16f877A et sommes passés aux 18f en raison d’une plus grande mémoire et de plus de possibilités. Nous publierons des articles en fonction de l’avancement de nos applications. Si vous avez des propositions d’applications orientés robotique, n’hésitez pas à nous contacter.

Microchip fournit des outils interressant pour le développement mais aussi parfois un peu couteux. Aussi nous avons opté pour l’utilisation du PicKit2 qui permet de faire les utilisations basiques des applications (charger, lire, nettoyer, mettre un point d’arrêt) voir ci-contre.

L’environnement de développement est MPLAB V8.1 qui est téléchargeable sur le site de Microchip. Pour développer, nous codons en C (et malheureusement pas en C++ mais nous cherchons toujours un moyen d’y arriver) en raison du compilateur qui ne supporte pas la programmation objet.

Voila, vous avez tout l’environnement pour programmer, et charger … charger quoi ? Hé bien il est temps de faire votre première carte pour créer vos applications. Pour la partie connexion entre la platine PicKit2 et votre micro-contrôleur vous pouvez vous référer à la fiche « connexion avec la platine PicKit2″ de la partie électrique

0

Présentation du bus I2C

I2clogo

Cet article n’a pas la prétention de faire un cours sur l’I2C mais juste de poser les points essentiels de ce protocole histoire du bien savoir de quoi on parle. Vous pouvez regardez la documentation de PHILIS ici .

Définition : I²C (pour Inter Integrated Circuit Bus) est le nom du bus historique, développé par Philips pour les applications de domotique et d’électronique domestique au début des années 1980, notamment pour permettre de relier facilement à un microprocesseur les différents circuits d’une télévision moderne. Ce bus porte parfois le nom de TWI

Ce bus est constitué de trois câbles:
- la masse (Vss)
- l’horloge (CLK)
- les données (SDA)

Il permet de commander de nombreux appareils avec un nombre réduit de câbles. Nous pouvons retrouver des commandes d’entrée sortie, des mémoires vives et morte, des commandes d’actionneur. Le tableau ci-dessous liste les composants sortis à ce jour permettant de nombreuses applications faciles à mettre en place.

référence description boitier dimension datasheet prix
PCF8574 Module d’entrées sorties 8bits DIL 20 19,50 x 8,25 mm

PCF8574 datasheet

3,50 euro
ISS Synthétiseur vocal DIL 40 52,50 x 15,80 mm

ISS datasheet

___
SD20 Commande de 20 servomoteur DIL 40 52,50 x 15,80 mm SD20 datasheet 19,50 euro
SD21 Commande de 21 servomoteur sur une carte déjà préparée avec une alimentation, l’environnement de fonctionnement du microcontroleur, et des broches pour venir connecter les servomoteurs dessus. carte électrique ___ SD21 datasheet 49,90 euro
D2000 Carte à puce au format ISO. C’est une carte comprennant de l’EEPROM non-crypté de chez PHILIPS. Elle contient de 2kbits à 8kbits en fonction de la carte carte à puce 53,98 x 85,60 mm 2,10 euro
CMPS03 Ce module est une bousolle électronique d’une précision de 3 à 5° qui sort la position sur 8 ou 16bits carte électrique 32 x 35 mm

CMPS03 datasheet

19,50 euro
SRF08 Ce module permet de mesurer la ditance de 3cm à 6m d’un obstacle par ultra-Sons. carte électrique 43 x 20 x 17 mm

SRF08 datasheet

57,20 euro
0

Allumer une LED a partir du PIC 18F4550

Vous êtes enfin près à écrire votre premier code! Nous allons juste faire un point rapide sur ce que vous avez à portée de main. Tout d’abord vous avez « LE BIGONOFF » !!! Vous pouvez le trouver facilement sur internet en allant sur son site. A la limite je pourrais m’arrêter là tellement sont travail est bien fait et son aide précieuse.

Cependant, les exemple de programmation qui vont vous être proposés ne sont que pour faire de l’assembleur ce qui peut être quelque peu repoussant dans un premier temps. Etant donné que notre robot est programmé en C, je vais vous montrer quelques exemples de codes qui pourraient vous aider pour débuter.

Tout d’abord il faut bien entendu faire un projet dans MPLAB et créer un fichier « main.c ».

Dans ce main on va mettre le code suivant que l’on va détailler après :

#include

int main()
{
ADCON1 = 0b00000000;
TRISA = 0b00000000;
PORTA = 0b11111111;

do{
// c’est ici que vous mettrez vos futures codes, après l’initialisation du PIC
}while(!0);

return 0;
}

Alors qu’est ce que c’est que tout ça ???
Bien je vous ai dit juste un petit programme pour commencer. Il n’est vraiment pas compliqué…
#include va permettre de dire qu compilateur quelle famille de microcontroleur on va utiliser. Sans ça, il va pas comprendre lorsque vous utiliserez des instruction qui ne font pas partie du langage C comme PORTA ou TRISA …
« ADCON1″ permet de mettre le PORT A de votre microcontroleur en mode numérique. Pour le mode analogique on verra plus tard (sinon allez voir le codage d’un télémètre dans la partie électronique)
Ensuite, « TRISA » permet de mettre le PORT A en sortie. Petit moyen mémotechnique :
O pour OUTPUT sortie
I pour INTPUT entrée
Enfin « PORTA = 0b11111111; » va mettre les sorties à 1. Elles sont ici codées en binaire mais vous aurriez pu le mettre ne hexa ce qui aurrait donné « PORTA = 0xFF » etc…
Jouez un peu avec les bits et vous comprendrez rapidement comment paramètrer vos PORTs
=> Oui mais moi j’ai qu’une LED à allumer sur la broche 0 du PORT A !!! Il y pas plus simple ?
Hé bien pas de panique il suffit de faire le code suivant

Alors qu’est ce que c’est que tout ça ??? Bien je vous ai dit juste un petit programme pour commencer. Il n’est vraiment pas compliqué…
#include va permettre de dire qu compilateur quelle famille de microcontroleur on va utiliser. Sans ça, il va pas comprendre lorsque vous utiliserez des instruction qui ne font pas partie du langage C comme PORTA ou TRISA …
« ADCON1″ permet de mettre le PORT A de votre microcontroleur en mode numérique. Pour le mode analogique on verra plus tard (sinon allez voir le codage d’un télémètre dans la partie électronique) Ensuite, « TRISA » permet de mettre le PORT A en sortie. Petit moyen mémotechnique :     O pour OUTPUT sortie     I pour INTPUT entrée
Enfin « PORTA = 0b11111111; » va mettre les sorties à 1. Elles sont ici codées en binaire mais vous aurriez pu le mettre ne hexa ce qui aurrait donné « PORTA = 0xFF » etc… Jouez un peu avec les bits et vous comprendrez rapidement comment paramètrer vos PORTs
=> Oui mais moi j’ai qu’une LED à allumer sur la broche 0 du PORT A !!! Il y pas plus simple ?
Hé bien pas de panique il suffit de faire le code suivant :

#include

int main()

{

ADCON1 = 0b00000000;

TRISA = 0b00000000;

RA0 = 1; // on met la broche 0 du PORTA à 1

do{

PORTA = 0×00; // pour initialiser le PORT à 0

DelayMs(1500); // on fait une temporisation pour clignoter il faut jouer avec la valeur pour que ce soit perceptible

RA0 = 0; // on met la broche 0 du PORTA à 0

DelayMs(1500);

}while(!0);

return 0;

}

Et voila. Bon c’étais juste un petit code pour se mettre en jambe. Cependant si vous rencontrez des soucis, n’ésitez pas à nous contacter pour que nous complétions notre article.

0

Les télémètres Infra-Rouge

capteur-distance-gp2y0a02yk-ir-sharp

Les télémètres infra-rouge vont vous donner un signal électrique proportionnel à la distance mesurée. Par exemple 1,2 V pour 6cm et 4,5V pour 27cm. Nous pouvons classer en deux catégories les télémètres infra-rouge:

-    Ceux de proximités qui vont donner une mesure de 4cm à 30 cm

-    Ceux de distance moyenne qui vont mesurer de 20 – 30 cm à 3 – 6 m
Pour avoir une distance exacte, le mieux est de se rapporter à la documentation technique du composant en allant voir le graphique de rapport voltage/dictance. Ensuite de faire ces propres mesures pour être sûre des valeures

Les télémètres infra-rouges sont les principaux capteurs de nos robots en raison de leur performance, de leur précision et de leur coup faible comparé à l’ultra_son. Cependant, il ne faut pas oublier de prendre en compte le fait de l’infra-rouge reste influençable par la lumière et la couleur des objets. Il faut donc bien prendre en compte ces données lors de la programmation des composants.

Sur le schéma ci-dessus, nous pouvons remarquer que la référence du voltage se règle en fonction de VCFG0 et VCFG0. Si vous souhaitez que la référence soit celle de base du microcontroleur, il faut mettre les deux paramètres à 0. Ainsi, ils seront communté sur VDD et VCC. Pour le réglage des autres paramètres, il suffit de suivre les directives fournies sur la figure suivante en réglant les temporisations en fonction du microcontroleur utilisé.

Attention, il faut bien noter que les configuration des registres sont propres à chaque microcontroleurs. Si pour ce type de PIC il faut régler les trois registres (ADCON0, ADCON1, et ADCON2) pour les 16f877, il n’y a que les deux premiers registres… Il faut donc bien se référer à sa documentation.

Voici un extrait du code qui permet de faire l’acquisition de la valeur analogique d’un télémètre GP2D12 du fabriquant SHARP

// mode analogiques pour le port A (AN0 – AN6)
ADCON1 = 0b00000111;

// definition des entrée sortie
TRISA=0xFF;

float telemetre;

ADCON2 = 0xFF; // configuration des temporisations, a retoucher pour faire un code plus propre …
telemetre = 0; // initialisation de la valeur retournée

if(c==3)ADCON0=0b00001101; //va chercher la valeur de mon télémètre An3

ADIF = 0;
ADIE = 1;
GIE = 1;

CONFIG_waitMs(10);

if(c==3)ADCON0=0b00001111; //va chercher la valeur de mon télémètre AN3

CONFIG_waitMs(10);
ADIF = 0;

telemetre = ADRESL;
telemetre += (ADRESH << 8);
telemetre = telemetre*5/1024;

Pages ... 8 9 10 11 12 13 14 15 16 17 18 19