Le programme

Le programme est réalisé en C et compilé avec C30 dans l’environnement de développement Mplab de microchip. Le fichier global.h regroupe les déclarations des fonctions et des variables globales, les inclusions des autres fichiers. Le fichier main.c regroupe les définitions des fonctions et des interruptions.

Dans un premier temps, le programme initialise les ports d’entrée sortie, les timers, le convertisseur analogique numérique (CAN), le module PWM et quelques variables. Ensuite, il exécute une boucle sans fin.

La gestion du CAN est entièrement réalisée par interruption. Quand les 15 conversions sont achevées, le programme exécute une interruption dans laquelle les variables globales AN_alim, AN_md et AN_mg sont mises à jour.

Toutes les actions ont une durée limitée qui est mesurée grâce à un timer. A chaque passage dans la boucle sans fin, on regarde si la batterie n’est pas vide via AN_alim. Ensuite, on met à jour la variable Evenment en contrôlant l’état des capteurs (capteur infrarouge ou mesure du courant dans les moto-réducteurs via AN_md et AN_mg) et en regardant si la durée de l’action en cours n’est pas dépassée grâce à la variable globale fin_tempo_var.

Après, on met à jour la variable Etat en fonction de la variable Evenment et de l’état précédent. C’est dans cette partie que l’on décide comment devra réagir le robot en fonction des différentes situations auxquelles il sera confronté. Enfin, on applique le nouvel état qui vient d’être décidé. Vous pouvez consulter l’excellent article Intelligence artificielle sur le wikibot qui présente de manière plus détaillée le principe de l’algorithme utilisé.

NB : On utilise une rampe d’accélération qui permet d’éviter que le robot n’ait un comportement trop saccadé (Cf. fonction void incr_pwm(void)). Cela permet de limiter les chutes de tension en particulier quand les deux moto-réducteurs changent de sens de rotation.