Clavier et Contrôle d'accès

Clavier et Contrôle d'accès

On n'a pas trop eu l'occasion d'en discuter jusqu'à présent, mais les écrans Yocto-Display et Yocto-MaxiDisplay disposent chacun de six entrées analogiques. Pour faire simple, ils intègrent l'équivalent d'un Yocto-Knob. Cette semaine, on vous propose d'utiliser ces entrées pour interfacer un clavier et fabriquer un système de contrôle d'accès.




On va donc utiliser un petit clavier numérique bon marché (env. 10 EUR) que l'on va connecter à un Yocto-Display pour fabriquer un système de contrôle d'accès, en deux temps, trois mouvements.

Un clavier numérique bon marché
Un clavier numérique bon marché


Les entrées analogiques du Yocto-Display. On y a soudé un connecteur pour que ce soit plus pratique
Les entrées analogiques du Yocto-Display. On y a soudé un connecteur pour que ce soit plus pratique


Le hardware

La connectique de ces petit claviers fonctionne comme une matrice. Lorsque qu'une des touches est enfoncée, une connexion est effectuée entre l'une des lignes et l'une des colonnes de la matrice. Toute la subtilité consiste à détecter lesquelles.

Le clavier est en fait une simple matrice de boutons poussoirs
Le clavier est en fait une simple matrice de boutons poussoirs


Pour cela on utilise le fait que les fonctions anButton sont des entrées analogiques destinées à détecter des changement de résistance. On connecte donc les lignes directement sur les entrées du Yocto-Display et on place des résistances de 2.2K, 4.7K et 10KΩ sur chacune des colonnes avant de ramener le tout à la masse de l'écran. Ainsi pour chaque touche appuyée sur le clavier un changement de de résistance spécifique va se faire sur l'une des entrées du Yocto-Display

Connexion entre le clavier et le Yocto-Display
Connexion entre le clavier et le Yocto-Display


La partie électronique électrique est terminée, il n'y a plus qu'à mettre tout ça dans une jolie boîte et à attaquer la partie programmation.

Une  jolie boîte pour rendre le tout un peu sexy
Une jolie boîte pour rendre le tout un peu sexy


Ça a tout de suite plus un peu plus d'allure
Ça a tout de suite plus un peu plus d'allure



Programmation

On a réalisé la partie programmation en python. L'idée est d'installer une fonction de callback qui sera appelée à chaque fois qu'une des entrée change de valeur, ce qui permettra de détecter quelle touche a été appuyée.

# find and configure the  buttons
for i in range(5):
  b = YAnButton.FindAnButton(serial+'.anButton'+str(i+1))
  if not(b.isOnline()):   sys.exit("anbutton"+str(i+1)+" found")
  # reset calibration, just in case
  b.set_calibrationMax(4095)
  b.set_calibrationMin(0)
  # no need to be too sensitive
  b.set_sensitivity(550)
  # when a button value change, the anButtonChange  function will be called
  b.registerValueCallback(anButtonChange)



Il y a toutefois une petite subtilité. Lorsqu'on appuie sur une touche, le changement de résistance n'est pas immédiat et les entrées anButton sont suffisamment rapides pour reporter des valeur intermédiaires. C'est pourquoi lorsqu'on détecte un changement sur une entrée, il faut mémoriser la valeur et continuer à surveiller l'entrée. On utilisera la valeur observée la plus basse pour décider quelle touche a été actionnée.

def anButtonChange(fct,value):
  global lastfunction
  global lastvalue
  table ="#0*987654321"

  fctname = str(fct)
  v = int(value)
  # the button index is the row
  buttonindex= int(fctname[-1:])-1

  if fctname == lastfunction:
    if (v >900) : # keypad key went back to released position
      if (lastvalue <200) : i = 0  # the minimal value is the column
      elif lastvalue<330  : i = 1
      elif lastvalue<500  : i = 2
      # compute keypad key index in the table
      index = buttonindex*3 +i
      # a key was pressed, let's notify it
      buttonPressed(table[index:index+1])
      # reset
      lastfunction = ""
      lastvalue = 0
    else: # memorize minimal value
        if v<lastvalue: lastvalue = v;
  else:
    if v<500: # store function name and value
       lastfunction = fctname
       lastvalue = v


C'est l'essentiel du code, le reste ne sert qu'à la gestion de l'écran pour faire de l'affichage et à décider ce qu'il faut faire en fonction du code qui a été entré. Vous trouverez le code source complet ici, il fait moins de 150 lignes.

Et voila! un clavier de contrôle d'accès
Et voila! un clavier de contrôle d'accès



Version Ethernet

Il est possible que vous n'ayez pas très envie de tirer un cable USB jusqu'à l'endroit où vous comptez placer le clavier. Qu'à cela ne tienne, Il suffit rajouter un YoctoHub-Ethernet pour ajouter à notre clavier une connectivité IP. Petit bonus: les hub Ethernet Yoctopuce supportant le PoE, notre clavier pourra même être alimenté par le câble Ethernet:

On rajoute un YoctoHub-Ethernet
On rajoute un YoctoHub-Ethernet


Et on obtient un clavier Ethernet, compatible PoE
Et on obtient un clavier Ethernet, compatible PoE


Au niveau programmation, le code reste identique, il suffit juste de rajouter un appel à registerHub avec l'adresse IP du hub qui se trouve dans le clavier.

if YAPI.RegisterHub("172.17.17.96", errmsg)!= YAPI.SUCCESS:
    sys.exit("YoctoHub-Ethernet init error"+errmsg.value)



Voilà, on a fait le tour de la question. Pour finir voici une petite vidéo du clavier en action.

  



Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.