BTS Mesure BTS Mesure
DébutTP 1UARTLED RGBBilanCapteursDataloggingStationUltrasonCAN seriePontRégulationCO2

Bilan 1

Ce TP reprend les techniques de programmation déjà vues.

C'est à vous de chercher l'aide nécessaire dans les TP précédents.

Faites valider chaque étape par le professeur.

Générateur de signaux rectangulaires, de rapport cyclique réglable

Montage :

Réaliser un montage potentiométrique permettant d’obtenir une tension variable entre 0 et 5 V que vous appliquez sur l’entrée analogique A0.

Câbler une led RGB sur 3 sorties numériques 9,10 et 11.

Câbler un hacheur série alimentant un moteur à courant continu sur la sortie PWM 6.

Prévoir pour la suite un bouton poussoir entre la masse et l'entrée numérique 2.

Cahier des charges :

Ecrire un programme répondant au cahier des charges ci-dessous.

  • Faites l'inventaire de toutes les pattes entrées sorties et les nommer
    exemple : int R=9 // Led RGB rouge

  • Identifier et nommer les variables globales nécessaires
    Exemple : int pot // valeur du potentiomètre entre 0 et 1023

  • Câbler le hacheur série et le moteur à courant continu.
    Le hacheur est piloté par la sortie numérique PWM 6 de l'Arduino.

En fonction de la tension appliquée en A0 la couleur de la led RGB change :

  • Entre 0 et 1 V allumer la led bleu

  • Entre 1 et 2 V allumer la led verte

  • Entre 2 et 3 V allumer la led jaune (100% de rouge et 100% de vert donnera du jaune)

  • Entre 3 et 4 V allumer la led rouge

  • Entre 4 et 5 V allumer la led blanche (100% des 3 couleurs donneront du blanc)

 De même la vitesse du moteur varie :

  • Potentiomètre au minimum : rapport cyclique de 20 %

  • Potentiomètre au maximum : rapport cyclique de  80 %

Rappel du TP précédent :

val = map(val, 0, 1023, 51, 204); //  valeur initiale entre 0 et 1023 vers une valeur de sortie comprise entre 0,2*255= 51 et 0,8*255 =  204

La fréquence de la PWM souhaitée est de 1 kHz±5%

Vérifier le rapport cyclique et les butées à l’aide d’un oscilloscope.

Appel professeur 1 : faites valider votre programme puis imprimez-le.

Amélioration : utilisation du bouton poussoir S1  mis sur l’entrée numérique 2.

SI (moteur hors tension) ALORS
                                          Appui Bouton poussoir S1 : => mise sous tension du moteur

SI (moteur sous tension) ALORS
                                           Appui Bouton poussoir S1 : => mise hors tension du moteur

Ajouter le bouton poussoir du protoshield afin de pouvoir mettre hors tension le moteur
Utiliser la LED 1 du protoshield : allumée moteur sous tension, éteinte moteur hors tension

Pour limiter les risques de faux contact, on peut câbler un bouton poussoir sur la platine d'essai pour remplacer S1.

Pistes :

Nous allons utiliser un flag (drapeau) tension pour caractériser l'état du moteur.

tensionvrai → moteur sous tension, au rapport cyclique fixé par le potentiomètre

tensionfaux → moteur hors tension

On définit  un booléen : tension

boolean tension = false; // déclaration d'une variable de type binaire appelée tension et initialisée à false

Dans le  void setup()   définir une entrée numérique de type INPUT_PULLUP

pinMode(2, INPUT_PULLUP);   // Interrupteur S1 sur la patte 2

Le mode INPUT_PULLUP permet d'utiliser la résistance de rappel (R pullup de 20 kOhms) intégrée dans le  microcontrôleur.
On économise donc le câblage de cette résistance.

Solution 1 : digitalRead(2);

Pour lire l'état du bouton poussoir on peut utiliser la fonction  digitalRead(2);

Elle renvoie LOW ou 0 (0 V) lorsque l'on appui sur le bouton poussoir (BP).

Pour éviter les rebonds du bouton poussoir, on attend au moins 200 ms
avant de détecter un nouvel appui.

Vous pouvez faire un essai sans l'attente de 200 ms pour constater le défaut.

  • t0 est l'instant où on a detecté le dernier appui validé du BP(t0 de type unsigned long)

  • millis() : Renvoie le nombre de millisecondes depuis que la carte Arduino a commencé à exécuter le programme courant.

SI (BP appuyé et millis()-t0>200 ) ALORS {
         // on mémorise dans t0 l'horloge en millis()
         // on inverse le statut de la tension       
   } FINSI

! (NON logique)  :  tension = !tension      si tension était faux il devient vrai
                                                                         si tension était vrai il devient faux. 

 

Solution 2 : attachInterrupt (0, blink, CHANGE);

  • Dans le  void setup() déclarer l'interruption 0.

Interruptions :  attachInterrupt (interruption, fonction, mode)

La plupart des cartes Arduino ont deux interruptions externes :

  • interruption externe n°0 sur la broche numérique 2

  • interruption externe n°1 sur la broche numérique 3.

  • attachInterrupt (0, blink, CHANGE);  // Interruption 0 pour l'interrupteur S1
    // Appui sur S1 => D2 change d'état (CHANGE) => Interruption
    // En cas d'interruption le sous programme blink est appelé
    
  • Dans le programme principal  void loop()

Le booléen tension sert à mettre sous tension ou hors tension le moteur

Vous pouvez matérialiser cette mise sous tension par la led 2 reliée à D8 par exemple.

 En cas d’appui sur le bouton poussoir le sous-programme blink() est appelé :

void blink()   // Le sous-programme blink
{
// Vérifie qu’au moins 200 ms ce sont écoulées depuis le dernier appel (filtre anti-rebond par programmation)
SI (millis()-t0>200) ALORS tension= !tension ;  // Changement d’état du booléen tension
t0 = millis() ;  // top départ du dernier blink
}

Une interruption ne peut-être interrompue !
Il faut donc réaliser un sous-programme minimaliste
afin de ne pas perturber le reste du process.
(millis() ne s'incrimente plus, des données sur le port Serial peuvent être perdues...)

Appel professeur 2 : faites valider votre programme puis imprimez-le.

 Solution électronique de filtre anti-rebond :

 

Séance 2 :

Modifier votre programme Arduino pour remplacer le potentiomètre et le bouton poussoir par des ordres envoyés par le moniteur série.

  • Exemple : Le moniteur série envoie un message : 500;0
  • Votre programme en déduit : pot=500 et tension=0

Appel professeur 3 : faites valider votre modification de programme

L'application LED RGB est téléchargeable ici au format aia

Si votre application précédente ne fonctionne pas :
Importer le fichier LED_RGB.aia dans App Inventor.

Reprenez et transformez l’application App Inventor du TP LED RGB :

  • Branchez un module Bluetooth sur votre montage

  • Modifier l'application pour qu'elle soit compatible avec votre nouveau programme
    Vous pouvez vous inspirer des procédures présentées ci-dessous.

  • Tester les fonctions :  variation du rapport cyclique et moteur sous tension

Appel professeur 4 : faites valider votre application