dimanche 9 avril 2017

Module RFID-RC522 et MSP430 Launchpad (Energia)

Il y a quelques jours, je vous ai présenté un petit projet réalisé au moyen d'un module RFID RC522 couplé à une carte Arduino Uno. Aujourd'hui, je vous présente une réalisation identique, mais adaptée à une carte MSP430 Launchpad de Texas Instruments.

Installation de la bibliothèque CardReader RFID RC522

Pour faciliter la programmation au maximum, nous allons utiliser l'IDE Energia, ainsi que la bibliothèque CardReader_RFID_RC522 par fmilburn3.  Assurez-vous d'installer cette bibliothèque avant d'aller plus loin.

Circuit

Un avantage du Launchpad, comparativement à l'Arduino Uno, c'est qu'il fonctionne avec un niveau logique de 3,3 V qui convient parfaitement à notre module RC522.   Puisque nous n'avons pas à nous préoccuper d'abaisser le niveau logique, le circuit s'en trouve grandement simplifié.

Notez que j'ai utilisé le launchpad MSP-EXP430G2 Rev 1.5 comportant un microcontrôleur 2553. Les pins MISO et MOSI, par exemple, sont inversées sur d'autres cartes.



Les connexions sont donc:
  • SDA du RC522:  P2_0 du Launchpad 
  • SCK du RC522 : P1_5 du Launchpad
  • MOSI du RC522:  P1_7 du Launchpad
  • MISO du RC522:  P1_6 du Launchpad
  • IRQ du RC522:  Pas utilisé
  • GND du RC522:  GND du Launchpad
  • RST du RC522:  P2_2 du Launchpad
  • 3.3V du RC522:  VCC du Launchpad
