Activité 5 : Programmation :

 

 

 

 

Télécharger le document réponse

 

Cette 5ème partie à pour objectif la mise en oeuvre de la carte Arduino et de capteurs ou actionneurs (moteurs) en utilisant les structures de programmation classiques.

   

Éléments pris en compte dans la notation :

  • Autonomie/Comportement

  • Qualité de la production (programmes, documents réponses)

 

 

 

 

 

 

1. Les constantes et les variables :

 

 

Il est possible de déclarer des constantes à un programme.

 

La syntaxe est la suivante (les éléments entre crochets sont à remplacer par les éléments de votre programme) :

 

const [type] [nom] = [valeur];

  • const : appelle la fonction de déclaration de la constante
  • type : déclare le type de donnée. Dans la plupart des cas, on remplacera par "int" qui veut dire "integer" (entier entre -32768 et 32767).
  • nom : déclare le nom de la constante
  • valeur : valeur d'initialisation

 

Créer un nouveau fichier "VOTRE_NOM_constante" et reprendre l'exemple du programme "Blink - Blink" en utilisant une constante pour le numéro de la pin de la LED puis tester votre programme.

 

Compléter les questions 1 à 3 du document réponse.

 

 

 

Il est aussi possible d'utiliser des variables.

 

L'exemple ci-contre permet de faire varier le temps de clignotement à chaque boucle de programme loop() :

 

Créer un nouveau fichier "VOTRE_NOM_variable" et reprendre l'exemple précédent en utilisant une variable pour le temps (code le code ci-contre), téléverser et tester.

 

Compléter les questions 4 à 6 du document réponse.

 

 

   
   
   
   

 

 

2. Les boucles :

 

 

La boucle IF -- ELSE permet de vérifier une condition pour choisir entre plusieurs suites d'instructions.

 

L'exemple décrit dans l'organigramme ci-contre permet d'incrémenter le temps de clignotement jusqu'à 500 ms puis de le fixer.

 

Le code correspondant à cet organigramme est donné ci-dessous :

 

 

Créer un nouveau fichier "VOTRE_NOM_boucle_IF", et coder l'exemple ci-dessus (ne pas oublier la déclaration des variables et la fonction setup). Téléverser et tester.

 

 

Compléter la question 7 du document réponse.

 

 

 

 

A propos des tests pouvant être effectués, on remarque que le test d'égalité est réalisé avec un double "=" (==).

 

Le simple "=" permet d'affecter une valeur à une variable.

 

 

 

 

La boucle WHILE permet de répéter une suite d'instructions en boucle tant qu'une condition est vérifiée. Lorsque la condition n'est plus vraie, le programme sort de la boiucle.

 

L'exemple décrit dans l'organigramme ci-contre permet d'incrémenter le temps de clignotement jusqu'à 500 ms puis de le réinitialiser à 50 ms.

 

Le code correspondant à cet organigramme est donné ci-dessous :

 

 

Créer un nouveau fichier "VOTRE_NOM_boucle_WHILE" , et coder l'exemple ci-dessus (ne pas oublier la déclaration des variables et la fonction setup). Téléverser et tester.

 

 

Compléter la question 8 du document réponse.

 

 

   
   
   
   
   
   

 

3. Communication PC <-> ARDUINO : le moniteur série

 

 

 

 

 

L'IDE permet de faire communiquer en temps réel la carte Arduino et le PC sur lequel la carte est branchée en USB.

 

Cet utilitaire est appelé "Moniteur Série" :

 

 

 

 

 

 

 

Compléter les questions 9 et 10 du document réponse.

 

L'exemple ci-dessous permet d'allumer ou d'éteindre la LED 13 avec le clavier de l'ordinateur, et de rendre compte de l'état de la LED :

 

   
  • Déclaration de la constante pinLED.
  • Déclaration de la variable "valeur" qui va stocker le code ASCII de la touche du clavier du PC.

 

 

Fonction setup() :

 

  • Serial.begin(9600) : Démarrage de la liaison série à une vitesse de 9600 bauds (bits/secondes)
  • Serial.println("...") : Affichage d'un message sur le moniteur série (ln = retour à la ligne).

 

 

 

Fonction loop() :

 

 

  • Blocage du programme tant que rien n'est envoyé depuis le PC. Dans ce cas la fonction Serial.available() renvoie "0".

 

 

  • Dès qu'un message arrive sur le port, Serial.available() ne renvoie plus "0". Dans ce cas, on stocke le code ascii de la touche tapée contenu dans la fonction Serial.read() dans la variable "valeur".

 

 

  • Si le code ascii contenu dans la variable "valeur" est celui du caractère "1", on allume la LED et on envoie le message correspondant.

 

 

  • OU Si le code ascii contenu dans la variable "valeur" est celui du caractère "0", on éteint la LED et on envoie le message correspondant.

 

 

  • Dans tous les autres cas, on affiche le message "Erreur".

 

 

Fin de la fonction loop().

 

 

