Ignorer la navigation

programmes

Tous les programmes à créer vont être réalisés sur une carte Arduino accompagnée du shield "DangerShield"

Demandez au professeur de mettre la carte DangerShield sur la carte Arduino.

 

Cette carte se compose de capteurs : En gras les entrées/sorties Arduino utilisées :
  • 3 potentiomètres linéaires (slider) – entrées analogiques A0, A1, and A2.
  • 1 capteur de lumière – entrée analogique A3
  • 1 capteur de température - entrée analogique A4
  • 3 boutons poussoirs – entrées numériques (TOR) D10, D11, and D12.

Et d’afficheurs :
  • 2 LEDs classiques D5 et D6: pins 5 and 6 (sorties numériques (TOR)
  • 1 afficheur 7 segments (An 8-bit shift register set up to control a blue 7-segment LED).
  • 1 buzzer et  capteur de clap (bruit court et sec) : One is used as a speaker, the other is connected to analog pin A5 and can be used as a knock sensor

Quelques règles à appliquer lorsque l'on fait un programme informatique:

Le programme doit être le plus clair possible et surtout il doit pouvoir être repris et modifié par une autre personne. Ainsi:

  • les variables doivent être choisies intelligemment (on ne prend pas "toto" ou "titi" comme nom de variable! Il faut que le nom permette déjà de comprendre à quoi elle va servir)
  • on met le maximum de commentaires
  • on structure au mieux son programme
  • si des actions ou instructions se répètent, on crée des fonctions (en gros le programme doit être pbtimisé)
  • une forme graphique (algorigrammes) est utile pour la création du programme ou l'explication de celui-ci

Pour déboguer un programme (c'est rare que tout fonctionne du premier coup!), il est inévitable d'utiliser le moniteur série.

         

Dans cette partie vous allez créer vos propres programmes. Vous avez toutes les informations nécessaires dans les fiches de l'AP N°2.1. Il n'y a aucune information utile disponible sur internet sauf si vous avez un doute sur une instruction Arduino où le site de référence est: https://www.arduino.cc/ (menu "learning" puis "reference"). Ceci dit toutes les données techniques des instructions Arduino sont aussi disponibles ici: language Arduino.pdf

 

Les petits programmes à créer :

Remarque: dans votre compte-rendu il doit y avoir les programmes mais aussi les algorigrammes de chaque programme.


Programme 1 "comparaison": on va comparer 2 valeurs analogiques (issues ici de 2 potentiomètres). Lorsque la valeur du 1er potentiomètre (celui le plus à gauche) est plus grande que celle du 2ème, la led D5 s'allume. Si c'est l'inverse c'est la led D6 qui s'allume. Si les 2 potentiomètres sont dans la même position on allume les 2 leds.

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

 
Programme 2 "led et valeur analogique": on va essayer de faire comprendre la valeur analogique (issue d'un potentiomètre) à un utilisateur alors que nous ne disposons que d'une seule led (D5). Le principe retenu est le suivant: toutes les 5 secondes, la led va indiquer grâce à un clignotement la valeur de la tension suivant le principe suivant:

  • tension entre 0 et 0,49V: pas de clignotement (led éteinte)
  • tension entre 0,5V et 1,49V: la led clignote une fois
  • tension entre 1,5V et 2,49V: la led clignote 2 fois
  • tension entre 2,5V et 3,49V: la led clignote 3 fois
  • tension entre 3,5V et 4,49V: la led clignote 4 fois
  • tension > à 4.5V: la led clignote 5 fois

La fréquence de clignotement sera de 1 hertz.

Etape 1: faire le programme sans forcément chercher à l'optimiser

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

 

Etape 2: optimiser le programme (soit à l'aide de boucles FOR, soit à l'aide de la fonction "clign_led" soit à l'aide d'une seule boucle For et d'une variable nb_fois_boucle)

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

   

 

Programme 3 "variation de température": On veut savoir si la température mesurée par le capteur de température augmente ou diminue. Ainsi si elle augmente (de plus de 1°C) on allume la led D5, si elle diminue (de plus de 1°C) on allume la led D6 et si elle ne change pas (ou peu) on n'allume aucune led. La comparaison se fera toutes les 10 secondes.

Remarque: la gestion du capteur de température a été faire dans la question IV de la fiche N°6 (AP2.1). Si vous n'aviez pas eu le temps de le faire ... c'est le moment de la faire !!!!

Remarque 2: vous aurez bien sûr une variable "température" (valeur du capteur en degrés Celcius) mais aussi une variable pour mémoriser la dernière valeur, par exemple "memo_temp".

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

 

Proposition d'amélioration (version 2): à faire si vous avez le temps

Dans le programme il nous faut attendre 10 secondes. L'utilisation de la fonction Delay d'Arduino est bien pratique mais elle a un énorme défaut. Elle bloque le programme! (en informatique c'est fonction n'existe en général pas car elle est trop "dangereuse"!). Il y a une fonction qui permet de gérer le temps sans bloquer le déroulement du programme, la fonction Millis(). La valeur de variation de 1°C choisie pourra être modifiée en fonction de la réaction du capteur de température.

Données techniques :
unsigned long : Unsigned long variables are extended size variables for number storage, and store 32 bits. Unlike standard longs unsigned longs won't store negative numbers, making their range from 0 to 4294967295

Millis()   
Returns the number of milliseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 50 days.
Exemple:   variable (type unsigned long) = millis()

Ainsi si dans un programme je veux tester le temps depuis une certaine action (j'ai mémorisé la valeur de Millis dans la variable temps1 lors de l'action), cela donnerai:

if (millis()-temps1>10000)   // test si 10 secondes se sont écoulées depuis temps1.

{

     // allumage led

     ......

{

Modifiez votre programme de telle sorte qu'il n'y ai aucune fonction Delay.

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

 

 

Programme 4 "comptage": A chaque appui sur le 1er bouton poussoir (BP), on incrémente (+ 1) une variable. Une fois la valeur 9 atteinte, on allume une led (celle que vous voulez) pendant 10 secondes, on fait sonner le buzzer pendant 5 secondes et on remet tout à zéro pour recommencer.

Remarque : les BP du DangerShield n'ont pas de résistance de Pull up. Celle-ci devra donc être réalisée par la carte Arduino (voir fiche N°5).

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

  

  


Programme 5 "gestion lampes":  On dispose d'une pièce qui possède 2 lampes (elles seront représentées ici par les 2 leds D5 et D6). Chaque led est mise en route et arrêtée par un bouton poussoir. Si on oublie d'éteindre une lampe est le sera automatiquement quand la lumière sera importante (capteur LDR)

Les documents techniques du capteur LDR sont disponibles ici.

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

  

  


Programme 6 "buzzer réglable": lorsqu'on appuie sur un BP, le  buzzer fonctionne à  la fréquence définie par la position d'un des potentiomètres et durant un temps défini par la position d'un autre potentiomètre (entre 1 secondes et 1 minute). On pourra utiliser la fonction mathématique d'arduino appelée map().

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

 

  

Programme 7 "nombre de personnes dans une pièce": l'objectif est de compter le nombre de personnes qui entrent et qui sortent d'une petite salle située dans un musée. Le nombre de personnes est limité à 8 car la pièce est petite. Il y a 2 capteurs placé à 20 cm l'un de l'autre (on les simulera par 2 BP) permettant de savoir si une personne entre ou sort. Le sas d'entrée est suffisamment petit pour qu'une seule personne à la fois puisse le traverser.



Faite le programme permettant de compter le nombre de personnes présentes dans la pièce (trouver un moyen de savoir si une personne entre ou sort de la pièce). On affichera le nombre de personnes présentes le moniteur série. Si la pièce est pleine (8 personnes), on fera clignoter la led D5 (fréquence = 1hz) pour signaler l'interdiction de rentrer dans la pièce. On l'éteindra quand on repassera sous les 8 personnes présentes. Quand la salle est vide on allume la led D6.

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

Complément :
Maintenant on affichera le nombre de personnes présentes, en plus du moniteur série, sur l'afficheur 7 segment du DangerShield (voir Fiche N°8)

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

  


Programme 8 "potentiomètre et 7 segments": Si on appuie sur le BP1, la valeur affichée sur le 7 segment est la valeur entière de la tension issue du 1er potentiomètre (curseur). Si on appuie sur le BP2, la valeur affichée sur le 7 segment est la valeur entière de la tension issue du 2ème  potentiomètre (curseur) et si on appuie sur le BP3, la valeur affichée sur le 7 segment est la valeur entière de la tension issue du 3ème potentiomètre (curseur).

Une fois le programme fonctionnel, faites le vérifier et valider par le professeur

memo_temp-temperature