jeudi 9 novembre 2017

MPLAB Xpress Evaluation Board: utilisation d'une entrée analogique

Dans ce troisième tuto concernant l'utilisation du MPLAB Xpress Evaluation Board, nous allons utiliser le potentiomètre de la carte pour faire varier un signal analogique qui sera mesuré par le microcontrôleur.

(Dans les billets précédents, nous avons appris comment gérer les entrées et sorties, et comment acheminer des données de la carte vers l'ordinateur.)

Commençons donc par créer un nouveau projet dans l'IDE en ligne MPLAB Xpress (voir le premier billet de la série pour plus de détails sur la façon de procéder).

Ensuite, nous utilisons MCC (MPLAB Xpress Code Configurator) pour générer quelques fichiers qui faciliteront l'utilisation du convertisseur analogique-numérique.

Cliquons deux fois sur "ADCC" dans la zone "Device Resources" de MCC.


Le module ADCC est maintenant visible dans la zone "Project Resources".


La zone centrale de MCC montre les réglage du convertisseur analogique-numérique (ADC).   Il est important que "Enable ADC" soit coché.  Il est prudent de laisser une période d'horloge au convertisseur pour faire sa mesure (régler "Acquisition Count" à la valeur "1").  "Result Alignment" (right ou left) permet de déterminer dans quel sens (horaire ou antihoraire) il faut tourner le potentiomètre pour que la valeur analogique (située entre 0 et 1023) augmente ou diminue.


Sur la carte MPLAB Xpress Evaluation Board, le potentiomètre est relié à la broche RA4.  Pour cette raison, nous allons lier le convertisseur analogique-numérique à cette broche, en cliquant sur le cadenas de la colonne  "Port A, 4"  dans la ligne "ANx".



Si vous cliquez "Pin Module" dans la zone "Project Resources", vous pouvez voir les caractéristiques de cette pin (qui est, pour l'instant, la seule utilisée sur notre carte).  Par défaut, elle porte le nom "channel_ANA4", ce qui est très laid.  Appelons-la plutôt "potentiometre".



Notre ADC est maintenant configuré:  on peut cliquer sur le bouton "Generate" pour que les fichiers appropriés s'ajoutent à notre projet.

Pour lire l'état du potentiomètre à l'intérieur d'un programme, il s'agira d'utiliser "ADCC_GetSingleConversion(potentiometre)".

Que faire avec cette valeur?  Je vous propose deux options:  la faire apparaître à l'écran de votre ordinateur, ou l'utiliser pour contrôler la luminosité d'une LED.

Exemple 1:  Affichage d'un signal analogique à l'écran de l'ordinateur

Pour que votre programme puisse transmettre des données à l'ordinateur par l'entremise du câble USB de la carte, vous devez configurer l'EUSART dans MCC.  Pour ce faire, suivez les instruction énumérées dans mon billet précédent:  Communication série avec un ordinateur.



En plus du module ADCC, votre projet comporte maintenant un module EUSART.  Vous n'avez pas oublié de cocher les cases "Enable Transmit" et  "Redirect STDIO to USART", en plus d'assigner TX et RX aux pins RC0 et RC1.

On clique sur le bouton "Generate" pour mettre à jour les fichier de notre projet.

De retour dans l'IDE MPLAB Xpress, on écrit notre programme (minimaliste!) dans le fichier "main.c":




On peut ensuite ouvrir notre programme de communication série préféré (ici, le moniteur série de l'IDE Arduino) pour observer le résultat à l'écran:


Le traceur série de l'IDE Arduino donne aussi des résultats intéressants:


Exemple 2: luminosité d'une LED contrôlée par le potentiomètre

Une autre option consiste à utiliser l'état du potentiomètre pour contrôler la luminosité d'une des 4 LEDs de la carte.

Dans MCC, en plus du module ADCC (convertisseur analogique-numérique), nous aurons besoin d'un module PWM (modulation par largeur d'impulsion) ainsi que d'un module timer, nécessaire au fonctionnement du module PWM.

En supposant que votre module ADCC a déjà été ajouté et configuré (si ce n'est pas le cas, retournez au début de ce billet pour effectuer les réglages nécessaires), vous ajouter les modules "PWM6" et "TMR4".


Dans la zone des cadenas, nous assignons le signal PWM à l'une des LEDs de la carte (pin RA0):


Cliquez sur "PWM6" dans la zone "Project Resources" afin de modifier les paramètres du module PWM.  Dans "Select a Timer", sélectionnez "Timer4".


Cliquez sur "TMR4" dans la zone "Project Resources"  pour modifier les paramètres du timer.  Dans "Clock Source", choisissez "FOSC/4".


Vous cliquez sur le bouton "Generate" afin que ces réglages soient transmis à l'IDE en ligne MPLAB Xpress.

Le programme à écrire dans le fichier "main.c" ne comporte qu'une modeste ligne de code:  il s'agit d'assigner au PWM6 (associé à notre LED) le résultat de notre convertisseur ADC (associé au potentiomètre).



Après avoir téléchargé ce programme dans la carte, vous pouvez constater que, tel que prévu, la luminosité de la LED "D2" sur la carte varie lorsque vous tournez le bouton du potentiomètre.

Sources:

Pour la rédaction de ce billet, j'ai consulté cette vidéo et ce tuto mis en ligne par Microchip.


Yves Pelletier   (TwitterFacebook)

dimanche 5 novembre 2017

Robot à base de moteurs pas à pas (Arduino)

Pour le roboticien amateur, la plate-forme robotique la plus répandue est constituée de deux (ou quatre) moteurs à courant continu.  Je propose ici une version similaire, facile à construire soit-même, mais constituée de deux moteurs pas à pas.

La raison?  Après avoir démonté quelques vieilles imprimantes, je me retrouve avec un impressionnant stock de moteurs pas à pas:  il faut bien que je les utilise pour quelque chose! De plus, un moteur pas à pas peut être contrôlé avec une meilleure précision qu'un moteur à courant continu muni d'une boîte d'engrenages.

Des inconvénients?  Vous aurez besoin de deux L293D ou L298N plutôt qu'un seul, ce qui accaparera 8 sorties de votre microcontrôleur (une carte Arduino, en l'occurence) et la programmation est peut-être légèrement plus complexe qu'avec des moteurs à courant continu.

Choix des moteurs

Le premier défi, si vous utilisez comme moi du matériel de récupération, c'est de trouver deux moteurs identiques.  Ce qui est surtout important, pour des raisons de symétrie, c'est que vos deux moteurs comportent le même nombre de pas par tour. Dans mon cas, mes deux moteurs n'avaient pas le même numéro de modèle, mais ils comportaient tous les deux 200 pas par tour.

Il faut aussi prendre garde de choisir des moteurs qui offrent un couple suffisant pour faire avancer le véhicule.  Mon premier prototype utilisait une paire de moteurs beaucoup plus petits, qui fonctionnaient à merveille en absence de charge, mais qui étaient tout simplement incapables de faire avancer le véhicule!

Roues

Puisque mon but était d'utiliser autant que possible du matériel récupéré, j'ai utilisé deux couvercles (ils avaient servi à fermer des bocaux d'arachides). Leur diamètre doit être plus grand que celui du moteur (j'avais choisi mes roues en fonction de moteurs plus petits que ceux que j'ai finalement utilisés.  Résultat:  la plate-forme est vraiment très proche de la surface du plancher.)  J'ai ajouté une bande élastique autour de chaque roue afin d'améliorer l'adhérence.

J'ai fixé chaque roue à son moteur en utilisant un peu de colle epoxy.



Plateforme

Là aussi, pas de dépense inutile:  un bout de planche de bois, une plaque de plastique... Pourvu que ce soit rigide, avec une surface suffisante pour supporter l'Arduino, les piles, les pilotes de moteur et les capteurs...  J'ai utilisé un petit panneau d'aggloméré issu d'une caisse de clémentines du Maroc.

Chaque moteur-roue est fixé à l'arrière de la plate-forme au moyen de colliers de serrage en plastique, et on ajoute une petite roue à l'avant (la mienne vient d'une imprimante, probablement).

Dessous de la plate-forme

Dessus de la plate-forme


Le circuit

Module L298N
Ce premier prototype ne comporte pas de capteurs:  nous nous contenterons de le faire bouger selon une routine pré-établie.

Le circuit est constitué d'une carte Arduino, de deux modules L298N (des L293D auraient fait l'affaire aussi) et de 8 piles AA (12 V au total).

La présence d'un interrupteur est particulièrement pratique pour éviter que votre robot ne se mette en mouvement pendant que vous reprogrammez l'Arduino...

L'Arduino est alimenté au moyen de la sortie 5 V d'un des modules L298.

Des cavalier (jumpers) sont en places pour que les pins "enable" des modules L298N soient à 5 V (en absence de cavaliers, il faut brancher les 4 pins enable à 5 V).



L298N de gauche:

+12V:  12 V
GND:  GND de l'Arduino et borne négative de l'alimentation 12 V
5 V:  VIN de l'Arduino (pour alimenter ce dernier)
ENA:  5 V
IN1:  Arduino 4
IN2: Arduino 5
IN3: Arduino 6
IN4: Arduino 7
ENB: 5 V

L298N de droite:

+12V:  12 V
GND:  GND de l'Arduino et borne négative de l'alimentation 12 V
ENA:  5 V
IN1:  Arduino 8
IN2: Arduino 9
IN3: Arduino 10
IN4: Arduino 11
ENB: 5 V

Prenez soin de relier ensemble toutes les masses:  borne négative de la source de tension, GND de l'Arduino et GND de chaque module L298 N.

Exemple de sketch

Grâce au sketch ci-dessous, le robot avance en ligne droite pendant 2 secondes, tourne sur lui-même pendant 2 secondes, puis recule en ligne droite pendant 2 secondes.

Notez que la fonction "setSpeed" de la bibliothèque "Stepper" ne permet pas de régler les deux moteurs à des vitesses différentes l'un de l'autre.  C'est pourquoi je ne l'ai pas utilisée.



Vidéo du robot en action



Nous devrions pourvoir y ajouter des capteurs pour en faire un véhicule téléguidé, un suiveur de ligne, un éviteur d'obstacles, un chercheur de lumière, un longeur de mur, etc.

Yves Pelletier   (TwitterFacebook)

mercredi 1 novembre 2017

MPLAB Xpress Evaluation Board: communication série avec un ordinateur

Dans ce deuxième billet concernant la programmation du MPLAB Xpress Evaluation board, nous allons produire un script qui va envoyer à l'ordinateur des informations pour affichage dans un logiciel de communication série.



Pour ce qui va suivre, je vais supposer que vous avez déjà consulté le précédent billet de cette série: programmation des entrées/sorties.

Nous commençons par créer un nouveau projet ("standalone") dans l'IDE MPLAB Xpress.


Nous nous rendons ensuite dans MCC: le MPLAB Express Code Configurator, et nous ajoutons un module "EUSART" à notre projet.  Pour ce faire, nous cliquons deux fois sur "EUSART" dans la liste "Device Resources"...


...ce qui a pour effet d'ajouter "EUSART" dans la partie "Project Resources".


On coche les cases "Enable Transmit" et "Redirect STDIO to EUSART".  (Comme vous pouvez le constater sur l'image ci-dessous, on pourrait aussi modifier le baud rate ainsi que d'autres paramètres de la communication).


On assigne TX à la pin RC0 et RX à la pin RC1; ces pins sont reliées au convertisseur série/USB de la carte:


On n'oublie pas de cliquer sur le bouton "Generate" pour que les fichiers appropriés soient créés dans notre projet MPLAB Xpress.

De retour dans l'IDE MPLAB Xpress, on écrit dans le fichier "main.c" un programme qui transmet l'information appropriée:



Finalement, on affiche l'information au moyen d'un logiciel de communication série (Putty, le moniteur série de l'IDE Arduino, etc.):




Sources:

Pour la rédaction de ce billet, j'ai consulté cette vidéo mise en ligne par Microchip.


Yves Pelletier   (TwitterFacebook)