Relever dans la table ASCII et consigner dans le document réponse (question 11) les 2 codes dont nous avons besoin pour le programme ci-dessus.

Créer un nouveau fichier "VOTRE_NOM_moniteur_serie_1" , et coder l'exemple ci-dessus. Téléverser et tester.

 

Compléter les questiosn 12 à 15 du document réponse.

 

Application : On veut réaliser un programme permettant :

  • D'allumer une LED lors de l'appui sur 1 (et d'envoyer le message LED allumée)
  • D'éteindre la LED lors de l'appui sur 0 (et d'envoyer le message LED éteinte)
  • De faire clignoter à 500 ms d'intervalle lors de l'appui sur 2 (et d'envoyer le message "clignotement").
  • D'envoyer le message "Erreur" pour tout autre touche

 

Compléter la question 16 du document réponse.

 

Créer un nouveau fichier "VOTRE_NOM_moniteur_serie_2" , et coder le programme. Téléverser et tester.

 

Appeler votre professeur pour vérification.

 

   
   
   

 

 

 

 

 

4. Utilisation d'un capteur analogique - La résistance photoélectrique (LDR)

 

 

La résistance photoélectrique ou LDR (light dependent resistor) peut être utilisée comme un capteur lumière. En effet sa résistance varie en fonction de la lumlinosité.

 

Montée en pont avec une autre résistance fixe, elle permet de convertir une variation d'intensité lumineuse en variation de tension.

 

 

Cette variation de tension est analogique (variation progressive en 0 et 5V). Il faut donc utiliser une entrée analogique (A0 à A5) de la carte Arduino enfin d'exploiter ce capteur.

 

 

 

A l'aide de Tinkercad, réaliser le montage ci-contre :

 

 

 

 

Dans l'éditeur de code de Tinkercad, coder le programme ci-contre :

 

 

 

 

 

 

Compléter les questions 17 à 22 du document réponse.

 

 

Dans Tinkercad, réaliser les actions suivantes :

  • 1 : Cliquer sur "Code Editor"
  • 2 : Cliquer sur "Start Simulation"
  • 3 : Cliquer sur "Serial Monitor" pour afficher le moniteur série
  • 4 : Clqiuer sur la LDR
  • 5 : Faire varier l'intensité lumineuse que recoit la LDR avec le slider.

 

 

 

Appeler votre professeur pour vérification.

Compléter la question 23 du document réponse.

 

 

Attention : le câblage doit s'effectuer avec la carte Arduino DEBRANCHEE !!

 

Réaliser le montage de la LDR (simulé précédamment) à l'aide de la breadboard.

 

 

 

 

Créer un nouveau fichier "VOTRE_NOM_LDR" , et coder le programme précédamment simulé.

 

 

Avant le branchement du câble USB, appeler votre professeur pour vérification.

 

 

 

Téléverser et tester.

 

Appeler votre professeur pour vérification.

 

Compléter la question 24 du document réponse.

 

 

Il est possible de tracer la courbe de la valeur affichée sur le moniteur série.

Pour cela, activer le traceur série :

 

 

 

   
   
   
   
   
   
   
   
   
   
   

 

 

 

5. Faire bouger des choses avec ARDUINO : le servomoteur

 

 

 

Un servomoteur est un système permettant de mettre en rotation un objet.

Il est constitué des éléments suivants :

  • Un moteur électrique, qui fournit un mouvement d'entrée
  • Un réducteur, qui ralenti la vitesse de rotation et augmente la "force" du moteur (on parle du couple).
  • Un palonnier, sur lequel on récupère le mouvement du servomoteur
  • Un potentiomètre associé à de l'électronique, qui permet de déterminer l'angle parcouru par le palonnier.

 

 

Comparé à un simple moteur, le servomoteur est capable de :

  • Se positionner à un angle précis
  • Maintenir cette position, même si un effort est exefcé sur le palonnier.

 

Remarque : Les servomoteurs utilisés dans cette activité sont commandé directement en angle en degrès (0 à 180°).

 

 

 

 

Attention : le câblage doit s'effectuer avec la carte Arduino DEBRANCHEE !!

 

Réaliser le câblage ci-contre :

 

Appeler votre professeur pour vérification.

 

 

 

Ci-contre le code permettant d'amener le palonnier à un angle défini par l'utilisateur dans le moniteur série.

 

  • 1 : La bibliothèque <Servo.h> est appelée via la commande #include. Cela permet d'inclure au programme les fonctions prédéfinies pour les servomoteurs.

 

  • 2 : On définit un Servo "monservo".

 

  • 3 : La fonction Serial.parseInt() permet de récupérer la valeur numérique et non le code ASCII du contenu du port série.

 

  • 4 : Afin de commander le servo, on utilise la commande "monservo.write()".

 

 

Créer un nouveau fichier "VOTRE_NOM_servo" , et coder le programme ci-contre :

 

 

Téléverser et tester.

 

Appeler votre professeur pour vérification.

 

Compléter les questiosn xx du document réponse.

 

 

 

   
   
   

 

 

 

 

 

 

 

 

Précédent Suite