Page 1 of 1

Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 11:58
by Wistaro
Nous vous parlons souvent du TI-Innovator Hub, un module compatible TI-84 Plus CE / TI-83 Premium CE et TI-Nspire CX (CAS) qui permet aux élèves de collège et lycée de s'initier à la programmation, et ainsi construire des projets reliant des concepts en science, technologie, ingénierie et mathématiques, aussi appelés "STEM".

Grâce à ce produit, il est possible de programmer et utiliser des périphériques externes directement via sa calculatrice!
Nous avions découvert ce produit grâce à Adriweb lors de l'édition 2016 de la conférence T3.

Mais derrière ce produit, se cache une carte électronique et divers périphériques permettant de dialoguer avec la calculatrice.

Cette carte, c'est le TI-LaunchPad. C'est un microcontrôleur embarquant un micro-processeur, ainsi que divers périphériques. Pour réaliser des fonctions plus complexes, pour aller "plus loin" et profiter de la toute la puissance de votre carte, il est nécessaire de travailler directement avec le TI-LaunchPad :)

A ce TI-Launchpad, cette brique élémentaire, vous pouvez ajouter d'autres modules , des "BoosterPack".
Ces modules vous permettent d'ajouter des fonctionnalités, comme:
  • Un module Wifi;
  • Un module Bluethooth;
  • Un module de puissance pour contrôler de lourdes charges (un moteur par exemple);
  • Un écran LCD;
  • Et beaucoup d'autres choses...
D’ailleurs, dans un autre article, nous t'avions déjà parlé de l'Educational BoosterPack MKII, un autre BoosterPack.

Il existe plusieurs types de TI-LaunchPad, mais aujourd'hui nous allons nous concentrer sur l'une d'entre-elle, la SimpleLink™ MSP432P401R.



Tout d'abord, je remercie Texas Instruments pour m'avoir envoyé cette carte!

Faisons un peu le tour de ce qu'elle propose:
  • Un processeur ARM Cortex 32 bits de 48MHz, avec une unité de point flottant (en clair, un module pour pouvoir travailler avec des nombres à virgules très précis) et un module d'accélération DSP (pour améliorer la conversion analogique / numérique)
  • Niveau mémoire, elle propose 256KB de mémoire Flash NAND et 64KB de mémoire RAM;
  • Pour communiquer, elle peut gérer 4 bus I2C, 8 SPI et 4 UART;
  • Nous avons 40 pins configurables, dont 20 utilisables par les BoosterPack;
  • Enfin nous, avons 3 LEDs et 2 boutons.

Elle embarque également un puce, qui permet de faire du débogage et de l'émulation en temps réel. j'ai déjà parlé de ce principe dans un précédent article sur une carte DSP de chez Texas instruments.
Cela permet de lancer son programme dans le microcontrôleur, et de pouvoir à tout moment faire pause, lire l'état des registres, envoyer des messages dans la console...

C'est extrêmement pratique pour débogguer son code :p


Pour programmer cette carte, nous utiliserons Code Composer Studio, l'IDE totalement gratuit dédié aux cartes de chez Texas Instruments. Mais si votre pc manque de mémoire, ou si vous n'avez pas envie d'installer sur votre machine un logiciel relativement lourd, il est possible d'utiliser CCS Cloud, un IDE totalement en ligne et accessible simplement avec un navigateur web récent et un plugin.
Cet IDE fonctionne exactement comme Code Composer Studio. Il est également possible d'importer des projets templates issues de la banque de données, TI-Ressource Explorer.
C'est là qu'il est possible de récupérer toutes les documentations, et les programmes de démonstrations.


L'avantage des LaunchPads, c'est qu'il existe un SDK (ici, le SDK SimpleLink™ ) et des bibliothèques pour se simplifier la vie! Inutile de réinventer la roue ou se se perdre dans la configuration assez complexe du microprocesseur!

A titre d'exemple, voici le code qui permet de faire clignoter une led:
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
int main(void)
{
    volatile uint32_t i;

    // Stop watchdog timer
    WDT_A_hold(WDT_A_BASE);

    // Set P1.0 to output direction
    GPIO_setAsOutputPin(
        GPIO_PORT_P1,
        GPIO_PIN0
        );

    while(1)
    {
        // Toggle P1.0 output
        GPIO_toggleOutputOnPin(
            GPIO_PORT_P1,
         GPIO_PIN0
         );

        // Delay
        for(i=100000; i>0; i--);
    }
}


Le code est très simple! On initialise une des pins comme étant en sortie, la led étant branchée sur ce pin. Puis on alterne son niveau pour faire clignoter la led :)

Bon, je suis d'accord avec vous. Faire clignoter une led c'est bien beau, mais c'est assez limité! Il est temps de passer aux choses sérieuses, si vous êtes encore là à me lire (j'espère!).

Je vous propose aujourd'hui de réaliser un module, qui pourra servir de base à un autre futur projet.
Il s'agit donc d'un détecteur de couleur à base de photo-transistors, de comparateurs et bien sûr de la MSP432P401R! (sans blague).
Bon j'espère que vous ne vous êtes pas enfuis en voyant le mot "transistor"! Rassurez-vous, tout sera détaillé!

Ce petit projet sera détaillé en plusieurs modules.

Tout d'abord, intéressons-nous au composant qui va s'occuper de la photo détection. Son fonctionnement est relativement simple:
  • Une diode infrarouge va émettre de la lumière;
  • Cette lumière va rebondir sur la surface à analyser;
  • Un récepteur photosensible (ici, un photo transistor) va alors récupérer l'information lumineuse et la transformer en un signal électrique.


Suivant sa couleur, la surface va absorber plus ou moins de lumière. L'information reçue par le capteur sera donc différente suivant la couleur de la surface!
En calibrant le capteur, il est donc possible de faire un sorte qu'il ne détecte qu'une seule couleur en particulier. Dans mon cas, j'ai choisi le blanc.

Mais le signal renvoyé par le capteur n'est pas un signal propre, il peut fluctuer dans le temps et ne pas être très précis. Il n'est donc pas possible de brancher directement la sortie du capteur sur le MSP432P401R!

Dans un premier temps, il est nécessaire de filtrer le signal issue du capteur, grâce à un filtre passe-bas. Ce filtre va supprimer les hautes fréquences (qui rendent le signal pas très beau) et ne garder que le signal basse fréquence, celui qui nous intéresse.
Mais un autre problème se pose: les entrées de notre carte MPS432P401R ne peuvent traiter que des signaux logiques, 0 ou 1, soit 3.3V ou 0V. Mais pas entre les deux!
Or, le signal renvoyé par le capteur (après filtrage) est un signal analogique qui varie au court du temps et qui prend plus que 2 états.
Pour résoudre ce problème, il suffit de réaliser un détecteur:
  • Si le signal issu du capteur atteint une valeur seuil, alors on envois un "1", soit 3.3V;
  • Si le signal est inférieur à ce seuil, on envoie un "0".

Et ce seuil permet de régler la couleur qui sera détectée! Vous pouvez tout à fait utiliser une résistance variable pour changer la couleur de détection :)

Le schéma simplifié d'une de mes cellules photo-détectrice est visible à gauche. J'utilise un composant (de référence CNY70) qui permet à la fois d'émettre et recevoir la lumière avec un seul boitier :)

J'ai ensuite réalisé une carte avec 5 capteurs de ce type (j'ai malheureusement cassé le 6e, et je n'en avais plus sous la main), en vue de l'utiliser pour un futur projet.

Voici sa face arrière, avec les capteurs:


Connectons maintenant cette carte à notre MPS432P401R!
Nous utiliserons ici 5 entrées de notre LaunchPad, configurées en entrées logiques, en plus des signaux d'alimentation.

Maintenant que notre MSP432P401R peut détecter une couleur, je propose qu'on s'amuse un peu!

Afin de tester l'ensemble des capteurs, je propose un petit circuit sympathique!
L'idée, c'est de faire varier la luminosité d'une LED en fonction du nombre de capteurs qui détectent du blanc.

  • Si seul le capteur de gauche détecte du blanc, une LED rouge s'allume faiblement;
  • Si 2 capteurs de gauche détectent du blanc, la luminosité de la LED augmente, etc..;
  • Si tous les capteurs détectent du blanc, la LED est au maximum de sa luminosité.

Le problème ici c'est que...Comment faire varier la luminosité de la led? En sachant que le MSP432P401R ne sait envoyer et recevoir que des signaux de 3.3V ou 0V?

En fait, il est possible de tricher :p

Pour faire croire à la LED que le signal n'est pas forcément 3.3V ou 0V, il suffit d'envoyer pendant un court instant 3.3V, puis repasser à 0V, puis repasser de nouveau à 3.3V...et répéter ce schéma indéfiniment.
Si cette alternance est très rapide, la LED verra, en moyenne, un signal compris entre 3.3V et 0V. La valeur de ce signal vue par la led dépendra du temps que le signal reste à 3.3V avant de repasser à 0V.

Ce principe s'appelle la PWM, pour Modulation par Largeur d'Impulsion :)

Pour la LED, j'utilise une LED rouge classique, ainsi qu'une seconde LED verte qui fait exactement la même chose que la rouge :D
Pensez à toujours utiliser une résistance en série avec votre LED pour limiter son courant et ainsi éviter de la détruire.

Après un peu de code sur Code Composer Studio, notre mini-projet est terminé!



Et maintenant, testons tout ça!
Voici un test du dispositif en vidéo:



Merci de m'avoir lu!
Si vous avez des questions ou des suggestions, n'hésitez pas à réagir dans l'espace commentaire :)

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 12:19
by Azerpogba
Wahou bien joué pour ton article!!
Tant attendu.... :p
En vrai c'est intéressant
Mais pk TI t'offre des cartes à toi et pas à moi? :'D

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 12:41
by Noury
Bel article, bien écrit, et chouette vidéo.
Ça a dû te demander autant de temps que le projet ;)
Pour les leds, ça rappelle un peu celle des Macintosh qui faisait un peu science fiction.
Je n'ai pas compris quelle calculatrice tu utilises, et comment ton code est exécuté.

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 14:46
by Wistaro
nbenm wrote:Bel article, bien écrit, et chouette vidéo.
Ça a dû te demander autant de temps que le projet ;)
Pour les leds, ça rappelle un peu celle des Macintosh qui faisait un peu science fiction.
Je n'ai pas compris quelle calculatrice tu utilises, et comment ton code est exécuté.


Merci :)

Ici je n'utilise pas de calculatrice, j'utilise le LaunchPad hors du TI-Innovator (comme expliqué au début de l'article).
Il se connecte au pc simplement en USB et se programme en C via l'IDE Code Composer Studio.

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 17:00
by Programmator88
En gros c'est de l'Arduino, mais version TI quoi...

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 17:31
by Wistaro
Programmator88 wrote:En gros c'est de l'Arduino, mais version TI quoi...


Dans l'idée, oui. Ça reste un microcontrôleur.

Après, c'est beaucoup mieux qu'un arduino.
Sur ton Arduino:
  • Tu n'as pas de FPU (floating point unit);
  • Tu n'as pas d'accélateur DSP;
  • Tu n'as pas d'émulateur temps réel sur circuit (real-time in-circuit emulator)
  • Tu es beaucoup moins rapide, en terme de fréquence de clock;
  • Tu as beaucoup moins de mémoire RAM et Flash ROM;

C'est donc beaucoup plus intéressant qu'un Arduino :)

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 18:00
by logPeriodicAntenna
C'est toujours un plaisir de lire tes articles, vivement le prochain !

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 18:11
by Wistaro
logPeriodicAntenna wrote:C'est toujours un plaisir de lire tes articles, vivement le prochain !


Merci :)

Tu crois qu'en montrant l'article au professeur de microprocesseur (tu vois de qui je parle, celui qui arrive en trottinette) on peut gagner quelques points sur l'évaluation de ce matin? ^^

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 18:12
by Azerpogba
:'D :'D

Re: Détecte les couleurs avec ta TI-LaunchPad MSP432P401R !

Unread postPosted: 02 Apr 2019, 19:11
by critor
Encore une fois un article de haut niveau, merci Wistaro et Texas Instruments. :)