Cette application va vous permettre­ de­ réaliser­ un ­petit­ sablier animé­ à ­l'aide ­d'une carte Aurduino et de ­la ­matrice ­à­ led ­Click Board MIKROE-1993 7x10­R­Click. ­Celle-ci ­va de façon a­nimée ­déverser ­son­ sable ­de ­haut ­en ­bas (comme­ le ­ferait ­un ­vrai­ sablier).­
   
  
Modules ClickBoard MIKROE-1993 - SABLIER


Les modules ClickBoard™ sont de petits modules additionnels développés par la société MikroElektronika. Ils sont conçus pour s’enficher facilement sur une multitude de cartes de développement via l’interface mikroBUS™, un standard matériel et logiciel pensé pour simplifier le prototypage. Elles permettent d’ajouter rapidement une fonctionnalité sans câblage complexe. Leur format DIL vous permettra également des les utiliser sur des plaques breadboard (boite de connexions sans soudure).

La présentation du module MIKROE-1993 utilisé dans l'application qui va suivre a déjà fait l'objet d'une description complète dans notre Blog Pilotage d'une matrice 70 leds avec un Arduino. Le raccordement entre l'Arduino et le module Click Board MIKROE-1993 7x10­R­Click reste identique à celui décrit dans le blog cité ci-avant. 
 
  

Description du programme de gestion du sablier

Ce­ programme­ consiste­ à­ réaliser­ une­ « petite­ animation »­ sur­ la ­matrice­ à­ led­ (sous­ la ­forme­ d'un­ sablier­ qui­ s'écoule).­ Ceci revient­ en ­fait­ à­ afficher ­une suite­ de­ motifs­ qui­ se­ succèdent ­sur ­la­ matrice.­ Ce ­programme­ sera­ très similaire ­à ­celui­ réalisé dans le blog précédent ­et ­nous ­ne ­reviendrons ­donc ­pas sur ­toute ­la ­première­ partie liée ­aux initialisations ...­ mis ­à ­part ­sur ­les­ données ­mémorisées ­dans­ la­ variable ­de ­type­ matrice­ qui ­cette ­fois -ci ­ne représenteront plus ­un ­petit ­bateau­ à ­voile ­comme­ sur ­l'application ­précédente..­ mais ­un­« tas ­de ­sable » ­en ­forme­ de ­triangle ­(censé­ représenter le sablier).­ La ­représentation­ de ­ce ­sablier­ se ­fera­ non ­pas ­à ­l'horizontale ,­mais ­à­ la­ verticale­ sur­ la ­matrice.­

Programme Sablier
  

La ­modification­ importante­ que­ nous­ avons­ opéré­ pour­ ce­ programme­ est­­ que­ nous­ avons­ désormais­ réalisé­ une ­fonction­ qui s'occupe­ exclusivement­ du ­rafraichissement­ de ­la­ matrice­­ void­Rmatrice(). Des­ lors, ­nous ­pourrons appeler ­cette ­fonction­ à ­tout ­moment­ pour ­afficher ­l'état­ du­ sablier­ sur ­la ­matrice. Le ­fonctionnement­ du­ sablier­ repose essentiellement­ sur­ l'étude­ de­ la­ boucle­ principale­ du­ programme.­ Son­ écoulement­ va consister­ à­ effacer ­tour­ à ­tour­ les­ 5­ lignes­ du­ haut­ de­ la ­matrice pour­ les ­faire­ apparaître­ au­ bas­ de­ la­ matrice ­et­ ainsi­ simuler l'écoulement ­du­ sable.­ Il­ en ­résulte ­que ­le ­programme­ utilise ­une­ boucle­ de ­type­ ­for (byte sablier = 0 ; sablier < 5 ; sablier++) pour gérer ­l'écoulement des ­5 ­lignes.­
 

Démo du sablier à mase de click board
  

La fonction première d'un sablier étant de « mesurer » un temps, le programme à l'intérieur de la boucle commence par une temporisation qui servira de base de temps entre chaque écoulement. Le reflexe de base serait d'appeler la fonction de rafraichissement de la matrice (pour afficher l'état initial de la matrice).. puis d'ajouter une instruction delay (xx) pour générer une temporisation.
 
Toutefois, comme indiqué lors que l'application précédente, la gestion de la matrice nécessite que cette dernière soit rafraîchie en permanence afin qu'elle reste allumée (via l'effet de persistance rétinienne). Dans le cas présent, l'utilisation de l'instruction delay (xx) aurait eu pour effet de voir la matrice s'éteindre durant cette temporisation !
 
Il nous a donc fallu réaliser une temporisation au moyen d'une seconde boucle for () dans laquelle on incrémente une variable jusqu'à 99 et à chaque incrémentation, le programme appelle la fonction de rafraîchissement de la matrice afin quelle reste bien allumée durant toute la temporisation.

for (int Tempo = 0 ; Tempo < 100 ; Tempo++) {Rmatrice0;

La ligne qui suit dans le programme permet de transférer les données liées aux lignes des leds du haut de la matrice vers le bas de la matrice en « jouant » sur la valeur des index de la variable tableau Matrice[ ][] et via l'instruction bitWrite(), laquelle permet de modifier un bit particulier d'une variable.
 
for (byte i = 0 ; i < 7; i++) {bitWrite(Matrice[0][i],4-sablier,bitRead(Matrice[1][i],sablier));
 
L'instruction bitWrite() nécessite 3 paramètres pour pouvoir être utilisée.
 
Le premier paramètre concerne la variable pour laquelle on désire modifier l'état d'un bit (ici Matricel II ]), Le second paramètre concerne l'emplacement du bit : ici 0 à 6 pour sélectionner les 7 lignes. Le dernier paramètre concerne l'état que doit prendre le bit 0 ou 1. Dans notre cas, on recopie l'état de chaque led de la matrice du haut.
 
L'utilisation d'une mise à jour avec l'instruction bitWrite() s'impose car nous avons utilisé la matrice dans le sens vertical et nous avons été obligés de remettre à jour l'état des leds de chaque colonne de la matrice et non pas l'état d'une ligne complète de la matrice.
 
L'instruction qui suit dans le programme for (byte i = 0 ; i < 7; i++) {bitWrite(Matrice[1][i],sablier,0);} reprend le même pricipe pour éteindre successivement les leds de la matrice du haut en forçant le dernier paramètre de l'instruction bitWrite() a 0.

Le déroulement de la boucle for (byte sablier = 0 ; sablier < 5 ; sablier++) va donc réaliser l'écoulement du sable contenu dans la matrice du haut vers la matrice du bas. Au terme de cette boucle (qui indique la fin d'écoulement du sablier), le programme entame une boucle sans fin while(1) (Rmatrice);   dans laquelle la platine « Flip & Click » ne fera que rafraîchir la matrice en permanence (afin qu'elle ne s'éteigne pas).

Si vous désirez « relancer » le sablier, il vous suffit simplement de solliciter le bouton-poussoir Reset de la platine Arduino.

Si vous voulez aller plus loin : Vous pouvez modifier la valeur de la temporisation du sablier pour parvenir à une durée de 3 mn et ajouter un signal sonore à l'aide d'un buzzer en fin de cycle afin de pouvoir réaliser une minuterie utilisable pour la cuisson de vos œufs à la coque !
  
  
Vous pouvez retrouver le code source de ce programme en cliquant ici : code source Arduino & modules Click Board

Produit ajouté à ma liste