mooc FunInformations provenant directement du site MOOC-fun.fr (cours en ligne gratuits), Mooc intitulé : Programmer un objet avec Arduino(MinesTelecom)




Anti-rebond

Nous avons déjà utilisé des boutons afin de commander nos montages Arduino et vous avez sûrement eu a faire avec le problème de rebond des contacts (contact bounce, en anglais).  La construction mécanique des boutons fait que les contacts rebondissent plusieurs fois avant de sarrêter en position ouverte ou fermée.  Avec un Arduino capable de réagir en un milliardième de seconde, ces rebonds sont un vrai casse-tête.

D'habitude on résout le problème dans le logiciel - on attend un certain nombre de millisecondes et on lit à nouveau l'entrée concernée pour déterminer l'état.  Sachez toutefois qu'il y a aussi une solution électronique qui peut parfois nous simplifier la vie : Voici le branchement typique d'un bouton en entrée d'un microcontrôleur :

L'entrée est tenue au niveau 1 par la résistance.  Quand on appuie sur le bouton l'entrée est 'tirée' vers le niveau 0. Regardons déjà à quoi ressemble le 'bounce' :

Cette trace d'oscilloscope correspond à une seule pression sur le bouton !  La durée dans le temps de cette trace est de 200 micro-seconds (uS).  Chaque division = 25uS.  On voit bien que cela peut être interprété par le microcontrôleur comme au moins six pressions !  On peut améliorer la situation on ajoutant un condensateur (et oui, c'est toujours le sujet de ce chapitre...) comme ici :


Un condenstaeur à besoin de temps pour se charger et se décharger.  L'ajout de ce (petit) condensateur en parallèle avec le bouton va 'ralentir' les changements de tension, supprimant les effets aléatoires dus aux faux contacts. Et avec cette petite modification, nous avons :

Ce n'est pas un carré parfait, mais notre Arduino ne verra qu'une seule pression.  Sans avoir à ajouter du code spécifique anti-rebond.  Utile les petits condensateurs !

 

Base de temps RC

Voilà un montage simple à construire avec l'Arduino. D'abord le montage sur la platine de prototypage ou "breadboard" (littéralement "planche à pain" en anglais...) :

Très simple à câbler, ce petit montage sert pour voir comment les condensateurs peuvent nous fournir des bases de temps.  La sortie 13 de l'Arduino est celle équipée d'une DEL (LED) sur la platine de l'Arduino.  Quand la sortie est au niveau '1' la DEL s'allume.  Nous prenons la même sortie logique pour piloter notre montage. A travers la résistance de 10K© le condensateur se charge pendant que la sortie 13 est au niveau '1', et se décharge pendant le niveau '0'.  Le transistor est utilisé comme une sorte d'interrupteur piloté (nous allons parler des transistors bientôt...) pour allumer la DEL rouge. Voici le schéma :

 

Et le programme (ou sketch en anglais pour l'Arduino) : SlowBlink (l'exemple Blink modifié un peu).

Pour réaliser ce montage :

      À partir des schémas ci-dessous, branchez les composants sur la platine de prototypage.Téléchargez le programme

SlowBlink

    et vérifier que la LED sur l'Arduino clignote (très) lentement.  Regarder la LED rouge sur la platine dexpérimentation : elle clignote aussi, mais avec presque une seconde de retard.  Le délai exact dépend de plusieurs paramètres, notamment le type de transistor.

Dans un monde idéal*, le temps de charge/décharge d'un condensateur se calcule facilement :

T = R×C

avec T = temps en secondes ; R la résistance en Ohms ; et C la capacitance en Farads.

(*) Mais ce temps dépend beaucoup des conditions de branchement, notamment la résistance de sortie du montage (souvent appelée l'impédance). Prenant l'exemple ici, nous avons R = 10000© et C = 0,00047F ce qui donne le temps de charge ou décharge de 4,7 secondes.  Pourquoi notre DEL n'avait qu'un retard d'environ 1 seconde, alors ? La réponse au chapitre "transistors" ! Vous pouvez changer le condensateur pour un plus grand ou plus petit, ou en mettre plusieurs en parallèle ou série.  Vous verrez que les valeurs des condensateurs en parallèle s'additionnent, et la valeur des condensateurs en série se calcule comme ceci :

Ctot = 1/(1/C1 + 1/C2 + & 1/CN)

(exactement l'inverse que pour les résistances)

Questions ?

Utilisez le fil de discussion en dessous.

Licence

CC BY 
Merci à Glenn Smith pour ce cours !