De plus, pour utiliser le sketch que je propose un peu plus loin, vous reliez une LED vers à la pin P1_4, et une LED rouge à la pin P1_2.  (La LED verte intégrée à la carte étant liée à la pin P1_6, déjà utilisée, on ne peut pas l'utiliser pour cette fonction).

Connaître l'UID de votre tag

Chaque tag RFID comporte un numéro unique:  l'UID.  Pour connaître l'UID de votre tag, vous pouvez utiliser l'exemple "CardReader" fourni avec la bibliothèque.


Après avoir téléversé cet exemple dans le Launchpad, ouvrez le moniteur série d'Energia, et placez le tag RFID à proximité du module RC522.  L'UID de la carte devrait s'afficher.


Dans mon cas, les 5 parties de l'UID étaient:  144, 207, 148, 117 et 190.

Sketch

Le sketch ci-dessous allume la LED verte pendant 2 secondes lorsqu'on approche un tag RFID ayant un UID admissible, alors que c'est la LED rouge qui s'allume si on approche un autre tag.

Avant de l'utiliser, vous devez évidemment remplacer l'UID apparaissant au tout début du sketch (variable "bonUID").


Bien entendu, ce sketch peut facilement être modifié pour en faire quelque chose de plus utile (serrure électrique, système d'alarme, etc.).

N.B.: Ce projet a également été réalisé avec ArduinoRaspberry Pi et STM32 Nucleo.

Yves Pelletier   (TwitterFacebook)

mercredi 5 avril 2017

Module RFID-RC522 et Arduino

Je me suis récemment procuré (pour moins de 2 €) un petit kit comportant:

- un module RFID-RC522
- un tag RFID prenant la forme d'une carte
- un tag RFID prenant la forme d'un porte-clés

Le module est presque prêt à l'emploi, mais il faut soi-même souder une barrette de 8 connecteurs (ce qui n'a rien de bien difficile).

Dans ce petit tutoriel, nous allons réaliser un montage constitué d'une carte Arduino Uno et d'un module RFID-RC522.  Lorsqu'un tag RFID comportant un code admissible sera détecté, une LED verte va s'allumer.  Lorsqu'un tag comportant un code inadmissible sera détecté, c'est plutôt une LED rouge qui s'allumera.




Installation de la bibliothèque MFRC522

Nous allons utiliser la bibliothèque MFRC522, qui a été développée par Miguel Balboa.  Il est donc nécessaire d'installer cette bibliothèque dans votre environnement de programmation Arduino.

Le circuit 

Le module RFID-RC522 communique au moyen du protocole SPI, avec un niveau logique de 3,3 V. Bien que la plupart des tutoriels que j'ai vus sur internet semblent omettre cette précaution, j'ai choisi d'utiliser un convertisseur de niveaux logiques CD4050 pour éviter que les signaux émis par l'Arduino (à un niveau logique de 5 V) n'abîment le module RC522.

Les 8 connecteurs du RC522 sont donc branchés de la façon suivante:
  • SDA:  Arduino 10, après avoir été abaissé par le 4050
  • SCK: Arduino 13, après avoir été abaissé par le 4050
  • MOSI:  Arduino 11, après avoir été abaissé par le 4050.
  • MISO:  Arduino 12
  • IRQ:  Pas utilisé
  • GND:  Arduino GND
  • RST:  Arduino 9, après avoir été abaissé par le 4050
  • 3.3V:  Arduino 3.3V
(À noter que SDA et RST peuvent être branché sur une autre pin de l'Arduino au besoin, il s'agira de modifier le sketch en conséquence).

Quant aux deux LEDs indicatrices, elle seront branchées aux pins 6 (rouge) et 7 (verte) de l'Arduino.



Premier sketch:  récupérer l'UID du tag

Dans un premier temps, il faut connaître l'UID, qui est le code unique écrit sur notre carte.  Le sketch ci-dessous affiche dans le moniteur série  l'UID de tout tag qu'on approche du module RC-522.



Après avoir téléversé ce sketch dans l'Arduino, ouvrez le moniteur série et approchez un tag RFID à proximité du module RC-522.  La capture d'écran ci-dessous montre le résultat lorsque j'ai approché ma carte blanche  (const byte bonUID[4] = {144, 207, 148, 117}), puis mon porte-clé  (const byte bonUID[4] = {131, 133, 4, 107}).  Évidemment, les valeurs numériques diffèrent selon le tag utilisé.

Copiez le code de votre tag, afin de le coller dans le sketch principal ci-dessous.




Sketch principal

Avant d'utiliser ce sketch, vous devez remplacer la ligne " (const byte bonUID[4] = {144, 207, 145, 117})" par celle qui correspond à votre tag, et que vous avez précédemment copiée du moniteur série grâce au premier sketch.




Vidéo du montage

Voici, pour finir, une vidéo montrant le montage en action.  La LED verte s'allume lorsque j'approche la carte blanche (code accepté), mais c'est la LED rouge qui s'allume lorsque j'approche le porte-clé (code refusé).




N.B.: Ce projet a également été réalisé avec  Raspberry Pi, STM32 Nucleo et MSP430 Launchpad.

Yves Pelletier   (TwitterFacebook)

dimanche 2 avril 2017

Communication série USB entre Arduino et tablette Android

Aujourd'hui, je vous relate une expérimentation visant à établir une communication bidirectionnelle entre une carte Arduino et une tablette Android, par l'entremise d'un câble USB.

Matériel:

Une tablette ou un téléphone Android (j'ai utilisé une tablette Samsung Galaxy Tab A), une carte Arduino (dans mon cas, comme d'habitude, un clone Uno chinois d'origine douteuse), le câble USB habituel de votre Arduino et un câble adaptateur "micro-USB OTG" conçu pour brancher des périphériques USB à votre appareil mobile.

Notez que ce câble sert non seulement à la transmission des données entre les deux appareils, mais aussi à l'alimentation de l'Arduino:  si votre carte reste branchée un long moment à votre appareil Android, la pile de ce dernier risque de s'épuiser rapidement.

(Dans bien des cas, une liaison bluetooth sera plus pratique).

Sketch de l'Arduino:

Puisque je voulais tester la communication dans les deux directions, j'ai installé dans l'Arduino un sketch qui demande le nom de l'utilisateur, et qui demande des instructions afin d'allumer ou d'éteindre la LED intégrée à la carte (reliée à la pin 13).  Puisqu'il s'agit d'une communication série, c'est exactement la même procédure que lors d'une interaction avec le moniteur série de l'IDE Arduino.



Les nombreux délais ont semblé améliorer la qualité de la communication (sans ces délais, il arrivait que certaines lignes ne soient pas affichées par la tablette).

Ça donnera comme résultat un dialogue de ce genre:


(Admettez qu'il est poli et serviable, cet Arduino...)

Logiciels:

J'ai testé avec un égal succès deux applications spécialement conçues pour la communication série à travers le port USB: Serial USB Terminal par Kai Morich et Usb terminal par Lior Hass.  Il en existe d'autres:  j'ai choisi celles-ci sur la base des commentaires positifs des utilisateurs sur Google Play, qui mentionnaient explicitement la communication avec Arduino.

Peu importe l'application que vous utiliserez, la carte Arduino sera automatiquement détectée aussitôt que vous la brancherez à l'appareil mobile.

Utilisation de Serial USB Terminal, par Kai Morich

Supposons dans un premier temps que vous optez pour l'application Serial USB Terminal. Avant de pouvoir établir une communication correcte avec l'Arduino, il faut régler quelques paramètres. Pour ce faire, déployez le menu en utilisant le bouton qui a la forme de 3 traits horizontaux superposés, dans le coin supérieur droit de l'écran, et choisissez "Settings".


Il faut bien sûr sélectionner la vitesse de transmission (baud rate) qui correspond à celle qui a été spécifiée dans le sketch de l'Arduino.  Ici, c'est 19200.  

S'il s'agissait d'une communication unidirectionnelle de l'Arduino vers la tablette, cet unique ajustement serait probablement suffisant.  Mais puisque nous voulons aussi envoyer des données de la tablette vers l'Arduino, et que l'Arduino doit correctement interpréter à quel moment le message qu'il reçoit est complet, il faut régler NewLine à LF (et non à CR+LF) dans la section "Send" (attention:  il y a aussi un Newline dans la section "Receive"; sur la capture d'écran ci-dessous, le paramètre dont je parle est situé sur la toute dernière ligne en bas).


De retour au terminal.  Pour établir la communication, il faut taper sur l'icône qui représente deux connecteurs qui ne sont pas connectés:

Vous devrez probablement aussi appuyer sur le bouton reset de l'Arduino, qui a envoyé son message initial alors que nous n'étions pas prêts à l'écouter.






Utilisation de Usb terminal par Lior Hass

Passons maintenant à l'autre option, une application très similaire: Usb terminal par Lior Hass.

Ici encore, quelques paramètres doivent d'abord être réglés pour que la communication s'établisse correctement.  Vous déployez le menu grâce au bouton situé en haut à droite (3 points superposés), et vous choisissez "Settings".



Assurez-vous de sélectionner le même baud rate que celui qui a été spécifié dans le sketch (c'est à dire 19200).

Puisque notre petite expérience nécessite l'envoi de messages constitués de plusieurs caractères vers l'Arduino, cochez également "Use dedicated field for keyboard input" et "Data is sent when Enter is pressed".  Il faut aussi régler l'option "Enter key sends" à LF (sinon, l'Arduino ne réussira pas à interpréter correctement vos réponses).



Retour au menu:  pour établir la communication, vous choisissez "Connect USB device".

Puisque l'Arduino a amplement eu le temps d'envoyer son message initial avant que nous ne soyons prêts à l'écouter, appuyez sur le bouton reset de l'Arduino.

Attention:  envoyez vos réponse en utilisant la touche "enter" du clavier, et non le bouton "Send".



Voilà!  En ce qui me concerne, chacun des deux logiciels fait parfaitement l'affaire.

Maintenant que nous savons comment procéder, il ne nous reste plus qu'à appliquer le principe à quelque chose de plus utile: ajouter temporairement des capteurs supplémentaires à notre appareil mobile, par exemple.

Yves Pelletier   (TwitterFacebook)