(→Liens avec le quotidien) |
|||
Ligne 392 : | Ligne 392 : | ||
==Liens avec le quotidien== | ==Liens avec le quotidien== | ||
- | Actuellement le NFC se trouve déjà dans les smartphones, cartes bancaires, passe d'identification. A l'avenir on pourra surement démarrer sa voiture avec, allumer la lumière chez soi, etc. | + | Actuellement le NFC se trouve déjà dans les smartphones, cartes |
+ | bancaires, passe d'identification. A l'avenir on pourra surement | ||
+ | démarrer sa voiture avec, allumer la lumière chez soi, etc. | ||
[[Catégorie:Arduino]] | [[Catégorie:Arduino]] |
==Présentation du projet Arduino==Le NFC permet d'utiliser des cartes magnétiques pour réaliser divers actions comme ouvrir une porte, effectuer un paiement,etc.
Donc on va utiliser ces cartes pour allumer une led, ici on prendra une led RGB qui permet de faire plusieurs couleurs avec un composant.
Sommaire |
Le NFC permet d'utiliser des cartes magnétiques pour réaliser divers actions comme ouvrir une porte, effectuer un paiement,etc.
Donc on va utiliser ces cartes pour allumer une led, ici on prendra une led RGB qui permet de faire plusieurs couleurs avec un composant.
Voici quelques points à vérifier avant d'entamer le tuto.
La LED RGB
il existe deux types
- cathode commune, il y a une broche de masse et les trois autres servent d'alimentations propre à chaque couleur - anode commune, il y a une broche d'alimentation
Il est important de connaitre le type, car cela impact le code. Exemple pour une anode commune, pour éteindre la led, il faut que la patte de contrôle soit à l'état haut, et bas pour l'éteindre. La logique est inverse pour une cathode commune.
Le shield RFID
Il est livré avec des connecteurs mâles, à prendre en compte car les cotes empêchent de connecter le shield sur une breadboard
Le code
Il est important de faire attention à la manière d'écrire. Surtout pour les noms de variables. Exemple: variable n'est pas la même chose que Variable
/**************************************************************************/ /*! @file iso14443a_uid.pde @author Adafruit Industries @license BSD (see license.txt) This example will attempt to connect to an ISO14443A card or tag and retrieve some basic information about it that can be used to determine what type of card it is. Note that you need the baud rate to be 115200 because we need to print out the data and read from the card at the same time! This is an example sketch for the Adafruit PN532 NFC/RFID breakout boards This library works with the Adafruit NFC breakout ----> https://www.adafruit.com/products/364 Check out the links above for our tutorials and wiring diagrams These chips use I2C to communicate, 4 pins required to interface: SDA (I2C Data) and SCL (I2C Clock), IRQ and RESET (any digital line) */ /**************************************************************************/ #include <Wire.h> #include <Adafruit_NFCShield_I2C.h> #define IRQ (2) #define RESET (3) // Not connected by default on the NFC Shield Adafruit_NFCShield_I2C nfc(IRQ, RESET); //****************** Definition des sorties de L'arduino ************************* int ledR = 9; int ledP = 10; int ledG = 11; int ledB = 12; //********************* Identifiants des clés valides ***************************** uint8_t comp01[] = { 203,102,125,189,0,0,0 }; uint8_t comp02[] = { 77,243,159,35,0,0,0 }; uint8_t comp03[] = { 45,187,161,35,0,0,0 }; //*****************Initilisation des sorties de l'Arduino**************************** void setup(void) { Serial.begin(115200); Serial.println("Hello!"); pinMode(ledP, OUTPUT); pinMode(ledR, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledB, OUTPUT); digitalWrite(ledR,HIGH); digitalWrite(ledB,HIGH); digitalWrite(ledG,HIGH); digitalWrite(ledP,HIGH); nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (! versiondata) { Serial.print("Didn't find PN53x board"); while (1); // arret } // SI les données sont OK, le programme l'affiche dans la console Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); // Set the max number of retry attempts to read from a card // This prevents us from waiting forever for a card, which is // the default behaviour of the PN532. nfc.setPassiveActivationRetries(0xFF); // configure la carte pour lire le NFC nfc.SAMConfig(); Serial.println("Waiting for an ISO14443A card"); } //***********************************Boucle Principale ********************* //************************************************************************** void loop(void) { int count = 0; boolean success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Variable permettant de stocker temporairement la valeur de l'identifiant de la carte uint8_t uidLength; // Longueur de l'identifiant (4 or 7 bites, generalement 4 pour les cartes livrées avec) // Attend pour une carte ISO14443A (Mifare, etc.). Quand une est trouvée // 'uid' sera remplie avec l'identifiant de la carte, and uidLength indiquera // si uid fait 4 bites (Mifare Classic) ou 7 bites (Mifare Ultralight) success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength); if (success) { Serial.println("Found a card!"); Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); //*************************Affichage INFO Carte ********************************* Serial.print("UID Value: "); for (uint8_t i=0; i < uidLength; i++) { Serial.print(" ");Serial.print(uid[i], DEC); } Serial.println(""); Serial.print("UID Value: "); for (uint8_t i=0; i < uidLength; i++) { Serial.print(" ");Serial.print(uid[i], HEX); } //******************Comparaison Clé valide 1************************** for (uint8_t i=0; i < uidLength; i++) { if (uid[i]==comp01[i]){ count=count + 1; } } if (count==uidLength){ digitalWrite(ledR, LOW); digitalWrite(ledG, HIGH); digitalWrite(ledB, HIGH); } //*********************Comparaison Clé valide 2************************* count=0; for (uint8_t i=0; i < uidLength; i++) { if (uid[i]==comp02[i]){ count=count + 1; } } if (count==uidLength){ digitalWrite(ledR, HIGH); digitalWrite(ledG, HIGH); digitalWrite(ledB, LOW); } //*********************Comparaison Clé valide 3************************* count=0; for (uint8_t i=0; i < uidLength; i++) { if (uid[i]==comp03[i]){ count=count + 1; } } if (count==uidLength){ digitalWrite(ledR, HIGH); digitalWrite(ledG, LOW); digitalWrite(ledB, HIGH); } } //*******************Comparaison Clé Valide 4**************************** //A definir //****************************Carte Magnetique Imcompatible***************** else { // PN532 Patiente jusqu'a la prochaine carte Serial.println("Timed out waiting for a card"); } delay(1500);//rèle la durée entre deux cycles d'acquisition (en millisecondes) }
/**************************************************************************/ /*!
@file iso14443a_uid.pde @author Adafruit Industries @license BSD (see license.txt)
This example will attempt to connect to an ISO14443A card or tag and retrieve some basic information about it that can be used to determine what type of card it is. Note that you need the baud rate to be 115200 because we need to print out the data and read from the card at the same time!
Check out the links above for our tutorials and wiring diagrams These chips use I2C to communicate, 4 pins required to interface: SDA (I2C Data) and SCL (I2C Clock), IRQ and RESET (any digital line)
/**************************************************************************/
Adafruit_NFCShield_I2C nfc(IRQ, RESET);
//****************** Definition des sorties de L'arduino *************************
int ledR = 9; int ledP = 10; int ledG = 11; int ledB = 12; //********************* Identifiants des clés valides ***************************** uint8_t comp01[] = { 203,102,125,189,0,0,0 }; uint8_t comp02[] = { 77,243,159,35,0,0,0 }; uint8_t comp03[] = { 45,187,161,35,0,0,0 };
//*****************Initilisation des sorties de l'Arduino**************************** void setup(void) {
Serial.begin(115200); Serial.println("Hello!"); pinMode(ledP, OUTPUT); pinMode(ledR, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledB, OUTPUT); digitalWrite(ledR,HIGH); digitalWrite(ledB,HIGH); digitalWrite(ledG,HIGH); digitalWrite(ledP,HIGH); nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion(); if (! versiondata) { Serial.print("Didn't find PN53x board"); while (1); // arret } // SI les données sont OK, le programme l'affiche dans la console Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); // Set the max number of retry attempts to read from a card // This prevents us from waiting forever for a card, which is // the default behaviour of the PN532. nfc.setPassiveActivationRetries(0xFF); // configure la carte pour lire le NFC nfc.SAMConfig(); Serial.println("Waiting for an ISO14443A card");
}
//***********************************Boucle Principale *********************
//**************************************************************************
void loop(void) {
int count = 0; boolean success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Variable permettant de stocker temporairement la valeur de l'identifiant de la carte uint8_t uidLength; // Longueur de l'identifiant (4 or 7 bites, generalement 4 pour les cartes livrées avec) // Attend pour une carte ISO14443A (Mifare, etc.). Quand une est trouvée // 'uid' sera remplie avec l'identifiant de la carte, and uidLength indiquera // si uid fait 4 bites (Mifare Classic) ou 7 bites (Mifare Ultralight) success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength); if (success) { Serial.println("Found a card!"); Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
//*************************Affichage INFO Carte *********************************
Serial.print("UID Value: "); for (uint8_t i=0; i < uidLength; i++) { Serial.print(" ");Serial.print(uid[i], DEC); } Serial.println(""); Serial.print("UID Value: "); for (uint8_t i=0; i < uidLength; i++) { Serial.print(" ");Serial.print(uid[i], HEX); }
//******************Comparaison Clé valide 1**************************
for (uint8_t i=0; i < uidLength; i++) { if (uid[i]==comp01[i]){ count=count + 1; } } if (count==uidLength){ digitalWrite(ledR, LOW); digitalWrite(ledG, HIGH); digitalWrite(ledB, HIGH); }
//*********************Comparaison Clé valide 2*************************
count=0; for (uint8_t i=0; i < uidLength; i++) { if (uid[i]==comp02[i]){ count=count + 1; } } if (count==uidLength){ digitalWrite(ledR, HIGH); digitalWrite(ledG, HIGH); digitalWrite(ledB, LOW); }
//*********************Comparaison Clé valide 3*************************
count=0; for (uint8_t i=0; i < uidLength; i++) { if (uid[i]==comp03[i]){ count=count + 1; } } if (count==uidLength){ digitalWrite(ledR, HIGH); digitalWrite(ledG, LOW); digitalWrite(ledB, HIGH); } } //*******************Comparaison Clé Valide 4**************************** //A definir
//****************************Carte Magnetique Imcompatible*****************
else { // PN532 Patiente jusqu'a la prochaine carte Serial.println("Timed out waiting for a card"); } delay(1500);//rèle la durée entre deux cycles d'acquisition (en millisecondes)
}
Actuellement le NFC se trouve déjà dans les smartphones, cartes bancaires, passe d'identification. A l'avenir on pourra surement démarrer sa voiture avec, allumer la lumière chez soi, etc.
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique